При работе в программе 1С:Управление нашей фирмой (УНФ) пользователи часто сталкиваются с необходимостью изменить визуальное представление документов, предназначенных для печати. Одной из самых популярных задач является добавление колонки Артикул в такие документы, как «Заказ поставщику», «Счет на оплату» или «Расходная накладная». Однако на практике простое редактирование макета через встроенный редактор табличных документов часто не приносит желаемого результата: колонка появляется, но данные в ней не отображаются. В этой статье мы подробно разберем, почему так происходит, рассмотрим штатные возможности системы и найдем способы решения этой технической задачи.
Для начала проанализируем ситуацию, с которой сталкивается большинство начинающих разработчиков и продвинутых пользователей. Вы открываете Макет печатной формы, добавляете новую колонку, называете ее Артикул и устанавливаете тип заполнения Параметр. Сохраняете изменения, открываете документ, нажимаете кнопку «Печать», но колонка остается пустой. Почему?
Дело в том, что в системе 1С процесс формирования печатной формы разделен на два независимых этапа:
Если в программном коде (в запросе) не предусмотрено получение поля Артикул, то системе просто нечего подставлять в ваш новый параметр макета. Параметр в макете — это лишь пустая «ячейка», которая ждет данных из программы. Если программа об этой ячейке «не знает», она проигнорирует ее заполнение.
Прежде чем приступать к программированию, рассмотрим, как разработчики фирмы 1С предусмотрели решение этой задачи стандартными средствами. В 1С:УНФ реализован механизм управления выводом идентификаторов номенклатуры.
Выясним, где находится эта настройка. Перейдем по следующему пути:
Настройки — Еще больше возможностей — Компания — раздел Печать — поле «Дополнительная колонка»
В этом поле доступны три варианта выбора:
Важно понимать: эта настройка является глобальной. Она влияет на большинство типовых печатных форм в программе. Если вы выберете «Артикул», система сама модифицирует запросы и подставит данные в стандартные параметры макетов.
Проанализируем ситуацию, когда стандартная настройка не подходит. В некоторых отраслях бизнеса требуется выводить в печатной форме одновременно и внутренний Код (для складского учета), и Артикул (для взаимодействия с поставщиком).
В 1С:УНФ логика печати построена таким образом, что для этих двух реквизитов часто используется один и тот же параметр в макете (например, ТоварКодАртикул или включение в ТоварНаименование). Программа проверяет константу настройки и подставляет в этот параметр либо одно, либо другое значение. Вывести оба значения одновременно стандартными средствами настройки «в один клик» невозможно. Именно в этот момент возникает необходимость внесения изменений в логику формирования данных.
Если вам необходимо кардинально изменить состав данных в печатной форме (например, добавить отдельную колонку под артикул, сохранив код), лучшим способом будет использование Расширений. Это позволит не снимать основную конфигурацию с поддержки и сохранит возможность легкого обновления программы.
Разберем по шагам, как реализовать добавление артикула через расширение:
ЗаказПоставщику). Обычно это процедура Печать или вспомогательные функции формирования таблиц данных.&Вместо или &После для перехвата логики.Номенклатура.Артикул в выборку.Посмотрим на пример того, как может выглядеть модификация запроса в коде (фрагмент):
// Пример модификации запроса в расширении
Запрос.Текст =
"ВЫБРАТЬ
| Заказ.Номенклатура КАК Номенклатура,
| Заказ.Номенклатура.Артикул КАК Артикул, // Добавляем выборку артикула
| Заказ.Количество КАК Количество,
| Заказ.Цена КАК Цена
|ИЗ
| Документ.ЗаказПоставщику.Запасы КАК Заказ
|ГДЕ
| Заказ.Ссылка В(&МассивСсылок)";
После того как запрос извлек данные из базы, их необходимо передать в область макета. Рассмотрим подробнее процедуру заполнения параметров:
// При обходе выборки результата запроса
Пока Выборка.Следующий() Цикл
ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
ОбластьСтрока.Параметры.Заполнить(Выборка);
// Теперь параметр "Артикул" в макете будет заполнен автоматически,
// так как имя поля в запросе совпадает с именем параметра в макете.
ТабДок.Вывести(ОбластьСтрока);
КонецЦикла;
Если вы не хотите работать с расширениями, можно создать Внешнюю печатную форму. Это отдельный файл (обработка с расширением .epf), который подключается к базе через раздел «Печатные формы, отчеты и обработки».
Преимущества ВПФ:
Недостатки:
Выясним еще одну интересную возможность. В 1С:УНФ можно создавать Дополнительные реквизиты для справочника «Номенклатура». Если по каким-то причинам стандартное поле «Артикул» вам не подходит, вы можете создать свой реквизит «Артикул для печати».
В некоторых типах печатных форм (которые строятся на базе механизмов СКД — Системы компоновки данных) такие реквизиты можно добавить в макет через пользовательские настройки состава полей. Однако для классических табличных макетов «Заказа поставщику» это все равно потребует программного вмешательства, аналогичного описанному выше в разделе про расширения.
Мы проанализировали проблему вывода артикула в 1С:УНФ 1.6 и пришли к следующим выводам:
Выбирайте наиболее подходящий способ в зависимости от ваших задач и уровня владения инструментами разработки 1С. Совместное использование правильных настроек и грамотной доработки позволит вам сделать печатные формы максимально информативными для вашего бизнеса.