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