После перехода с ред. 2.4 на ред. 2.5 конфигураций УТ, КА, ЕРП столкнулся с тем, что при подборе товара, например, менеджер видел свободный остаток на складе 10 штук, а в реальности товара на складе вообще не было и по отчёту "Ведомость по товарам на складах" товара тоже не было. Проблема была в том, что после перехода с ред. 2.4 на ред. 2.5 новый регистр сведений "Распределение запасов" заполнился некорректно. В конфигурации есть инструмент "Исправление ошибок в регистре сведений "Распределение запасов", но всё равно по некоторым номенклатурным позициям "Свободный остаток" был некорректным и в процессе работы (через день например) появлялись откуда-то расхождения по другим номенклатурным карточкам; возможно, пользователи перепроводили какие-то документы прошлых периодов. Разбираться глубинно в причинах появления расхождений времени не было и была написана данная обработка, которая была настроена на запуск каждые 5 минут и после этого пользователи перестали ругаться на расхождения в том, что видят при подборе, с тем, что есть в отчёте "Ведомость по товарам на складах" или "Движения товаров на складах".
Результатом выполнения станет соответствие "Свободного остатка" = "Остаток по РН "Товары на складах" - "Зарезервировано" - "Отгружается".
Обработка по результатам работы делает запись в журнале регистраций как на скриншоте.
Можно запустить обработку через "Файл" - "Открыть" или подключить как внешнюю обработку "НСИ и администрирование" - "Печатные формы, отчеты и обработки" - "Дополнительные отчеты и обработки" - "Добавить". Там же можно и настроить обработку на периодический запуск, например, каждые 5 минут.
Проверял на конфигурациях КА, УТ, ЕРП 2.5.8.221.
На эту же тему на ИС есть ветка форума https://forum.infostart.ru/forum67/topic275228/ и обработка //infostart.ru/public/1600352. И я решил внести и свой вклад в эту тему.
ДОПОЛНЕНИЕ К ОПИСАНИЮ 14.11.2023
Обработка позволяет быстро скорректировать регистр "Распределение запасов" так, что бы у продавцов при подборе товара отображались правильные остатки на складах, но она не устраняет одну проблему, из-за которой могут быть такие расхождения. Одна из причин расхождений в регистрах - это отсутствие записей в регистре сведений "АналитикаУчетаНоменклатуры" по некоторым ключам аналитики (Справоник.КлючиАналитикиУчетаНоменклатуры). Для каждого элемента справочника "КлючиАналитикиУчетаНоменклатуры" должна быть соответствующая запись в регистре сведений "АналитикаУчетаНоменклатуры". Что нужно сделать:
1) Зайти в справочник "КлючиАналитикиУчетаНоменклатуры" и выполнить "Ещё" - "Заменить дубли ключей аналитики". Дале выполнить удаление помеченных объектов - часть или все помеченные на удаление элементы справочника удалятся.
2) Выполнить запрос в консоле запросов и получить список тех ключей аналитики номенклатуры по которым либо нет записи в регистре сведений, либо эта запись не соответствует элементу справочника.
Текст запроса ниже:
ВЫБРАТЬ
КлючиАналитикиУчетаНоменклатуры.Ссылка КАК Аналитика,
КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
АналитикаУчетаНоменклатуры.КлючАналитики ЕСТЬ NULL КАК ОтсутствиеВРегистре,
АналитикаУчетаНоменклатуры.Номенклатура <> КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК РазличиеНоменклатура,
АналитикаУчетаНоменклатуры.Серия <> КлючиАналитикиУчетаНоменклатуры.Серия КАК РазличиеСерия,
АналитикаУчетаНоменклатуры.МестоХранения <> КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК РазличиеМестоХранения,
АналитикаУчетаНоменклатуры.СтатьяКалькуляции <> КлючиАналитикиУчетаНоменклатуры.СтатьяКалькуляции КАК РазличиеСтатьяКалькуляции
ИЗ
Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
ПО (АналитикаУчетаНоменклатуры.КлючАналитики = КлючиАналитикиУчетаНоменклатуры.Ссылка)
ГДЕ
(АналитикаУчетаНоменклатуры.КлючАналитики ЕСТЬ NULL
ИЛИ АналитикаУчетаНоменклатуры.Номенклатура <> КлючиАналитикиУчетаНоменклатуры.Номенклатура
ИЛИ АналитикаУчетаНоменклатуры.Серия <> КлючиАналитикиУчетаНоменклатуры.Серия
ИЛИ АналитикаУчетаНоменклатуры.МестоХранения <> КлючиАналитикиУчетаНоменклатуры.МестоХранения
ИЛИ АналитикаУчетаНоменклатуры.СтатьяКалькуляции <> КлючиАналитикиУчетаНоменклатуры.СтатьяКалькуляции)
3) Далее надо проанализировать полученную выборку и по тем строкам, где указано "ОтсутствиеВРегистре" либо создать новую запись в регистре, руками например, либо, если на ключ аналитики (элемент справочника) нет никаких ссылок - пометить его на удаление и удалить. При этом, рекомендую проверить, что не осталось ли ещё дублей этого ключа аналитики в справочнике. По моим наблюдениям: в регистре не создаётся запись если в справочнике КлючиАналитикиУчетаНоменклатуры есть дубликат ключа аналитики (или несколько дубликатов).
Рекомендую ещё почитать статью //infostart.ru/1c/articles/1970724 про ключи аналитики.
Можно выполнить запрос, который покажет остатки на складах номенклатуры по некорректным записям:
ВЫБРАТЬ
КлючиАналитикиУчетаНоменклатуры.Ссылка КАК Аналитика,
КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК Номенклатура,
АналитикаУчетаНоменклатуры.КлючАналитики ЕСТЬ NULL КАК ОтсутствиеВРегистре,
АналитикаУчетаНоменклатуры.Номенклатура <> КлючиАналитикиУчетаНоменклатуры.Номенклатура КАК РазличиеНоменклатура,
АналитикаУчетаНоменклатуры.Серия <> КлючиАналитикиУчетаНоменклатуры.Серия КАК РазличиеСерия,
АналитикаУчетаНоменклатуры.МестоХранения <> КлючиАналитикиУчетаНоменклатуры.МестоХранения КАК РазличиеМестоХранения,
АналитикаУчетаНоменклатуры.СтатьяКалькуляции <> КлючиАналитикиУчетаНоменклатуры.СтатьяКалькуляции КАК РазличиеСтатьяКалькуляции
ПОМЕСТИТЬ втНоменклатура
ИЗ
Справочник.КлючиАналитикиУчетаНоменклатуры КАК КлючиАналитикиУчетаНоменклатуры
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаНоменклатуры КАК АналитикаУчетаНоменклатуры
ПО (АналитикаУчетаНоменклатуры.КлючАналитики = КлючиАналитикиУчетаНоменклатуры.Ссылка)
ГДЕ
(АналитикаУчетаНоменклатуры.КлючАналитики ЕСТЬ NULL
ИЛИ АналитикаУчетаНоменклатуры.Номенклатура <> КлючиАналитикиУчетаНоменклатуры.Номенклатура
ИЛИ АналитикаУчетаНоменклатуры.Серия <> КлючиАналитикиУчетаНоменклатуры.Серия
ИЛИ АналитикаУчетаНоменклатуры.МестоХранения <> КлючиАналитикиУчетаНоменклатуры.МестоХранения
ИЛИ АналитикаУчетаНоменклатуры.СтатьяКалькуляции <> КлючиАналитикиУчетаНоменклатуры.СтатьяКалькуляции)
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
втНоменклатура.Номенклатура КАК Номенклатура,
ТоварыНаСкладахОстатки.Склад КАК Склад,
ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток
ИЗ
втНоменклатура КАК втНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(
&наДату,
Номенклатура В
(ВЫБРАТЬ
втНоменклатура.Номенклатура
ИЗ
втНоменклатура КАК втНоменклатура)) КАК ТоварыНаСкладахОстатки
ПО (втНоменклатура.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура)
УПОРЯДОЧИТЬ ПО
Номенклатура
4) После всех манипуляций выполнить штатную обработку "Функции для технического специалиста" - "Исправление ошибок в регистре сведений "Распределение запасов".