Как безопасно редактировать макеты печатных форм в режиме 1С:Предприятие и быстро создавать внешние формы?

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

Многие специалисты сталкиваются с необходимостью подкорректировать стандартную печатную форму (ПФ) непосредственно в режиме предприятия, например, в конфигурации 1С:ERP. Казалось бы, платформа предоставляет для этого удобный функционал: пользовательские макеты. Однако при работе с ними возникают неочевидные проблемы. Разберем по шагам, какие подводные камни нас ожидают, проанализируем причины возникновения ошибок после обновлений конфигурации и выясним, как правильно и быстро создавать внешние печатные формы на базе типовых механизмов.

Ограничения редактирования макетов в режиме «Предприятия»

Первый вопрос, который часто возникает: можно ли просто удалить лишние параметры из пользовательского макета? Выясним причину, по которой прямое удаление ячеек с параметрами (текст, заключенный в угловые <Параметр> или квадратные [Параметр] скобки) является плохой практикой.

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

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

ОбластьМакета.Параметры.ДолжностьИП = Выборка.Должность;

Если в вашем измененном макете параметр ДолжностьИП отсутствует, платформа сгенерирует исключение, и формирование печатной формы прервется крахом. То же самое касается и тех параметров, которые вы удалили намеренно. Код пытается их заполнить «в лоб», а ячейки с таким именем нет.

Как поступить правильно:

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

Можно ли вставить параметр «через точку»?

Часто возникает желание добавить в макет параметр, прописав к нему путь через точку, например Объект.Подразделение.ТекущийРуководитель, в надежде, что платформа сама поймет, откуда взять данные. Разберем этот момент подробнее.

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

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

Как быстро делать внешние печатные формы на основе типовых?

Если нам все-таки нужно вывести нестандартные данные, и мы решили использовать Внешнюю печатную форму (ВПФ), встает вопрос: как избежать необходимости заново писать или копировать тысячи строк типового кода для заполнения документа? Рассмотрим методику «постобработки».

Этот метод избавляет от копирования алгоритмов и защищает вашу разработку при будущих обновлениях 1С (например, если изменится законодательство и добавится новая колонка для прослеживаемых товаров). Разберем по шагам, как это реализовать:

  1. Создайте внешнюю обработку и опишите стандартную функцию СведенияОВнешнейОбработке() в модуле объекта (требование Библиотеки стандартных подсистем — БСП).
  2. В процедуре печати не копируйте весь типовой алгоритм формирования.
  3. Вызовите типовую экспортную процедуру печати напрямую из менеджера документа. Типовой алгоритм отработает штатно и вернет вам полностью готовый объект ТабличныйДокумент.
  4. С помощью программного кода внесите точечные изменения уже в сформированный табличный документ.

Посмотрим на пример того, как может выглядеть код в модуле вашей внешней печатной формы:


Функция Печать(МассивОбъектов, ОбъектыПечати, СтандартнаяОбработка) Экспорт
    
    // 1. Получаем готовый табличный документ типовыми средствами
    ПараметрыПечати = Новый Структура;
    КоллекцияПечатныхФорм = УправлениеПечатью.ПодготовитьКоллекциюПечатныхФорм("УПД");
    
    Документы.РеализацияТоваровУслуг.Печать(
        МассивОбъектов, 
        ПараметрыПечати, 
        КоллекцияПечатныхФорм, 
        ОбъектыПечати, 
        ОтладкаИстина
    );
    
    ТабДок = КоллекцияПечатныхФорм[0].ТабличныйДокумент;
    
    // 2. Выполняем постобработку: ищем нужную ячейку и меняем текст
    // Например, добавим ФИО руководителя подразделения, получив его отдельным запросом
    Руководитель = ПолучитьРуководителяПодразделения(МассивОбъектов[0]);
    
    // Ищем область или ячейку по тексту (или по имени области, если она именована)
    ЯчейкаПодписи = ТабДок.НайтиТекст("Руководитель организации");
    Если ЯчейкаПодписи <> Неопределено Тогда
        // Смещаемся в нужную ячейку для подстановки значения
        ЯчейкаЗначения = ТабДок.Область(ЯчейкаПодписи.Верх, ЯчейкаПодписи.Лево + 5);
        ЯчейкаЗначения.Текст = Руководитель;
    КонецЕсли;
    
    Возврат ТабДок;

КонецФункции

Преимущества такого подхода: 95% работы делает актуальный типовой код конфигурации. Если 1С выпустит обновление и изменит форму документа, ваша ВПФ продолжит работать корректно, так как вы лишь вносите финальные штрихи в уже сформированный актуальный ТабличныйДокумент.

Восстановление макета после сбоев обновления

Что делать, если пользователь все-таки удалил параметры, конфигурация обновилась, и печать перестала работать? Ситуацию всегда можно спасти без программиста штатными средствами платформы.

Перейдите в раздел Администрирование, затем откройте Печатные формы, отчеты и обработки и перейдите по ссылке Макеты печатных форм. В открывшемся списке найдите проблемный макет. Измененные пользователями макеты подсвечиваются специальной пиктограммой (зеленым карандашом).

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

← На главную