Как вывести название или путь к базе данных в заголовке окна 1С:Предприятия 7.7?

Программист 1С v7.7 1С:Зарплата и Управление Персоналом IT и автоматизация бизнеса
← На главную

При одновременной работе с несколькими информационными базами конфигураций 1С 7.7 (например, рабочей базой, тестовой копией или базами разных филиалов) легко запутаться, так как стандартный заголовок окна программы содержит только наименование конфигурации и номер редакции. Выясним причину, почему стандартная функция ТекущаяИБНаименование() не решает эту задачу, и разберем по шагам надежные способы отображения каталога или имени базы в заголовке системы.

Почему не работает ТекущаяИБНаименование()

Функция ТекущаяИБНаименование() предназначена исключительно для работы с распределенными информационными базами (РИБ). Она возвращает строковое наименование узла, заданное в диалоге управления распределенными данными центральной базы. Если база не является распределенной, эта функция всегда возвращает пустую строку, из-за чего заголовок окна не изменяется.

Особенности работы функции ЗаголовокСистемы()

Проанализируем нюансы вызова процедуры ЗаголовокСистемы():

  1. Метод ЗаголовокСистемы() не заменяет заголовок полностью, а добавляет переданный текст к стандартной строке платформы (например, к надписи 1C:Предприятие - Зарплата+Кадры. Редакция 2.3).
  2. Вызов метода необходимо размещать в процедуре ПриНачалеРаботыСистемы() в Глобальном модуле конфигурации.
  3. В типовых конфигурациях в процессе инициализации прав пользователей заголовок может перезаписываться. Поэтому добавление своего кода следует выполнять в самом конце процедуры ПриНачалеРаботыСистемы().

Способ 1. Вывод пути к каталогу информационной базы

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

Откроем конфигуратор, перейдем в Глобальный модуль, найдем процедуру ПриНачалеРаботыСистемы() и добавим в ее конец следующий код:


Процедура ПриНачалеРаботыСистемы()
    // Основной код инициализации конфигурации...

    ЗаголовокСистемы(" [" + КаталогИБ() + "]");
КонецПроцедуры

Если в конфигурации ведется учет по организациям и заполнена соответствующая константа, можно скомбинировать вывод названия организации и пути к данным:


ЗаголовокСистемы(" - " + СокрЛП(Константа.НазваниеОрганизации) + " (" + КаталогИБ() + ")");

Способ 2. Получение точного наименования базы из реестра Windows

Разберем ситуацию, когда требуется вывести именно то наименование базы, которое отображается в окне запуска программы (стартере). Список баз текущего пользователя хранится в системном реестре Windows по пути HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles, где ключом выступает путь к каталогу, а значением — заданное пользователем имя.

Посмотрим на пример чтения этой ветки реестра через объект WScript.Shell:


Процедура ПриНачалеРаботыСистемы()
    // Основной код инициализации...

    ИмяБазы = "";
    Попытка
        WshShell = СоздатьОбъект("WScript.Shell");
        ИмяБазы = WshShell.RegRead("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles\" + КаталогИБ());
    Исключение
        Попытка
            ПутьБезСлеша = Лев(КаталогИБ(), СтрДлина(КаталогИБ()) - 1);
            ИмяБазы = WshShell.RegRead("HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles\" + ПутьБезСлеша);
        Исключение
            ИмяБазы = КаталогИБ();
        КонецПопытки;
    КонецПопытки;

    ЗаголовокСистемы(" - " + СокрЛП(ИмяБазы));
КонецПроцедуры

Способ 3. Передача наименования через параметр запуска

Если нет возможности или прав на чтение системного реестра, можно передавать произвольное имя базы через командную строку запуска. Для этого в свойствах ярлыка к исполняемому файлу 1cv7.exe указывается ключ /C:

1cv7.exe enterprise /D"C:\1C_Bases\ZIK" /C"Основная база ЗиК"

В глобальном модуле прочитаем этот параметр с помощью встроенной функции ПараметрЗапуска():


Если ПустаяСтрока(ПараметрЗапуска()) = 0 Тогда
    ЗаголовокСистемы(" - " + СокрЛП(ПараметрЗапуска()));
Иначе
    ЗаголовокСистемы(" - " + КаталогИБ());
КонецЕсли;

Способ 4. Использование текстового файла-маркера в каталоге базы

Рассмотрим подробнее способ, который подходит для сетевых баз с большим количеством пользователей, чтобы не настраивать ярлыки на каждом рабочем месте индивидуально:

  1. В каталоге информационной базы создаем простой текстовый файл с именем title.txt.
  2. В первой строке файла записываем понятное название базы (например, Филиал Север — Зарплата).
  3. В процедуре ПриНачалеРаботыСистемы() считываем содержимое файла с помощью объекта Текст:

ФайлЗаголовка = КаталогИБ() + "title.txt";
Если ФС.СуществуетФайл(ФайлЗаголовка) = 1 Тогда
    Т = СоздатьОбъект("Текст");
    Т.Открыть(ФайлЗаголовка);
    Если Т.КоличествоСтрок() > 0 Тогда
        ЗаголовокСистемы(" - " + СокрЛП(Т.ПолучитьСтроку(1)));
    КонецЕсли;
Иначе
    ЗаголовокСистемы(" - " + КаталогИБ());
КонецЕсли;

Такой подход позволяет централизованно менять отображаемое имя базы для всех пользователей сразу простым редактированием текстового файла в папке базы.

← На главную