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