Как автоматизировать рутинные операции в 1С Предприятие
Содержание
Автоматизировать процессы в 1С:Предприятие — значит переложить повторяющиеся операции на механизмы платформы: регламентные задания по расписанию, HTTP-сервисы для обмена, загрузку первички из файлов и внешние скрипты через COM. Ни один из этих инструментов не требует отдельной покупки — всё входит в платформу 8.3, нужно только включить и настроить.
Выбор механизма зависит от того, что запускает процесс: расписание, внешняя система или сам пользователь. Пути указаны для интерфейса «Такси» платформы 8.3.2x, различия файлового и клиент-серверного режима отмечены отдельно.
Что автоматизируют и как выбрать механизм
Прежде чем писать код, определите тип задачи — от этого зависит выбор инструмента.
- 🕒 Регулярная операция по времени (закрытие месяца , выгрузка остатков в 3:00) — регламентное задание.
- 🔌 Обмен с внешней системой (сайт, CRM, маркетплейс) — HTTP-сервис или web-сервис.
- 📄 Массовый ввод документов из Excel, банка, ЭДО — загрузка из табличного документа или правила обмена.
- ⏳ Долгий расчёт по запросу пользователя — фоновое задание с индикатором прогресса.
- 🖥 Управление базой снаружи (из другой программы, из скрипта по расписанию ОС) — COM-соединение.
Один процесс часто собирают из нескольких механизмов: скрипт по расписанию Windows поднимает COM-соединение, оно запускает фоновое задание, а результат уходит во внешнюю систему HTTP-сервисом.
Регламентные задания: запуск рутины по расписанию
Регламентное задание — это процедура, которую платформа запускает сама по заданному расписанию. Типичные сценарии: ночная выгрузка данных, отправка уведомлений, пересчёт итогов, обмен с другой базой.
Создают задание в дереве конфигурации в ветке Общие → Регламентные задания. У каждого задания указывают имя метода (процедуру общего модуля, которая выполнится) и свойство «Предопределённое расписание». Для готовых конфигураций список заданий виден в разделе Администрирование → Обслуживание → Регламентные и фоновые задания.
Расписание настраивается гибко: раз в N секунд, ежедневно в заданное время, по дням недели, по дате месяца. Задаётся оно объектом РасписаниеРегламентногоЗадания — в коде или прямо в форме задания (поле «Расписание» → гиперссылка открывает конструктор).
Важная разница по режимам работы:
| Режим базы | Где выполняется задание | Что учесть |
|---|---|---|
| Клиент-серверный | На сервере 1С автоматически | Задания идут даже без подключённых пользователей |
| Файловый | Только в сеансе клиента | Нужен хотя бы один открытый сеанс; обычно запускают отдельный фоновый сеанс |
В файловой базе регламентные задания «спят», пока не открыт ни один сеанс. Если выгрузка должна идти ночью — держите на сервере запущенный технологический сеанс или переходите на клиент-серверный вариант.
У задания есть параметры повторного запуска при аварийном завершении: число повторов и интервал между ними. Для обменов и выгрузок это полезно — разовый сбой сети не оставит процесс невыполненным, платформа попробует ещё раз. Задают их в свойствах задания рядом с расписанием.
Чтобы задание не падало молча, оборачивайте тело процедуры в Попытка … Исключение и пишите результат в журнал регистрации методом ЗаписьЖурналаРегистрации. Тогда ошибка будет видна, а не потеряется. Долгое задание дробите на порции: обработали пакет документов — зафиксировали, иначе одна блокировка способна остановить всю ночную обработку.
HTTP-сервисы: обмен с внешними системами
Когда с базой должны общаться сайт, мобильное приложение
или сторонняя CRM, подходит HTTP-сервис. Это REST-точка входа: внешняя система шлёт запрос GET/POST по URL, а 1С возвращает данные (обычно JSON).
Объект создаётся в ветке HTTP-сервисы. Внутри задают корневой URL, шаблоны адресов (например /orders/{id}) и методы — отдельную процедуру на каждый HTTP-метод. Запрос приходит в объект HTTPСервисЗапрос, ответ формируете через HTTPСервисОтвет.
Чтобы сервис заработал снаружи, базу нужно опубликовать на веб-сервере:
- Установите веб-сервер — Apache или IIS.
- В Конфигураторе откройте
Администрирование → Публикация на веб-сервере. - Укажите каталог публикации и включите флаг публикации HTTP-сервисов.
- Проверьте доступность по адресу вида
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?
Почему регламентные задания не выполняются?
Можно ли запускать обмен из планировщика Windows?
1cv8. Скрипт планировщика поднимает соединение и вызывает нужную процедуру. Этот путь удобен, когда старт должен зависеть от внешнего события, а не от внутреннего расписания 1С.