Часто бывает, что при печати таблицы многострочная ячейка разбивается на 2 листа, если целиком не влезла. Особенно коряво получается, когда в одном из соседних столбцов 2 строки, а в другом одна объединенная строка, тогда лист оканчивается посередине объединенной ячейке и буквы рвутся по горизонтали.
Чтобы этого избежать в макете табличного документа в свойствах строки устанавливаем свойство "ВместеСоСледующим" В этом случае, если эта строка и следующая не влезают на 1 лист, то они обе переносятся на другой.
Независимо от того, какой запрос написан в наборе данных, СКД исключает из результирующего запроса поля, не участвующие в настройках отчета. Это может приводить к тому, что в результате суммы по оборотам могут быть либо больше, либо меньше реальных.
Например, делаем запрос по сумме проданной номенклатуры. В запросе указываем день, номенклатуру, сумму, покупателя, регистратор. Допустим у нас один и тот же покупатель купил 3 раза одну и туже номенклатуру в один и тот же день по одной и той же цене (100 руб.).
Регистратор1, Номенклатура, Покупатель, 100
Регистратор2, Номенклатура, Покупатель, 100
Регистратор3, Номенклатура, Покупатель, 100
Если в настройках отчета укажем все поля запроса то получим верные данные. Если укажем только номенклатуру, покупателя и сумму, то рискуем получить меньший оборот, если у нас не будет детальных записей. В этом случае СКД сгруппирует все данные и вместо 3 строк по 100 руб, у нас появится 1 строка по 100 руб. Так как все 3 покупки будут различаться только регистраторами, который мы не включили, то в результате данные сгруппируются до 1 строки: Номенклатура, Покупатель, 100
Чтобы такого не случилось (мало ли как будут настраивать отчет пользователи), надо поставить в Роли поля "Регистратор" галку "Обязательное"
В этом случае, какая бы не была настройка отчета, поле Регистратор всегда будет участвовать в запросе СКД
Рефа́кторинг (англ. refactoring), или перепроектирование кода, переработка кода, равносильное преобразование алгоритмов — процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы.
Во многом при рефакторинге лучше полагаться на интуицию, основанную на опыте. Тем не менее имеются некоторые видимые проблемы в коде (англ. code smells), требующие рефакторинга:
«жадные» функции — это метод, который чрезмерно обращается к данным другого объекта;
избыточные временные переменные;
классы данных;
несгруппированные данные.
Один из основных приемов "Выделение метода".
Выделение метода заключается в выделении из длинного и/или требующего комментариев кода отдельных фрагментов и преобразовании их в отдельные методы, с подстановкой подходящих вызовов в местах использования. В этом случае действует правило: если фрагмент кода требует комментария о том, что он делает, то он должен быть выделен в отдельный метод. Также правило: один метод не должен занимать более чем один экран (25-50 строк, в зависимости от условий редактирования), в противном случае некоторые его фрагменты имеют самостоятельную ценность и подлежат выделению. Из анализа связей выделяемого фрагмента с окружающим контекстом делается вывод о перечне параметров нового метода и его локальных переменных.
Для отображения нескольких строк (значений) в одной ячейке надо использовать агрегатный функции Массив([Различные] Выражение) и СоединитьСтроки (Значение, РазделительЭлементов, РазделителиКолонок).
Так же есть агрегатная функция ТаблицаЗначений([Различные] Выражение1 [КАК ИмяКолонки1][, Выражение2 [КАК ИмяКолонки2],...]), но при её использовании не получиться вывести таблицу внутри ячейки.
Если возможностей встроенных функций не достаточно, то можно написать свою функцию в общем модуле и использовать её, для формирования массива или многострочной строки.
При обновлении платформы на сервере могут вылезти следующие косяки:
1. Отвалилась консоль.
Чтобы исправить надо перерегистрировать в реестре новый путь для консоли. Так же надо не забыть установить "Администрирование сервера 1С: Предприятия"
2. Отвалились веб-сервисы.
Лечится установкой нового клиента на IIS. Так же в настройках IIS надо проверить обработчик ("Сопоставление обработчиков" в разделе IIS для сайта Default Web Site)
Для обработчика 1C Web-service Extension надо прописать путь C:\Program Files\1cv8\<правильная версия>\bin\wsisapi.dll
3. Отвалилась отладка.
Если ранее была отладка по HTTP, то она может отвалиться. Для того, чтобы отладка заработала надо проверить строку запуска службы агента сервера 1С.
В строке запуска должны стоять ключи -debug -http . Первый говорит, что отладка должна быть, а второй указывает, что отладка по http.
Если этих ключей нет, то их можно добавить через regedit. После перезапуска службы должен появиться процесс dbgs с указанием портов, на которых работает отладка.
Новый ОписаниеТипов(<Типы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>)
Примеры:
Массив = Новый Массив;
Массив.Добавить(Тип("СправочникСсылка.Методы"));
Массив.Добавить(Тип("Число"));
Знак = ДопустимыйЗнак.Неотрицательный;
КвЧисла = Новый КвалификаторыЧисла(10, 2, Знак);
ДопустимыеТипы = Новый ОписаниеТипов(Массив, КвЧисла);
Далее алгоритмы будут похожими. Для УО нам нужно задать условие отбора, задать значение свойства УО и добавить оформляемые поля.
// Создаем условие отбора
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля); // имя поля
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; // либо задаем свой
//**** Значение для отбора
ЭлементОтбора.ПравоеЗначение = ЗначениеДляОтбора;
// следует заметить что правым значением может выступать ПолеКомпоновкиДанных формы или списка
ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
//****
ЭлементОтбора.Использование = Истина;
Значение свойства УО:
// Установка значения элемента УО
// Возможно обращение как по индексу так и установка через метод
//1.
Элемент = ЭлементОформления.Оформление.Элементы[0];
Элемент.Значение = Цвет;
//2.
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СеребристоСерый);
Элемент.Использование = Истина;
Добавим поля оформления, если ничего не добавлять, то система применит оформления ко всей строке:
// Создаем поля оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПолеДляОформления);
ПолеОформления.Использование = Истина;
В качестве ИменПолей нужно передавать строковое представление ИМЕНИ реквизита.