Как добавить дополнительные параметры в печатную форму Т-6 в 1С:ЗУП?

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

В процессе автоматизации кадрового учета часто возникает необходимость дополнить стандартные печатные формы 1С, например, приказ о предоставлении отпуска (Т-6), специфическими данными. Если печатная форма реализована на базе Системы Компоновки Данных (СКД), простое добавление поля в запрос не всегда приводит к желаемому результату. Давайте разберем, почему это происходит и как правильно решить задачу, не внося изменений в типовую конфигурацию.

Почему стандартное редактирование не всегда работает?

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

Решение через создание внешней печатной формы

Наиболее корректный способ модификации — создание Внешней печатной формы (ВПФ). Это позволяет перехватить процесс формирования документа и программно изменить настройки отчета перед его выводом. Рассмотрим этот процесс по шагам.

Шаг 1: Подготовка функции регистрации

Для начала нам необходимо определить процедуру СведенияОВнешнейОбработке, чтобы 1С «увидела» нашу разработку как печатную форму для конкретных документов. Мы регистрируем ее как заменяемую форму для Документ.Отпуск и Документ.ОтпускБезСохраненияОплаты.


Функция СведенияОВнешнейОбработке Экспорт
    ТекущаяВерсияБСП = СтандартныеПодсистемыСервер.ВерсияБиблиотеки;
    ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке(ТекущаяВерсияБСП);
    ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиПечатнаяФорма;
    ПараметрыРегистрации.Назначение.Добавить("Документ.Отпуск");
    ПараметрыРегистрации.Назначение.Добавить("Документ.ОтпускБезСохраненияОплаты");
    
    НоваяКоманда = ПараметрыРегистрации.Команды.Добавить;
    НоваяКоманда.Представление = НСтр("ru = 'Приказ о предоставлении отпуска (Т-6)'");
    НоваяКоманда.Идентификатор = "ПФ_MXL_Т6";
    НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода;
    НоваяКоманда.Модификатор = "ПечатьMXL";
    НоваяКоманда.ЗаменяемыеКоманды = "ПФ_MXL_Т6";
    Возврат ПараметрыРегистрации;
КонецФункции

Шаг 2: Программная настройка СКД

В процедуре Печать мы создаем отчет ПечатнаяФормаТ6, программно настраиваем его КомпоновщикНастроек и добавляем нужные нам поля. Ключевой момент здесь — не только добавить поле в Выбранные поля, но и обязательно включить его в Структуру отчета (в группировку).


Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
    Отчет = Отчеты.ПечатнаяФормаТ6.Создать();
    // Настройка отбора
    ПолеСсылка = Новый ПолеКомпоновкиДанных("СсылкаНаОбъект");
    // ... здесь размещается логика поиска и установки отбора по МассивуОбъектов ...

    // Добавление вычисляемого поля
    НовоеВычисляемоеПоле = Отчет.СхемаКомпоновкиДанных.ВычисляемыеПоля.Добавить();
    НовоеВычисляемоеПоле.Выражение = """Привет!"""; // Здесь может быть логика получения ФИО
    НовоеВычисляемоеПоле.ПутьКДанным = "Привет";
    НовоеВычисляемоеПоле.ТипЗначения = Новый ОписаниеТипов("Строка");

    // Добавление в выбранные поля
    НовоеВыбранноеПоле = Отчет.КомпоновщикНастроек.Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
    НовоеВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Привет");
    
    // ВАЖНО: Добавляем в группировку для вывода
    НовоеПолеГруппировки = Отчет.КомпоновщикНастроек.Настройки.Структура[0].ПоляГруппировки.Элементы.Добавить(Тип("ПолеГруппировкиКомпоновкиДанных"));
    НовоеПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Привет");
    
    // Формирование результата
    ТабДок = Новый ТабличныйДокумент;
    Отчет.ИнициализироватьОтчет();
    Отчет.СкомпоноватьРезультат(ТабДок);
    УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм, "ПФ_MXL_Т6", "Приказ", ТабДок);
КонецПроцедуры

Рекомендация по склонению ФИО

Если ваша задача — вывести фамилию в родительном падеже, не обязательно усложнять запрос СКД. Рекомендуем использовать типовую функцию ОбщегоНазначения.ПросклонятьПредставление(ФизЛицо, 2). Этот метод использует встроенные в БСП алгоритмы склонения, что гарантирует корректную работу без лишних манипуляций с данными внутри СКД.

Помните, что при работе с КомпоновщикомНастроек важно корректно находить элементы отбора по ссылке. Если при выполнении кода вы получаете ошибку о том, что значение не является объектным типом, проверьте, был ли найден элемент в коллекции Отбор.Элементы перед тем, как присваивать ему ПравоеЗначение.

← На главную