Почему пропадают документы из журнала при проведении в 1С 8.3 и как это исправить

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

При ежедневной работе в программе 1С:Бухгалтерия пользователи иногда сталкиваются с неожиданным поведением журналов документов (например, Кассовые документы): при входе отображается полный список, но стоит открыть любой документ, провести его и закрыть форму — часть документов внезапно исчезает из видимой части журнала. Если перезайти в журнал или сдвинуть фокус, список снова обновляется. Разберем детально, почему возникает этот сбой и как его устранить на уровне пользователя, конфигурации и СУБД.

Причины сбоя динамического списка и отображения строк

Проанализируем техническую сторону работы интерфейсных списков платформы 1С:Предприятие 8.3:

  1. Механизм динамического считывания данных: Табличные части журналов документов работают на основе объекта ДинамическийСписок. Платформа не выгружает всю базу целиком, а запрашивает у СУБД данные порциями (страницами). Для построения выборки формируются SQL-запросы с ограничением порции и смещением относительно текущей строки.
  2. Неопределенность сортировки по неуникальным полям: Если список отсортирован только по полю Дата, у нескольких документов дата и время могут совпадать с точностью до секунды. В таком случае СУБД не гарантирует детерминированный порядок следования записей. При проведении документа изменяются его реквизиты и момент времени, курсор выборки сбивается, и часть строк «выпадает» из текущего видимого буфера.
  3. Неактуальная статистика СУБД после обновлений: Если перед появлением ошибки выполнялось обновление релиза конфигурации, поиск и замена дублей или пакетная загрузка данных из внешних систем (например, из 1С:Управление торговлей), статистика распределения данных в таблицах становится неактуальной, что заставляет оптимизатор СУБД строить некорректный план выборки.
  4. Устаревшие сохраненные пользовательские настройки: При накатывании новых релизов структура запроса динамического списка может меняться, а старые пользовательские настройки сортировки и группировок продолжают храниться в служебных таблицах.

Способ 1. Быстрое решение в пользовательском режиме

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

  1. Откроем проблемный журнал (например, Кассовые документы).
  2. Нажмем кнопку Еще в правой верхней части формы и выберем пункт Настроить список.
  3. Перейдем на закладку Сортировка.
  4. Добавим дополнительное поле для упорядочивания: в первой строке оставим поле Дата, а во второй строке добавим поле Номер (или Ссылка).
  5. Нажмем Завершить редактирование.

После добавления второго уникального поля порядок строк для СУБД становится строго детерминированным, и курсор динамического считывания перестает терять позиции при проведении документов.

Способ 2. Очистка сохраненных настроек пользователей

Если стандартный сброс настроек через интерфейс формы не помогает, выполним полную очистку системных настроек формы журнала:

  1. Перейдем в раздел Администрирование -> Настройки пользователей и прав -> Очистка настроек (или Персональные настройки пользователей).
  2. Выберем нужных пользователей (или всех сразу).
  3. В списке объектов найдем и удалим настройки проблемного журнала документов.

Для программной очистки настроек конкретного объекта метаданных можно использовать метод объекта ХранилищеСистемныхНастроек:


КлючОбъекта = "ЖурналДокументов.КассовыеДокументы/Форма/ФормаСписка";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", Неопределено);

Способ 3. Корректировка свойств динамического списка в конфигураторе

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

  1. Откроем форму журнала документов в Конфигураторе.
  2. В свойствах реквизита Список проверим свойство ОсновнаяТаблица — для него должен быть явно указан соответствующий журнал (например, ЖурналДокументов.КассовыеДокументы).
  3. В настройках схемы компоновки данных динамического списка или в свойствах запроса жестко зафиксируем порядок сортировки по полям Дата и Ссылка.
  4. При небольшом объеме документов за рабочий интервал можно отключить свойство ДинамическоеСчитываниеДанных (установить в значение Ложь). В таком случае список будет считываться целиком, исключая любые сбои постраничного позиционирования.

Способ 4. Обслуживание базы данных и реиндексация

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

  1. Тестирование и исправление: Запустим информационную базу в режиме Конфигуратор, перейдем в меню Администрирование -> Тестирование и исправление..., отметим пункты Реиндексация таблиц информационной базы, Пересчет итогов и Реструктуризация таблиц информационной базы.
  2. Обновление статистик в СУБД: Для клиент-серверного варианта на MS SQL Server выполним команду sp_updatestats или настроим регламентный план обслуживания (дефрагментация индексов и обновление статистик). Для PostgreSQL выполним операцию ANALYZE.
← На главную