Почему возникают расхождения в отчетах по остаткам после перехода на УТ 11.5 и как их исправить?

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

Переход с версии 11.4 на 11.5 в 1С:Управление торговлей часто сопровождается изменением логики работы механизмов управления запасами. Основная проблема, с которой сталкиваются пользователи — появление «фантомных» остатков, когда система показывает наличие товара для резервирования, хотя физически его на складе нет, или, наоборот, не позволяет отгрузить имеющийся товар. Давайте разберемся, как проанализировать эту ситуацию и исправить данные в регистрах.

Причины возникновения проблемы

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

Важно понимать, что полная инвентаризация в данном случае — это лишь временная «заплатка». Она корректирует текущий остаток, но не исправляет логику работы регистров, поэтому при проведении любого документа ошибка может вернуться.

Шаг 1: Диагностика расхождений с помощью запроса

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

Разберем пример запроса, который поможет нам найти разницу:


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

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

Шаг 2: Анализ результатов и формирование исправлений

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


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

Шаг 3: Программная корректировка регистра

Когда проблемные записи найдены, мы можем программно исправить данные в регистре РаспределениеЗапасовДвижения. Рассмотрим алгоритм создания набора записей для корректировки:


НаборДвижений = РегистрыНакопления.РаспределениеЗапасовДвижения.СоздатьНаборЗаписей();
НаборДвижений.Отбор.Регистратор.Установить(Параметры.ДокКорректировка);
НаборДвижений.Прочитать();

Для Каждого СтрокаРезультата Из Выборка Цикл
    НоваяЗапись = НаборДвижений.Добавить();
    НоваяЗапись.Период = Период;
    НоваяЗапись.Номенклатура = СтрокаРезультата.Номенклатура;
    НоваяЗапись.Склад = Склад;
    НоваяЗапись.Отгрузить = СтрокаРезультата.Разница;
КонецЦикла;

НаборДвижений.Записать();

Важные рекомендации по работе в УТ 11.5

  1. Проверка регламентных заданий: Убедитесь, что задание Актуализация распределения запасов завершается без ошибок. Если оно «падает», данные не будут пересчитываться корректно.
  2. Анализ ордерной схемы: Если склад ордерный, движения по регистру могут формироваться как документами-распоряжениями, так и складскими ордерами. Проверьте, нет ли «разрывов» в этой цепочке (например, ордер создан, а распоряжение не зафиксировало движение в регистре распределения).
  3. Контроль статусов заказов: Закрытые заказы часто остаются в регистрах с остатками «к отгрузке». Используйте отчет Анализ доступности товаров для детальной расшифровки по регистраторам.
  4. Использование типовых инструментов: Не забывайте про отчет Контроль остатков, который позволяет сравнивать данные регистра Распределение запасов с физическим наличием товаров.

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

← На главную