gifts2017

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

Опубликовал Дмитрий Соломатин (sdf1979) в раздел Обмен - Перенос данных из 1С7.7 в 1C8.X

Получение в 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;
 ПутьКлюча = "Software\1C\1Cv7\7.7\Titles";
 Reg = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\" +
  ИмяКомпьютера() + "\root\default: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С_Путь = Эл.Значение;
 СтандартнаяОбработка = Ложь;
КонецПроцедуры

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Дмитрий Башинский (bashinsky) 25.12.13 10:49
А вот еще способ получения списка баз от разработчиков 1с
// Процедура получает из реестра список зарегистрированных ИБ
//
Процедура ПолучитьСписокИБ() 
	Попытка
		ScrptCtrl=Новый COMObject("MSScriptControl.ScriptControl");
		ScrptCtrl.Language="vbscript";
		ScrptCtrl.AddCode("
		|Function Get1CV77Titles()
		|	const HKEY_CURRENT_USER = &H80000001
		|	Set oReg=GetObject(""winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv"")
		|	strKeyPath = ""Software\1C\1Cv7\7.7\Titles""
		|	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);
		Название=Прав(СтрБазы,СтрДлина(СтрБазы)-Разд);
		
		НоваяСтрока = ТаблицаПути.Добавить();
		НоваяСтрока.Имя = Название;
		НоваяСтрока.Путь = Путь;
	КонецЦикла;
	
	ТаблицаПути.Сортировать("Имя");

КонецПроцедуры //ПолучитьСписокИБ
...Показать Скрыть
2. Дмитрий Соломатин (sdf1979) 25.12.13 10:56
Это тоже самое, только весь код получения завернут в VBS и возвращается строка с разделителями
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа