v8: Получение списка баз Предприятия 7.7 без VB-скрипто-колдунствЧасто бывает нужно получить список баз 7.7, с которыми работает пользователь. Например, для разнообразных обработок обмена через Олю, да мало ли для чего еще. Поиск по Мисте дает вот такие ссылки:
http://www.forum.mista.ru/topic.php?id=282718
http://www.kb.mista.ru/article.php?id=587
, которые не очень помогают, когда нужна простая функция, котрая вернет список баз. Данная статья - пример простой функции для 8.х, которая вернет список баз 7.7 без выполнения скриптов и прочих "сомнительных" колдунств. | | Автор статьи: Лефмихалыч | Редакторы: Последняя редакция №3 от 20.06.08 | История URL: http://kb.mista.ru/article.php?id=676 | |
Ключевые слова: Titles, список баз, EnumValues, Software\1C\1Cv7\7.7\Titles
Справедливости ради стоит отметить, что упомянутые статья и ветка форума, конечно, дают исчерпывающую информацию о том, как перебрать значения ветки реестра, однако, предложенный там метод предполагает тщательную обработку напильником для того, чтобы можно было его использовать в 1С.
Собственно, вся метода зиждется на использовании ПолучитьCOMОбъект() - встроенной функции, которая позволяет не изобретать велосипедов для вызова GetObject.
// Возвращает список информационных баз 7.7 // Возвращает значение // СписокЗначений - Значение - каталог ИБ, Представление - название базы
Функция Предприятие7ИнформационныеБазы() Экспорт
Перем КаталогиСписок;
Попытка
Базы = Новый СписокЗначений;
СистемныйРеестр = ПолучитьCOMОбъект("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv");
HKCU = 2147483649; //0x80000001
Если СистемныйРеестр.EnumValues(HKCU, "Software\1C\1Cv7\7.7\Titles\", КаталогиСписок, Неопределено) Тогда
Возврат Неопределено;
КонецЕсли;
Для каждого Каталог Из КаталогиСписок Цикл
Наименование = "";
СистемныйРеестр.GetStringValue(HKCU, "Software\1C\1Cv7\7.7\Titles\", Каталог, Наименование);
Базы.Добавить(Каталог, Наименование);
КонецЦикла;
Исключение
Базы = Неопределено;
КонецПопытки;
Возврат Базы;
КонецФункции
а вот и пример использования:
ИнформационныеБазы = Предприятие7ИнформационныеБазы();
Для каждого ИБ из ИнформационныеБазы Цикл
Сообщить("Имя: "+ИБ.Представление+" :: каталог: "+ИБ.Значение);
КонецЦикла;
Как видно, функция предельно простая. Как и почему она работает, описано в упомянутых в эбстракте ветке и статье, кроме того, кому не понятно, можно зайти сюда http://script-coding.info/WMI_StdRegProv.html |