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