Сброс пользовательских отборов и сохраненных настроек — одна из самых неприятных и труднодиагностируемых проблем в 1С:Предприятие. Подобная ситуация может проявляться в самых разных модулях: сбрасываются отборы в настройках сегментов в 1С:Розница, очищается список выгружаемых товаров в модуле обмена с сайтом (1С-Битрикс), исчезает отбор по организации в узле обмена с 1С:Бухгалтерией или слетают пользовательские настройки динамических списков.
В этой статье мы подробно проанализируем причины, по которым платформа 1С может очищать сохраненные отборы, и разберем по шагам алгоритм диагностики и устранения данной неполадки.
Проблема может кроется как в специфике работы платформы 1С:Предприятие, так и в особенностях конкретной конфигурации или сервера. Проанализируем ключевые факторы:
SystemSettings в СУБД). При сессионном сбое или аварийном завершении работы сеанса сохраненные настройки обнуляются.ПриСозданииНаСервере или ПриОткрытии) прописан жесткий программный отбор, он может конфликтовать со стандартным механизмом компоновки данных. При неправильном порядке наложения отборов система сбрасывает пользовательские установки.КлючНастроек или КлючОбъекта. В таком случае сохранение настроек в одном месте перезаписывает и очищает отборы в другом.TEMP или работу антивируса на сервере приложений 1С могут затронуть файлы активных сессий (папки snacc / seance), что приводит к сбросу текущих незафиксированных настроек.Выясним, кто именно и в какой момент очищает настройки. Журнал регистрации позволяет определить, происходит ли сброс в результате действий конкретного пользователя или работы фонового задания.
Сформируем отбор в Журнале регистрации:
Данные.Изменение или Данные.Удаление.НастройкиЗагрузкиВыгрузкиАвтоматическогоОбмена или узел плана обмена с БП).Рассмотрим, как отборы сохраняются в коде управляемых форм и модулей обмена. Настройки компоновки данных часто хранятся в реквизите с типом ХранилищеЗначений. Если при считывании из хранилища возникает ошибка, код возвращает пустую структуру.
Посмотрим на пример правильной обработки считывания и сохранения отбора компоновки данных:
&НаСервере
Процедура СохранитьОтборВХранилище(УзелОбмена, НастройкиКомпоновщика)
// Получаем настройки отбора из компоновщика
ТекущиеНастройки = НастройкиКомпоновщика.ПолучитьНастройки();
// Помещаем структуру в хранилище значений
ОбъектУзел = УзелОбмена.ПолучитьОбъект();
ОбъектУзел.ХранилищеНастроекОтбора = Новый ХранилищеЗначений(ТекущиеНастройки);
Попытка
ОбъектУзел.Записать();
Исключение
ЗаписьЖурналаРегистрации("ОшибкаСохраненияНастроек",
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
КонецПроцедуры
Если в конфигурации используется программная установка отборов динамического списка, убедимся, что режим элемента отбора не конфликтует с пользовательским:
&НаСервере
Процедура УстановитьБезопасныйОтбор(Список, ИмяПоля, ЗначениеОтбора)
ОтборСписка = Список.КомпоновщикНастроек.ФиксированныеНастройки.Отбор;
// Ищем существующий элемент отбора, чтобы не дублировать и не сбрасывать
НайденныйЭлемент = Неопределено;
Для Каждого Элемент Из ОтборСписка.Элементы Цикл
Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных")
И Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля) Тогда
НайденныйЭлемент = Элемент;
Прервать;
КонецЕсли;
КонецЦикла;
Если НайденныйЭлемент = Неопределено Тогда
НайденныйЭлемент = ОтборСписка.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
НайденныйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
КонецЕсли;
НайденныйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НайденныйЭлемент.ПравоеЗначение = ЗначениеОтбора;
НайденныйЭлемент.Использование = ЗначениеЗаполнено(ЗначениеОтбора);
КонецПроцедуры
Для исключения проблем с повреждением системного хранилища настроек и кеша выполнения рекомендуем выполнить следующий комплекс профилактических работ:
%LOCALAPPDATA%\1C\1cv8 и %APPDATA%\1C\1cv8).Если проблема воспроизводится на релизе платформы 8.3.11.2924, настоятельно рекомендуется выполнить обновление платформы до актуального и стабильного релиза (например, ветки 8.3.18, 8.3.22 или выше). Релизы линейки 8.3.11 содержат известные ошибки работы с системными таблицами настроек СУБД, которые были успешно исправлены разработчиками в более поздних версиях.
Подводя итог, при возникновении сброса отборов рекомендуем придерживаться следующего алгоритма: