При доработке конфигурации на управляемых формах разработчики иногда сталкиваются со специфической ошибкой: после добавления, удаления или изменения реквизитов объект перестает открываться у отдельных пользователей с сообщением «Ошибка преобразования данных XDTO: Неизвестный тип LFL элемента». При этом у других пользователей под теми же правами и на том же рабочем месте форма открывается корректно. Выясним причину такого поведения платформы и разберем способы решения проблемы.
Аббревиатура LFL (Logical Form Layout) обозначает внутреннюю модель разметки управляемых форм платформы «1С:Предприятие». Она используется для описания структуры элементов и сериализации формы в пакет XDTO при передаче с сервера на клиентское приложение.
Проанализируем последовательность событий при открытии формы:
ПриСозданииНаСервере, где формируется базовая структура формы.Именно поэтому ошибка возникает строго в промежутке между окончанием серверного вызова ПриСозданииНаСервере и клиентским событием ПриОткрытии, а стандартная локальная очистка временных файлов на компьютере пользователя не приносит результата.
Пользовательские настройки форм сохраняются не в локальном кэше операционной системы, а в базе данных внутри системного объекта ХранилищеСистемныхНастроек. Если форма падает до открытия, самым быстрым и надежным решением является программная очистка этих настроек.
Разберем точечное удаление настроек конкретной формы для проблемного пользователя:
// Ключ объекта для настроек формы обычно имеет формат: "ИмяФормы/НастройкиФормы"
ИмяПользователя = "ИвановИИ";
КлючОбъекта = "Документ.ЗаказКлиента.Форма.ФормаДокумента/НастройкиФормы";
ХранилищеСистемныхНастроек.Удалить(КлючОбъекта, , ИмяПользователя);
Если точный ключ структуры формы неизвестен, выполним перебор всех настроек конкретного пользователя и удалим только те, которые относятся к проблемному объекту метаданных:
ИмяПользователя = "ИвановИИ";
Отбор = Новый Структура("Пользователь", ИмяПользователя);
Выборка = ХранилищеСистемныхНастроек.Выбрать(Отбор);
Пока Выборка.Следующий() Цикл
Если Найти(Выборка.КлючОбъекта, "Документ.ЗаказКлиента") > 0 Тогда
ХранилищеСистемныхНастроек.Удалить(Выборка.КлючОбъекта, Выборка.КлючНастроек, ИмяПользователя);
КонецЕсли;
КонецЦикла;
В конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как «1С:Бухгалтерия», «1С:ERP», «1С:Управление торговлей», присутствует встроенный интерфейс для управления пользовательскими настройками.
Разберем по шагам, как выполнить сброс:
Если требуется быстро открыть приложение проблемному пользователю и сбросить накопленные варианты расположения элементов, используем специальный ключ запуска клиента 1С.
Для этого в строке дополнительных параметров запуска базы данных укажем параметр:
/ResetFormSettings
При старте с этим параметром платформа сбросит персональные настройки форм текущего сеанса к значениям по умолчанию, что позволит успешно открыть измененный документ.
Чтобы минимизировать появление ошибки десериализации LFL у пользователей после релизов доработок, придерживаемся следующих правил:
Элементы.Добавить() в процедуре ПриСозданииНаСервере выполняем инициализацию до применения механизмов восстановления настроек.