Как настроить выполнение регламентных заданий на одном конкретном компьютере в файловой базе 1С?

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

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

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

Способ 1. Использование параметров командной строки (Рекомендуемый штатный метод)

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

Давайте разберем по шагам, как настроить ярлыки запуска на компьютерах пользователей.

  1. На компьютерах, где выполнение заданий должно быть запрещено:

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

    /AllowExecuteScheduledJobs -Off

    Этот параметр принудительно запрещает данному сеансу обрабатывать регламентные задачи. Даже если этот пользователь зайдет в базу самым первым, планировщик на его компьютере не запустится.

  2. На компьютере, где выполнение заданий разрешено (и обязательно):

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

    /AllowExecuteScheduledJobs -Force

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

  3. </

Способ 2. Организация выделенного сеанса «Робота» (Best Practice)

Запуск тяжелых регламентных заданий в сеансе реального пользователя — это всегда риск. Пользователь может случайно завершить работу системы, перезагрузить ПК или заблокировать базу данных долгой операцией. Поэтому наиболее надежным решением для файловых баз является создание «сеанса-робота».

Проанализируем схему реализации этого подхода:

  1. В конфигураторе 1С создаем нового пользователя с именем, например, РоботОбмена и задаем ему пароль. Назначаем ему минимально необходимые права для выполнения фоновых задач.
  2. На всех компьютерах обычных сотрудников прописываем ключ /AllowExecuteScheduledJobs -Off, как описано в первом способе.
  3. На выделенном сервере или постоянно включенном компьютере настраиваем автоматический запуск 1С под учетной записью РоботОбмена без запрещающих ключей. Поскольку у остальных пользователей планировщик заблокирован ключом -Off, наш «Робот» гарантированно заберет на себя всю фоновую работу.

Способ 3. Программное ограничение выполнения в коде 1С

Если у вас есть доступ к доработке конфигурации (через основную конфигурацию или механизм расширений), вы можете внедрить жесткое ограничение непосредственно в программный код процедур, которые вызываются регламентными заданиями. Это самый надежный способ «защиты от дурака».

Рассмотрим пример кода, который проверяет имя компьютера, на котором запущено задание. Если имя компьютера не совпадает с сервером обмена, выполнение процедуры мгновенно прекращается:


Процедура ВыполнитьРегламентныйОбмен() Экспорт

    // Проверяем имя компьютера, на котором выполняется фоновое задание
    ИмяЦелевогоКомпьютера = "SERVER-EXCHANGE";
    
    Если ВРег(ИмяКомпьютера()) <> ВРег(ИмяЦелевогоКомпьютера) Тогда
        // Задание запущено на чужом компьютере, тихо выходим
        Возврат;
    КонецЕсли;

    // Далее идет основной код выполнения обмена данными
    ВыполнитьВыгрузкуДанных();
    ВыполнитьЗагрузкуДанных();

КонецПроцедуры

Также мы можем сделать привязку не к имени физического компьютера, а к имени конкретного пользователя 1С, под которым должен выполняться обмен:


Процедура ВыполнитьРегламентныйОбменПоПользователю() Экспорт

    // Проверяем имя пользователя текущего сеанса
    ИмяРазрешенногоПользователя = "РоботОбмена";
    
    Если ВРег(ИмяПользователя()) <> ВРег(ИмяРазрешенногоПользователя) Тогда
        Возврат;
    КонецЕсли;

    // Логика обмена данными
    ПроводитьОбменДанными();

КонецПроцедуры

Использование встроенных функций ИмяКомпьютера() и ИмяПользователя() позволяет полностью контролировать среду выполнения задач и предотвращает случайные конфликты блокировок файлов при сетевом доступе.

Способ 4. Использование внешнего планировщика Windows

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

Разберем по шагам эту схему:

  1. Для всех пользователей базы 1С прописываем ключ отключения регламентных заданий: /AllowExecuteScheduledJobs -Off.
  2. В самой базе отключаем расписание у регламентного задания, переведя его в ручной режим.
  3. На целевом компьютере создаем внешнюю обработку (например, ExecuteExchange.epf), которая в модуле объекта при открытии запускает процедуру обмена и закрывает программу. Пример кода модуля внешней обработки:

Процедура ПриОткрытии()
    
    Попытка
        // Вызываем экспортный метод обмена из общего модуля
        РегламентныеПроцедурыОбмена.ВыполнитьРегламентныйОбмен();
    Исключение
        ЗаписатьЛогОшибки(ОписаниеОшибки());
    КонецПопытки;
    
    // Обязательно закрываем сеанс 1С после завершения работы
    ЗавершитьРаботуСистемы(Ложь);
    
КонецПроцедуры
  1. Настраиваем стандартный Планировщик задач Windows на запуск 1С по нужному расписанию с использованием параметров автозапуска внешней обработки:

"C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cv8.exe" ENTERPRISE /F "C:\1C_Bases\Retail" /N "РоботОбмена" /P "ПарольРобота" /Execute "C:\Scripts\ExecuteExchange.epf"

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

← На главную