Все примеры сделаны на небольшой самописной конфигурации на платформе 1С:Предприятие 8.3 (8.3.13.1513). В ней несколько справочников, пара документов и отчет со всеми примерами. Текст запроса отчета простой и выглядит следующим образом:
ВЫБРАТЬ
ТоварыНаСкладеОбороты.Склад КАК Склад,
ТоварыНаСкладеОбороты.Номенклатура КАК Номенклатура,
ТоварыНаСкладеОбороты.КоличествоПриход КАК КоличествоПриход,
ТоварыНаСкладеОбороты.КоличествоРасход КАК КоличествоРасход,
ТоварыНаСкладеОбороты.Организация КАК Организация,
ТоварыНаСкладеОбороты.Регистратор КАК Регистратор
ИЗ
РегистрНакопления.ТоварыНаСкладе.Обороты(, , Регистратор, ) КАК ТоварыНаСкладеОбороты
1. Создание папок (групп) полей
В разделе описано, как в СКД можно самостоятельно создавать подобные папки:
Для этого нужно в конструкторе СКД, на вкладке "Наборы данных", указать в поле "Путь" имя папки через точку, перед именем поля. Поля с одинаковыми названиями папок будут сгруппированы. Например, вместо КоличествоРасход и КоличествоПриход, указать соответственно КоличественныеПоказатели.КоличествоРасход и КоличественныеПоказатели.КоличествоПриход. Можно делать вложенные папки. Например, у поля склад можно указать «Аналитика.Склады.Склад»
В результате, на вкладке редактирования настроек, набор доступных полей для выбора будет выглядеть так:
Механизм может быть удобен в тех случаях, когда в отчете много полей (более 9).
2. Соединение строк (без использования языка выражений)
Иногда перед разработчиками 1С ставят задачу вывести данные колонки табличной части документа в одно поле рядом с самим владельцем. Строки должны быть при этом разделены, например, точкой с запятой. Задачу можно решить при помощи плохо описанного (в справке 1С) и довольно глючного языка выражений СКД (см ВычислитьВыражение). Но у этой задачи есть простое и прозрачное решение. Но стоит сразу оговориться, что его тяжело назвать оптимальным с точки зрения производительности.
Пускай есть документ "ПриходТоваров" с табличной частью МОЛ и единственной колонкой "Сотрудник". Стоит задача в группировке с документом вывести через запятую всех сотрудников из указанной табличной части. Порядок решения следующий:
1. В общем серверном модуле ОбщегоНазначения создал экспортную процедуру со следующим содержанием:
Функция ВывестиТабличнуюЧастьДокумента(СсылкаНаДокумент) Экспорт
МассивСтрок = СсылкаНаДокумент.МОЛ.ВыгрузитьКолонку("Сотрудник");
Возврат СтрСоединить(МассивСтрок,",");
КонецФункции
2. В конструкторе СКД, на вкладке «Вычисляемые поля» добавил новое поле. В пути к данным указал нужное значение ОбщегоНазначения.ВывестиТабличнуюЧастьДокумента(Регистратор):
3. Добавить новое поле в настройки отчета.
В выражениях СКД можно использовать почти любые функции серверных модулей. Это дает разработчику практически неограниченные возможности. Но стоит помнить о том, что неосторожное использование этой фичи может негативно сказаться на производительности системы.
3. Вывод числа прописью
Вызов общих серверных функций доступен не только в вычисляемых полях. Их можно использовать в макетах. Пускай перед разработчиком стоит задача опционно выводить в подвале отчета итог прописью. Для этого:
1. На вкладке "Макеты" конструктора СКД добавил макет группировки с именем "Подвал".
2. В макете я задал единственный параметр КоличествоИтог. Чтобы в отчете не было видно рамок ячеек, я установил цвет рамок "Фон формы":
3. В заполнении параметра указал ОбщегоНазначения.КоличествоПрописью(КоличественныеПоказатели.КоличествоПриход)
Теперь осталось вывести макет в настройки отчета. Для этого нужно:
1. На вкладке "Настройки" конструктора СКД добавить группировку детальных записей и установить ей имя "Подвал".
2. В выбранных полях детальных записией надо удалить автополе и добавить "КоличественныеПоказатели.КоличествоПриход". Таким образом в макет будет выведен общий итог, без группировки по полям.
3. Осталось задать свойство элемента пользовательских настроек, чтобы вывод подвала стал опционным. Для этого нужно кликнуть правой кнопкой мыши по полю "Детальные записи" и выбрать пункт "Свойства элемента пользовательских настроек" и задать имя группировке:
В результате отчет будет выглядеть следующим образом:
Надеюсь, что статья позволила читателю несколько расширить свои представления о возможностях Системы компоновки данных .