Как вывести подписи ответственных лиц в отчете на СКД

Программист 1С v8.3 (Управляемые формы) 1С:Комплексная автоматизация Управленческий учет IT и автоматизация бизнеса
← На главную

При разработке отчетов в системе компоновки данных (СКД) часто возникает задача вывода подписей в конце документа. Например, при формировании отчета по складу необходимо вывести фамилию и инициалы материально ответственного лица (МОЛ). Несмотря на кажущуюся простоту, разработчики часто сталкиваются с ошибками синтаксиса или ограничениями группировок. В этой статье мы подробно разберем, как правильно реализовать вывод подписей в конфигурациях «Комплексная автоматизация 2.4» или «ERP 2.4».

Разбор основной проблемы: почему поле не используется в группировке

Рассмотрим типичную ситуацию: вы пытаетесь вывести поле ТекущийОтветственный, которое является реквизитом справочника Склады, но система выдает ошибку: «Поле не может быть использовано в группировке». Проанализируем причины этого поведения. Чаще всего это происходит потому, что поле не включено в выбранные поля или система не может однозначно определить его значение для текущего уровня итогов.

Если нам нужно вывести подпись один раз в конце отчета, не обязательно пытаться запихнуть ответственного в каждую строку группировки. Мы можем использовать механизмы макетов или вычисляемых полей. Рассмотрим по шагам, как это сделать правильно.

Способ 1. Использование функций общих модулей в вычисляемых полях

Для получения красивой расшифровки подписи (например, «Иванов И.И.» вместо «Иванов Иван Иванович») в типовых конфигурациях 1С используются специальные функции. В нашем случае это ФизическиеЛицаУТ.ФамилияИнициалыФизЛица. Однако при её вызове часто возникает синтаксическая ошибка. Выясним причину.

Важный нюанс: функция ожидает на вход ссылку на объект (тип СправочникСсылка.ФизическиеЛица), а разработчики часто передают результат функции Представление(). Помните, что Представление() в СКД всегда возвращает строку. Передача строки в функцию, ожидающую ссылку, неизбежно приведет к ошибке выполнения.

Рассмотрим правильный алгоритм настройки вычисляемого поля:

  1. Перейдем на вкладку «Вычисляемые поля» в схеме компоновки данных.
  2. Добавим новое поле, назовем его, например, ФИООтветственного.
  3. В колонке «Выражение» пропишем вызов функции:

ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(Склад.ТекущийОтветственный)

Обратите внимание: мы обращаемся к реквизиту ТекущийОтветственный через точку от поля Склад. Это сработает, если поле Склад присутствует в вашем наборе данных (запросе).

Особенности настройки общего модуля

Если система все равно ругается на синтаксическую ошибку при обращении к модулю, проверим его свойства в конфигураторе. Проанализируем настройки модуля ФизическиеЛицаУТ:

Если функция не помечена словом Экспорт, она не будет доступна вне модуля. Убедимся, что в коде модуля функция определена так:

Функция ФамилияИнициалыФизЛица(ФизическоеЛицо, Дата = Неопределено) Экспорт

Способ 2. Настройка вывода подписи через макеты группировок

Чтобы подпись выглядела как в официальном документе (с линиями для росписи и расшифровкой), лучше всего использовать вкладку «Макеты». Этот способ позволяет жестко задать визуальное оформление подвала отчета.

Выполним следующие шаги:

  1. В настройках СКД создадим группировку, которая будет отвечать за подвал (это может быть пустая детальная запись или специальная группировка «Склад»).
  2. Перейдем на вкладку «Макеты» и нажмем «Добавить макет группировки».
  3. Выберем тип макета — «Подвал».
  4. В появившемся редакторе нарисуем область, как в Excel: «Материально ответственное лицо: ____________ / [ФИООтветственного] /».
  5. В свойствах ячейки, где написано [ФИООтветственного], установим тип заполнения — «Параметр».
  6. Ниже, в таблице параметров макета, укажем выражение для ФИООтветственного:

ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(Склад.ТекущийОтветственный)

Такой подход гарантирует, что подпись появится именно в конце соответствующей группы данных, а не будет дублироваться в каждой строке отчета.

Способ 3. Получение ответственного на историческую дату

Разберем ситуацию, когда реквизит ТекущийОтветственный в справочнике Склады нам не подходит. В крупных организациях МОЛ на складе может меняться. Если мы строим отчет за прошлый месяц, нам нужен тот сотрудник, который работал тогда, а не тот, который назначен сейчас.

В конфигурации КА 2.4 история ответственных лиц хранится в регистре сведений ЛицаОтветственныеЗаСклады. Чтобы получить актуальные данные, проанализируем запрос нашего набора данных:

  1. Добавим в запрос левое соединение с регистром сведений ЛицаОтветственныеЗаСклады.СрезПоследних.
  2. В качестве условия соединения укажем Склад = Склад.
  3. Параметр Период для среза последних свяжем с датой окончания отчета.

Пример фрагмента запроса:


ВЫБРАТЬ
    Продажи.Склад КАК Склад,
    Продажи.Количество КАК Количество,
    ЕСТЬNULL(ОтветственныеЛица.ФизическоеЛицо, ЗНАЧЕНИЕ(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК МОЛ
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЛицаОтветственныеЗаСклады.СрезПоследних(&КонецПериода, ) КАК ОтветственныеЛица
        ПО Продажи.Склад = ОтветственныеЛица.Склад

Теперь в СКД у нас появится поле МОЛ, которое содержит актуальную ссылку на физическое лицо на дату отчета. Его мы и будем передавать в функцию формирования инициалов.

Рекомендации по оформлению

При выводе должностей помните, что должность также не хранится в справочнике физических лиц напрямую. Ее нужно получать либо из кадровых документов, либо через аналогичную функцию: ФизическиеЛица.ДолжностьФизическогоЛица(ФизЛицо, Дата). Рассмотрим комплексное выражение для вывода полной подписи в макете:


ФизическиеЛица.ДолжностьФизическогоЛица(Склад.ТекущийОтветственный, &КонецПериода) 
+ " _________________ / " + 
ФизическиеЛицаУТ.ФамилияИнициалыФизЛица(Склад.ТекущийОтветственный) + " /"

Важный совет: всегда проверяйте поле ТекущийОтветственный на заполненность. Если в справочнике склад не заполнен ответственный, функция может вернуть пустую строку или вызвать ошибку. Используйте конструкцию ВЫБОР КОГДА в выражениях СКД, чтобы обрабатывать такие случаи и выводить, например, текст «Ответственный не назначен».

Таким образом, мы рассмотрели три основных метода вывода подписей. Использование вычисляемых полей и макетов в сочетании с типовыми функциями общего модуля — это наиболее гибкий и правильный путь разработки профессиональных отчетов в среде 1С:Предприятие 8.3.

← На главную