VK HR Tek logo
Помощь
Обновлена 8 мая 2026 г. в 07:24

Рекомендации по работе с печатными формами в 1С

У печатных форм, которые могут быть отправлены в КЭДО, есть некоторые ограничения.

1. Для стандартных и внешних печатных форм, которые преобразуются в pdf:

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

Пример печатной формы, которая преобразуется в pdf — Лист ознакомления с ЛНА.

2. Для стандартных и внешних печатных форм, которые преобразуются в docx:

  • форма возвращается в таблице в поле «Офисные документы».

Для этого необходимо вызвать УправлениеПечатью.СформироватьПечатныеФормы и получить сформированные печатные формы.

Далее нужно проверить колллекцию ПечатныеФормы.КоллекцияПечатныхФорм[0].ОфисныеДокументы, и если в этой коллекции есть сформированный документ Word, то забрать его.

Иначе считаем, что в 1C была прислана обычная печатная форма, которая преобразуется в pdf.

В данном случае разница заключается в получении строки Base64 для передачи на бэкенд. Документы Word и pdf по-разному сохраняются в 1С. Поэтому важно знать, где расположены печатные формы разных форматов.

При формировании печатных форм в docx, подписание при отправке работать не будет. Печатная форма будет только отправляться в КЭДО, а подписание пройдет уже в заявке. Это связано с тем, что docx сначала конвертируется в pdf, а подписать можно документы только в формате pdf.

3. Для конструктора печатных форм:

  • доступен вызов клиентского метода;
  • доступно открытие формы конструктора;
  • при закрытии форма возвращает структуру по примеру:
Закрыть(Новый Структура("ЭтоДокументWord, ДвоичныеДанные", ЭтоДокументWord, ДвоичныеДанные);

где:

ЭтоДокументWord (Булево) — признак, является ли печатная форма документом Word;

ДвоичныеДанные (ДвоичныеДанные) — двоичные данные табличного документа или документа Word;

  • форма должна отображаться в командах печати выбранного документа;
  • форма подключена как внешняя печатная форма документа;
  • внешние печатные формы списочных документов пока не обрабатываются.

Шаблон внешней обработки с конструктором.

Требования к кастомным документам

Чтобы кастомный документ работал с КЭДО, необходимо в форме этого документа добавить код процедур ПослеЗаписи() и Оповестить() с событием "Запись_ИмяДокумента". Пример:

Рекомендации по работе с печатными формами в 1С

Процедуры ПослеЗаписи() и Оповестить() должны присутствовать в форме кастомного документа, если он будет создаваться по кнопке «Создать документ» из заявки в Рабочем месте кадровика. Иначе система не узнает, что документ записался, и не сможет связать его с заявкой КЭДО и отправить его печатные формы в КЭДО.

«Распил» документов

Информация предназначена для Специалиста 1С со стороны клиента.

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

Для этого требуется в коде обработки скорректировать печатную форму. Рекомендуем смотреть в коде, начиная с фрагмента vkd_ОбработкаДанныхСервер.ПечатныеФормыСписочныхДокументовПоСотрудникам, или с иных функций/процедур, перечисленных в описании «распила» ниже.

На стороне КЭДО должна быть добавлена только массовая рассылка в бизнес-процесс, заявки по которому хотите отправлять сотрудникам.

Как работает «распил» внутренней печатной формы:

  1. Функция ПечатныеФормыСписочныхДокументовПоСотрудникам

Эта функция вызывается не напрямую из интерфейса, а как фоновая многопоточная задача из vkd_КомандыКЭДОСервер. Функция делит сотрудников на порции и каждую порцию отправляет в vkd_ОбработкаДанныхСервер.ПечатныеФормыСписочныхДокументовПоСотрудникам.

Основная функция: цикл по сотрудникам и их командам.

Что делает функция:

  • для каждого сотрудника ищет его строки в КомандыПечатиПоСпискуСотрудников;
  • для каждой строки вызывает фабрику формы ПечатнаяФормаДокументаИзКомандыПечати(...);
  • если форма получена — конвертирует в PDF (binary) и располагает в СтруктураКоманды.ПечатнаяФормаДвоичныеДанные;
  • возвращает только успешные команды.

Если печатная форма не получена — пишет ошибку в сообщения пользователя и журнал регистрации и продолжает цикл дальше (не «валит» всю порцию сотрудников).

  1. Функция ПечатнаяФормаДокументаИзКомандыПечати

Функция определяет, каким способом получить печатную форму для конкретного типа документа.

Ветка A. Если требуется печатная форма для списочных документов «Кадровый перевод списком», «Премия» и т.п., то выполняется:

Процедура СформироватьПечатнуюФормуСВыборомВариантаФормирования(...)

Если печатная форма формируется с помощью отчёта СКД, то вызывается типовой отчёт, в который передается дополнительный отбор по сотруднику.

Проверка осуществляется через функцию ЭтаПечатнаяФормаДокументаФормируетсяОтчетомСКД(...) (набор ID печатных форм Т1а/Т5а/Т6а/Т8а/Т11 и др.).

Далее:

  • строится отбор по сотруднику через ПараметрыОтбораПриФормированииПечатнойФормы;
  • задаются параметры конкретного отчета через процедуру ЗаполнитьПараметрыПечати;
  • выводится в коллекцию печатных форм;
  • берётся первый ТабличныйДокумент.

Ветка B. Если требуется печатная форма для других типов списочных документов, то создаётся временный документ под одного сотрудника, из этого документа извлекается печатная форма с помощью:

Процедура СформироватьПечатнуюФормуДокумента(...)

Важный внутренний механизм для «распила»:

Функция ПечатныеФормыСозданногоДокумента(...)

Алгоритм:

  • берётся исходный списочный документ;
  • определяется главная табличная часть (Сотрудники или ДанныеОВремени для табеля);
  • если у сотрудника нет строк в этой табличной части — Неопределено;
  • стартует транзакция;
  • документ копируется через Скопировать(), у копии очищаются все табличные части;
  • табличные части заполняются только строками нужного сотрудника через процедуру ЗаполнитьТабличныеЧастиДокумента(...);
  • копия записывается;
  • формируется печатная форма (внешняя обработка или обычный УправлениеПечатью.СформироватьПечатныеФормы);
  • транзакция отменяется (данные в базе не остаются).

Получается «чистый» печатный результат по сотруднику. Технический документ не сохраняется в базе данных.


«Распил» на уровне содержимого документа реализован через:

Процедура ЗаполнитьТабличныеЧастиДокумента(...)

Что важно:

  • поле связи по сотруднику не всегда Сотрудник, для ряда документов используется ИдентификаторСтрокиСотрудника;
  • запросом берётся набор ключей-строк по выбранному сотруднику;
  • выполняется проход по всем табличным частям исходного документа и перенос найденных строк в копию;
  • специальные табличные части (ДополнительныеРеквизиты, ФизическиеЛица) исключены из общего цикла;
  • блок ФизическиеЛица добавляется отдельно и сворачивается по физическому лицу.

Ветка C. Если требуется печатная форма для графика отпусков, то выполняется:

Процедура СформироватьПечатнуюФормуДокументаГрафикОтпусков(...)Функция ПечатьТ7(...)

Для формы Т7 используется отдельная логика через отчёт Отчеты.ГрафикОтпусков:

  • выставляется отбор по сотруднику;
  • собирается табличный документ;
  • возвращается готовая форма.