Как вывести цены и суммы в печатной форме перемещения товаров в 1С:Управление торговлей 10.3

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

В типовой конфигурации 1С:Управление торговлей 10.3 стандартная накладная на перемещение товаров не всегда содержит стоимостные показатели, либо пользователям требуется специализированная форма с выводом цен и сумм. При разработке и подключении сторонних внешних печатных форм специалисты часто сталкиваются с ошибками выполнения запросов вроде Поле не найдено "Документ.ТипЦен" или Поле не найдено "Документ.Сумма", а также с вопросами настройки отображения колонок кодов и артикулов. Разберем по шагам структуру данных документа перемещения, выясним причины ошибок и рассмотрим способы их устранения.

Анализ причин ошибок при обращении к реквизитам документа

Проанализируем структуру метаданных документа ПеремещениеТоваров в типовой конфигурации 1С:Управление торговлей 10.3. Главная причина падения запросов во внешних печатных формах заключается в различиях между типовой конфигурацией и базами, подвергшимися доработке.

Рассмотрим основные особенности полей документа:

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

Корректное получение цен и сумм для печатной формы

Чтобы внешняя печатная форма корректно работала на любых базах и выводила стоимостную оценку, необходимо правильно организовать выборку данных в модуле объекта обработки. Разберем два основных подхода.

Способ 1. Использование розничных цен документа

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


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ПеремещениеТовары.Номенклатура КАК Номенклатура,
|	ПеремещениеТовары.Номенклатура.Артикул КАК Артикул,
|	ПеремещениеТовары.Номенклатура.Код КАК Код,
|	ПеремещениеТовары.Количество КАК Количество,
|	ПеремещениеТовары.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
|	ПеремещениеТовары.ЦенаВРознице КАК Цена,
|	ПеремещениеТовары.СуммаВРознице КАК Сумма
|ИЗ
|	Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТовары
|ГДЕ
|	ПеремещениеТовары.Ссылка = &СсылкаНаОбъект";

Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
ТабличныеДанные = Запрос.Выполнить().Выгрузить();

Способ 2. Получение цен из регистра сведений «Цены номенклатуры»

Если требуется получить цены для оптовых складов (где реквизиты розничных сумм пусты), запрос должен обращаться к срезу последних цен из регистра ЦеныНоменклатуры на дату документа по заданному типу цен:


Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
|	ДокТовары.НомерСтроки КАК НомерСтроки,
|	ДокТовары.Номенклатура КАК Номенклатура,
|	ДокТовары.Количество КАК Количество,
|	ЕСТЬNULL(Цены.Цена, 0) КАК Цена,
|	ЕСТЬNULL(Цены.Цена, 0) * ДокТовары.Количество КАК Сумма
|ИЗ
|	Документ.ПеремещениеТоваров.Товары КАК ДокТовары
|	ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
|		&Период,
|		ТипЦен = &ТипЦен) КАК Цены
|	ПО ДокТовары.Номенклатура = Цены.Номенклатура
|		И (Цены.ХарактеристикаНоменклатуры = ДокТовары.ХарактеристикаНоменклатуры
|			ИЛИ Цены.ХарактеристикаНоменклатуры = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
|ГДЕ
|	ДокТовары.Ссылка = &СсылкаНаОбъект";

Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
Запрос.УстановитьПараметр("Период", СсылкаНаОбъект.Дата);
Запрос.УстановитьПараметр("ТипЦен", НужныйТипЦен);
ТабличныеДанные = Запрос.Выполнить().Выгрузить();

Подключение внешней печатной формы в справочник

Разберем порядок регистрации готовой внешней печатной формы формата .epf в пользовательском интерфейсе УТ 10.3:

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

Управление отображением колонок «Код» и «Артикул»

Рассмотрим, как убрать лишние колонки кодов и артикулов из печатной формы.

В конфигурации существует общесистемная настройка: Сервис → Настройка учета → Настройка параметров учета → вкладка Печать, единицы, цены → блок Дополнительные колонки печатных форм документов (вариант «Не выводить»). Однако данная настройка автоматически применяется только к типовым печатным формам, использующим общие модули печати.

Если во внешней печатной форме таблица макета формируется жестко и не обращается к типовым настройкам, скрыть колонки можно следующими способами:

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