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