Как получить остатки и себестоимость товаров в разрезе организаций в УТ 10.3?

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

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

Архитектура партионного учета в УТ 10.3

В типовой конфигурации «Управление торговлей 10.3» реализовано строгое разделение контуров учета:

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

Такое разделение позволяет списывать партии товаров по предприятию в целом (управленческий учет), даже если товар был куплен на одно юридическое лицо, а продан от имени другого. По этой причине прямого ответа на вопрос «Какова себестоимость остатка товара конкретной организации?» в типовом регистре партий нет.

Подводные камни получения организации через ДокументОприходования

Часто возникает идея получить организацию через измерение ДокументОприходования, обратившись к нему через точку (например, ДокументОприходования.Организация). Проанализируем, почему этот способ является ошибочным как с методологической, так и с технической точки зрения:

  1. Методологическая некорректность остатка: Товар мог быть оприходован на Организацию А, а впоследствии списан документом отгрузки от Организации Б. Измерение ДокументОприходования покажет только того, кто оформил первичный приход партии, но не отразит текущую принадлежность товара юридическому лицу. В результате данные отчета будут логически недостоверными.
  2. Снижение производительности СУБД: Измерение ДокументОприходования имеет составной тип данных. Прямое обращение через точку к реквизиту составного типа заставляет СУБД выполнять множественные левые соединения (LEFT JOIN) со всеми возможными таблицами документов оприходования. Это приводит к сильной деградации производительности при формировании отчета.

Если по каким-то причинам требуется вытащить реквизиты из составного типа, необходимо явно приводить типы с помощью конструкции ВЫРАЗИТЬ(... КАК ...), однако проблему смысловой корректности данных это не решает.

Вариант 1. Расчетная оценка себестоимости без изменения конфигурации

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

Рассмотрим логику построения такого запроса:

  1. Получаем точное количественное сальдо по юридическим лицам из виртуальной таблицы РегистрНакопления.ТоварыОрганизаций.Остатки.
  2. Получаем общее количество и общую стоимость из виртуальной таблицы РегистрНакопления.ПартииТоваровНаСкладах.Остатки.
  3. Рассчитываем среднюю себестоимость единицы товара на складе.
  4. Умножаем количество товара конкретной организации на среднюю себестоимость.

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


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

Этот подход не нарушает логику типовой конфигурации и дает возможность получить расчетную оценку остатков по организациям.

Вариант 2. Организационное разделение по складам

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

  1. Добавляем в справочник Склады дополнительный реквизит или свойство «Организация».
  2. В запросе к регистру ПартииТоваровНаСкладах группируем и фильтруем данные по организации склада: Склад.Организация.

Вариант 3. Доработка конфигурации (партионный учет по организациям)

Если специфика учета предприятия требует ведения строгого партионного учета (ФИФО/ЛИФО) с точным списанием себестоимости в разрезе каждого отдельного юридического лица, потребуется доработка конфигурации.

Разберем этапы доработки:

  1. В регистр накопления ПартииТоваровНаСкладах добавляется новое измерение Организация.
  2. Дорабатываются модули проведения документов товародвижения и общие модули партионного учета, формирующие движения по данному регистру.
  3. Корректируется алгоритм подбора партий при списании: в фильтры списания партий жестко передается организация документа.
  4. Выполняется полное перепроведение документов и переформирование движений партионного учета.

Важно: При внедрении такого изменения реализация товаров от одной организации при фактическом наличии остатка на другой организации будет приводить к ошибкам нехватки партий. Это потребует обязательного предварительного оформления документов межфирменной перепродажи (интеркампани).

← На главную