Как автоматизировать переиндексацию базы 1С 7.7 при загрузке сервера и избежать зависаний при запуске от имени "Системы"?

Системный администратор 1С v7.7 IT и автоматизация бизнеса
← На главную

Переиндексация базы данных 1С 7.7 является важной процедурой для поддержания ее производительности и целостности, особенно после непредвиденных завершений работы. Часто возникает необходимость автоматизировать этот процесс при каждой загрузке сервера, чтобы обеспечить корректную работу системы до того, как пользователи начнут работу. Однако запуск таких задач от имени системной учетной записи "Система" (SYSTEM) в Планировщике заданий Windows может столкнуться с трудностями: процесс 1С зависает на этапе выбора информационной базы, так как системная учетная запись не имеет интерактивного профиля пользователя и, соответственно, не видит список баз.

В этой статье мы подробно рассмотрим, как решить эту проблему, предлагая два основных подхода: использование Планировщика заданий с выделенной учетной записью пользователя и, в качестве альтернативы, непосредственное конфигурирование реестра для пользователя "Система".

Решение 1: Использование Планировщика заданий Windows с выделенной учетной записью пользователя

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

  1. Создаем выделенную учетную запись Windows:

    Начнем с создания новой учетной записи пользователя в операционной системе Windows Server. Эту учетную запись мы будем использовать исключительно для запуска регламентных задач 1С. Рекомендуем присвоить ей ограниченные права, достаточные для работы с файлами базы 1С и запуска программы 1С 7.7. Например, это может быть локальный пользователь или пользователь домена, входящий в группу "Пользователи".

  2. Настраиваем профиль 1С для этой учетной записи:

    После создания учетной записи необходимо один раз войти на сервер под ее именем. Затем вручную запустим 1С 7.7 (в режиме "Конфигуратор" или "Предприятие"). В открывшемся окне выбора информационных баз добавьте путь к вашей базе данных 1С. Это действие создаст необходимые записи в реестре в ветке HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles, а также сформирует пользовательский профиль 1С. Убедимся, что при запуске 1С не появляются никакие интерактивные окна (например, "Совет дня" или запрос на обновление), которые могут остановить автоматическое выполнение. При необходимости отключите их в настройках 1С.

  3. Подготавливаем файл сценария reindex.prm:

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

    
    [General]
    Output=reindex.log
    Quit=Y
    CheckAndRepair=Y
    UnloadData=N
    SaveData=N
    AutoExchange=N
    [CheckAndRepair]
    Repair=N
    PhysicalIntegrity=N
    Reindex=Y
    LogicalIntegrity=N
    RecalcSecondaries=N
    RecalcTotals=N
    Pack=N
    SkipUnresolved=N
    CreateForUnresolved=N
    Rreconstruct=N
    

    Пояснения к параметрам:

    • Output=reindex.log: указывает файл, куда будут записываться логи выполнения пакетного режима. Это критически важно для отладки.
    • Quit=Y: обязательный параметр, который указывает 1С автоматически завершить работу после выполнения всех операций. Без него процесс 1С может зависнуть.
    • CheckAndRepair=Y: активирует режим "Тестирование и исправление".
    • Reindex=Y (в секции [CheckAndRepair]): указывает на необходимость выполнения переиндексации базы данных.
    • Остальные параметры (UnloadData, SaveData, Repair и т.д.) установлены в N, так как мы сосредоточены только на переиндексации. Вы можете настроить их по своему усмотрению.
  4. Создаем пакетный файл (батник) для запуска 1С:

    Теперь создадим пакетный файл (например, reindex.bat), который будет вызывать 1С 7.7 с нужными параметрами. Этот файл также разместим в каталоге со служебными скриптами.

    
    echo off
    schtasks /change /tn 1CTovar /disable
    schtasks /change /tn 1CZakaz /disable
    TASKKILL /F /IM 1cv7.exe /IM 1cv7.exe
    start "" "C:\Program Files (x86)\1Cv77\BIN\1CV7.exe" config /DD:\Work\TEST\ /NReindexUser /P123123 /@D:\Work\TEST\Reindex.prm
    timeout /T 600
    schtasks /change /tn 1CTovar /enable
    schtasks /change /tn 1CZakaz /enable
    

    Пояснения к батнику:

    • schtasks /change /tn 1CTovar /disable, schtasks /change /tn 1CZakaz /disable: эти команды отключают другие запланированные задачи, которые могут конфликтовать с переиндексацией (например, требовать монопольного доступа к базе). После переиндексации они снова включаются.
    • TASKKILL /F /IM 1cv7.exe /IM 1cv7.exe: будьте крайне осторожны с этой командой! Она принудительно завершает все запущенные процессы 1cv7.exe на сервере. Если на сервере работают другие пользователи или другие базы 1С, это приведет к потере их несохраненных данных. Используйте эту команду только в том случае, если вы абсолютно уверены, что никаких других сеансов 1С не должно быть активным во время переиндексации. В противном случае рассмотрите более избирательные методы завершения процессов или убедитесь, что база точно свободна.
    • start "" "C:\Program Files (x86)\1Cv77\BIN\1CV7.exe" config /DD:\Work\TEST\ /NReindexUser /P123123 /@D:\Work\TEST\Reindex.prm: это основная команда запуска.
      • "C:\Program Files (x86)\1Cv77\BIN\1CV7.exe": полный путь к исполняемому файлу 1С 7.7.
      • config: указывает на запуск в режиме конфигуратора.
      • /DD:\Work\TEST\: путь к каталогу вашей информационной базы. Обязательно используйте обратные слеши в конце пути, если это каталог!
      • /NReindexUser: имя пользователя 1С (не пользователя Windows!), под которым будет выполняться переиндексация. Этот пользователь должен существовать в конфигурации 1С и иметь права на выполнение "Тестирования и исправления".
      • /P123123: пароль пользователя 1С.
      • /@D:\Work\TEST\Reindex.prm: полный путь к файлу сценария reindex.prm, который мы создали ранее.
    • timeout /T 600: команда ожидания в течение 600 секунд (10 минут). Установите адекватное время, исходя из размера вашей базы и времени, необходимого для переиндексации.
  5. Настраиваем задачу в Планировщике заданий Windows:

    Теперь, когда у нас есть батник и файл сценария, мы создадим задачу в Планировщике заданий Windows (taskschd.msc).

    1. Откроем "Планировщик заданий" (Task Scheduler).
    2. В правой панели выберем "Создать простую задачу..." (Create Basic Task...) или "Создать задачу..." (Create Task...) для более детальной настройки. Рекомендуем "Создать задачу...".
    3. На вкладке "Общие" (General):
      • Укажем имя задачи (например, "1С 7.7 Переиндексация при загрузке").
      • Критически важно: выберем опцию "Выполнять вне зависимости от входа в систему" (Run whether user is logged on or not).
      • Установим галку "Выполнять с наивысшими правами" (Run with highest privileges).
      • В разделе "Изменить пользователя или группу..." (Change User or Group...) укажем созданную нами выделенную учетную запись Windows, под которой мы настраивали профиль 1С. После сохранения задачи Windows запросит пароль для этой учетной записи, который будет храниться в зашифрованном виде.
    4. На вкладке "Триггеры" (Triggers):
      • Создадим новый триггер.
      • В поле "Начать задачу" (Begin the task) выберем "При загрузке" (At startup).
      • Убедимся, что триггер включен.
    5. На вкладке "Действия" (Actions):
      • Создадим новое действие.
      • В поле "Действие" (Action) выберем "Запуск программы" (Start a program).
      • В поле "Программа или сценарий" (Program/script) укажем полный путь к вашему батнику (например, D:\Work\TEST\reindex.bat).
      • В поле "Добавить аргументы (необязательно)" (Add arguments (optional)) и "Рабочая папка (необязательно)" (Start in (optional)) ничего не указываем, если все пути прописаны в батнике.
    6. На вкладках "Условия" (Conditions) и "Параметры" (Settings) настроим задачу по необходимости (например, не запускать, если компьютер работает от батареи, или принудительно завершать, если задача выполняется слишком долго).
    7. Сохраним задачу.

Решение 2: Автоматическое добавление информации о базах в реестр для неинтерактивных пользователей (например, "Система")

Если по каким-либо причинам вы не можете использовать выделенную учетную запись пользователя и вам необходимо запускать задачу именно от имени "Системы" (SYSTEM), то проблема с отсутствием списка баз в 1С 7.7 для этой учетной записи решается путем прямого добавления необходимых записей в реестр. Учетная запись "Система" не имеет интерактивного профиля HKEY_CURRENT_USER в привычном понимании. Ее профиль соответствует ветке HKEY_USERS\S-1-5-18.

  1. Экспортируем ветку реестра с настроенного рабочего места:

    Для начала нам понадобится корректная запись о вашей базе 1С. Вы можете получить ее с любого компьютера, где 1С 7.7 уже настроена и нужная база добавлена в список. Мы экспортируем соответствующую ветку реестра:

    1. Откройте "Редактор реестра" (regedit.exe) на компьютере, где 1С настроена.
    2. Перейдите по пути: HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles.
    3. Щелкните правой кнопкой мыши по ветке Titles и выберите "Экспортировать" (Export). Сохраните файл с расширением .reg (например, 1c_titles.reg).

    Пример содержимого такого .reg файла (пути и имена могут отличаться):

    
    Windows Registry Editor Version 5.00
    
    [HKEY_CURRENT_USER\Software\1C\1Cv7\7.7\Titles]
    "МояБаза"="D:\\Work\\TEST\\"
    

    Обратите внимание: возможно, потребуется ручное редактирование этого файла, чтобы убедиться, что путь к базе указан верно и соответствует требуемому формату.

  2. Добавляем информацию о базе в реестр для пользователя "Система" через батник:

    Вместо непосредственного импорта .reg файла, который может быть сложен для профиля "Система", мы можем использовать команду reg add в нашем пакетном файле. Это позволяет напрямую добавлять или изменять ключи реестра для профиля S-1-5-18 (который соответствует "Системе").

    Модифицируем наш батник, добавив команды для работы с реестром до запуска 1С:

    
    echo off
    REM Добавляем основную ветку для 1С 7.7 Titles, если ее нет
    reg ADD "HKU\S-1-5-18\Software\1C\1Cv7\7.7\Titles" /f
    
    REM Добавляем запись о базе "МояБаза" с путем "D:\Work\TEST\"
    reg ADD "HKU\S-1-5-18\Software\1C\1Cv7\7.7\Titles" /v "МояБаза" /t REG_SZ /d "D:\Work\TEST\" /f
    
    REM Опционально: отключаем "Совет дня" для профиля Системы, чтобы избежать интерактивных окон
    reg ADD "HKU\S-1-5-18\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /f
    reg ADD "HKU\S-1-5-18\Software\1C\1Cv7\7.7\Options\TIPOTHDAYGLB" /v TipOfTheDayGlobal /t REG_SZ /d "0" /f
    
    schtasks /change /tn 1CTovar /disable
    schtasks /change /tn 1CZakaz /disable
    TASKKILL /F /IM 1cv7.exe /IM 1cv7.exe
    start "" "C:\Program Files (x86)\1Cv77\BIN\1CV7.exe" config /DD:\Work\TEST\ /NReindexUser /P123123 /@D:\Work\TEST\Reindex.prm
    timeout /T 600
    schtasks /change /tn 1CTovar /enable
    schtasks /change /tn 1CZakaz /enable
    

    Пояснения к командам reg add:

    • HKU\S-1-5-18: это уникальный идентификатор (SID) для учетной записи "Система". Именно здесь хранятся настройки реестра для этой учетной записи.
    • /v "МояБаза": имя, под которым информационная база будет отображаться в списке 1С. Оно должно совпадать с тем, что вы указали бы при ручном добавлении.
    • /t REG_SZ: тип данных значения реестра (строка).
    • /d "D:\Work\TEST\": путь к каталогу информационной базы 1С. Убедитесь в корректности слешей.
    • /f: параметр, который принудительно перезаписывает существующие значения, если они есть.
    • Добавление ключей для отключения "Совета дня" также важно, чтобы 1С не пыталась показать диалоговое окно, которое может заблокировать процесс.
  3. Настраиваем задачу в Планировщике заданий Windows (для пользователя "Система"):

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

    1. На вкладке "Общие" (General) в разделе "Изменить пользователя или группу..." (Change User or Group...) выберите учетную запись "Система" (SYSTEM).
    2. Остальные настройки (триггеры "При загрузке", действия с указанием пути к батнику, "Выполнять вне зависимости от входа в систему" и "Выполнять с наивысшими правами") остаются прежними.

    После сохранения задачи, при каждой загрузке сервера, операционная система сначала добавит необходимые записи о базе в реестр для профиля "Системы", а затем запустит 1С 7.7 в пакетном режиме, которая уже сможет найти базу и выполнить переиндексацию.

Общие рекомендации и советы по отладке

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

  1. Проверяем права доступа:

    Убедитесь, что учетная запись Windows, под которой запускается задача (будь то выделенный пользователь или "Система"), имеет полные права (чтение, запись, изменение, удаление) на следующие ресурсы:

    • Каталог информационной базы 1С (включая все файлы *.dbf, *.cdx, *.log).
    • Каталог, где хранится исполняемый файл 1cv7.exe.
    • Каталог, где хранится файл сценария .prm и ваш батник.
    • Каталог для временных файлов 1С (обычно в профиле пользователя или в %TEMP%).

    Недостаточные права являются одной из наиболее частых причин сбоев автоматизированных задач.

  2. Используем логирование:

    Мы уже упоминали параметр Output=reindex.log в файле reindex.prm. После запуска задачи всегда анализируйте содержимое этого файла. В нем 1С 7.7 будет записывать информацию о ходе выполнения пакетного режима, возможных ошибках или предупреждениях. Это ваш главный инструмент для диагностики проблем, если переиндексация не проходит успешно.

  3. Корректность ключей командной строки:

    Тщательно проверяйте каждый ключ в командной строке запуска 1С (/D, /N, /P, /@). Даже лишний пробел, отсутствующие или некорректно расставленные кавычки могут привести к тому, что 1С не сможет найти базу, пользователя или файл сценария. Особенно внимательно отнеситесь к путям: в 1С 7.7 они чувствительны к завершающим слешам для каталогов.

  4. Таймаут:

    Значение timeout /T 600 в батнике должно быть адекватным. Если база большая, переиндексация может занять значительно больше 10 минут. Если процесс 1С завершается по таймауту или останавливается раньше, чем завершена переиндексация, увеличьте это значение.

  5. Завершение работы 1С:

    Параметр Quit=Y в файле reindex.prm является критически важным. Если он отсутствует или установлен в N, конфигуратор 1С останется запущенным после выполнения всех операций, блокируя процесс и потенциально мешая другим задачам или корректному завершению батника.

  6. Осторожность с TASKKILL:

    Еще раз подчеркнем: команда TASKKILL /F /IM 1cv7.exe является агрессивной и завершает все процессы 1С 7.7. Если на вашем сервере одновременно работают несколько баз или несколько пользователей с 1С 7.7, использование этой команды может привести к потере данных и нарушению работы. В идеале, если есть другие пользователи, необходимо предусмотреть механизм, который уведомляет их о предстоящей переиндексации и дает время на корректное завершение работы, или использовать более мягкие методы завершения процессов, если это возможно.

  7. Тестирование перед внедрением:

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

Применяя эти рекомендации и тщательно настраивая каждую часть процесса, вы сможете успешно автоматизировать переиндексацию базы 1С 7.7 при загрузке сервера, обеспечивая ее стабильность и работоспособность без необходимости ручного вмешательства.

← На главную