Как настроить синхронизацию по расписанию в файловой базе 1С, если она работает только при запущенном клиентском приложении?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с файловыми базами 1С, особенно в небольших компаниях или для локальных нужд, часто возникает потребность в автоматической синхронизации данных по расписанию. Однако, стандартный механизм регламентных заданий в файловом варианте «1С:Предприятие» имеет свою специфику, которая может вызывать вопросы у пользователей и разработчиков. Давайте разберемся, как функционируют регламентные задания в файловых базах и какие существуют методы для их автоматического выполнения без постоянного контроля.

В чем особенность работы регламентных заданий в файловой базе 1С?

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

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

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

Метод 1: Автоматизация через командную строку и Планировщик задач Windows

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

Принцип работы:

  1. Мы создадим скрипт (обычно это обычный текстовый файл с расширением `.bat`), который будет содержать команду для запуска 1С с нужными параметрами.
  2. Далее, мы настроим стандартный Планировщик задач Windows. Он будет запускать наш скрипт в заданное время и с нужной периодичностью.
  3. При запуске скрипта, программа 1С откроется, выполнит необходимые регламентные задания (или конкретную обработку), и по завершении может быть автоматически закрыта, освобождая ресурсы.

Пошаговая настройка:

  1. Создание командного файла (.bat): Откройте любой текстовый редактор (например, Блокнот) и вставьте туда следующую строку, адаптировав ее под ваши параметры:

    
    "C:\Program Files\1cv8\8.3.20.1718\bin\1cv8.exe" ENTERPRISE /F "C:\Базы 1С\МояФайловаяБаза" /N "ПользовательДляОбмена" /P "МойПароль" /AllowExecuteScheduledJobs -On /DisableStartupMessages
    

    Не забудьте сохранить файл с расширением `.bat` (например, `ЗапускОбмена.bat`). Обратите внимание, что путь к исполняемому файлу 1С (`1cv8.exe`) и к базе данных должен быть заключен в кавычки, если он содержит пробелы.

  2. Ключевые параметры запуска: Разберем каждый параметр, который мы использовали в командной строке:

    • "C:\Program Files\1cv8\8.3.20.1718\bin\1cv8.exe": Это полный путь к исполняемому файлу платформы 1С. Вам нужно указать путь к вашей установленной версии.
    • ENTERPRISE: Указывает на запуск 1С в режиме предприятия.
    • /F "C:\Базы 1С\МояФайловаяБаза": Этот параметр указывает путь к файловой информационной базе данных, с которой будет происходить работа.
    • /N "ПользовательДляОбмена": Здесь указываем имя пользователя 1С, от имени которого будет выполнен вход. Мы настоятельно рекомендуем создать отдельного пользователя в базе с минимально необходимыми правами только для выполнения регламентных заданий. Это повышает безопасность.
    • /P "МойПароль": Пароль для пользователя, указанного в параметре /N. Если пароля нет, этот параметр можно опустить, но это не рекомендуется для безопасности.
    • /AllowExecuteScheduledJobs -On: Этот критически важный ключ явно разрешает текущему сеансу 1С инициировать запуск регламентных заданий, которые ждут своего часа. Без него сеанс может просто ничего не делать.
    • /Execute "ПутьКВнешнейОбработке.epf": (Необязательный параметр) Если вам нужно запустить не просто регламентные задания, а конкретную внешнюю обработку (например, для принудительного старта обмена, который не является регламентным заданием), используйте этот параметр. Укажите полный путь к файлу обработки. Логика обработки может включать и запуск регламентных заданий.
    • /DisableStartupMessages: Этот параметр отключает вывод любых стартовых сообщений, диалогов или предупреждений, которые могли бы остановить автоматический запуск.
    • Для автоматического закрытия 1С после выполнения заданий, если вы используете параметр /Execute, логика вашей внешней обработки должна включать вызов ЗавершитьРаботуСистемы(Ложь). Если же вы полагаетесь на /AllowExecuteScheduledJobs -On, то 1С закроется сама, как только все запланированные задания для этого сеанса будут выполнены и больше не будет активных регламентных заданий для выполнения.
  3. Настройка в Планировщике задач Windows:

    1. Откройте Планировщик задач (можно найти через поиск в меню "Пуск").
    2. В правой панели выберите "Создать простую задачу..." или "Создать задачу..." для более тонкой настройки.
    3. Задайте имя задачи (например, "АвтоматическаяСинхронизация1С") и описание.
    4. Выберите триггер (когда задача должна запускаться): "Ежедневно", "Еженедельно", "Ежемесячно" или "При запуске компьютера" и укажите желаемое время.
    5. В качестве действия выберите "Запустить программу".
    6. В поле "Программа или сценарий" укажите полный путь к вашему `.bat` файлу (например, `C:\Scripts\ЗапускОбмена.bat`).
    7. В поле "Начать в (необязательно)" укажите путь к папке, где находится ваш `.bat` файл.
    8. На завершающем шаге обязательно установите флажок "Открыть окно свойств для этой задачи после нажатия кнопки 'Готово'", чтобы настроить дополнительные параметры.
    9. Во вкладке "Общие" свойств задачи выберите "Выполнять вне зависимости от регистрации пользователя" и "Выполнять с наивысшими правами" (особенно если 1С или база находятся в защищенных местах). Убедитесь, что задача запускается от имени пользователя, у которого есть права на запуск 1С и доступ к базе.

Этот метод не требует постоянного активного сеанса 1С и использования лицензии, так как лицензия будет занята только на время выполнения скрипта.

Метод 2: Использование Автономного сервера 1С

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

Что такое Автономный сервер?

Автономный сервер – это легковесная версия сервера «1С:Предприятие», предназначенная для работы с файловой информационной базой. Он позволяет получить преимущества клиент-серверной архитектуры (такие как централизованное выполнение регламентных заданий) при сохранении простоты файлового режима.

Основные преимущества использования Автономного сервера:

  1. Собственный планировщик: Автономный сервер имеет встроенный механизм, который самостоятельно отслеживает расписание и запускает регламентные задания. Это означает, что для выполнения задач больше не требуется активный клиентский сеанс. Он сам является такой "фоновой" службой, которая контролирует расписание.

  2. Работа в режиме службы: Автономный сервер может быть установлен как сервис Windows (или демон в Linux). Это обеспечивает его автоматический запуск при старте операционной системы и стабильную работу в фоновом режиме, независимо от входа пользователей в систему.

  3. Доступ по HTTP: Помимо выполнения регламентных заданий, Автономный сервер позволяет публиковать файловую базу для доступа через тонкий или веб-клиент, используя встроенный веб-сервер. Это открывает дополнительные возможности для удаленной работы и интеграции.

  4. Более эффективное управление ресурсами: Хотя это все еще файловый режим, Автономный сервер лучше управляет блокировками и ресурсами, чем обычный клиентский сеанс, выполняющий фоновые задачи, что может снизить влияние на работу других пользователей.

Установка и запуск Автономного сервера:

Установка и запуск Автономного сервера (исполняемый файл ibsrv.exe, который находится в каталоге установки платформы 1С) производятся из командной строки. Мы указываем путь к базе данных и необходимые настройки публикации.

Пример команды для установки и запуска:


"C:\Program Files\1cv8\8.3.20.1718\bin\ibsrv.exe" -d "C:\Базы 1С\МояФайловаяБаза" -install -start

Эта команда установит Автономный сервер как службу Windows, привязав ее к указанной файловой базе, и сразу запустит ее. После этого все регламентные задания, настроенные в вашей базе, будут выполняться автоматически по расписанию. Для более детальной настройки и публикации на веб-сервере потребуются дополнительные параметры, которые можно найти в документации 1С.

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

Метод 3: Публикация базы на веб-сервере и HTTP-сервисы

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

Принцип работы:

  1. Публикация файловой базы на веб-сервере: Сначала файловая информационная база публикуется на внешнем веб-сервере (например, Apache или IIS). Это стандартная процедура, которая позволяет получить доступ к базе через веб-клиент.

  2. Создание HTTP-сервиса в конфигурации 1С: В конфигурации 1С мы создаем специальный HTTP-сервис. Это, по сути, программный код, который будет доступен для вызова по уникальному URL-адресу. Создание HTTP-сервиса осуществляется в режиме конфигуратора.

    Пример структуры HTTP-сервиса:

    
    // В модуле HTTP-сервиса
    Функция ОбработатьЗапрос(Запрос)
        Если Запрос.Метод = "GET" Тогда
            // Здесь можем получить параметры из запроса
            // Например, Запрос.ПараметрыЗапроса.Получить("Действие")
    
            // Вызываем процедуру, которая запускает регламентное задание
            ЗапуститьСинхронизациюДанных();
    
            // Отправляем ответ
            Ответ = Новый HTTPСервисОтвет(200);
            Ответ.УстановитьТелоИзСтроки("Синхронизация запущена успешно.");
            Возврат Ответ;
        КонецЕсли;
    
        Возврат Новый HTTPСервисОтвет(405); // Метод не разрешен
    КонецФункции
    
    Процедура ЗапуститьСинхронизациюДанных()
        // Находим нужное регламентное задание и запускаем его
        // Пример:
        // РегламентноеЗаданиеОбъект = РегламентныеЗадания.НайтиПоИмени("ОбменДаннымиСБухгалтерией");
        // Если РегламентноеЗаданиеОбъект <> Неопределено Тогда
        //     РегламентноеЗаданиеОбъект.Выполнить();
        // КонецЕсли;
    
        // Или запускаем конкретную процедуру обмена
        ОбменДаннымиПоРасписанию.ВыполнитьОбмен();
    КонецПроцедуры
    
  3. Прописывание логики запуска в HTTP-сервисе: Внутри созданного HTTP-сервиса мы прописываем логику, которая будет запускать нужное регламентное задание или процедуру обмена данными. Это может быть прямой вызов программного кода, который обычно выполняется в рамках регламентного задания, или поиск и запуск самого объекта РегламентноеЗадание.

  4. Запуск из Планировщика задач Windows: Мы используем Планировщик задач Windows для периодического запуска простого скрипта (например, на PowerShell), который будет отправлять HTTP-запрос на адрес нашего созданного HTTP-сервиса.

    Пример PowerShell скрипта для отправки запроса:

    
    $uri = "http://localhost/МояБазаВеб/hs/МойСервис/Запуск"
    Invoke-WebRequest -Uri $uri -Method GET
    

    Этот скрипт можно сохранить как `.ps1` файл и настроить его запуск через Планировщик задач.

  5. Выполнение кода 1С: Получив HTTP-запрос, веб-сервер передает его опубликованной базе 1С. 1С вызывает соответствующий метод HTTP-сервиса, который, в свою очередь, выполняет заложенный в него код для синхронизации или выполнения других задач.

Этот подход более гибок, поскольку позволяет запускать задачи удаленно и не требует передачи логина/пароля в командной строке, так как авторизация происходит на уровне веб-сервера или через методы самого HTTP-сервиса. Он эффективно отделяет механизм вызова задачи (Планировщик и HTTP-запрос) от логики ее выполнения (код в 1С).

Важное замечание о блокировках и производительности в файловой базе

Независимо от выбранного метода автоматизации, следует всегда помнить, что в файловом режиме выполнения ресурсоемких регламентных заданий, таких как синхронизация данных, может приводить к замедлению работы или временной блокировке входа для других пользователей. Это связано с особенностями файловой системы блокировок 1С, которая менее эффективна по сравнению с механизмом управления транзакциями в СУБД (например, Microsoft SQL Server).

Ключевые моменты:

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

Выбирая подходящий метод, всегда анализируйте особенности вашей инфраструктуры и требования к доступности базы данных.

← На главную