Как запустить выполнение процедуры из внешней обработки по расписанию в 1С ЗУП 2.5, не снимая конфигурацию с поддержки?

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

При работе с информационными базами 1С часто возникает необходимость в автоматизации рутинных операций. Например, требуется выполнять определенную процедуру из внешней обработки по расписанию, но при этом нельзя изменять типовую конфигурацию, чтобы не снимать ее с поддержки. Эта задача особенно актуальна для конфигураций на обычных формах, таких как 1С ЗУП 2.5 или УТ 10, где нет встроенного функционала для подключения и планирования внешних обработок так же легко, как в конфигурациях на управляемых формах с БСП. Рассмотрим подробнее, как мы можем решить эту проблему, используя внешние инструменты.

Подход 1: Использование Планировщика заданий Windows с параметром `/Execute`

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

Разберем по шагам, как настроить этот подход:

  1. Создание внешней обработки

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

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

    ЗавершитьРаботуСистемы(Ложь);

    Этот вызов гарантирует, что приложение 1С закроется, не ожидая действий пользователя, что критически важно для фонового выполнения по расписанию.

  2. Подготовка команды запуска 1С

    Нам потребуется сформировать командную строку, которая будет запускать 1С Предприятие с необходимыми параметрами. Эта строка будет использоваться в Планировщике заданий Windows.

    Основные параметры, которые мы будем использовать:

    • "C:\Program Files\1cv8\8.3.XX.XXXX\bin\1cestart.exe": Полный путь к исполняемому файлу запуска 1С (убедитесь, что версия платформы указана корректно).
    • ENTERPRISE: Указывает, что 1С должна быть запущена в режиме "1С:Предприятие" (а не в режиме "Конфигуратор").
    • /S <ИмяСервера>\<ИмяБазы> или /F <ПутьКФайловойБазе>: Параметр для указания информационной базы. Используйте /S для серверной базы (например, /s СЕРВЕР1С\БУХ_БАЗА) или /F для файловой базы (например, /f "C:\1C_Bases\MyBase").
    • /N <ИмяПользователя>: Имя пользователя 1С, от имени которого будет производиться запуск. Убедитесь, что у этого пользователя есть необходимые права для выполнения операций в обработке.
    • /P <ПарольПользователя>: Пароль пользователя 1С. Если в пароле есть пробелы, заключите его в кавычки. Если пароля нет, этот параметр можно опустить.
    • /Execute <ПолныйПутьКВнешнейОбработке>: Ключевой параметр, который указывает на файл внешней обработки (.epf), который должен быть выполнен сразу после запуска 1С. Убедитесь, что путь к обработке указан полностью и корректно, включая расширение.

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

    
    "C:\Program Files (x86)\1cv8\8.3.18.1289\bin\1cestart.exe" ENTERPRISE /S СЕРВЕР_1С\ЗУП_2_5 /N "Администратор" /P "МойСекретныйПароль" /Execute "C:\МоиОбработки\МояВнешняяОбработка.epf"
    

    Пример для файловой базы:

    
    "C:\Program Files (x86)\1cv8\8.3.18.1289\bin\1cestart.exe" ENTERPRISE /F "C:\1C_Bases\ZUP25" /N "ПользовательФО" /P "ПарольФО" /Execute "C:\МоиОбработки\МояВнешняяОбработка.epf"
    

    Важный момент: Параметр /Execute запускает обработку после завершения режима пакетного запуска клиентского приложения. Убедитесь, что пользователь, под которым запускается 1С, имеет права на чтение файла внешней обработки и все необходимые права в базе 1С для выполнения операций.

  3. Настройка задания в Планировщике заданий Windows

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

    1. Откройте Планировщик заданий: Нажмите Win + R, введите taskschd.msc и нажмите Enter, либо найдите его через "Панель управления" -> "Администрирование" -> "Планировщик заданий".

    2. Создайте новую задачу: В правой панели выберите "Создать простую задачу..." для быстрого старта или "Создать задачу..." для более детальной настройки.

    3. Вкладка "Общие":

      • Укажите Имя задачи (например, "Запуск фоновой обработки 1С ЗУП 2.5").
      • В поле "При выполнении задачи использовать следующую учетную запись пользователя:" выберите пользователя, от имени которого будет запускаться 1С. Очень важно: Если база 1С серверная или работает с сетевыми ресурсами, выберите пользователя, который имеет соответствующие права в домене/системе. Для корректной работы в серверной среде без интерактивного входа пользователя, установите флажок "Выполнять вне зависимости от входа в систему" и "Выполнять с наивысшими правами". Вам потребуется ввести пароль для выбранной учетной записи.
    4. Вкладка "Триггеры":

      • Настройте расписание запуска. Вы можете выбрать "Ежедневно", "Еженедельно", "Ежемесячно", "При запуске компьютера", "При входе в систему" и другие варианты. Укажите желаемое время и периодичность.
    5. Вкладка "Действия":

      • Нажмите "Создать..." и выберите "Запуск программы".
      • В поле "Программа или скрипт" укажите путь к файлу 1cestart.exe, например: C:\Program Files (x86)\1cv8\8.3.18.1289\bin\1cestart.exe.
      • В поле "Добавить аргументы (необязательно)" вставьте все остальные параметры, которые мы подготовили ранее, без пути к 1cestart.exe:
        
        ENTERPRISE /S СЕРВЕР_1С\ЗУП_2_5 /N "Администратор" /P "МойСекретныйПароль" /Execute "C:\МоиОбработки\МояВнешняяОбработка.epf"
        
    6. Вкладка "Условия" и "Параметры":

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

    После сохранения задачи, она будет выполняться в соответствии с заданным расписанием.

Преимущества данного подхода:

Недостатки:

Подход 2: Использование COM-соединения через Планировщик заданий Windows (для более сложных сценариев)

Если ваша задача требует более глубокого взаимодействия с 1С, например, выполнения нескольких процедур, сложной обработки ошибок, или вам нужно работать с данными напрямую через программный интерфейс 1С без открытия форм, то можно рассмотреть использование COM-соединения. Этот метод также не требует изменения конфигурации, но реализуется через внешний скрипт (например, VBScript или JScript), который запускается Планировщиком заданий Windows.

Мы проанализируем, как использовать COM-соединение для выполнения внешней обработки.

  1. Создание внешней обработки с экспортной процедурой

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

    
    // В модуле объекта внешней обработки
    Процедура ВыполнитьОперациюПоРасписанию() Экспорт
        // Здесь ваш код, который должен быть выполнен
        Сообщить("Операция из внешней обработки выполнена!");
        // Можно добавить логирование или другие действия
    КонецПроцедуры
    

    Если обработка должна закрыть 1С после выполнения, добавьте ЗавершитьРаботуСистемы(Ложь); в конце процедуры или в логику, вызывающую эту процедуру.

  2. Создание VBScript или JScript для COM-соединения

    Создайте текстовый файл (например, Run1CProcessing.vbs для VBScript или Run1CProcessing.js для JScript) со следующим содержимым:

    Пример VBScript:

    
    ' Создание объекта COMConnector
    On Error Resume Next
    Set ComConnector = CreateObject("V82.COMConnector") ' Для 8.2 или V83.COMConnector для 8.3
    
    If Err.Number <> 0 Then
        WScript.Echo "Ошибка при создании COM-соединителя: " & Err.Description
        WScript.Quit 1
    End If
    On Error GoTo 0
    
    ' Строка подключения к базе 1С
    ' Для файловой базы: "File=""C:\1C_Bases\ZUP25"";Usr=""Пользователь"";Pwd=""Пароль"";"
    ' Для серверной базы: "Srvr=""SERVER1C"";Ref=""ZUP25"";Usr=""Пользователь"";Pwd=""Пароль"";"
    ConnectionString = "Srvr=""SERVER1C"";Ref=""ZUP25"";Usr=""Администратор"";Pwd=""МойСекретныйПароль"";"
    
    ' Подключение к информационной базе
    On Error Resume Next
    Set Connection = ComConnector.Connect(ConnectionString)
    
    If Err.Number <> 0 Then
        WScript.Echo "Ошибка при подключении к базе 1С: " & Err.Description
        WScript.Quit 1
    End If
    On Error GoTo 0
    
    ' Путь к внешней обработке
    ExternalProcessingPath = "C:\МоиОбработки\МояВнешняяОбработка.epf"
    
    ' Открытие внешней обработки и вызов процедуры
    On Error Resume Next
    Set ExternalProcessing = Connection.NewObject("ВнешниеОбработки.Создать", ExternalProcessingPath)
    
    If Err.Number <> 0 Then
        WScript.Echo "Ошибка при создании внешней обработки: " & Err.Description
        WScript.Quit 1
    End If
    On Error GoTo 0
    
    ' Вызов экспортной процедуры из внешней обработки
    On Error Resume Next
    ExternalProcessing.ВыполнитьОперациюПоРасписанию()
    
    If Err.Number <> 0 Then
        WScript.Echo "Ошибка при выполнении процедуры в внешней обработке: " & Err.Description
        WScript.Quit 1
    End If
    On Error GoTo 0
    
    WScript.Echo "Внешняя обработка успешно выполнена."
    
    ' Отключение от базы 1С (не всегда обязательно, но хорошая практика)
    Set ExternalProcessing = Nothing
    Set Connection = Nothing
    Set ComConnector = Nothing
    
    WScript.Quit 0
    

    Разберем ключевые моменты скрипта:

    • CreateObject("V82.COMConnector") (или "V83.COMConnector"): Создает объект для COM-соединения с 1С. Выберите версию платформы, соответствующую вашей базе.
    • ConnectionString: Строка подключения к базе данных 1С. Важно правильно указать тип базы (файловая File= или серверная Srvr=;Ref=), а также имя пользователя (Usr=) и пароль (Pwd=), которые имеют необходимые права в 1С.
    • Connection.NewObject("ВнешниеОбработки.Создать", ExternalProcessingPath): Этот метод позволяет динамически загрузить внешнюю обработку и получить к ней программный доступ.
    • ExternalProcessing.ВыполнитьОперациюПоРасписанию(): Вызов экспортной процедуры из загруженной внешней обработки.
    • On Error Resume Next и обработка Err.Number: Рекомендуется использовать для отлова ошибок и логирования, чтобы понимать, на каком этапе произошел сбой.
    • WScript.Echo: Используется для вывода сообщений, которые могут быть записаны в журнал Планировщика заданий Windows.

    Важно: Убедитесь, что пользователь Windows, от имени которого запускается скрипт, имеет права на запуск COM-компонентов 1С и доступ к файлу внешней обработки. В серверной среде может потребоваться регистрация COM-компонентов 1С и настройка прав доступа.

  3. Настройка задания в Планировщике заданий Windows для запуска скрипта

    Процесс настройки в Планировщике заданий аналогичен описанному в Подходе 1, с той лишь разницей, что в качестве "Программы или скрипта" вы указываете исполняемый файл для вашего скрипта:

    • Для VBScript: C:\Windows\System32\cscript.exe или C:\Windows\System32\wscript.exe.
    • Для JScript: C:\Windows\System32\cscript.exe.
    • В поле "Добавить аргументы (необязательно)" указываете путь к вашему скрипту, например: "C:\МоиСкрипты\Run1CProcessing.vbs".

    Настройки пользователя, триггеров и условий остаются такими же, как и для прямого запуска 1С.

Преимущества COM-соединения:

Недостатки:

Расширения конфигурации (для более современных платформ и подходов)

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

В расширениях мы можем создать свое регламентное задание:

  1. Создаем расширение конфигурации.
  2. В расширении добавляем новый общий модуль, который должен быть серверным и не иметь клиентских галок.
  3. В этом модуле размещаем экспортную процедуру, которая будет выполнять нашу логику. Для регламентных заданий в расширениях это обычно процедура с именем, например, ВыполнитьМоюЗадачу().
  4. Затем создаем собственно регламентное задание в расширении, указывая в нем наш модуль и процедуру.
  5. Расписание для такого задания настраивается через стандартный интерфейс 1С в режиме предприятия (например, "Администрирование" -> "Обслуживание" -> "Регламентные и фоновые задания").

Этот подход является наиболее "штатным" и рекомендованным для современных конфигураций, так как он интегрирован в среду 1С и позволяет управлять заданиями прямо из интерфейса. Однако для ЗУП 2.5 и УТ 10 (обычные формы) его применение может быть затруднено или невозможно без значительных доработок, так как эти конфигурации не всегда полностью поддерживают все возможности БСП и расширений в той мере, в какой это делают новые управляемые конфигурации.

Важные аспекты и возможные проблемы

При реализации любого из предложенных подходов мы рекомендуем учитывать следующие моменты:

Мы выяснили, что для запуска внешней обработки по расписанию в 1С ЗУП 2.5 без изменения конфигурации наиболее эффективными являются подходы с использованием Планировщика заданий Windows. Метод с параметром /Execute является более простым и подходит для большинства задач, где требуется просто запустить обработку. Метод с COM-соединением предоставляет более широкие возможности для программного взаимодействия, но и требует большей квалификации при реализации. Независимо от выбранного подхода, мы всегда должны помнить о важности прав доступа, логирования и автоматического завершения работы приложения для стабильной и надежной автоматизации.

← На главную