Переход с версии 11.4 на 11.5 в 1С:Управление торговлей часто сопровождается изменением логики работы механизмов управления запасами. Основная проблема, с которой сталкиваются пользователи — появление «фантомных» остатков, когда система показывает наличие товара для резервирования, хотя физически его на складе нет, или, наоборот, не позволяет отгрузить имеющийся товар. Давайте разберемся, как проанализировать эту ситуацию и исправить данные в регистрах.
В версии 11.5 архитектура системы распределения запасов претерпела значительные изменения. Основным инструментом стал механизм Распределение запасов, который использует связку регистров накопления для определения доступности. При миграции базы данных старые цепочки движений могут быть интерпретированы некорректно, особенно если в системе присутствовали незакрытые заказы или документы с нарушенной последовательностью проведения.
Важно понимать, что полная инвентаризация в данном случае — это лишь временная «заплатка». Она корректирует текущий остаток, но не исправляет логику работы регистров, поэтому при проведении любого документа ошибка может вернуться.
Для начала необходимо выявить конкретные позиции и документы, в которых произошел сбой. Проанализируем расхождения между регистром накопления РаспределениеЗапасовДвижения и ТоварыНаСкладах. Для этого воспользуемся запросом, который сопоставит данные за определенный период.
Разберем пример запроса, который поможет нам найти разницу:
ВЫБРАТЬ
РаспределениеЗапасовДвижения.Регистратор КАК Регистратор,
РаспределениеЗапасовДвижения.Номенклатура КАК Номенклатура,
СУММА(РаспределениеЗапасовДвижения.Отгрузить) КАК Отгрузить
ПОМЕСТИТЬ ВТРаспределениеЗапасов
ИЗ
РегистрНакопления.РаспределениеЗапасовДвижения КАК РаспределениеЗапасовДвижения
ГДЕ
РаспределениеЗапасовДвижения.Период МЕЖДУ &НачДата И &КонДата
И РаспределениеЗапасовДвижения.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
СГРУППИРОВАТЬ ПО
РаспределениеЗапасовДвижения.Регистратор,
РаспределениеЗапасовДвижения.Номенклатура
;
ВЫБРАТЬ
ТоварыНаСкладах.Регистратор КАК Регистратор,
ТоварыНаСкладах.Номенклатура КАК Номенклатура,
СУММА(ВЫБОР
КОГДА ТоварыНаСкладах.ВидДвижения = &ВидДвижения
ТОГДА ТоварыНаСкладах.ВНаличии
ИНАЧЕ ТоварыНаСкладах.ВНаличии * -1
КОНЕЦ) КАК ВНаличии
ПОМЕСТИТЬ ВТТоварыНаСкладах
ИЗ
РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
ГДЕ
ТоварыНаСкладах.Период МЕЖДУ &НачДата И &КонДата
И ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
СГРУППИРОВАТЬ ПО
ТоварыНаСкладах.Регистратор,
ТоварыНаСкладах.Номенклатура
После того как мы получили данные в ВТТоварыНаСкладах и ВТРаспределениеЗапасов, нам нужно найти разницу и сформировать корректирующие записи. Создадим итоговую выборку, которая покажет, где именно система «ошиблась».
ВЫБРАТЬ
ВТТоварыНаСкладах.Регистратор КАК Регистратор,
ВТТоварыНаСкладах.Номенклатура КАК Номенклатура,
ВТТоварыНаСкладах.ВНаличии КАК ВНаличии,
ЕСТЬNULL(ВТРаспределениеЗапасов.Отгрузить, 0) КАК Отгрузить,
ВТТоварыНаСкладах.ВНаличии - ЕСТЬNULL(ВТРаспределениеЗапасов.Отгрузить, 0) КАК Разница
ИЗ
ВТТоварыНаСкладах КАК ВТТоварыНаСкладах
ЛЕВОЕ СОЕДИНЕНИЕ ВТРаспределениеЗапасов КАК ВТРаспределениеЗапасов
ПО ВТТоварыНаСкладах.Регистратор = ВТРаспределениеЗапасов.Регистратор
И ВТТоварыНаСкладах.Номенклатура = ВТРаспределениеЗапасов.Номенклатура
ГДЕ
ВТТоварыНаСкладах.ВНаличии - ЕСТЬNULL(ВТРаспределениеЗапасов.Отгрузить, 0) <> 0
Когда проблемные записи найдены, мы можем программно исправить данные в регистре РаспределениеЗапасовДвижения. Рассмотрим алгоритм создания набора записей для корректировки:
НаборДвижений = РегистрыНакопления.РаспределениеЗапасовДвижения.СоздатьНаборЗаписей();
НаборДвижений.Отбор.Регистратор.Установить(Параметры.ДокКорректировка);
НаборДвижений.Прочитать();
Для Каждого СтрокаРезультата Из Выборка Цикл
НоваяЗапись = НаборДвижений.Добавить();
НоваяЗапись.Период = Период;
НоваяЗапись.Номенклатура = СтрокаРезультата.Номенклатура;
НоваяЗапись.Склад = Склад;
НоваяЗапись.Отгрузить = СтрокаРезультата.Разница;
КонецЦикла;
НаборДвижений.Записать();
Актуализация распределения запасов завершается без ошибок. Если оно «падает», данные не будут пересчитываться корректно.Анализ доступности товаров для детальной расшифровки по регистраторам.Контроль остатков, который позволяет сравнивать данные регистра Распределение запасов с физическим наличием товаров.Исправление данных — это итерационный процесс. Рекомендуем начать с анализа одной проблемной позиции, проследив её историю движений по обоим регистрам, и только после подтверждения гипотезы о природе сбоя приступать к массовой корректировке.