Как вывести номенклатуру партнера в документе «Реализация товаров и услуг» в 1С:КА 2.5?

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

При работе с конфигурациями 1С:Комплексная автоматизация 2.5 и 1С:ERP 2.5 многие разработчики и аналитики сталкиваются с особенностью: в документе Заказ клиента поле НоменклатураПартнера заполнено и доступно, а в созданном на его основе документе Реализация товаров и услуг (РТУ) это же поле в консоли запросов или в табличной части оказывается пустым. Рассмотрим подробно, почему так происходит и как правильно получить эти данные для печатных форм или отчетов.

Выясним причину: почему данные не переносятся автоматически?

Проанализируем архитектурную логику систем 1С. Документ Заказ клиента является «коммерческим» соглашением. На этапе заказа важно зафиксировать, как именно товар называется у покупателя, чтобы избежать ошибок при согласовании позиций. Поэтому поле НоменклатураПартнера в табличной части Товары заказа заполняется активно.

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

Решение 1: Получение данных из документа-основания (Заказ клиента)

Самый надежный способ вывести номенклатуру партнера в реализации — это обратиться к Заказу клиента, который указан в качестве основания для каждой строки реализации. Разберем по шагам, как составить правильный запрос.

Важным нюансом является связь по полю КодСтроки. В современных конфигурациях ERP/КА связь только по ссылке на документ и ссылке на номенклатуру может быть недостаточной (например, если в одном заказе одна и та же номенклатура идет разными строками с разными характеристиками или ценами). Использование КодСтроки гарантирует точность сопоставления.

Посмотрим на пример запроса:


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

В этом запросе мы выполняем ЛЕВОЕ СОЕДИНЕНИЕ табличной части товаров реализации с аналогичной таблицей заказа. Это позволяет «подтянуть» заполненное поле НоменклатураПартнера из первоисточника.

Решение 2: Использование справочника «Номенклатура контрагентов»

Если реализация создается без заказа-основания или поле в заказе также не было заполнено, мы можем обратиться напрямую к справочнику НоменклатураКонтрагентов. Однако здесь нужно быть осторожными. Рассмотрим ситуацию: у одного и того же партнера (контрагента) для вашей одной позиции номенклатуры может быть создано несколько записей в справочнике номенклатуры партнера (например, разные артикулы для разных подразделений).

Проанализируем структуру запроса к справочнику:


ВЫБРАТЬ
    РеализацияТовары.Номенклатура,
    НоменклатураПартнеров.Наименование,
    НоменклатураПартнеров.Артикул
ИЗ
    Документ.RealizatsiyaTovarovUslug.Товары КАК РеализацияТовары
    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатураКонтрагентов КАК НоменклатураПартнеров
        ПО РеализацияТовары.Номенклатура = НоменклатураПартнеров.Номенклатура
        И РеализацияТовары.Ссылка.Партнер = НоменклатураПартнеров.Владелец
ГДЕ
    РеализацияТовары.Ссылка = &Ссылка
    И НЕ НоменклатураПартнеров.ПометкаУдаления

Важный момент: Чтобы избежать «размножения» строк в результате запроса (если в справочнике нашлось два соответствия), рекомендуется использовать дополнительные фильтры или выбирать только одну запись (например, через МАКСИМУМ или выбирая ту, которая указана в Соглашении с клиентом).

Механизм автоматического подбора в печатных формах

Если ваша цель — вывести данные в ТОРГ-12, УПД или Счет-фактуру, полезно знать, как это делает сама система 1С. В типовом коде печатных форм реализован каскадный поиск:

  1. Проверяется значение в колонке НоменклатураПартнера самой реализации.
  2. Если там пусто, система программно ищет в справочнике НоменклатураКонтрагентов по связке «Партнер + Номенклатура».
  3. Если найдено строго одно соответствие, оно выводится в печать. Если соответствий нет или их много — выводится ваше внутреннее наименование номенклатуры.

Поэтому, если вы разрабатываете Внешнюю печатную форму (ВПФ), лучшей практикой будет повторить этот каскад в своем запросе, используя функцию ЕСТЬNULL.

Настройка функциональных опций

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

Перейдите в раздел: НСИ и администрирование — Настройка НСИ и разделов — Номенклатура — Дополнительно — Номенклатура партнеров. Убедитесь, что флаг установлен. Это активирует использование справочника и соответствующих реквизитов в документах продажи.

Влияние на ЭДО

Стоит отметить, что для компаний, использующих Электронный документооборот (ЭДО), заполнение поля НоменклатураПартнера непосредственно в Реализации товаров и услуг становится критичным. При формировании электронного XML-файла УПД система берет данные именно из табличной части документа. Если в РТУ это поле пустое (даже если оно есть в Заказе), покупатель получит в ЭДО ваше наименование, что может вызвать проблемы с автоматическим сопоставлением на его стороне.

В таких случаях мы рекомендуем использовать небольшое расширение, которое при заполнении Реализации на основании Заказа будет принудительно копировать значение НоменклатураПартнера в табличную часть РТУ. Это снимет все вопросы как при выгрузке в ЭДО, так и при формировании простых печатных форм через консоль запросов.

Резюме

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

  1. Использовать соединение с табличной частью ЗаказКлиента.Товары по полям Ссылка, Номенклатура и КодСтроки.
  2. Либо обращаться к справочнику НоменклатураКонтрагентов, фильтруя по Владельцу (Партнеру) и исключая помеченные на удаление записи.
  3. Приоритетным методом получения данных в запросе является конструкция ЕСТЬNULL(ЗаказТовары.НоменклатураПартнера, СправочникНоменклатураПартнера.Наименование).
← На главную