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