Как программно получить наименование информационной базы из списка запуска и изменить синоним конфигурации в 1С

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

При работе с платформой «1С:Предприятие» перед разработчиками часто возникают задачи кастомизации интерфейса или идентификации конкретной базы для пользователя. Две наиболее распространенные ситуации — это необходимость **получить то название базы**, которое пользователь видит в стартовом окне запуска (лаунчере `1CEStart`), и желание **программно изменить синоним конфигурации** (заголовок приложения в верхней панели окна).

Рассмотрим подробно, почему стандартные методы обращения к метаданным не всегда дают нужный результат, где хранится список баз запуска и как обойти технологические ограничения платформы.

1. Почему Метаданные.Имя или Метаданные.Синоним не подходят для получения имени из списка баз

Разберем типичную ошибку: попытку обратиться к свойствам конфигурации напрямую через объект Метаданные.

Если в коде написать:


ИмяКонфигурации = Метаданные.Имя;
СинонимКонфигурации = Метаданные.Синоним;
Сообщить(ИмяКонфигурации);

Для типовой конфигурации «Управление производственным предприятием» метод вернет УправлениеПроизводственнымПредприятием. Однако у пользователя в окне выбора баз эта же база может называться «Рабочая база (Бухгалтерия 2024)» или «Тестовая УПП». Внутри самой базы данных название из окна запуска **не хранится**, так как один и тот же сервер или файл базы может быть добавлен у разных пользователей под абсолютно разными наименованиями.

2. Как программно определить название базы из окна запуска (ibases.v8i)

Выясним, где именно хранится имя базы из списка запуска. Стартовый запуск 1С использует локальный текстовый файл настроек с расширением .v8i, расположенный в каталоге персональных данных пользователя Windows:

%APPDATA%\1C\1CEStart\ibases.v8i

Чтобы найти наименование текущей информационной базы, проанализируем следующий алгоритм:

  1. С помощью встроенной функции СтрокаСоединенияИнформационнойБазы() получаем текущие параметры подключения (путь к каталогу или адрес сервера и имя базы на кластере).
  2. Считываем текстовый файл ibases.v8i.
  3. Парсим файл по секциям, отыскивая блок, у которого параметр Connect= совпадает с полученной строкой соединения.
  4. Заголовок найденного блока в квадратных скобках [Наименование] и будет являться именем базы из списка запуска.

Посмотрим на практическую реализацию этого алгоритма на языке 1С:


Функция ПолучитьНаименованиеТекущейБазыИзСписка() Экспорт

    // 1. Получаем строку соединения текущего сеанса
    СтрокаПодключения = СтрокаСоединенияИнформационнойБазы();
    Если НЕ ЗначениеЗаполнено(СтрокаПодключения) Тогда
        Возврат "";
    КонецЕсли;

    // 2. Формируем путь к файлу ibases.v8i
    #Если Клиент Тогда
        COMОбъектWsh = Новый COMОбъект("WScript.Shell");
        КаталогAppData = COMОбъектWsh.ExpandEnvironmentStrings("%APPDATA%");
        ПутьКФайлу = КаталогAppData + "\1C\1CEStart\ibases.v8i";
        
        ФайлСписка = Новый Файл(ПутьКФайлу);
        Если НЕ ФайлСписка.Существует() Тогда
            Возврат "";
        КонецЕсли;
        
        // 3. Читаем и парсим файл
        ТекстДокумент = Новый ТекстовыйДокумент;
        ТекстДокумент.Прочитать(ПутьКФайлу, КодировкаТекста.UTF8);
        
        ТекущийЗаголовок = "";
        
        Для НомерСтроки = 1 По ТекстДокумент.КоличествоСтрок() Цикл
            Стр = СокрЛП(ТекстДокумент.ПолучитьСтроку(НомерСтроки));
            
            // Если строка начинается с "[" и заканчивается на "]" - это заголовок базы
            Если Лев(Стр, 1) = "[" И Прав(Стр, 1) = "]" Тогда
                ТекущийЗаголовок = Сред(Стр, 2, СтрДлина(Стр) - 2);
            ИначеЕсли Найти(Стр, "Connect=") = 1 Тогда
                ПараметрыПодключения = Сред(Стр, 9);
                
                // Сравниваем строки подключения (без учета регистра и лишних пробелов)
                Если Найти(ВРег(СтрокаПодключения), ВРег(ПараметрыПодключения)) > 0 
                   ИЛИ Найти(ВРег(ПараметрыПодключения), ВРег(СтрокаПодключения)) > 0 Тогда
                    Возврат ТекущийЗаголовок;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    #КонецЕсли

    Возврат "";

КонецФункции

Важное примечание: Если база подключается через централизованные списки (параметр CommonInfoBases в файле 1CEStart.cfg) или web-сервисы, локальный файл ibases.v8i может не содержать нужной записи. В таких случаях потребуется дополнительно прочитать общий XML-файл списка баз, путь к которому указан в настройках 1CEStart.cfg.

3. Можно ли программно изменить синоним конфигурации

Перейдем ко второму вопросу: можно ли изменить свойство Метаданные.Синоним из программного кода?

Ответ платформы: Нет, в режиме «1С:Предприятие» изменить синоним конфигурации нельзя.

В режиме исполняемого модуля все объекты дерева метаданных доступны **исключительно для чтения**. Утверждение о том, что это можно сделать через механизм расширений, также является заблуждением: расширение имеет собственное имя и синоним, но изменить свойства основной конфигурации оно не может.

4. Альтернативные решения: управление заголовком программы

Если цель состоит в том, чтобы визуально изменить заголовок главного окна программы (например, вывести туда имя базы или текущую организацию), существуют штатные платформенные методы. Для автоматического формирования информативных заголовков можно использовать решение для изменения заголовков приложений 1С.

Разберем способы динамического изменения заголовка приложения в режиме сеанса пользователя:

  1. Метод УстановитьЗаголовокСистемы():

    Позволяет задать произвольную строку в заголовке главного окна 1С.

    
    // Устанавливаем пользовательский заголовок окна
    ИмяБазы = ПолучитьНаименованиеТекущейБазыИзСписка();
    Если ЗначениеЗаполнено(ИмяБазы) Тогда
        УстановитьЗаголовокСистемы("1С:УПП - " + ИмяБазы);
    Иначе
        УстановитьЗаголовокСистемы("Моя рабочая база");
    КонецЕсли;
    
  2. Метод УстановитьЗаголовокКлиентскогоПриложения():

    Используется в управляемом клиенте для изменения текста в шапке программы.

    УстановитьЗаголовокКлиентскогоПриложения("ООО 'Производство' [ОСНО]");
  3. Применение Библиотеки Стандартных Подсистем (БСП):

    В современных конфигурациях заголовок системы управляется константой ЗаголовокСистемы. Достаточно записать нужные данные в эту константу, и при старте программы заголовок обновится автоматически у всех пользователей.

Если же необходимо физически изменить синоним конфигурации в метаданных без использования Конфигуратора вручную, это делается исключительно во внерабочее время путем пакетного запуска Конфигуратора через командную строку (выгрузка конфигурации в XML-файлы, программная замена значения синонима в файле Configuration.xml и загрузка обратно).

← На главную