Как найти и изменить код заполнения макета во внешней печатной форме 1С 8.2

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

Работа с внешними печатными формами в системе 1С:Предприятие 8.2 (особенно в конфигурациях на обычных формах, таких как «Управление торговлей 10.3») часто вызывает вопросы у начинающих разработчиков. Типичная ситуация: вы изменили визуальную часть макета, добавили новые поля или переименовали существующие, но данные в них не появляются или программа выдает ошибку. Давайте разберем подробно, где именно скрыта логика заполнения этих макетов и как правильно внести изменения, чтобы всё заработало.

Поиск местоположения внешней печатной формы

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

Выполним следующие шаги:

  1. Откроем программу в режиме «Предприятие».
  2. Перейдем в меню Сервис — Дополнительные отчеты и обработки — Внешние печатные формы.
  3. Найдем в списке нужную форму (в нашем примере — «Акт приемки на ремонт»).
  4. Нажмем кнопку изменения (карандаш) или откроем карточку записи.
  5. В открывшемся окне найдем кнопку «Выгрузить файл во внешнюю обработку» (или аналогичную по смыслу кнопку сохранения на диск). Сохраним файл .epf в рабочую папку.

Различие между модулем формы и модулем объекта

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


Процедура КнопкаВыполнитьНажатие(Кнопка)
    // Вставить содержимое обработчика.
    Печать();
КонецПроцедуры

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

Именно в модуле объекта внешней печатной формы 1С 8.2 обязательно должна присутствовать экспортная функция или процедура Печать(). Именно её вызывает система, когда пользователь нажимает кнопку печати в документе.

Разбор механизма функции Печать()

Выясним, как программа понимает, какие данные выводить. В модуле объекта мы увидим структуру, подобную этой:


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

Обратим внимание на важный объект — СсылкаНаОбъект. Это реквизит внешней обработки, в который система автоматически передает ссылку на документ, из которого запущена печать. Через эту ссылку мы можем обратиться к любому полю документа: СсылкаНаОбъект.Номер, СсылкаНаОбъект.Контрагент, СсылкаНаОбъект.СуммаДокумента и так далее.

Как изменить заполнение макета

Рассмотрим ситуацию автора: поле «Дата Выдачи» заменено на «Предполагаемая стоимость». Чтобы данные начали выводиться, выполним следующие действия в модуле объекта:

  1. Найдем в тексте модуля строки, где заполняются параметры макета. Обычно они выглядят как Область.Параметры.ИмяПараметра = Значение.
  2. Если вы переименовали параметр в самом макете (в свойствах ячейки), вам необходимо обновить имя этого параметра и в коде.
  3. Например, если раньше было: Область.Параметры.ДатаВыдачи = СсылкаНаОбъект.Дата; А теперь вы хотите выводить стоимость, код должен стать таким: Область.Параметры.ПредполагаемаяСтоимость = СсылкаНаОбъект.СуммаДокумента;

Важный момент: убедитесь, что в макете у соответствующей ячейки в палитре свойств установлено значение Заполнение: Параметр. Если там будет стоять Текст, то программа просто проигнорирует ваши попытки присвоить значение в коде и выведет в печатную форму само слово «ПредполагаемаяСтоимость».

Использование горячих клавиш для поиска

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

Обновление формы в базе данных

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

  1. Вернемся в справочник «Внешние печатные формы» в режиме «Предприятие».
  2. Откроем карточку нашей формы.
  3. Нажмем кнопку «Заменить файл внешней обработки».
  4. Выберем наш отредактированный файл.
  5. Нажмем «ОК» или «Записать и закрыть».

Теперь при нажатии кнопки «Печать» в документе система будет использовать обновленный алгоритм и выводить новые данные в макет. Если вы планируете заниматься разработкой часто, рекомендуем создать в модуле формы кнопку «Тест», которая будет программно заполнять реквизит СсылкаНаОбъект и вызывать Печать().Показать(), чтобы не тратить время на постоянную загрузку файла в базу при каждой мелкой правке.

← На главную