Книга знаний

1С:Предприятие / v8

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 без выполнения скриптов и прочих "сомнительных" колдунств.Автор статьи:
Последняя редакция №1 от 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

Описание | Рубрикатор | Поиск | ТелепатБот | Захваченные статьи | Установки | Форум
© Станислав Митичкин (Волшебник), 2005-2025 | Mista.ru

Яндекс.Метрика