Как получить свободные остатки в разрезе организаций в 1С:УТ 11, ERP и КА 2

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

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

Понимаем архитектуру: Складской учет vs Финансовый учет

Для начала проанализируем ситуацию с точки зрения архитектуры системы. В 1С:УТ 11 и ERP реализовано четкое разделение между физическим наличием товара на складе и правом собственности на этот товар. Это позволяет нескольким организациям хранить свои товары на одном общем складе.

  1. Регистр «Свободные остатки» (и «Товары на складах»): Эти регистры отвечают на вопрос «Где и сколько товара лежит?». Здесь есть склад, но нет организации.
  2. Регистр «Товары организаций»: Этот регистр отвечает на вопрос «Кому принадлежит товар?». Здесь есть организация, но склад представлен в виде ключа аналитики.

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

Шаг 1: Получение данных о принадлежности товара

Чтобы узнать, сколько товара числится за организацией, мы должны обратиться к остаткам регистра накопления ТоварыОрганизаций. Однако здесь есть важный технический нюанс: в этом регистре склад не является прямым измерением. Он «спрятан» внутри измерения АналитикаУчетаНоменклатуры.

Разберем, как получить эти данные с помощью запроса:


ВЫБРАТЬ
    ТоварыОрганизацийОстатки.Организация КАК Организация,
    ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
    ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Характеристика КАК Характеристика,
    ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.СкладскаяТерритория КАК Склад,
    ТоварыОрганизацийОстатки.КоличествоОстаток КАК ФактическийОстаток
ПОМЕСТИТЬ ВТ_ОстаткиОрганизаций
ИЗ
    РегистрНакопления.ТоварыОрганизаций.Остатки(&Период, ) КАК ТоварыОрганизацийОстатки
;

Обратите внимание, что использование обращения через точку (АналитикаУчетаНоменклатуры.Номенклатура) допустимо, но в высоконагруженных системах лучше предварительно соединяться со справочником КлючиАналитикиУчетаНоменклатуры.

Шаг 2: Получение информации о резервах и доступности

Теперь выясним, сколько товара зарезервировано. Данные о резервах хранятся в регистре СвободныеОстатки (в старых версиях) или в регистре РаспределениеЗапасов (в новых версиях УТ 11.4/11.5 и ERP 2.4/2.5). Основная сложность в том, что резервы в 1С не привязаны к организации. Если на складе лежат товары двух ваших организаций, и пришел заказ покупателя, система резервирует товар на складе в целом, не уточняя, чей именно это товар.

Проанализируем типовой запрос из отчета «Остатки и доступность», который использует объединение нескольких источников:


ВЫБРАТЬ
    СвободныеОстатки.Номенклатура КАК Номенклатура,
    СвободныеОстатки.Характеристика КАК Характеристика,
    СвободныеОстатки.Склад КАК Склад,
    СвободныеОстатки.ВНаличииОстаток КАК ВНаличии,
    СвободныеОстатки.ВРезервеСоСкладаОстаток + СвободныеОстатки.ВРезервеПодЗаказОстаток КАК ВРезерве
ПОМЕСТИТЬ ВТ_РезервыСкладов
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки(&Период, ) КАК СвободныеОстатки
;

Шаг 3: Соединение данных и расчет свободного остатка

Теперь нам необходимо соединить «финансовые» остатки из ТоварыОрганизаций и «складские» резервы. Поскольку резерв общий для всех организаций на складе, наиболее корректным методом (и принятым в типовых механизмах) считается вычитание резерва из общего остатка организации.

Важный нюанс: Если у вас включена схема Интеркампани (продажа товаров других организаций), то «свободный остаток организации» становится понятием расчетным. Организация «А» может зарезервировать товар, принадлежащий Организации «Б».

Рассмотрим пример итогового запроса:


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

Продвинутый метод: Использование регистра «Распределение запасов»

В актуальных редакциях ERP и УТ 11 рекомендуется использовать регистр РаспределениеЗапасов. Он содержит более детальную информацию о состояниях запасов (в пути, в наличии, зарезервировано).

Чтобы получить максимально точный результат, проанализируем следующие слагаемые:

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

Резюме

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

Алгоритм решения задачи:

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

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

← На главную