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