Как добавить колонку с датой рождения в печатную форму ведомости в банк в 1С:ЗУП 3.1?

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

При оформлении выплаты заработной платы через банк бухгалтерии часто требуется расширенный состав данных в печатной форме (например, в «Списке перечислений» документа Ведомость в банк). Типовой макет содержит только ФИО сотрудника, номер лицевого счета и сумму, однако для идентификации физлиц банку может потребоваться дата рождения. Разберем особенности получения этих данных в конфигурации 1С:Зарплата и управление персоналом 3.1 и рассмотрим все варианты реализации доработки: от создания внешней печатной формы до использования расширений и прямого изменения метаданных.

Особенности структуры данных сотрудников в 1С:ЗУП 3.1

Прежде чем приступать к изменению макетов и алгоритмов вывода, проанализируем, где именно хранятся нужные сведения. В табличной части документа выплаты содержится ссылка на справочник Сотрудники. Однако реквизит ДатаРождения принадлежит не самому сотруднику, а связанному объекту — справочнику ФизическиеЛица.

Следовательно, в тексте запроса, подготавливающего данные для вывода в табличный документ, обращение к дате рождения выполняется через реквизит физического лица:


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

Также возможно использование левого соединения с таблицей Справочник.ФизическиеЛица, если в типовом запросе уже выбирается ссылка на физлицо.

Способ 1. Разработка внешней печатной формы (ВПФ)

Создание внешней печатной формы позволяет оставить конфигурацию на полной поддержке поставщика. Печатная форма подключается через справочник Дополнительные отчеты и обработки.

Важно помнить: внешние печатные формы всегда разрабатываются как внешние обработки с расширением *.epf (а не внешние отчеты *.erf).

Разберем по шагам создание такой обработки:

  1. Создадим новую внешнюю обработку в конфигураторе и перенесем в нее макет печатной формы из типового документа. Добавим в область строк и шапки новую колонку «Дата рождения» с параметром ДатаРождения.
  2. В модуле объекта внешней обработки опишем обязательную экспортную функцию СведенияОВнешнейОбработке(), регламентированную Библиотекой Стандартных Подсистем (БСП):

Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = ИнициализироватьСтруктуруРегистрации();
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма();
    ПараметрыРегистрации.Версия = "1.0";
    ПараметрыРегистрации.БезопасныйРежим = Ложь;
    ПараметрыРегистрации.Назначение.Добавить("Документ.ВедомостьНаВыплатуЗарплатыВБанк");

    Команда = ПараметрыРегистрации.Команды.Добавить();
    Команда.Представление = НСтр("ru = 'Список перечислений (с датой рождения)'");
    Команда.Идентификатор = "СписокПеречисленийСДатойРождения";
    Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
    Команда.ПоказыватьОповещение = Истина;

    Возврат ПараметрыРегистрации;

КонецФункции
  1. В модуле объекта реализуем экспортную процедуру Печать(), которая сформирует ТабличныйДокумент:

Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт

    ПечатнаяФорма = УправлениеПечатью.СформироватьПечатнуюФорму(
        КоллекцияПечатныхФорм, 
        "СписокПеречисленийСДатойРождения", 
        "Список перечислений (с датой рождения)"
    );

    Если ПечатнаяФорма <> Неопределено Тогда
        ПечатнаяФорма.ТабличныйДокумент = СформироватьПечатныйДокумент(МассивОбъектов, ОбъектыПечати);
    КонецЕсли;

КонецПроцедуры

Обратите внимание на безопасный режим: если при формировании печатной формы в коде используются привилегированные модули расчета ЗУП 3.1 или прямое обращение к общим процедурам, требующим полных прав, в функции СведенияОВнешнейОбработке() необходимо отключить безопасный режим (БезопасныйРежим = Ложь) или настроить соответствующие разрешения.

Способ 2. Использование расширения конфигурации

Наиболее современный и удобный способ доработки печатных форм в среде 1С:Предприятие 8.3 — использование механизма расширений конфигурации. В отличие от ВПФ, расширение не требует создания отдельных файлов на диске и полностью встраивается в типовую подсистему печати.

Порядок действий при использовании расширения:

  1. Создаем расширение конфигурации с назначением Адаптация или Дополнение.
  2. Добавляем в расширение документ ВедомостьНаВыплатуЗарплатыВБанк, его макет и модуль менеджера.
  3. В расширенном макете добавляем колонку для даты рождения.
  4. В модуле менеджера перехватываем процедуру печати с помощью директивы &Вместо или &ИзменениеИКонтроля, дописываем получение даты рождения в текст запроса и заполняем параметр области строки макета.

Преимущество этого метода заключается в том, что основная конфигурация остается на типовой поддержке поставщика, а само расширение автоматически переносится и сохраняет работоспособность при регулярных обновлениях ЗУП 3.1.

Способ 3. Прямое изменение макета и модуля менеджера в конфигураторе

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

Алгоритм действий:

  1. Открываем макет печатной формы в документе ВедомостьНаВыплатуЗарплатыВБанк и добавляем новую колонку в области ШапкаТаблицы и Строка.
  2. В ячейке строки указываем параметр ДатаРождения и задаем формат вывода даты (например, ДФ=dd.MM.yyyy).
  3. Открываем модуль менеджера документа, находим процедуру формирования печатной формы и модифицируем запрос, добавив поле Сотрудник.ФизическоеЛицо.ДатаРождения.
  4. В цикле обхода результата выборки передаем значение даты в параметры области:

ОбластьСтрока.Параметры.Заполнить(ВыборкаПоСтрокам);
// Если требуется явное форматирование:
ОбластьСтрока.Параметры.ДатаРождения = Формат(ВыборкаПоСтрокам.ДатаРождения, "ДФ=dd.MM.yyyy");
ТабличныйДокумент.Вывести(ОбластьСтрока);

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

Почему задачу нельзя решить только через режим «Пользовательские макеты»

В режиме «1С:Предприятие» в разделе Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм администратор может отредактировать оформление макета (изменить ширину колонок, шрифты, границы, статический текст). Однако добавить принципиально новые данные, которых нет в выборке типового запроса формирования документа, этим инструментом невозможно. Для вывода даты рождения обязательно требуется модификация программного кода выборки данных одним из описанных выше способов.

← На главную