Как вывести номер и дату в печатной форме Счет-заказ в 1С:Бухгалтерия 3.0

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

При разработке или модификации печатных форм в среде 1С:Предприятие 8.3 начинающие разработчики часто сталкиваются с ситуацией, когда изменения в макете (добавление текста или полей) не отображаются при формировании документа. Типичный пример: в макете ПФ_MXL_СчетЗаказ создается шаблон для заголовка, но вместо номера и даты программа выводит пустое место. Разберем подробно, почему так происходит и как заставить данные отображаться корректно.

Почему параметры в макете не заполняются автоматически

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

Если вы добавили новые параметры, такие как НомерДок и ДатаДок, которых не было в стандартном макете, типовой программный код о них «не знает» и игнорирует их. Наша задача — найти место, где формируется печатная форма, и дописать заполнение этих параметров или применить метод постобработки на основе БСП.

Шаг 1. Поиск программного кода через Глобальный поиск

Для начала выясним, какая процедура отвечает за вывод данных в наш макет. В конфигураторе воспользуемся инструментом Глобальный поиск (сочетание клавиш Ctrl + Shift + F). В строке поиска введем имя макета: ПФ_MXL_СчетЗаказ.

Проанализируем результаты поиска. В современных конфигурациях «Бухгалтерия предприятия 3.0» код печати обычно располагается в одном из двух мест:

  1. Модуль менеджера документа: Например, если мы печатаем счет, нужно открыть дерево конфигурации, найти документ «Счет на оплату покупателю» (или Расходную накладную, если форма вызывается из нее), нажать правой кнопкой мыши и выбрать «Открыть модуль менеджера». Ищем там процедуру Печать или функции, начинающиеся со слова Сформировать.
  2. Общий модуль: Часто логика печати торговых документов вынесена в специализированные модули, такие как ПечатьТорговыхДокументов или УчетТорговыхОпераций.

Шаг 2. Программное заполнение параметров

Когда мы нашли фрагмент кода, где получается область макета (обычно это делается методом ПолучитьОбласть), нам нужно добавить строки для передачи значений в наши параметры (например, если вы внедряете счет с QR-кодом). Рассмотрим пример кода, который должен присутствовать в модуле:


// Получаем область заголовка из макета
ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");

// Заполняем параметры, которые мы добавили в макет
// Предположим, что данные документа находятся в структуре ДанныеПечати или Шапка
ОбластьЗаголовок.Параметры.НомерДок = ДанныеПечати.Номер; 
ОбластьЗаголовок.Параметры.ДатаДок = Формат(ДанныеПечати.Дата, "ДЛФ=DD");

// Выводим подготовленную область в итоговый табличный документ
ТабДок.Вывести(ОбластьЗаголовок);

Обратим внимание на важный нюанс: имена параметров в коде (после точки у объекта Параметры) должны строго совпадать с тем, что написано в квадратных скобках в макете. Если в макете указано [НомерДок], то в коде пишем Параметры.НомерДок.

Шаг 3. Красивое форматирование номера и даты

Если просто передать Объект.Номер, пользователь может увидеть системный номер с кучей нулей и префиксами (например, «0000-000001»). В 1С:Бухгалтерия 3.0 принято использовать специальные функции для приведения номера к печатному виду. Проанализируем, как это сделать правильно:

Для вывода номера без лишних нулей используем функцию общего модуля:

ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеПечати.Номер, Истина, Истина)

Для даты лучше использовать функцию Формат(), чтобы она выводилась прописью или в удобном формате, например, «15 мая 2024 г.». Для этого применяется маска "ДЛФ=DD".

Шаг 4. Использование отладки

Если код написан, но данные всё равно не появляются, воспользуемся отладчиком. Поставим точку останова (клавиша F9) на строке, где вызывается ПолучитьОбласть("Заголовок"). Запустим печать документа в режиме предприятия. Когда программа остановится на этой строчке:

  1. Проверим, заходит ли выполнение кода именно в эту секцию.
  2. Посмотрим через «Вычислить выражение» (Shift + F9), какие значения содержатся в переменных, которые вы присваиваете параметрам.
  3. Убедимся, что после заполнения параметров вызывается метод ТабДок.Вывести(), иначе область просто не попадет в финальный документ.

Альтернативный вариант: Редактирование макетов в пользовательском режиме

Разберем ситуацию, когда не хочется менять конфигурацию (чтобы не усложнять будущие обновления). В 1С:Бухгалтерия 3.0 есть встроенный инструмент управления макетами. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки — Макеты печатных форм.

Здесь можно найти нужный макет и отредактировать его визуально. Однако важно понимать: этот способ позволяет менять только оформление и статический текст. Если вы добавите новый параметр в квадратных скобках, которого нет в типовом алгоритме заполнения этой формы, он все равно останется пустым. Для вывода новых данных правка программного кода в конфигураторе (или создание внешней печатной формы) обязательна.

Рекомендация по архитектуре решения

Для начинающих разработчиков лучшей практикой будет создание внешней печатной формы. Рассмотрим преимущества этого подхода:

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

← На главную