В процессе разработки или настройки отчетов в 1С:Управление торговлей 11 часто возникает задача установить точную связь между строками возврата и соответствующими им строками реализации. Это необходимо для корректного анализа себестоимости, получения данных о подразделениях-исполнителях или проверки условий сделки. В данной статье мы подробно разберем, почему прямой связи "строка-в-строку" может не существовать и какими программными методами можно добиться максимальной достоверности данных.
Прежде всего, проанализируем ситуацию: в типовой логике 1С связь на уровне документов устанавливается через реквизит ДокументПродажи. В табличной части Товары документа «Возврат товаров от клиента» этот реквизит указывает на конкретную «Реализацию товаров и услуг». Однако на уровне строк система не всегда хранит жесткую ссылку. Рассмотрим основные причины, по которым связь может быть неочевидной:
Разберем по шагам, как выстроить алгоритм получения данных о подразделении из первоначального заказа или реализации.
В современных конфигурациях УТ 11 для связи основной табличной части Товары с дополнительными разделами (например, сериями или скидками) используется служебное поле КодСтроки. Рассмотрим, как оно может помочь нам в связке документов. Если возврат создавался на основании реализации программно или через типовую команду «Создать на основании», система часто копирует эти коды.
Проанализируем пример кода для поиска подразделения через цепочку документов, учитывая, что нам нужно «дотянуться» до заказа:
// Пример получения подразделения из Заказа или Реализации
Для Каждого СтрокаВозврата Из Объект.Товары Цикл
ДокументПродажи = СтрокаВозврата.ДокументПродажи;
Если ЗначениеЗаполнено(ДокументПродажи) Тогда
// Проверяем наличие Заказа клиента в Реализации
Заказ = ДокументПродажи.ЗаказКлиента;
Если ЗначениеЗаполнено(Заказ) Тогда
Подразделение = Заказ.Подразделение;
Иначе
// Если заказа нет, берем подразделение из самой реализации
Подразделение = ДокументПродажи.Подразделение;
КонецЕсли;
Сообщить("Для строки " + СтрокаВозврата.Номенклатура + " определено подразделение: " + Подразделение);
КонецЕсли;
КонецЦикла;
Если в вашей системе включено ведение заказов как обязательный этап, в табличных частях и реализации, и возврата присутствует реквизит ИдентификаторСтрокиЗаказа. Это наиболее точный способ связи. Выясним причину его надежности: данный уникальный идентификатор (GUID) присваивается строке в момент создания Заказа клиента и транслируется во все подчиненные документы.
Если мы имеем дело с таким механизмом, то задача сводится к простому поиску соответствия:
ИдентификаторСтрокиЗаказа из строки возврата.Реализации с таким же идентификатором.Заказе.Рассмотрим ситуацию, когда идентификаторов нет, а номенклатура в реализации дублируется в нескольких строках. Проанализируем ситуацию: в реализации есть две строки «Товар А» по 100 руб. и 120 руб. В возврате — одна строка «Товар А». Как понять, какой именно товар вернули?
В этом случае рекомендуется использовать алгоритм распределения количества. Посмотрим на логику процесса:
Реализации по конкретной Номенклатуре в таблицу.Возврата по этой же номенклатуре.Пример реализации логики распределения на языке 1С:
// Логика распределения количества возврата по строкам реализации
ТаблицаРеализации = РеализацияСсылка.Товары.Выгрузить(Новый Структура("Номенклатура", ТекущаяНоменклатура));
ОстатокВозврата = СтрокаВозврата.Количество;
Для Каждого СтрПродажи Из ТаблицаРеализации Цикл
Если ОстатокВозврата <= 0 Тогда
Прервать;
КонецЕсли;
ВзятоИзСтроки = Мин(ОстатокВозврата, СтрПродажи.Количество);
ОстатокВозврата = ОстатокВозврата - ВзятоИзСтроки;
// Здесь мы нашли связь: ВзятоИзСтроки единиц товара относятся к строке СтрПродажи
// Можем получить данные из СтрПродажи (цену, скидки, подразделение)
КонецЦикла;
Выясним, как система 1С:УТ 11 сама связывает эти данные в учете. Основным «клеем» служит регистр накопления Выручка и себестоимость продаж. При проведении возврата система делает записи в этот регистр, указывая в качестве аналитики Документ продажи.
Если в настройках программы включен учет по сериям, то точность связи возрастает до 100%. Серия товара — это уникальный разрез. Если в реализации указана «Серия №123» и в возврате «Серия №123», программная связка строк происходит однозначно по этому реквизиту, даже если в документе десятки одинаковых позиций.
Важный момент: если ваша цель — получение Подразделения, обязательно проверьте настройки учета. В УТ 11 подразделение может указываться как в шапке документа, так и в табличной части (если включена соответствующая опция в НСИ). В последнем случае связь через КодСтроки или ИдентификаторСтрокиЗаказа становится критически важной.
Для реализации максимально достоверной связи между строками возврата и реализации в 1С:УТ 11 рекомендуем придерживаться следующей иерархии методов:
ИдентификаторСтрокиЗаказа, если цепочка документов начинается с заказа.КлючСвязи или КодСтроки для сопоставления внутри одного «Документа продажи».Серий, так как они являются наиболее точным разрезом учета для сопоставления факта продажи и возврата.Проанализировав эти методы, мы можем сделать вывод, что универсального "автоматического" поля не существует для всех случаев жизни, но комбинация программных методов позволяет решить задачу получения подразделения или любой другой аналитики с высокой точностью.