При одновременной работе с несколькими информационными базами конфигураций 1С 7.7 (например, рабочей базой, тестовой копией или базами разных филиалов) легко запутаться, так как стандартный заголовок окна программы содержит только наименование конфигурации и номер редакции. Выясним причину, почему стандартная функция ТекущаяИБНаименование() не решает эту задачу, и разберем по шагам надежные способы отображения каталога или имени базы в заголовке системы.
Функция ТекущаяИБНаименование() предназначена исключительно для работы с распределенными информационными базами (РИБ). Она возвращает строковое наименование узла, заданное в диалоге управления распределенными данными центральной базы. Если база не является распределенной, эта функция всегда возвращает пустую строку, из-за чего заголовок окна не изменяется.
Проанализируем нюансы вызова процедуры ЗаголовокСистемы():
ЗаголовокСистемы() не заменяет заголовок полностью, а добавляет переданный текст к стандартной строке платформы (например, к надписи 1C:Предприятие - Зарплата+Кадры. Редакция 2.3).ПриНачалеРаботыСистемы() в Глобальном модуле конфигурации.ПриНачалеРаботыСистемы().Рассмотрим самый простой, универсальный и надежный вариант. Использование пути к каталогу базы позволяет безошибочно отличать рабочую базу от архивных копий или тестовых площадок на сервере.
Откроем конфигуратор, перейдем в Глобальный модуль, найдем процедуру ПриНачалеРаботыСистемы() и добавим в ее конец следующий код:
Процедура ПриНачалеРаботыСистемы()
// Основной код инициализации конфигурации...
ЗаголовокСистемы(" [" + КаталогИБ() + "]");
КонецПроцедуры
Если в конфигурации ведется учет по организациям и заполнена соответствующая константа, можно скомбинировать вывод названия организации и пути к данным:
ЗаголовокСистемы(" - " + СокрЛП(Константа.НазваниеОрганизации) + " (" + КаталогИБ() + ")");
Разберем ситуацию, когда требуется вывести именно то наименование базы, которое отображается в окне запуска программы (стартере). Список баз текущего пользователя хранится в системном реестре 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\" + ПутьБезСлеша);
Исключение
ИмяБазы = КаталогИБ();
КонецПопытки;
КонецПопытки;
ЗаголовокСистемы(" - " + СокрЛП(ИмяБазы));
КонецПроцедуры
Если нет возможности или прав на чтение системного реестра, можно передавать произвольное имя базы через командную строку запуска. Для этого в свойствах ярлыка к исполняемому файлу 1cv7.exe указывается ключ /C:
1cv7.exe enterprise /D"C:\1C_Bases\ZIK" /C"Основная база ЗиК"
В глобальном модуле прочитаем этот параметр с помощью встроенной функции ПараметрЗапуска():
Если ПустаяСтрока(ПараметрЗапуска()) = 0 Тогда
ЗаголовокСистемы(" - " + СокрЛП(ПараметрЗапуска()));
Иначе
ЗаголовокСистемы(" - " + КаталогИБ());
КонецЕсли;
Рассмотрим подробнее способ, который подходит для сетевых баз с большим количеством пользователей, чтобы не настраивать ярлыки на каждом рабочем месте индивидуально:
title.txt.ПриНачалеРаботыСистемы() считываем содержимое файла с помощью объекта Текст:
ФайлЗаголовка = КаталогИБ() + "title.txt";
Если ФС.СуществуетФайл(ФайлЗаголовка) = 1 Тогда
Т = СоздатьОбъект("Текст");
Т.Открыть(ФайлЗаголовка);
Если Т.КоличествоСтрок() > 0 Тогда
ЗаголовокСистемы(" - " + СокрЛП(Т.ПолучитьСтроку(1)));
КонецЕсли;
Иначе
ЗаголовокСистемы(" - " + КаталогИБ());
КонецЕсли;
Такой подход позволяет централизованно менять отображаемое имя базы для всех пользователей сразу простым редактированием текстового файла в папке базы.