При настройке интеграции между 1С:ERP Управление предприятием и 1С:Документооборот (ДО) часто возникает неприятная ситуация: любое изменение в карточке пользователя на стороне ERP (например, добавление профиля или простое пересохранение) приводит к тому, что после синхронизации в ДО у этого пользователя слетает «Аутентификация 1С» или затирается пароль. Это блокирует работу сотрудников и требует ручного вмешательства администратора.
В этой статье мы подробно разберем, почему это происходит, где искать правила обмена и как изменить код в «Конвертации данных 2.0», чтобы сохранить настройки доступа.
Прежде всего, нам нужно понять, по каким правилам происходит обмен. В типовых решениях на базе БСП (Библиотека стандартных подсистем) правила часто вшиты в конфигурацию, но их можно извлечь для редактирования. Рассмотрим, где они находятся в интерфейсе ERP:
Разберем ситуацию на примере ПКО (Правила конвертации объектов) для справочника Пользователи. Проанализируем типичную ошибку в обработчиках событий, которая приводит к потере данных аутентификации.
Проблема часто кроется в том, что при загрузке данных в «1С:Документооборот» программно создается структура ОписаниеПользователяИБ. Рассмотрим пример кода, который может быть прописан в обработчике «После загрузки»:
Если ТипЗнч(ПараметрыОбъекта) = Тип("Соответствие") Тогда
Если ЗначениеЗаполнено(ПараметрыОбъекта["Имя"]) Тогда
ОписаниеПользователяИБ = Пользователи.НовоеОписаниеПользователяИБ();
ОписаниеПользователяИБ.Вставить("Действие", "Записать");
ОписаниеПользователяИБ.УникальныйИдентификатор = Объект.ИдентификаторПользователяИБ;
ОписаниеПользователяИБ.Имя = СокрЛП(ParametrsObekta["Имя"]);
// ... установка других реквизитов ...
Объект.ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ);
КонецЕсли;
КонецЕсли;
Выясним причину сбоя: метод Пользователи.НовоеОписаниеПользователяИБ() создает абсолютно пустую структуру. Если мы явно не заполним в ней свойство АутентификацияСтандартная = Истина, то при записи объекта БСП может интерпретировать отсутствие этого флага как команду на отключение аутентификации 1С. Аналогично происходит и с АутентификацияОС.
Посмотрим на попытку передачи пароля из ERP в ДО. В обработчике «Перед выгрузкой» на стороне источника (ERP) иногда пытаются использовать следующий код:
ПарольПользователя = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Пользователь, "Пароль");
ВходящиеДанные.Вставить("Пароль", ПарольПользователя);
Проанализируем этот момент подробнее. В современных версиях платформы 1С пароли пользователей информационной базы хранятся в виде хеша. Метод ПрочитатьДанныеИзБезопасногоХранилища с ключом «Пароль» вернет значение только в том случае, если разработчик ранее вручную сохранил туда пароль в открытом виде (что небезопасно и редко встречается в типовых). В 99% случаев этот метод вернет пустоту, и при загрузке в ДО система запишет пользователю пустой пароль, затирая старый.
Чтобы избежать затирания данных, рекомендуется придерживаться следующих правил при корректировке конвертации:
ОписаниеПользователяИБ из правил обмена.НовоеОписаниеПользователяИБ(), в обработчике «После загрузки» следует сначала получить текущие настройки пользователя из базы ДО методом Пользователи.СвойстваПользователяИБ(Объект.ИдентификаторПользователяИБ), изменить в этой структуре только нужные поля и передать ее на запись.Объект.ОбменДанными.Загрузка = Истина. Если этот флаг установлен, стандартные проверки ПриЗаписи могут игнорироваться, но специализированные механизмы БСП по работе с пользователями все равно могут сработать некорректно, если структура ДополнительныеСвойства заполнена не полностью.Рассмотрим правильный подход к обновлению только определенных реквизитов (например, подразделения) без затрагивания аутентификации:
// В обработчике "После загрузки" (ДО)
Если ЗначениеЗаполнено(ПараметрыОбъекта["Подразделение"]) Тогда
// Обновляем сведения в регистре, не трогая настройки аутентификации пользователя ИБ
НаборЗаписей = РегистрыСведений.СведенияОПользователяхДокументооборот.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Пользователь.Установить(Объект.Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Запись = НаборЗаписей[0];
Запись.Подразделение = ПараметрыОбъекта["Подразделение"];
НаборЗаписей.ОбменДанными.Загрузка = Истина;
НаборЗаписей.Записать();
КонецЕсли;
КонецЕсли;
После того как мы внесли правки в КД 2.0 и сохранили новый файл правил (обычно это ExchangeRules.xml), его нужно загрузить обратно в ERP:
Аутентификация 1С остается на месте.Важный совет: Если версии ERP и ДО сильно отличаются (например, ДО обновляется чаще), типовые правила могут конфликтовать с новыми реквизитами БСП. В этом случае всегда проверяйте, какая конфигурация является «мастером» для учетных записей. Лучшая практика — настраивать аутентификацию (пароли и доступ по ОС) непосредственно в каждой базе или использовать общую службу каталогов (Active Directory), исключив передачу паролей через файлы обмена.