Как найти и доработать макет «Расход с розничных складов в ценах АТТ» в 1С:Управление торговлей 10.3?

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

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

Поиск исходного макета в конфигураторе

Название команды в интерфейсе («Расход с розничных складов в ценах АТТ») отличается от реального имени макета в структуре метаданных. Печатные формы прихода и расхода используют единый универсальный макет, расположенный в ветке общих макетов.

Выясним точное имя макета: он называется ПриходРасходВЦенахАТТ и находится в ветке Общие > Общие макеты. Именно на его основе формируются печатные документы как для прихода, так и для расхода с розничных складов.

Почему изменения в макете не отображаются при печати

Рассмотрим распространенную ситуацию: разработчик создал копию макета, изменил заголовки колонок, скорректировал код формирования печатной формы, но при выводе на печать документ формируется в первоначальном виде. Проанализируем возможные причины такого поведения.

  1. Наличие параллельных областей («СКодами»). В макете ПриходРасходВЦенахАТТ реализовано несколько групп областей. Если в параметрах учета включен вывод кода или артикула (константа ДополнительнаяКолонкаПечатныхФормДокументов), код программы автоматически выбирает области с суффиксом "СКодами" (например, ШапкаТаблицыСКодами и СтрокаСКодами вместо стандартных ШапкаТаблицы и Строка). Если вы отредактировали только базовые области, а в настройках базы активен вывод артикулов, программа продолжит выводить стандартный вид колонок.
  2. Несоответствие имен макета при вызове. Проверим имя макета, передаваемое в функцию. В модуле объекта может проверяться условие по одной строке идентификатора, а получение объекта через метод ПолучитьОбщийМакет() выполняется по другому имени (например, СМастерамиПриходРасходВЦенахАТТ вместо СМастерамиРасходСРозничныхСкладовВЦенахАТТ). Имена должны совпадать с точностью до символа.
  3. Кэширование метаданных при динамическом обновлении. При обновлении конфигурации базы данных «на лету» (динамическое обновление) изменения в общих макетах и общих модулях могут не вступить в силу в текущем сеансе «1С:Предприятия». В таком случае требуется перезапустить сеанс пользователя или очистить локальный кэш.

Доработка кода и вывод реквизита «Мастер»

Посмотрим на алгоритм формирования печатной формы. В типовой реализации данные берутся из регистра накопления ТоварыВРознице:


Запрос = Новый Запрос("
|ВЫБРАТЬ
|    РегТоварыВРознице.Склад КАК Склад,
|    РегТоварыВРознице.Номенклатура.Представление КАК Номенклатура,
|    РегТоварыВРознице.Номенклатура." + ИмяКолонкиКодов + " КАК КодТовара,
|    РегТоварыВРознице.Номенклатура КАК НоменклатураСсылка,
|    РегТоварыВРознице.Номенклатура.ЕдиницаХраненияОстатков.Представление КАК ЕдиницаИзмерения,
|    РегТоварыВРознице.ХарактеристикаНоменклатуры.Представление КАК Характеристика,
|    РегТоварыВРознице.СерияНоменклатуры.Представление КАК Серия,
|    РегТоварыВРознице.Качество.Представление КАК Качество,
|    Сумма(" + ТекстЗапросаКоличество + ") КАК Количество,
|    Сумма(" + ТекстЗапросаСуммаПродажная + ") КАК СуммаПродажная
|ИЗ
|    РегистрНакопления.ТоварыВРознице КАК РегТоварыВРознице
|ГДЕ
|    РегТоварыВРознице.Регистратор = &Док
|    И РегТоварыВРознице.Активность
|СГРУППИРОВАТЬ ПО
|    РегТоварыВРознице.Склад,
|    РегТоварыВРознице.Номенклатура,
|    РегТоварыВРознице.Номенклатура.ЕдиницаХраненияОстатков,
|    РегТоварыВРознице.ХарактеристикаНоменклатуры,
|    РегТоварыВРознице.СерияНоменклатуры,
|    РегТоварыВРознице.Качество
|ИМЕЮЩИЕ
|    Сумма(" + ТекстЗапросаКоличество + ") <> 0
|    ИЛИ Сумма(" + ТекстЗапросаСуммаПродажная + ") <> 0
|УПОРЯДОЧИТЬ ПО Номенклатура
|ИТОГИ
|ПО
|    Склад
|");

Важно учитывать: в типовом регистре ТоварыВРознице нет реквизита «Мастер», добавленного в документ. Команда ОбластьСтроки.Параметры.Заполнить(Выборка) переносит только те поля, которые присутствуют в результатах выборки запроса. Следовательно, параметр «Мастер» в печатной форме останется пустым.

Чтобы вывести реквизит табличной части, свяжем движения регистра с табличной частью документа с помощью конструкции ЛЕВОЕ СОЕДИНЕНИЕ, либо построим выборку напрямую по табличной части документа (если движения по регистру полностью совпадают со строками документа). Рассмотрим пример дополнения запроса связью с табличной частью документа Товары:


// В секцию ВЫБРАТЬ добавляем получение мастера
// ТабЧасть.Мастер КАК Мастер

// В секцию ИЗ добавляем соединение с табличной частью
|    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ТребованиеНакладная.Материалы КАК ДокТабЧасть
|        ПО ДокТабЧасть.Ссылка = &Док
|        И РегТоварыВРознице.Номенклатура = ДокТабЧасть.Номенклатура

После включения поля в запрос метод ОбластьСтроки.Параметры.Заполнить(Выборка) сможет автоматически передать значение в макет, если имя параметра ячейки совпадает с именем поля в выборке.

Рекомендация по использованию внешней печатной формы

Вместо изменения типовых общих модулей (ЗаполнениеДокументов) и создания общих макетов более надежным решением является разработка внешней печатной формы (ВПФ). Это позволит сохранить конфигурацию на поддержке и упростит последующие обновления.

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

Такой подход исключает ошибки вызова процедур из типовых общих модулей и гарантирует корректное отображение колонок макета вне зависимости от настроек вывода артикулов.

← На главную