- Использование метода СтрокаСоединенияИнформационнойБазы()
- Синтаксис и возвращаемое значение
- Формат строки соединения
- Извлечение параметров из строки
- Определение типа информационной базы
- Представление пути к базе для пользователя
- Получение каталога информационной базы
- Практические рекомендации и примеры
- Заключение
Метод СтрокаСоединенияИнформационнойБазы() находится в глобальном контексте 1C:Предприятие. Это означает, что его можно вызывать везде: в толстом, тонком и веб-клиенте, на сервере и даже во внешнем соединении. Метод не требует параметров и возвращает строку – соединение текущей информационной базы. Проще говоря, это полный идентификатор базы, который можно сразу передать 1С для подключения или запуска.
Важно отметить: метод доступен в любых «режимах» 1С. Любая задача, будь то агента сервиса, внешнего COM-плагина или обычной конфигурации, может узнать по ней, к какой базе подключена система. Пользуясь случаем, стоит напомнить: если вы запускаете 1С через COM (технологию Automation), именно такую строку удобно передать методу Connect() внешнего приложения (пример – VisualBasic-код app.Connect(StrInfobase);). Так проще задавать параметры базы.
Синтаксис и возвращаемое значение
Синтаксис крайне прост:
СтрокаСоединенияИнформационнойБазы()
Возвращается строка в формате подключения. Тип возвращаемого значения – Строка. Описание гласит: метод возвращает строку соединения информационной базы, которую, например, можно использовать для запуска 1С:Предприятие средствами встроенного языка или через COM/Automation. Наглядный пример:
File="C:\1cv8\Base"
– это результат вызова для файловой базы. В этой строке заключён полный путь к каталогу базы. При использовании метода важно учесть, что строка содержит кавычки: имя параметра окружено кавычками и может включать пробелы. Если вы передаёте результат в командную строку 1С (через ключ /IBConnectionString), нужно взять всю строку в кавычки и удвоить внутренние (как того требует синтаксис). Например:
RunSystem("/IBConnectionString """ + СтрокаСоединенияИнформационнойБазы() + """");
Так мы безопасно передадим путь в новый сеанс 1С. Метод удобен для отладки и логирования – вы всегда видите из строки соединения, к какой базе реально привязана текущая сессия.
Формат строки соединения
Строка соединения содержит параметры в виде Имя="Значение", разделённые точкой с запятой. Основные форматы:
- Для файловой базы:
Например:File="<полный путь к папке базы>"File="C:\Data\1C\Bases\Accounting". Если база лежит на сетевом ресурсе, путь начнётся с\\(UNC-адрес):File="\\FileServer\1c_ib\Accounting" - Для клиент-серверной базы:
Например:Srvr="<имя сервера>";Ref="<имя информационной базы>"Srvr="Srv-DB01";Ref="FinAccounting". В кластерных конфигурациях (1С >= 8.2) параметрSrvrможет перечислять через запятую несколько адресов:
Тогда метод вернёт такой составной список в кавычках.Srvr="Server1:1541,Server2:1541";Ref="ClusterBase"
| Тип информационной базы | Строка соединения (пример) |
|---|---|
| Файловая (локальная или сетевая) | File="C:\Путь\К\Инфобазе" |
| Клиент-серверная (обычный сервер) | Srvr="ИмяСервера";Ref="ИмяБазы"; |
| Кластер 1С (список адресов) | Srvr="Server1,Server2" (или с портами);Ref="ИмяБазы"; |
Заметим, что строка почти всегда заканчивается точкой с запятой; в примере выше она есть в конце. Параметры File, Srvr, Ref — обязательные для своих вариантов. Если вы подключаетесь к базе напрямую по СУБД (например, PostgreSQL), метод тоже возвращает File=... с каталогом временных файлов, но чаще используется вариант с Srvr/Ref.
Кстати, если вы только начинаете пользоваться этим методом, скажу по секрету: раньше некоторые программисты вручную собирали пути и названия баз из настроек, а потом обнаружили эту функцию – и с облегчением выдохнули. Всего одна строчка кода вместо десятков манипуляций!
Извлечение параметров из строки
Удобно не только получить всю строку, но и вытащить из неё отдельные части. Например, функции языка 1C НСтр() («нативная строка») позволяют легко извлечь значение по имени параметра. Пример:
Строка = СтрокаСоединенияИнформационнойБазы(); ПутьИБ = НСтр(Строка, "File"); // возвращает каталог (без кавычек) ИмяБазы = НСтр(Строка, "Ref"); // возвращает имя базы (для серверной)
Если в строке нет нужного параметра (например, File в серверной базе), НСтр() вернёт пустую строку или 0 – проверьте поведение в вашем релизе. Впрочем, зачастую используют Найти(ВРег(...), "FILE=") или Найти(ВРег(...), "SRVR="), чтобы понять, какие параметры есть. Главное – помнить о регистре: лучше применять ВРег() или приводить оба операнда к одному регистру, чтобы избежать неожиданностей (в фоновых задачах имя базы может оказаться в верхнем регистре, см. замечания ниже).
Определение типа информационной базы
По строке соединения просто понять, какая это база – файловая или серверная. Например, можно написать такую функцию:
Функция КакаяБаза() Экспорт s = СтрокаСоединенияИнформационнойБазы(); Если Найти(ВРег(s, "FILE=")) = 1 Тогда Возврат "Файловая"; Иначе Возврат "Серверная"; КонецЕсли; КонецФункции
Здесь проверяется наличие подстроки FILE= в начале. Если Srvr= подстроки не найдено, метод считает базу серверной. Вы можете возвращать логические Истина/Ложь или свои текстовые константы. Главное – в условии поиска не забыть использовать ВРег(), иначе File= или Srvr= могли оказаться в другом регистре. Для комплексной логики можно также искать Srvr=, а не только File=.
Представление пути к базе для пользователя
Иногда нужно не просто узнать тип, а составить «понятную» строку для отображения. Например, для файловой базы это может быть сетевой путь, а для клиент-серверной — имя сервера и база. Рассмотрим упрощённую функцию:
Функция ПолучитьПредставлениеИнформационнойБазы() Экспорт params = СтрокаСоединенияИнформационнойБазы(); Если Найти(ВРег(params, "FILE=")) = 1 Тогда // файловая база: возвращаем путь каталога Возврат НСтр(params, "File"); Иначе // серверная: соединяем ИмяСервера и ИмяБазы через "/" srv = НСтр(params, "Srvr"); name = НСтр(params, "Ref"); Если srv = Неопределено Или name = Неопределено Тогда Возврат ""; // неожиданный формат КонецЕсли; Возврат srv + "/" + name; КонецЕсли; КонецФункции
Если база файловая, мы просто возвращаем путь к папке (например, \\FileServer\1c_ib\). Если серверная, объединяем имя сервера и имя базы: например, ServerName:1541/Accounting. Эти данные удобно показывать в заголовках или логах, чтобы понять, к чему подключён пользователь. При этом проверьте, что НСтр() вернул не пусто – в редких случаях «чужая» строка может не содержать ожидаемые параметры.
Получение каталога информационной базы
Иногда требуется не просто строка соединения, а каталог информационной базы на диске. Для файловой базы это, разумеется, папка, указанная в параметре File. Для серверной такой директории не существует (данные хранятся в СУБД), поэтому часто возвращают каталог временных файлов 1С. Например:
Функция КаталогИБ() Экспорт s = СтрокаСоединенияИнформационнойБазы(); Если Найти(ВРег(s, "FILE=")) = 1 Тогда // файловая база: возвращаем путь к каталогу Возврат НСтр(s, "File") + "\"; Иначе // серверная база: физический каталог неизвестен Возврат КаталогВременныхФайлов(); КонецЕсли; КонецФункции
Если база файловая, мы получаем из строки соединения значение File и добавляем обратный слэш. Если серверная, возвращаем результат встроенной функции КаталогВременныхФайлов() (в кластере 1С это, как правило, папка FComFiles/1541 или аналогичная). Стоит учесть: в зависимости от версии платформы функция может возвращать разный путь, но обычно это безопасный временный каталог, куда можно, например, сохранять генерируемые файлы при работе с базой.
Между тем, обратите внимание: коды примеров выше предполагают, что мы получаем непустую строку соединения. В редких случаях СтрокаСоединенияИнформационнойБазы() может вернуть пустую строку, если нет активного подключения. На практике при вызовах в обычной сессии это случается редко, но если делаете внешнее соединение или агента – стоит предусмотреть проверку. Так, если s="", можно сначала вызвать сам метод, а уже потом парсить.
Практические рекомендации и примеры
- Запуск нового сеанса. Чтобы из кода 1С запустить ещё один сеанс (например, клиента, подключенного к той же базе), используют метод
ЗапуститьСистему(). Параметр/IBConnectionStringпринимает строку, похожую на результат нашего метода. Пример:Так мы передадим новый процессу необходимые параметры подключения без явного указания пути и настроек.params = "/IBConnectionString """ + СтрокаСоединенияИнформационнойБазы() + """"; ЗапуститьСистему(params, Истина);
- Автоматизация через COM. Если ваша внешняя 1С (или WinAPI) вызывается через COM, передавайте строку напрямую в
Connect():Методapp = CreateObject("V85.Application") app.Connect(СтрокаСоединенияИнформационнойБазы())
Connect()сам распарсит полученную строку. - Логирование и отладка. Полезно записывать в журналы строку соединения при старте приложения или обработке: так легче понимать, с какой именно базой работает код. Особенно когда на сервере может быть несколько баз с разными именами.
- Регистрозависимый поиск. Как упоминалось, SQL Server-сервер может вернуть имя базы в верхнем регистре (например,
Ref="UT"вместоut). При сравнении или поиске используйтеВРег()илиСтрСравнить(), чтобы не прогадать с регистром. - Настройки кластера. Если инфобаза добавлена под названием
localhostв кластере,СтрокаСоединенияИнформационнойБазы()может возвращатьSrvr="localhost". Это нормально, но иногда сбивает с толку. Если хочется видеть сетевое имя, проверьте файл настроек1cv8wsrv.lstв каталоге srvinfo – там хранится имя сервера 1С. При необходимости перезапустите сервер 1С. Эта деталь нередко упоминается на форумах – к примеру, если вы получаетеlocalhost, хотя в настройках указали другое имя. - Использование в общих модулях. В БСП и других библиотеках часто есть стандартные функции, которые принимают строку соединения. Например,
ИнформационнаяБазаФайловаяможет принимать строку (если вы хотите проверить, что строка – для файловой БД). Однако чаще достаточно наличияFile=илиSrvr=в ней.
Каждый из приведённых примеров функций можно вынести в отдельный общий модуль и вызывать по необходимости. С повторением при обучении: мы уже много раз сказали «строка соединения», и это не случайно – акцент важен.
Заключение
Мы рассмотрели все тонкости метода СтрокаСоединенияИнформационнойБазы(): от формата возвращаемой строки до практического использования. Этот метод – надёжный и универсальный инструмент для работы с путём к 1C-базе. Он отлично вписывается в сценарии автоматического запуска, внешних подключений и административных проверок. Остаётся лишь открытым вопрос: если мир движется к облачным сервисам, не появится ли скоро новая, ещё более «облачная» альтернатива этой методике? А пока – полагаемся на уже знакомые приёмы.
И в конце – на размышление: возможно, кто-то из вас знает трюк, который сделает работу со строкой соединения ещё удобнее? Чем ещё методу удивить профессионала 1С в будущем?














































