В процессе эксплуатации 1C:ERP, особенно версий редакций 2.4 и 2.5, пользователи и специалисты часто сталкиваются с запутанной ситуацией. Мы видим, что физически товар на складе есть, в форме подбора документов (например, в Реализации) колонка «В наличии» заполнена корректно, но стоит открыть отчет «Остатки и доступность товаров», как мы обнаруживаем пустые строки или некорректные данные. В таких случаях для быстрой диагностики стоит запустить анализ продаж, остатков, резервов и доступности, чтобы сразу увидеть общую картину расхождений — для этого есть отчет для выявления расхождений остатков.
Давайте разберемся в архитектуре хранения товарных остатков в ERP, выясним причины рассинхронизации данных и рассмотрим конкретные методы решения этой проблемы.
Чтобы понять корень проблемы, нам нужно заглянуть «под капот» механизма распределения запасов. В 1C:ERP существуют два ключевых объекта метаданных, отвечающих за эту подсистему:
ЗапасыИПотребности. Это первичный источник правды. Именно сюда пишутся движения при проведении документов (Приобретение, Реализация, Ордера). Здесь хранится полная история движений.РаспределениеЗапасов. Это служебная, «теневая» таблица. Она представляет собой актуальный срез (индекс) данных, рассчитанный на основании регистра накопления.Зачем нужна такая сложность? Дело в производительности. Отчет «Остатки и доступность товаров» и механизмы расчета доступности при проведении документов обращаются именно к регистру сведений РаспределениеЗапасов, так как чтение из плоской таблицы регистра сведений происходит значительно быстрее, чем анализ остатков и оборотов тяжелого регистра накопления.
Проблема, описанная автором темы, заключается в рассинхронизации этих двух таблиц. В регистре накопления остаток есть (поэтому мы можем видеть его, например, в ведомости по товарам или при прямом запросе к БД), а в регистре сведений записи отсутствуют или некорректны. Следовательно, отчет, построенный на РС, показывает пустоту.
Прежде чем приступать к «хирургическому вмешательству» в данные, давайте исключим самую простую причину. В версиях ERP (особенно при переходе на релизы 2.5.12 и выше) разработчики 1С существенно меняли структуру регистров и алгоритмы работы с запасами.
В связи с этим менялась и Схема Компоновки Данных (СКД) отчета. Если у пользователя был сохранен старый вариант отчета (пользовательские настройки), то при обновлении конфигурации ссылки на поля могли сбиться.
Решение:
В форме отчета «Остатки и доступность товаров» необходимо выполнить сброс настроек до стандартных:
Если после этого колонки заполнились данными — проблема была исключительно в визуальном представлении. Также можно попробовать сторонний отчет об остатках и доступности товаров со штрихкодом, чтобы исключить ошибки типовой СКД.
Обновление данных в регистре сведений РаспределениеЗапасов часто происходит не синхронно с проведением документа, а в фоновом режиме, чтобы не замедлять работу пользователей. За это отвечает механизм отложенных движений.
Если регламентное задание зависло, завершилось аварийно или отключено, данные в РС не обновятся, и отчет будет показывать устаревшую информацию.
Диагностика:
Нам следует проверить состояние фоновых заданий. В разделе «НСИ и администрирование» — «Обслуживание» — «Регламентные и фоновые задания» найдите задания, связанные с распределением запасов (например, Выполнение отложенных движений по расчетам с партнерами и запасам).
Если вы видите ошибки выполнения, необходимо их проанализировать в Журнале регистрации. Часто простой перезапуск задания или проведение документов вручную может исправить ситуацию.
Если настройки сброшены, фоновые задания работают, но данных в отчете всё еще нет, значит, мы имеем дело с нарушением целостности данных между регистром накопления и регистром сведений. Это могло произойти из-за программных ошибок (багов) конкретного релиза (как упоминалось в теме про версию 2.5.12), неудачного обновления или некорректного завершения транзакций.
В этом случае нам поможет специализированный инструмент, предусмотренный разработчиками конфигурации. Если штатные средства не справляются, технические специалисты могут использовать универсальную корректировку и чтение остатков регистра накопления для исправления записей в «Запасах и потребностях».
Использование обработки исправления:
В конфигурации существует служебная обработка, предназначенная именно для пересчета таблицы распределения запасов на основании первичных данных.
Имя объекта метаданных: Обработка.ИсправлениеОшибокВРегистреСведенийРаспределениеЗапасов.
Давайте рассмотрим алгоритм действий для исправления ситуации:
Номенклатуре, с которой есть проблема.Что делает эта обработка?
Она работает по следующему принципу:
РаспределениеЗапасов по выбранному отбору.ЗапасыИПотребности.После завершения работы обработки снова сформируйте отчет. Данные должны появиться.
Автор темы отметил интересный нюанс: «В форме подбора товаров остаток появился (колонка доступность и в наличии)». Почему так произошло, если отчет был пуст?
Это связано с тем, что разные инструменты системы могут обращаться к разным источникам данных. Для глубокой проверки соответствия данных в разных подсистемах рекомендуем провести сравнение товаров на складах организаций и себестоимости товаров, а если на складе используется ордерная схема — применить контрольный отчет по остаткам товаров в финансовом и оперативном учете, чтобы отловить расхождения:
ТоварыНаСкладах. Этот регистр показывает простой физический остаток («сколько штук лежит на полке») без учета сложных резервов и графиков. Там данные были корректны.РаспределениеЗапасов.Если вы столкнулись с тем, что отчет по доступности товаров врет:
ИсправлениеОшибокВРегистреСведенийРаспределениеЗапасов для синхронизации данных между регистрами. Также полезно настроить контроль остатков и резервов с детальным анализом складских позиций для предотвращения подобных ситуаций в будущем — для решения этой задачи есть инструмент автоматического контроля остатков и резервов.