Рассмотрим частую и критичную для работы ситуацию: после значительного обновления конфигурации 1С:Управление торговлей (например, с версии 10.5 на 11.5) система начинает показывать хаотичные и неверные остатки товаров. При этом прямые запросы к регистру накопления ТоварыНаСкладах показывают корректные данные, а отчеты, построенные на регистре сведений РаспределениеЗапасов (например, "Остатки и доступность товаров"), выдают полную чепуху — для диагностики причин неверных данных есть отчет сравнения остатков и доступности товаров. Как следствие, система не дает проводить документы реализации, ссылаясь на нехватку товара, и работа компании останавливается. Чтобы быстро возобновить продажи, можно использовать проведение документов без контроля остатков, пока технические специалисты занимаются диагностикой. Разберем по шагам, как исправить эту проблему.
Прежде чем приступать к глубокому анализу, убедимся, что само обновление прошло корректно и нет очевидных блокировок, мешающих системе работать.
НСИ и администрирование – Интернет-поддержка и сервисы – Результаты обновления и версии. Убедитесь, что все процедуры выполнены успешно и отмечены зелеными галочками. Если есть ошибки, их нужно исправить в первую очередь.Администрирование – Обслуживание – Регламентные и фоновые задания. Убедитесь, что задания, связанные с расчетом и распределением запасов, выполняются без ошибок.НСИ и администрирование – Настройки пользователей и прав – Даты запрета изменения данных).Проблема почти наверняка кроется в рассинхронизации данных между регистрами. Регистр сведений РаспределениеЗапасов — это не первичный источник данных, а своего рода кэш, оптимизированный срез данных для быстрого получения информации о доступности товаров. Его данные строятся на основе других регистров, в первую очередь — регистра накопления Запасы и потребности.
Именно в сравнении этих регистров и кроется ключ к разгадке. Проанализируем их взаимосвязь. В упрощенном виде, формула для проверки должна выглядеть так:
Конечный остаток по РН Запасы и потребности ≈ Остаток РН Товары на складах - Остаток РН Товары к отгрузке
Чтобы найти расхождение, нужно сравнить данные по одной проблемной номенклатуре в этих трех регистрах. Для детального анализа незаменим отчет для сравнения товаров на складах и себестоимости, который позволяет быстро найти ошибки в учете. Как показывает практика, часто возникает ситуация, когда в регистре Запасы и потребности корректно отражаются "потребности", но не отражаются "запасы" (фактическое наличие товара). В итоге система видит только списания и резервы.
Для анализа можно использовать консоль запросов или запустить автоматическое выравнивание остатков по регистру товаров организаций, чтобы выявить отрицательные остатки по складам и организациям, мешающие верному распределению.
После того как мы убедились, что проблема именно в рассинхронизации регистров, можно приступать к исправлению. Рассмотрим методы от простого к сложному.
Запуск стандартных обработок. Первым делом стоит попробовать штатные инструменты и специализированные решения:
Исправление ошибок в регистре сведений "Распределение запасов".Администрирование – Обслуживание – Регламентные операции – Пересчет итогов).Полное перепроведение документов. Это радикальный, но иногда действенный метод. Он заключается в том, чтобы отменить проведение всех документов за проблемный период, а затем провести их заново в хронологической последовательности. Метод очень трудоемкий, но заставляет систему полностью перестроить движения во всех регистрах.
Программная очистка и перезаполнение регистра (Рекомендуемый метод). Это наиболее технически грамотный и безопасный способ, который не затрагивает сами документы. Суть метода — принудительно очистить "неправильный кэш" и заставить систему перестроить его заново на основе первичных данных. Если же требуется внести изменения непосредственно в первичные движения, может потребоваться универсальная корректировка остатков регистра накопления.
Внимание! Этот метод требует квалификации программиста 1С и должен выполняться только на резервной копии базы данных.
Алгоритм действий:
РаспределениеЗапасов. Код может выглядеть так:
НаборЗаписей = РегистрыСведений.РаспределениеЗапасов.СоздатьНаборЗаписей();
НаборЗаписей.Прочитать();
НаборЗаписей.Очистить();
НаборЗаписей.Записать();
Этот подход позволяет точечно исправить проблемный регистр, не затрагивая корректные данные в других частях системы, что делает его самым быстрым и надежным решением в сложных случаях.