Как убрать остатки на пустом (несуществующем) складе в 1С:УНФ?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

При работе в конфигурации 1С:Управление нашей фирмой (УНФ) пользователи часто сталкиваются с неприятным феноменом: в списке товаров или в карточке номенклатуры отображаются остатки на некоем «пустом» складе, хотя в стандартных отчетах (например, «Остатки товаров») все данные корректны. Рассмотрим подробнее, почему возникает эта ситуация, и разберем по шагам методы ее решения.

Выясняем причину: архитектурная особенность УНФ

Для начала проанализируем ситуацию с технической точки зрения. В большинстве конфигураций 1С остатки для интерфейса (динамических списков) рассчитываются «на лету» из регистров накопления. Однако в УНФ для ускорения работы программы разработчики внедрили вспомогательный механизм. Рассмотрим два ключевых объекта:

  1. Регистр накопления Запасы (или ЗапасыНаСкладах): Это основной источник данных. На его основе строятся все отчеты. Если в отчетах остатки верные, значит, движения по этому регистру сделаны правильно.
  2. Регистр сведений ОстаткиТоваров: Это служебный (вспомогательный) регистр. Он не хранит историю движений, а содержит только актуальные срезы остатков. Именно из этого регистра данные подтягиваются в форму списка номенклатуры и в форму подбора в документах.

Проблема «несуществующего склада» возникает тогда, когда данные в регистре сведений ОстаткиТоваров перестают соответствовать данным в регистре накопления Запасы. Это называется рассинхронизацией. Пустая строка склада появляется, если в служебный регистр попала запись с незаполненным измерением Склад, которой нет в реальных движениях документов.

Способ 1. Использование встроенной команды «Обновить остатки»

Прежде чем приступать к сложным манипуляциям, попробуем самое простое и эффективное решение, предусмотренное разработчиками. В последних версиях УНФ реализован механизм принудительного пересчета служебного регистра. Разберем, как им воспользоваться:

  1. Перейдем в раздел Продажи или Закупки и откроем справочник Номенклатура.
  2. На панели инструментов справочника нажмем кнопку Еще.
  3. В выпадающем меню найдем команду Обновить остатки.

При выполнении этой команды система инициирует фоновое задание, которое полностью очищает записи по выбранным позициям в регистре сведений ОстаткиТоваров и перезаполняет их на основании данных из «честных» регистров накопления. Проанализируем ситуацию после завершения задания — в большинстве случаев фантомные остатки исчезают.

Способ 2. Исправление ошибок в розничных продажах

Часто причиной рассинхрона становится работа с розницей, а именно цепочка документов ЧекККМ и ОтчетОРозничныхПродажах. Выясним причину: при оформлении чека в течение смены он делает движения по регистрам. При закрытии смены формируется ОтчетОРозничныхПродажах (ОРП), который должен «схлопнуть» эти движения. Если в настройках включена опция «Архивировать чеки ККМ», то при сбоях (например, сетевых лагах или конфликтах блокировок) данные в служебном регистре могут зациклиться.

Для решения этой проблемы рассмотрим следующий алгоритм:

  1. Найдем Отчет о розничных продажах за период, когда появились странные остатки.
  2. Отменим проведение этого отчета.
  3. Отменим проведение всех Чеков ККМ за эту смену.
  4. Проведем Чеки ККМ заново.
  5. В документе Отчет о розничных продажах нажмем кнопку Заполнить — По чекам ККМ и снова проведем его.

Этот метод помогает «протолкнуть» зависшие данные в регистр Запасы и корректно обновить вспомогательные таблицы.

Способ 3. Прямая очистка регистра сведений (для специалистов)

Если автоматическое обновление не помогло, мы можем проверить содержимое проблемного регистра напрямую. Рассмотрим, как это сделать:

  1. Откроем меню Функции для технического специалиста (ранее «Все функции»).
  2. Найдем в списке Регистры сведений и выберем Остатки товаров.
  3. Установим отбор по «проблемной» номенклатуре.
  4. Если мы видим записи, где колонка Склад пустая или содержит некорректные данные, и при этом сумма или количество отличны от нуля — это и есть наша ошибка.

В исключительных случаях эти записи можно удалить вручную (если конфигурация позволяет) или воспользоваться внешней обработкой для очистки записей регистра сведений. После удаления записей необходимо повторить Способ 1, чтобы система создала правильные записи.

Способ 4. Программный вызов обновления остатков

Если вы являетесь программистом и вам необходимо массово обновить остатки для большого количества позиций, рассмотрите использование встроенного метода программного модуля. Посмотрим на пример кода, который можно запустить во внешней обработке:


// Пример программного обновления остатков для конкретной номенклатуры
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоКоду("00001");
РегистрыСведений.ОстаткиТоваров.ОбновитьДанныеПоНоменклатуре(НоменклатураСсылка);

// Для массового обновления по всей базе (может занять время)
РегистрыСведений.ОстаткиТоваров.ОбновитьДанныеПоВсемуСправочнику();

Использование метода ОбновитьДанныеПоВсемуСправочнику является аналогом полной перегенерации данных и гарантированно устраняет любые «хвосты» на пустых складах.

Профилактика возникновения проблемы

Чтобы в будущем не сталкиваться с подобным поведением системы, проанализируем настройки базы:

Подводя итог, можно сказать, что «пустой склад» в УНФ — это почти всегда следствие рассинхрона между Регистром Накопления и Регистром Сведений. Использование команды «Обновить остатки» в 90% случаев решает эту проблему без привлечения программиста.

← На главную