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