При ежедневной работе в программе 1С:Бухгалтерия пользователи иногда сталкиваются с неожиданным поведением журналов документов (например, Кассовые документы): при входе отображается полный список, но стоит открыть любой документ, провести его и закрыть форму — часть документов внезапно исчезает из видимой части журнала. Если перезайти в журнал или сдвинуть фокус, список снова обновляется. Разберем детально, почему возникает этот сбой и как его устранить на уровне пользователя, конфигурации и СУБД.
Проанализируем техническую сторону работы интерфейсных списков платформы 1С:Предприятие 8.3:
ДинамическийСписок. Платформа не выгружает всю базу целиком, а запрашивает у СУБД данные порциями (страницами). Для построения выборки формируются SQL-запросы с ограничением порции и смещением относительно текущей строки.Дата, у нескольких документов дата и время могут совпадать с точностью до секунды. В таком случае СУБД не гарантирует детерминированный порядок следования записей. При проведении документа изменяются его реквизиты и момент времени, курсор выборки сбивается, и часть строк «выпадает» из текущего видимого буфера.Выясним, как стабилизировать отображение журнала без изменения конфигурации и остановки работы пользователей. Для этого необходимо исключить неоднозначность сортировки строк:
Дата, а во второй строке добавим поле Номер (или Ссылка).После добавления второго уникального поля порядок строк для СУБД становится строго детерминированным, и курсор динамического считывания перестает терять позиции при проведении документов.
Если стандартный сброс настроек через интерфейс формы не помогает, выполним полную очистку системных настроек формы журнала:
Для программной очистки настроек конкретного объекта метаданных можно использовать метод объекта ХранилищеСистемныхНастроек:
КлючОбъекта = "ЖурналДокументов.КассовыеДокументы/Форма/ФормаСписка";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, "", Неопределено);
Если конфигурация находится на поддержке с возможностью редактирования или создается расширение, проанализируем параметры динамического списка формы журнала:
Список проверим свойство ОсновнаяТаблица — для него должен быть явно указан соответствующий журнал (например, ЖурналДокументов.КассовыеДокументы).Дата и Ссылка.ДинамическоеСчитываниеДанных (установить в значение Ложь). В таком случае список будет считываться целиком, исключая любые сбои постраничного позиционирования.Если ошибка возникла после массовой загрузки данных, дублирования или обновления конфигурации, выполним регламентные процедуры по оптимизации таблиц:
sp_updatestats или настроим регламентный план обслуживания (дефрагментация индексов и обновление статистик). Для PostgreSQL выполним операцию ANALYZE.