При работе с отчетами в системе «1С:Предприятие», в частности с отчетом «На контроле» (характерным для конфигурации «1С:Документооборот»), пользователи часто сталкиваются с необходимостью вывода дополнительных данных. Одной из самых частых задач является добавление колонки с примечанием, которое исполнитель оставляет при завершении задачи. Разберем детально, почему это поле может отсутствовать в стандартном списке и какими способами его можно добавить.
Прежде чем приступать к программированию, проанализируем возможности пользовательского режима. В системе 1С большинство отчетов построено на базе Системы компоновки данных (СКД), которая позволяет гибко управлять составом полей.
Рассмотрим порядок действий для проверки доступности поля:
Объект контроля или Задача, нажав на символ «+».Результат выполнения.Если в списке доступных полей нужный реквизит отсутствует, это означает, что разработчик конфигурации не включил его в запрос набора данных СКД. В таком случае кнопка «Добавить» будет неактивна для конкретных элементов, и нам придется воспользоваться более продвинутыми методами.
Если стандартных настроек недостаточно, мы можем модифицировать отчет, не внося изменений в основную конфигурацию. Это позволит сохранить программу на полной поддержке и упростит дальнейшие обновления. Разберем этот процесс по шагам:
Шаг 1. Выгрузка отчета. Зайдем в Конфигуратор, найдем в дереве метаданных отчет «На контроле», нажмем на нем правой кнопкой мыши и выберем пункт «Сохранить как внешний отчет...». Сохраним файл с расширением .erf.
Шаг 2. Редактирование схемы компоновки данных. Откроем сохраненный файл в Конфигураторе. Перейдем на закладку «Основные настройки» и откроем «Основную схему компоновки данных». В конструкторе схемы нам нужно найти «Набор данных - запрос».
Шаг 3. Модификация запроса. Нам необходимо добавить в текст запроса обращение к таблице задач. Посмотрим на примерную структуру связи:
ВЫБРАТЬ
ИсточникДанных.Ссылка КАК Ссылка,
ИсточникДанных.ОбъектКонтроля КАК ОбъектКонтроля,
ЕСТЬNULL(ЗадачиИсполнителя.РезультатВыполнения, "") КАК ПримечаниеИсполнителя
ИЗ
РегистрСведений.НаКонтроле КАК ИсточникДанных
ЛЕВОЕ СОЕДИНЕНИЕ Задача.ЗадачаИсполнителя КАК ЗадачиИсполнителя
ПО ИсточникДанных.ОбъектКонтроля = ЗадачиИсполнителя.Ссылка
Шаг 4. Настройка полей. После изменения запроса перейдем на закладку «Настройки» в СКД и на вкладке «Выбранные поля» добавим наше новое поле ПримечаниеИсполнителя в список отображаемых.
Шаг 5. Подключение. Сохраним изменения и подключим отчет в пользовательском режиме через раздел «Администрирование» — «Печатные формы, отчеты и обработки» — «Дополнительные отчеты и обработки».
Если мы хотим, чтобы изменения коснулись именно типового отчета в интерфейсе, воспользуемся механизмом расширений. Это современный стандарт доработки систем на базе 1С.
Выясним последовательность действий:
РезультатВыполнения из таблицы задач.РезультатВыполнения в рамках расширения.Проанализируем особенности поля «Результат выполнения». В системе 1С:Документооборот это поле имеет тип Строка неограниченной длины. Это накладывает определенные ограничения на визуальное представление отчета:
1. Оформление текста. Поскольку комментарии могут быть очень длинными, они могут «раздувать» строки отчета по высоте. Чтобы отчет оставался читаемым, рекомендуется в настройках поля СКД (вкладка «Условное оформление» или «Наборы данных -> Оформление») установить параметр Максимальная ширина (например, значение 40 или 60).
2. Дублирование строк. Если у одного контролируемого объекта (например, документа или письма) было несколько исполнителей или задача возвращалась на доработку, в базе данных будет несколько записей о выполнении. При обычном ЛЕВОМ СОЕДИНЕНИИ это может привести к тому, что одна строка отчета превратится в несколько. Чтобы этого избежать, выясним, какой именно комментарий нам нужен:
СоединитьСтроки() (доступна в вычислимых полях СКД).Пример использования функции СоединитьСтроки в вычислимых полях для объединения нескольких примечаний:
СоединитьСтроки(Массив(РезультатВыполнения), "; ", "Пусто")
Таким образом, мы рассмотрели три различных подхода к решению задачи. Выбор метода зависит от ваших прав доступа к конфигуратору и необходимости сохранения типовых механизмов обновления программы.