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