Как добавить отбор по документу-основанию или регистратору в отчет по доступности товаров?

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

При доработке складских отчетов разработчики часто сталкиваются с требованием пользователей: ограничить отчет по остаткам конкретным документом (например, заказом покупателя или приходной накладной). Однако при попытке настроить отбор по полю Регистратор или ДокументОснование в типовом отчете АнализДоступностиТоваровНаСкладах система выдает ошибку либо требуемые поля попросту отсутствуют в списке доступных настроек. Разберем, почему возникает эта проблема на уровне платформы 1С и какие существуют пути ее решения.

Архитектурные ограничения виртуальных таблиц остатков

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

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

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

Кроме того, в конфигурациях поколения УПП 1.1 и 1.2 отчет АнализДоступностиТоваровНаСкладах исторически реализован не на схеме компоновки данных (СКД), а на универсальном построителе отчетов или коде табличного документа, что накладывает дополнительные ограничения на добавление произвольных пользовательских полей.

Вариант 1. Отбор доступности под конкретный заказ покупателя

В большинстве случаев под «документом-основанием» пользователи подразумевают документ ЗаказПокупателя, желая видеть доступность товаров только по позициям, заказанным конкретным клиентом. Доступность в системе рассчитывается как свободный остаток за вычетом резервов. Чтобы реализовать такой отбор в собственном отчете на СКД, пойдем правильным путем: наложим фильтр не на складские таблицы, а на перечень номенклатуры заказа.

Разберем по шагам построение запроса для набора данных СКД:

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

Посмотрим на пример текста запроса для схемы компоновки данных:


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

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

Вариант 2. Контроль партий и документов поступления

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

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

Альтернативные типовые отчеты конфигурации

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

  1. Отчет «Размещение заказов» — штатный инструмент, позволяющий детально проанализировать обеспечение конкретного заказа покупателя свободными складскими остатками и ожидаемыми поставками по заказам поставщикам.
  2. Отчет «Анализ заказов покупателей» — предназначен для оценки выполнения обязательств по конкретному заказу, отображает зарезервированное количество и текущие остатки к отгрузке.
  3. Отчет «Ведомость по партиям товаров на складах» — подходит для случаев, когда требуется детальный анализ партионных остатков с отбором по документам оприходования.
← На главную