При настройке прямого подключения (COM-соединения) в рамках синхронизации данных через универсальный формат EnterpriseData между конфигурацией «1С:Бухгалтерия предприятия 3.0» и сторонней программой (или кастомной конфигурацией на платформе 1С 8.2/8.3) специалисты часто сталкиваются с нечевидной ошибкой:
Пользователю, указанному для подключения к другой программе, должны быть назначены роли "Администратор системы" и "Полные права"
При этом указанному пользователю в базе-приемнике уже назначены максимальные административные права и разрешено внешнее подключение, но ошибка все равно блокирует установку связи. Проанализируем причину возникновения этой проблемы на уровне кода Библиотеки Стандартных Подсистем (БСП) и рассмотрим варианты её решения.
Рассмотрим, как происходит процедура установки соединения на стороне «1С:Бухгалтерии 3.0». Обратимся к общему модулю ОбменДаннымиСервер и его экспортной функции УстановитьВнешнееСоединениеСБазой():
Функция УстановитьВнешнееСоединениеСБазой(СтруктураНастроек) Экспорт
Результат = ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой(
ЗаполнитьПараметрыПодключенияВнешнегоСоединения(СтруктураНастроек));
ВнешнееСоединение = Результат.Соединение;
Если ВнешнееСоединение = Неопределено Тогда
Возврат Результат;
КонецЕсли;
// Дополнительно проверяем возможность работы с внешней базой.
Попытка
НетПолныхПрав = Не ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.РольДоступнаПолныеПрава;
Исключение
НетПолныхПрав = Истина;
КонецПопытки;
Если НетПолныхПрав Тогда
Результат.ПодробноеОписаниеОшибки = НСтр("ru = 'Пользователю, указанному для подключения к другой программе, должны быть назначены роли ""Администратор системы"" и ""Полные права""'");
Результат.КраткоеОписаниеОшибки = Результат.ПодробноеОписаниеОшибки;
Результат.Соединение = Неопределено;
Иначе
// Проверка на необходимость обновления базы...
КонецЕсли;
Возврат Результат;
КонецФункции
Проанализируем алгоритм работы функции:
ОбщегоНазначенияКлиентСервер.УстановитьВнешнееСоединениеСБазой().ВнешнееСоединение.ОбменДаннымиВнешнееСоединение.РольДоступнаПолныеПрава.ОбменДаннымиВнешнееСоединение.Попытка...Исключение.НетПолныхПрав = Истина, в результате чего генерируется ошибочное ложное сообщение о недостатке ролей у пользователя.Таким образом, архитектурная причина кроется не в отсутствующих правах пользователя, а в отсутствии необходимых метаданных БСП в подключаемой программе.
Если у вас есть возможность дорабатывать подключаемую конфигурацию (например, базу на платформе 8.2 или 8.3), добавим в нее элементы, которые ожидает БСП:
ОбменДаннымиВнешнееСоединение. В его свойствах обязательно установим флаги «Сервер» и «Внешнее соединение».
Функция РольДоступнаПолныеПрава() Экспорт
Возврат Истина;
КонецФункции
ОбменДаннымиПереопределяемый;РезультатыВыполненияОбмена.Если изменять подключаемую базу нельзя или нецелесообразно, переопределим логику проверки прямо в 1С:Бухгалтерии 3.0 с помощью расширения конфигурации:
ОбменДаннымиСервер.УстановитьВнешнееСоединениеСБазой с аннотацией &Вместо.ВнешнееСоединение.ОбменДаннымиВнешнееСоединение дополнительной проверкой на доступность свойства или корректно обрабатываем ситуацию, когда подключаемая база работает без БСП. Это позволит сохранить активный COM-объект без сброса соединения.Использование прямого COM-соединения между разными поколениями платформ (например, 64-разрядный сервер 8.3 и 32-разрядная база 8.2) часто вызывает сопутствующие проблемы с компонентой comcntr.dll. Разберем альтернативные варианты организации интеграции:
Если вы решили использовать прямое подключение, убедитесь в соблюдении технических требований:
comcntr.dll соответствующей версии платформы с помощью утилиты regsvr32.