Почему регистр накопления показывает некорректные остатки при изменении периода и как это исправить?

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

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

Выясним причины расхождения итогов в регистре

Виртуальная таблица ОстаткиИОбороты рассчитывает начальные и конечные остатки, опираясь на физическую таблицу итогов регистра накопления и таблицу записей (движений). Если граница начала периода меняется, платформа выбирает разные опорные точки из таблицы итогов и считывает обороты между ними.

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

  1. Рассинхронизация таблицы итогов и таблицы движений. Из-за нештатного завершения работы системы или сбоев в работе СУБД рассчитанные итоги регистра могут перестать соответствовать фактическим проведенным документам.
  2. Повреждение физической структуры файловой базы (.1cd). В файловом режиме повреждение индексов или таблиц приводит к тому, что платформа считывает искаженные значения из таблицы итогов.
  3. Включенный режим разделения итогов. При активном разделении итогов записи распределяются по параллельным потокам. Повреждение одного из потоков приводит к некорректному суммарному итогу.
  4. Попадание документов точно на границу суток. Документы со временем 00:00:00 могут исключаться или включаться в начальные остатки в зависимости от настроек границ периода.

Способ 1. Проверка базы утилитой chdbfl.exe

Для файлового варианта информационной базы стандартная процедура «Тестирование и исправление» из Конфигуратора может оказаться неэффективной, если повреждена физическая структура файла 1Cv8.1CD. Проанализируем порядок действий:

  1. Завершим работу всех пользователей и обязательно сделаем резервную копию базы данных.
  2. Перейдем в каталог установленной платформы 1С в папку bin и запустим утилиту chdbfl.exe.
  3. Укажем путь к файлу базы данных и установим флажок «Исправлять обнаруженные ошибки».
  4. Запустим процесс и по его завершении проверим работу регистра.

Способ 2. Реструктуризация и полный пересчет итогов

Разберем процедуру выполнения пересчета итогов и реструктуризации таблиц через Конфигуратор:

  1. Откроем информационную базу в режиме Конфигуратор.
  2. Перейдем в меню Администрирование — Тестирование и исправление.
  3. Установим флажки «Пересчет итогов» и «Реструктуризация таблиц информационной базы».
  4. Нажмем кнопку «Выполнить». Реструктуризация полностью пересоздает физические таблицы регистра и формирует таблицы итогов заново на основе реальных движений.

Способ 3. Программный сброс и перерасчет итогов

Посмотрим, как можно выполнить перерасчет итогов конкретного регистра накопления с помощью встроенного языка 1С:


// Отключаем использование итогов для сброса поврежденной таблицы
РегистрыНакопления.ТоварыНаСкладах.УстановитьИспользованиеИтогов(Ложь);

// Включаем использование итогов обратно
РегистрыНакопления.ТоварыНаСкладах.УстановитьИспользованиеИтогов(Истина);

// Выполняем принудительный пересчет итогов регистра
РегистрыНакопления.ТоварыНаСкладах.ПересчитатьИтоги();

Этот метод позволяет перезаписать таблицу итогов, приведя её в точное соответствие с таблицей движений регистра.

Способ 4. Пересборка информационной базы через выгрузку DT

Рассмотрим еще один надежный способ исправления структурных сбоев файловой базы. Выгрузка и последующая загрузка информационной базы полностью перестраивает внутренние таблицы СУБД:

  1. В Конфигураторе выберем пункт меню Администрирование — Выгрузить информационную базу и сохраним файл .dt.
  2. Создадим новую пустую информационную базу в списке ключей запуска.
  3. Откроем новую базу в Конфигураторе и выберем Администрирование — Загрузить информационную базу.
  4. Запустим отчёт и проверим правильность расчета начальных и конечных остатков.
← На главную