Как вывести дополнительный реквизит в печатную форму 1С?

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

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

Почему правка СКД не всегда дает результат?

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

Решение 1: Программное заполнение параметров в модуле

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

  1. Найдите процедуру, отвечающую за формирование табличного документа. Обычно она находится в Модуле менеджера документа или в Общем модуле печати.
  2. Найдите место, где происходит инициализация области макета и заполнение параметров.
  3. Вставьте код, который принудительно устанавливает значение параметра.

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


// Предположим, что параметр в макете называется ДнейКомпенсации
Область.Параметры.ДнейКомпенсации = Ссылка.ДнейКомпенсацииУдержанияОтпуска;

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

Решение 2: Проверка соответствия имен в СКД

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

Для работы этого метода должны соблюдаться два условия:

  1. Имя поля в СКД (в запросе) должно в точности совпадать с именем параметра в ячейке макета.
  2. В процедуре печати должен использоваться метод, который автоматически сопоставляет эти имена.

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

Рекомендации по отладке

Чтобы точно определить, на каком этапе теряются данные, следуйте этим рекомендациям:

Используйте Отладчик: Поставьте точку остановки в начале процедуры печати и дойдите до момента формирования табличного документа. Проверьте состояние переменной Выборка (или ее аналога). Если ваше поле отсутствует в Выборке, проблема в запросе СКД. Если поле есть, но пустует в Области, проблема в коде заполнения параметров.

Учитывайте специфику КОРП: В версиях КОРП часто используются расширения или дополнительные механизмы переопределения печатных форм. Если стандартные правки не работают, проверьте, не перекрывается ли ваш макет расширением конфигурации.

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

Итог

Если вы столкнулись с проблемой отсутствия данных в печатной форме, первым делом проверьте, передается ли значение в параметры макета программно. Прямое присвоение значения Область.Параметры.ИмяПараметра = Ссылка.ИмяРеквизита — это самый быстрый способ добиться нужного результата в условиях сжатых сроков разработки.

← На главную