Получение в 1С82 списка баз 1С77 на сервере (управляемые формы)

Получение в 1С82 списка баз 1С77 на сервере (управляемые формы) для подключения к 1С77 через OLE.

Для подключения из 1С82 к 1С77 через OLE необходим путь к базе 1С77. Данный путь можно получить разными способами, как правило, заводится реквизит на форме, где администратор и прописывает данную настройку. Но можно пойти другим путем… Дать пользователю самому выбрать к какой из баз 1С77 подключиться. Базы пользователя 1С77 хранятся в реестре. Если процедуру подключения выполнять на клиенте, то мы получим список баз 1С77 с которыми работает текущий пользователь на локальном компьютере, если же процедуру выполнять в контексте сервера, то мы получим список баз 1С77 которые зарегистрированы у той учетной записи, под которой выполняется служба 1С:Сервер предприятий. Ниже пример кода получения списка баз 1С77 и организация выбора нужной базы.

&НаСервере
Функция ПолучитьСписокБазНаСервере()
 Перем Параметры, Значения, Значение;
 HKCU = 2147483649;
 ПутьКлюча = «Software1C1Cv77.7Titles»;
 Reg = ПолучитьCOMОбъект(«winmgmts:{impersonationLevel=impersonate}!\» +
  ИмяКомпьютера() + »
ootdefault:StdRegProv»);
 Reg.EnumValues(HKCU, ПутьКлюча, Параметры, Значения);
 Базы1С = Новый Массив;
 Для Каждого Параметр Из Параметры Цикл
  Reg.GetStringValue(HKCU, ПутьКлюча, Параметр, Значение);
  База1С = Новый Массив;
  База1С.Добавить(Параметр);
  База1С.Добавить(Значение);
  Базы1С.Добавить(База1С);
 КонецЦикла;
 
 Возврат Базы1С;
КонецФункции

&НаКлиенте
Процедура База1СНачалоВыбораИзСписка(Элемент, СтандартнаяОбработка)
 Базы1С = ПолучитьСписокБазНаСервере();
 Элемент.СписокВыбора.Очистить();
 Для Каждого База1С Из Базы1С Цикл
  Элемент.СписокВыбора.Добавить(База1С[0], База1С[1]);
 КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура База1СОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
 Эл = Элемент.СписокВыбора.НайтиПоЗначению(ВыбранноеЗначение);
 Объект.База1С = Эл.Представление;
 Объект.База1С_Путь = Эл.Значение;
 СтандартнаяОбработка = Ложь;
КонецПроцедуры

2 Comments

  1. bashinsky

    А вот еще способ получения списка баз от разработчиков 1с

    // Процедура получает из реестра список зарегистрированных ИБ
    //
    Процедура ПолучитьСписокИБ()
    Попытка
    ScrptCtrl=Новый COMObject(«MSScriptControl.ScriptControl»);
    ScrptCtrl.Language=»vbscript»;
    ScrptCtrl.AddCode(»
    |Function Get1CV77Titles()
    | const HKEY_CURRENT_USER = &H80000001
    | Set oReg=GetObject(«»winmgmts:{impersonationLevel=impersonate}!\.
    ootdefault:StdRegProv»»)
    | strKeyPath = «»Software1C1Cv77.7Titles»»
    | oReg.EnumValues HKEY_CURRENT_USER, strKeyPath, arrValues
    | strInfo=vbNullString
    |   Get1CV77Titles = strInfo
    | On Error Resume Next
    | For i = LBound(arrValues) To UBound(arrValues)
    |  call oReg.GetStringValue(HKEY_CURRENT_USER,strKeyPath,arrValues(i),Value)
    |  strInfo=strInfo & arrValues(i) & vbTab & Value & vbCrLf
    | Next
    |  Get1CV77Titles = strInfo
    |End Function
    |»);
    Текст=СокрЛП(ScrptCtrl.Run(«Get1CV77Titles»));
    Исключение
    Сообщить(ОписаниеОшибки());
    Возврат;
    КонецПопытки;
    
    ТаблицаПути.Очистить();
    
    Если НЕ ЗначениеЗаполнено(Текст) Тогда
    Возврат;
    КонецЕсли;
    
    Для Ном=1 По СтрЧислоСтрок(Текст) Цикл
    СтрБазы=СтрПолучитьСтроку(Текст,Ном);
    Разд=Найти(СтрБазы,Символы.Таб);
    Путь=Лев(СтрБазы,Разд-1);
    Название=Прав(СтрБазы,СтрДлина(СтрБазы)-Разд);
    
    НоваяСтрока = ТаблицаПути.Добавить();
    НоваяСтрока.Имя = Название;
    НоваяСтрока.Путь = Путь;
    КонецЦикла;
    
    ТаблицаПути.Сортировать(«Имя»);
    
    КонецПроцедуры //ПолучитьСписокИБ

    Показать

    Reply
  2. sdf1979

    Это тоже самое, только весь код получения завернут в VBS и возвращается строка с разделителями

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *