При автоматизации рабочих мест системные администраторы часто сталкиваются с нестандартным поведением стартера 1С:Предприятия. Разберем типичную ситуацию: в конфигурационном файле 1CEStart.cfg администратор задает путь к общему списку баз с помощью параметра CommonInfoBases, однако при первом старте окно программы открывается с сообщением «Список информационных баз пуст. Добавить в список информационную базу?». Список сетевых баз подтягивается только после того, как пользователь закроет стартер и запустит его повторно. Выясним причину этой проблемы и рассмотрим надежные варианты ее устранения.
Проанализируем механику работы стартера 1С. При запуске исполняемый файл опрашивает локальный файл списка баз %APPDATA%\1C\1CEStart\ibases.v8i. Если пользователь входит в систему впервые, этот файл физически отсутствует. Платформа воспринимает отсутствие файла как первичный запуск на чистой системе и сразу выводит пользователю интерактивное модальное окно с вопросом о добавлении новой базы.
Чтение и слияние сетевого файла, указанного в директиве CommonInfoBases, происходит асинхронно, а сохранение объединенного списка в локальный файл ibases.v8i стартер выполняет только в момент штатного закрытия окна. В результате возникает замкнутый круг: пока окно не закрыто, локальный файл со списком не сформирован, а пока он не сформирован, стартер не показывает базы.
Рассмотрим самое простое и элегантное решение, позволяющее избежать принудительного открытия и закрытия окон. Чтобы стартер не считал запуск первичным и не выводил вопрос о создании новой базы, достаточно создать пустой файл ibases.v8i до вызова 1С. Платформа обнаружит существующий файл, пропустит вопрос и автоматически подгрузит базы из сетевого ресурса, указанного в CommonInfoBases.
Разберем по шагам реализацию в BAT-файле:
ibases.v8i.1CEStart.cfg.Посмотрим на пример командного файла:
@echo off
set START_DIR=%APPDATA%\1C\1CEStart
if not exist "%START_DIR%" mkdir "%START_DIR%"
rem Создаем пустой файл списка баз для предотвращения диалога первичного запуска
if not exist "%START_DIR%\ibases.v8i" type nul > "%START_DIR%\ibases.v8i"
rem Прописываем путь к сетевому списку баз
echo CommonInfoBases=\\serv\1c\bases.v8i > "%START_DIR%\1CEStart.cfg"
rem Запуск стартера
start "" "C:\Program Files\1cv8\common\1cestart.exe"
Если для каждого пользователя формируется индивидуальный набор баз, надежнее всего отказаться от динамического слияния через параметр CommonInfoBases и копировать готовый файл баз напрямую в профиль пользователя. В этом случае стартер при первом же запуске сразу прочитает готовый перечень.
Рассмотрим подробнее сценарий входа пользователя:
@echo off
set APPDATA_1C=%APPDATA%\1C\1CEStart
if not exist "%APPDATA_1C%" mkdir "%APPDATA_1C%"
rem Копируем персональный файл баз пользователя с сервера
copy /Y "\\serv\1c\lists\%USERNAME%.v8i" "%APPDATA_1C%\ibases.v8i"
rem Запуск стартера с уже готовым списком
start "" "C:\Program Files\1cv8\common\1cestart.exe"
Важный момент: если требуется регулярная очистка пользовательского кэша баз, не обязательно жестко фиксировать идентификаторы ID в файле .v8i. Для надежной очистки кэша предусмотрен параметр запуска /ClearCache, который можно централизованно прописать в файле .v8i в параметре AdditionalParameters=/ClearCache.
Если специфика инфраструктуры требует именно физического запуска стартера для генерации локального кэша с последующим закрытием, разберем особенности закрытия процессов Windows из командной строки.
Проанализируем архитектуру запуска: файл 1cestart.exe является загрузчиком. Он определяет подходящую версию платформы, запускает процесс 1cv8s.exe (стартер конкретного релиза) и сразу завершает свою работу. Поэтому отправлять команду на закрытие нужно не загрузчику, а процессу 1cv8s.exe.
Для корректного завершения (аналог отправки сочетания клавиш Alt+F4 или оконного сообщения WM_CLOSE) используется утилита taskkill без флага принудительного завершения /F. Флаг /F убивает процесс мгновенно, не позволяя стартеру сохранить объединенный список баз.
Разберем пример реализации такого сценария:
@echo off
rem Запуск стартера
start "" "C:\Program Files\1cv8\common\1cestart.exe"
rem Ожидание отрисовки окна и считывания сетевых настроек
timeout /t 5 /nobreak > nul
rem Мягкое закрытие окна стартера (аналог Alt+F4)
taskkill /IM 1cv8s.exe
rem Повторный запуск уже с примененными настройками
start "" "C:\Program Files\1cv8\common\1cestart.exe"
Еще один практический метод инициализации настроек без зависания на интерактивных вопросах — запуск 1С в пакетном режиме с передачей команды выхода. Когда платформа стартует для выполнения конкретного действия в базе, графический диалог со списком не открывается, но внутренние структуры конфигурационных файлов инициализируются.
Для этого можно создать пустую локальную базу и кратковременно подключиться к ней с вызовом команды завершения работы, например, через пакетный запуск конфигуратора или запуск клиентского приложения с параметром закрытия сеанса.
При размещении исполняемых файлов на сетевом ресурсе (например, \\serv\1c\bin\) платформа часто не находит файл nethasp.ini рядом с исполняемым файлом из-за специфики обработки UNC-путей операционной системой.
Для гарантированного обнаружения настроек сетевых ключей HASP рекомендуется размещать файл nethasp.ini в локальных общесистемных каталогах клиентской рабочей станции:
%ALLUSERSPROFILE%\1C\1cv8\conf\nethasp.ini (или C:\ProgramData\1C\1cv8\conf\nethasp.ini).%APPDATA%\1C\1cv8\conf\nethasp.ini.Размещение конфигурационного файла в каталоге %ProgramData%\1C\1cv8\conf\ централизованно решает проблему поиска ключей защиты при сетевом запуске платформы на рабочих станциях.