Как автоматизировать рутинные операции в 1С Предприятие

· 9 мин

Содержание

Автоматизировать процессы в 1С:Предприятие — значит переложить повторяющиеся операции на механизмы платформы: регламентные задания по расписанию, HTTP-сервисы для обмена, загрузку первички из файлов и внешние скрипты через COM. Ни один из этих инструментов не требует отдельной покупки — всё входит в платформу 8.3, нужно только включить и настроить.

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

Что автоматизируют и как выбрать механизм

Прежде чем писать код, определите тип задачи — от этого зависит выбор инструмента.

  • 🕒 Регулярная операция по времени (закрытие месяца , выгрузка остатков в 3:00) — регламентное задание.
  • 🔌 Обмен с внешней системой (сайт, CRM, маркетплейс) — HTTP-сервис или web-сервис.
  • 📄 Массовый ввод документов из Excel, банка, ЭДО — загрузка из табличного документа или правила обмена.
  • ⏳ Долгий расчёт по запросу пользователя — фоновое задание с индикатором прогресса.
  • 🖥 Управление базой снаружи (из другой программы, из скрипта по расписанию ОС) — COM-соединение.

Один процесс часто собирают из нескольких механизмов: скрипт по расписанию Windows поднимает COM-соединение, оно запускает фоновое задание, а результат уходит во внешнюю систему HTTP-сервисом.

Какой механизм автоматизации подойдёт под задачу?

Регламентные задания: запуск рутины по расписанию

Регламентное задание — это процедура, которую платформа запускает сама по заданному расписанию. Типичные сценарии: ночная выгрузка данных, отправка уведомлений, пересчёт итогов, обмен с другой базой.

Создают задание в дереве конфигурации в ветке Общие → Регламентные задания. У каждого задания указывают имя метода (процедуру общего модуля, которая выполнится) и свойство «Предопределённое расписание». Для готовых конфигураций список заданий виден в разделе Администрирование → Обслуживание → Регламентные и фоновые задания.

Расписание настраивается гибко: раз в N секунд, ежедневно в заданное время, по дням недели, по дате месяца. Задаётся оно объектом РасписаниеРегламентногоЗадания — в коде или прямо в форме задания (поле «Расписание» → гиперссылка открывает конструктор).

Важная разница по режимам работы:

Режим базыГде выполняется заданиеЧто учесть
Клиент-серверныйНа сервере 1С автоматическиЗадания идут даже без подключённых пользователей
ФайловыйТолько в сеансе клиентаНужен хотя бы один открытый сеанс; обычно запускают отдельный фоновый сеанс

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

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

Чтобы задание не падало молча, оборачивайте тело процедуры в Попытка … Исключение и пишите результат в журнал регистрации методом ЗаписьЖурналаРегистрации. Тогда ошибка будет видна, а не потеряется. Долгое задание дробите на порции: обработали пакет документов — зафиксировали, иначе одна блокировка способна остановить всю ночную обработку.

Настройка регламентного задания
Выполнено: 0 / 6

HTTP-сервисы: обмен с внешними системами

Когда с базой должны общаться сайт, мобильное приложение или сторонняя CRM, подходит HTTP-сервис. Это REST-точка входа: внешняя система шлёт запрос GET/POST по URL, а 1С возвращает данные (обычно JSON).

Объект создаётся в ветке HTTP-сервисы. Внутри задают корневой URL, шаблоны адресов (например /orders/{id}) и методы — отдельную процедуру на каждый HTTP-метод. Запрос приходит в объект HTTPСервисЗапрос, ответ формируете через HTTPСервисОтвет.

Чтобы сервис заработал снаружи, базу нужно опубликовать на веб-сервере:

  1. Установите веб-сервер — Apache или IIS.
  2. В Конфигураторе откройте Администрирование → Публикация на веб-сервере.
  3. Укажите каталог публикации и включите флаг публикации HTTP-сервисов.
  4. Проверьте доступность по адресу вида http://сервер/база/hs/имя_сервиса/….

Тело запроса и ответа удобно гонять в JSON: платформа читает и пишет его объектами ЧтениеJSON и ЗаписьJSON, а структуры 1С сериализуются методами работы с JSON напрямую. На каждый шаблон URL отвечает своя процедура, поэтому один сервис закрывает сразу несколько операций — получить заказ, создать клиента, вернуть остатки.

Для SOAP-интеграций (когда внешняя система требует строгий контракт WSDL) используйте web-сервисы — отдельную ветку конфигурации. Для современных сайтов и приложений REST через HTTP-сервис удобнее и легче.

Закрывайте публикацию аутентификацией. Открытый HTTP-сервис без проверки токена или логина — это прямой доступ к данным базы из интернета. Минимум — HTTP-аутентификация, лучше — проверка токена в самом методе сервиса.

Автоматический ввод первичных документов

Ручной ввод накладных и актов — главный источник рутины. В 1С её снимают тремя путями, по порядку удобства.

Загрузка из табличного документа. В конфигурациях на Библиотеке стандартных подсистем (БП 3.0, ЗУП 3.1, УТ 11) есть механизм загрузки данных из Excel в табличные части. Открывается из самого документа — команда загрузки в табличной части, куда вставляют скопированную таблицу и сопоставляют колонки.

Обмен данными по правилам. Если данные приходят из другой базы 1С или учётной системы, настраивают обмен: план обмена + правила конвертации (технология «Конвертация данных 2» / формат EnterpriseData). Документы создаются автоматически при каждом сеансе обмена.

Поступление через ЭДО. Входящие электронные документы от поставщика превращаются в документы базы почти без ручного труда: из полученного титула создаётся «Поступление». Здесь важно соответствие ролей подписи: для счёта-фактуры нужна квалифицированная подпись (КЭП), первичку по соглашению сторон допустимо подписывать и неквалифицированной.

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

Фоновые задания и длительные операции

Фоновое задание — это запуск процедуры в отдельном потоке «здесь и сейчас», в отличие от регламентного (оно по расписанию). Нужно, когда расчёт идёт долго и нельзя морозить форму пользователя.

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

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

Так закрывают задачи, которые часто называют «очередями»:

  • 📦 пакетное проведение сотен документов;
  • 📊 формирование тяжёлого отчёта без блокировки интерфейса;
  • 🔁 постановка заданий в очередь, когда их много, а рабочих процессов мало.

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

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

COM-соединение и внешние скрипты

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

Для внешнего соединения используют COM-объект V83.COMConnector. Скрипт (например на VBScript или PowerShell) создаёт соединение, вызывает экспортные методы общих модулей и получает результат. Строка подключения отличается для файловой (File="путь") и серверной (Srvr="сервер";Ref="база") базы.

Типовой сценарий: планировщик Windows в 2:00 запускает скрипт → скрипт поднимает COM-соединение → вызывает процедуру выгрузки → закрывает соединение. Так автоматизируют задачи, которые должны стартовать от внешнего события, а не от расписания внутри 1С.

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

COM-компоненту нужно зарегистрировать в системе (regsvr32) и учесть разрядность: 32- и 64-битный comcntr.dll живут раздельно. Соединение требует свободной клиентской лицензии и прав у пользователя, под которым работает скрипт.

Для простых запусков без постоянного соединения подойдёт пакетный режим платформы: запуск 1cv8 с параметрами /Execute (внешняя обработка) или ENTERPRISE с ключами. Но для стабильной интеграции COM-соединение управляемее.

Мониторинг: журнал регистрации и контроль заданий

Автоматизация без контроля опасна: задание может молча падать неделями. Поэтому логирование — обязательная часть, а не опция.

Журнал регистрации. Пишите в него ход автоматических процессов методом ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Информация, …). Открывается журнал в разделе Администрирование → Обслуживание → Журнал регистрации, фильтруется по имени события, важности и дате. Минимум — отметка о старте, завершении и каждой пойманной ошибке.

Состояние регламентных заданий. В клиент-серверном режиме смотрите выполнение заданий в консоли администрирования или в разделе обслуживания: там видно последнее время запуска, результат и текст ошибки. Задание, которое давно не выполнялось при включённом расписании, — первый сигнал проблемы.

Технологический журнал. Для глубокого разбора (зависания, утечки, ошибки платформы) настраивают технологический журнал через logcfg.xml в каталоге conf. Включайте его точечно и выключайте после разбора — он быстро растёт и грузит диск.

Заведите одно общее имя события для всех своих заданий (например АвтоОбмен). Тогда весь ход автоматизации виден в журнале одним фильтром, без перебора.

Частые ошибки при настройке автоматизации

  • ❌ Регламентное задание включено, но в файловой базе — и никто не держит сеанс. Выполнения не будет. Решение: постоянный фоновый сеанс или клиент-серверный режим.
  • ❌ Нет обработки исключений — одна ошибка в данных обрывает всё задание без следа в журнале. Оборачивайте тело в Попытка … Исключение и логируйте.
  • ❌ Открытый HTTP-сервис без аутентификации — данные базы доступны любому, кто знает URL. Проверяйте токен или логин в методе.
  • ❌ Разрядность COM перепутана: 64-битный скрипт не видит 32-битный comcntr.dll. Регистрируйте нужную версию компоненты.
  • ❌ Загруженные документы не проведены — данные есть, движений нет. Проверяйте проведение после пакетной загрузки.

Частые вопросы

Чем регламентное задание отличается от фонового?
Регламентное запускается по расписанию автоматически, фоновое — разово по команде из кода или формы. Внутри платформы оба выполняются одним механизмом фоновых заданий, различается только триггер запуска.
Нужна ли отдельная лицензия для HTTP-сервисов или COM?
Нет, оба механизма входят в платформу 8.3. Но каждому активному соединению (COM-сеансу, обращению к опубликованной базе) нужна свободная клиентская лицензия, как обычному сеансу пользователя.
Почему регламентные задания не выполняются?
Чаще всего причины три: база файловая и нет открытого сеанса; у задания снят флаг использования; расписание настроено не на то время. Проверьте их по порядку и загляните в журнал регистрации — там видно, пытался ли сервер запустить задание.
Можно ли запускать обмен из планировщика Windows?
Да, через COM-соединение или пакетный запуск 1cv8. Скрипт планировщика поднимает соединение и вызывает нужную процедуру. Этот путь удобен, когда старт должен зависеть от внешнего события, а не от внутреннего расписания 1С.
Как не потерять ошибки автоматических процессов?
Пишите в журнал регистрации отметки о старте, завершении и каждой пойманной ошибке с единым именем события. Для регламентных заданий дополнительно смотрите их состояние в разделе обслуживания или консоли администрирования.