Почему в отчете «Книга продаж» выводится случайное количество строк и как это исправить?

Бухгалтер 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Налоговый учет
← На главную

При работе в программном продукте «1С:Бухгалтерия предприятия» (особенно редакции КОРП 3.0 на платформе 8.3) пользователи иногда сталкиваются с аномальным behavior отчета «Книга продаж»: при каждом повторном нажатии на кнопку «Сформировать» в отчет попадает случайное количество строк. Например, при первом запуске формируется 450 строк, при повторном — 500, затем снова 450, даже если период давно закрыт и никакие документы в базе не проводятся.

Разберем подробно причины возникновения этой проблемы и рассмотрим пошаговый алгоритм её локализации и устранения.

Пошаговая диагностика: как найти «пропавшие» строки

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

  1. Сохраним два варианта отчета: сформируем отчет с меньшим количеством строк (например, 450) и сохраним результат в файл Excel. Затем сформируем отчет с полным количеством строк (500) и также сохраним его в отдельный файл.
  2. Сравним файлы и найдем различия: с помощью сравнения документов найдем 50 «плавающих» строк. Выясним, по каким контрагентам, счетам-фактурам и первичным документам они сформированы.
  3. Проанализируем записи регистра: перейдем в регистр накопления НДС Продажи (или НДС Записи Книги Продаж) и проверим документы-регистраторы для «выпадающих» строк. Проверим корректность заполнения реквизитов и дат проведения.
  4. Проверим Журнал регистрации: проанализируем события за исследуемый период через ЖурналРегистрации, чтобы убедиться, что над документами не выполняются фоновые регламентные задания или автоматические корректировки.

Решение 1. Пересчет итогов регистров накопления

Частой причиной подобного поведения является рассинхронизация таблиц итогов и таблиц движений регистров накопления НДС. В зависимости от структуры запроса система компоновки данных (СКД) может считывать данные из виртуальных таблиц итогов или рассчитывать их из таблиц движений, отдавая разный набор записей.

Выполним процедуру пересчета итогов:

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

Также пересчет итогов по конкретному регистру можно выполнить программно с помощью метода ПересчитатьИтоги() соответствующего менеджера регистра.

Решение 2. Обслуживание системы управления базами данных (СУБД)

Если база данных работает в клиент-серверном режиме (MS SQL Server или PostgreSQL), причина может крыться в некорректных планах выполнения запросов СУБД due to устаревшей статистики или фрагментации индексов.

Рассмотрим необходимые шаги по обслуживанию СУБД:

  1. Обновление статистики: выполним процедуру обновления статистики для таблиц базы данных (в MS SQL Server с помощью команды UPDATE STATISTICS).
  2. Реиндексация и дефрагментация: проведем регламентную реиндексацию таблиц и сжатие служебной базы tempdb.
  3. Очистка процедурного кэша: сбросим кэш планов выполнения запросов на стороне SQL-сервера (для MS SQL Server используем команду DBCC FREEPROCCACHE).
  4. Перезапуск службы сервера 1С: перезапустим службу ragent («1С:Предприятие») или завершим рабочие процессы rphost, чтобы полностью очистить серверный кэш приложений.

Решение 3. Проверка прав доступа и RLS

Если в базе включено ограничение прав доступа на уровне записей (RLS — Record Level Security), сессионные параметры прав могут накладываться на временные таблицы СКД несинхронно.

Проверим эту гипотезу:

  1. Сформируем отчет «Книга продаж» под учетной записью с полными правами (Администратор), у которой отключено действие RLS.
  2. Если под администратором количество строк стабильно и больше не меняется при повторных формированиях, то проблему следует искать в настройках групп доступа, профилей пользователей и условиях RLS для организаций или контрагентов.

Решение 4. Обновление платформы «1С:Предприятие»

В старых релизах платформы ветки 8.3.8 присутствовали зафиксированные ошибки оптимизатора запросов СКД при работе с несколькими наборами данных и виртуальными таблицами. Отсутствие явной сортировки (УПОРЯДОЧИТЬ ПО) во внутренних временных таблицах отчета приводило к тому, что СУБД возвращала строки в произвольном порядке, а СКД по-разному группировала их при повторных запусках.

Для окончательного устранения платформенных ошибок рекомендуем обновить платформу «1С:Предприятие» до актуального стабильного релиза.

← На главную