Независимо от того, какой запрос написан в наборе данных, СКД исключает из результирующего запроса поля, не участвующие в настройках отчета. Это может приводить к тому, что в результате суммы по оборотам могут быть либо больше, либо меньше реальных.
Например, делаем запрос по сумме проданной номенклатуры. В запросе указываем день, номенклатуру, сумму, покупателя, регистратор. Допустим у нас один и тот же покупатель купил 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Цвета.СеребристоСерый);
Элемент.Использование = Истина;
Добавим поля оформления, если ничего не добавлять, то система применит оформления ко всей строке:
// Создаем поля оформления
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПолеДляОформления);
ПолеОформления.Использование = Истина;
В качестве ИменПолей нужно передавать строковое представление ИМЕНИ реквизита.
Если требуется выводить только количество в итогах, а в детальных записях ничего не выводить, тогда в настройках выбираем ветку <Детальные записи>, на вкладке "Выбранные поля", разворачиваем <Авто> и убираем галку с того поля, которое не должно отображаться.
Если надо чтобы в группировке выходила не сумма всех записей, а только одно значение (например когда есть общий остаток по абоненту и остатки в разрезе услуг в 2 разных столбцах), то в выражении ресурса можно использовать формулу типа: Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(ТекущийОстаток)", "Абонент"))
1С продвигает технологию 1C:Enterprise Development tools (EDT)
По сути это разработка в Eclipse функционала 1С. Надо скачать плагины и добавить конфигурацию. Пока не все объекты доступны, но основная часть уже включена.
Так как Eclipse работает на Java, то разработка теперь доступна не только под Windows, но и под Linux.