Почему услуги не выводятся в печатную форму документа «Реализация товаров и услуг» и как это исправить?

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

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

В данной статье мы разберем причины такого поведения системы, проанализируем программный код и рассмотрим способы решения этой задачи, включая правильные архитектурные подходы 1С.

Выясним причину: почему услуги пропадают из накладной?

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

Однако на практике многим компаниям требуется именно совмещенный документ. Рассмотрим, как внести изменения в систему, чтобы добиться желаемого результата.

Способ 1. Корректировка кода в модуле менеджера документа

Рассмотрим самый прямой путь, который выбрал автор темы на форуме. Для этого нам потребуется внести изменения в программный код конфигурации. Обратите внимание: прямое редактирование типовой конфигурации затрудняет дальнейшие обновления, поэтому рекомендуется выполнять эти действия в расширении.

Проанализируем шаги по поиску и изменению кода:

  1. Перейдем в дерево метаданных и найдем документ РеализацияТоваровУслуг.
  2. Откроем Модуль менеджера этого документа.
  3. Найдем процедуру, отвечающую за сбор данных для печати накладной. Обычно это функция, которая подготавливает структуру данных на основе макета Накладная.
  4. Внутри этой функции мы обнаружим текст SQL-подобного запроса к табличной части Товары.

Разберем пример кода, который обычно ограничивает вывод данных:


// Фрагмент типичного запроса в модуле менеджера
Запрос.Текст = 
"ВЫБРАТЬ
|	РеализацияТоваровУслугТовары.Номенклатура,
|	РеализацияТоваровУслугТовары.Количество,
|	РеализацияТоваровУслугТовары.Сумма
|ИЗ
|	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ
|	РеализацияТоваровУслугТовары.Ссылка = &Ссылка
|	И РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)";

Чтобы услуги начали выводиться в печатную форму, нам необходимо изменить условие в блоке ГДЕ. Мы добавим проверку на тип номенклатуры Услуга. Измененный фрагмент будет выглядеть следующим образом:


// Исправленное условие для вывода товаров и услуг
|ГДЕ
|	РеализацияТоваровУслугТовары.Ссылка = &Ссылка
|	И (РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар)
|		ИЛИ РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга))";

После такого изменения система перестанет игнорировать строки с услугами при заполнении макета Накладная.

Способ 2. Использование расширения конфигурации (рекомендуемый)

Чтобы не снимать документ с поддержки, воспользуемся механизмом расширений. Мы можем перехватить выполнение процедуры печати с помощью аннотации &Вместо или скорректировать запрос динамически.

Рассмотрим алгоритм действий в расширении:

  1. Создадим новое расширение и добавим в него документ РеализацияТоваровУслуг.
  2. Перенесем в расширение метод из модуля менеджера, отвечающий за формирование данных печати (например, ПечатьНакладной).
  3. Применим метод &Вместо, скопировав в него оригинальный код, и заменим условие фильтрации номенклатуры, как показано в предыдущем примере.

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

Способ 3. Использование УПД вместо Расходной накладной

Прежде чем приступать к программированию, проанализируем стандартные возможности системы. В УТ 11 существует Универсальный передаточный документ (УПД).

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

Если вашему клиенту не принципиально название «Расходная накладная» в заголовке, использование УПД — самый простой и бесплатный способ решить проблему без привлечения программиста.

Особенности вывода услуг в табличную часть

При ручной доработке кода печати стоит обратить внимание на следующие технические детали:

Подведем итоги

Мы выяснили, что отсутствие услуг в накладной — это не ошибка программы, а особенность проектирования УТ 11. Если бизнес-процесс требует объединения товаров и услуг в одной форме, наиболее правильным техническим решением будет использование расширения конфигурации с корректировкой запроса в модуле менеджера. Однако всегда стоит сначала предложить пользователям использовать УПД, так как это штатный функционал, не требующий затрат на поддержку кода.

← На главную