При разработке отчетов, сервисных обработок и регламентных заданий часто возникает необходимость идентифицировать информационную базу. Разберем ситуацию, когда требуется получить именно то наименование базы, которое отображается у пользователя в окне стартера 1С, а не путь к файлу или имя базы на сервере СУБД.
Стандартная функция встроенного языка 1С СтрокаСоединенияИнформационнойБазы() возвращает технические параметры подключения:
File="C:\Bases\Trade";.Srvr="ServerName";Ref="BaseName";.Штатного метода, который вернул бы пользовательский заголовок из окна запуска, в платформе 1С не существует. Это обусловлено архитектурой программы: наименование в списке запуска является свойством ярлыка в стартере 1С (1cestart), а не самой базы данных. Один и тот же каталог или серверная база у разных пользователей может называться по-разному (например, «Бухгалтерия», «Наша Бухгалтерия» или «Тестовая БП»).
Информация о списке баз хранится в локальном файле профиля пользователя ibases.v8i (в ОС Windows путь по умолчанию: %APPDATA%\1C\1CEStart\ibases.v8i).
Рассмотрим практические способы решения этой задачи.
Чтобы формирование отчетов и работа фоновых заданий не зависели от того, как отдельный пользователь переименовал ярлык в своем окне запуска, правильнее хранить понятное наименование внутри самой базы данных.
Проанализируем варианты реализации этого подхода:
НаименованиеБазыДляОтчетов) или используется стандартный механизм ЗаголовокСистемы(). Администратор задает в ней официальное название базы.СтрокаСоединенияИнформационнойБазы() и сравнивает полученный путь с эталонным значением из константы. Если пути совпадают, выводится официальное название, если нет — система считает базу копией (например, для тестирования) и выводит пометку «ТЕСТОВАЯ БАЗА».Посмотрим на пример работы с параметрами подключения и заголовком:
СтрокаПодключения = СтрокаСоединенияИнформационнойБазы();
ИмяДляОтчета = ЗаголовокСистемы();
Если Не ЗначениеЗаполнено(ИмяДляОтчета) Тогда
ИмяДляОтчета = СтрокаПодключения;
КонецЕсли;
Если запуск баз выполняется автоматически по расписанию через скрипты или пакетный файл, наименование можно передать напрямую при старте с помощью ключа /C.
Рассмотрим порядок действий:
1cv8.exe enterprise /F "C:\Bases\Trade" /C "Бухгалтерия Главная".ПараметрыЗапуска().Пример получения значения в коде:
ПереданноеИмя = ПараметрыЗапуска();
Если ЗначениеЗаполнено(ПереданноеИмя) Тогда
// Используем переданное имя в отчете
НаименованиеБазы = ПереданноеИмя;
КонецЕсли;
Если необходимо узнать наименование базы непосредственно из окна запуска текущего пользователя на клиенте, можно прочитать файл ibases.v8i.
Разберем алгоритм выполнения этой операции:
ibases.v8i в каталоге %APPDATA%\1C\1CEStart\.Connect= совпадает со значением, возвращаемым функцией СтрокаСоединенияИнформационнойБазы().Важное ограничение: данный способ работает только на тонком или толстом клиенте при наличии прав на чтение локальной файловой системы. Он не сработает в веб-клиенте, режиме внешнего соединения, через web-сервисы или при прямом запуске исполняемого файла 1cv8.exe без использования окна стартера.
Для надежной работы отчетов и сервисных механизмов наиболее оптимальным решением является использование внутренних настроек конфигурации (констант или заголовка системы) либо ориентация на уникальный каталог/параметры подключения, получаемые через СтрокаСоединенияИнформационнойБазы().