При переносе данных между конфигурациями 1С:ERP Управление предприятием (а также 1С:Комплексная автоматизация или 1С:Управление торговлей) с помощью «Конвертации данных 2» разработчики нередко сталкиваются с ситуацией: файл XML загружается без ошибок, через консоль запросов документы реализации или другие объекты успешно находятся и открываются, но в стандартном журнале документов или динамическом списке их нет. Разберем подробно, почему возникает такое поведение платформы и прикладных решений на базе Библиотеки стандартных подсистем (БСП), а также как сделать загруженные данные видимыми для пользователей.
Основная причина скрытия объектов в типовых конфигурациях линейки ERP — работа механизма разграничения прав доступа (RLS). По умолчанию при загрузке данных через стандартную обработку или правила обмена все объекты записываются в базу с установленным признаком ОбменДанными.Загрузка = Истина.
В этом режиме обработчики событий модулей объектов и подписки на события БСП намеренно отключаются платформой для ускорения загрузки. В результате для новых документов не формируются записи в служебных регистрах подсистемы управления доступом, таких как КлючиДоступаКОбъектам, КлючиДоступаПользователей и НаборыЗначенийДоступа. Механизм RLS в запросах динамических списков считает эти документы недоступными для текущего пользователя и просто исключает их из выборки формы, даже если у пользователя назначены полные административные права.
Разберем по шагам, как исправить ключи доступа:
УправлениеДоступом.ОбновитьКлючиДоступа(...).Во многих современных версиях ERP журналы документов (например, журнал документов продаж или закупок) для оптимизации быстродействия строятся не прямым обращением к таблицам документов, а на основании вспомогательного регистра сведений РеестрДокументов.
Поскольку при загрузке из XML свойство ОбменДанными.Загрузка равно Истина, движения по служебным регистрам сведений автоматически не создаются. В итоге документ физически присутствует в таблице базы данных, но запись о нем в РеестрДокументов отсутствует, из-за чего форма журнала остается пустой.
Для устранения этой проблемы выполним перерегистрацию или перезапись объектов:
Проанализируем пользовательские настройки формы журнала документов. В динамических списках управляемых форм могут действовать скрытые отборы, сохраненные в кэше пользователя:
Чтобы исключить влияние пользовательских настроек, откроем меню «Еще» в форме журнала и выберем пункт «Установить стандартные настройки» или выполним сброс настроек формы.
Если мы планируем выполнять перенос на регулярной основе, правильным решением будет доработка алгоритмов загрузки непосредственно в конфигурации «Конвертация данных 2».
Рассмотрим пример кода, который можно поместить в обработчик «После загрузки» правила конвертации объекта (ПКО) или в алгоритм постобработки пакета данных. Программная перезапись объекта без признака загрузки обмена данными заставит платформу и БСП отработать все необходимые подписки на события:
Объект = СсылкаНаДокумент.ПолучитьОбъект();
Если Объект <> Неопределено Тогда
Объект.ОбменДанными.Загрузка = Ложь;
Объект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
Такой подход обеспечит автоматическое формирование записей в РеестрДокументов и корректный расчет ключей доступа RLS сразу в момент импорта данных.