Переход от классического обмена через файлы к прямому взаимодействию через API — это важный шаг в автоматизации бизнес-процессов. Часто возникают вопросы: нужно ли публиковать базу, какой протокол выбрать и как обеспечить стабильность системы, если данных много. В этой статье мы подробно разберем все этапы настройки интеграции, проанализируем различные архитектурные модели и выясним, какой инструмент лучше всего подходит для ваших задач.
Прежде чем приступать к написанию кода, нам необходимо определиться с направлением инициации запроса. Существует две основные модели взаимодействия систем:
Рассмотрим подробнее ситуацию, когда начальство настаивает на «современном API», подразумевая мгновенную передачу данных из внешней системы в 1С. Это классическая Push-модель. Проанализируем, как ее реализовать.
В платформе 1С существуют два основных механизма для создания собственных API:
Web-сервисы (SOAP) — работают на основе протокола XML. Это более строгий и «тяжеловесный» стандарт. Его сложнее отлаживать вручную, так как сообщения упакованы в сложные конверты. В современной разработке используется все реже, особенно если стороннее приложение работает на веб-технологиях.
HTTP-сервисы (REST) — наиболее гибкий и легкий вариант. Они позволяют работать напрямую с HTTP-заголовками и телом запроса. Чаще всего для обмена используется формат JSON. Поскольку в исходной задаче данные уже выгружаются в JSON, HTTP-сервисы являются приоритетным выбором. Мы сами определяем структуру URL, методы (GET, POST, PATCH) и алгоритмы обработки входящих данных.
Чтобы 1С могла принимать входящие HTTP-запросы, нам необходимо развернуть веб-сервер. Разберем этот процесс по шагам:
Рассмотрим пример создания простого HTTP-сервиса для приема данных в формате JSON. Допустим, нам нужно принять данные о поступлении товаров. Создадим в дереве метаданных новый объект HTTPСервис с именем ExchangeData и корневым URL v1.
Добавим шаблон ресурса Upload с путем /upload и метод PostData (тип метода POST). В модуле сервиса пропишем обработчик:
Функция UploadPostData(Запрос)
// Получаем тело запроса в виде строки
СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
// Читаем JSON в структуру
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(СтрокаJSON);
Данные = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Здесь реализуем логику сопоставления и записи
// Например, вызов функции в общем модуле
РезультатОбработки = ОбработкаОбмена.ЗагрузитьДанные(Данные);
// Формируем ответ
Ответ = Новый HTTPСервисОтвет(200);
Ответ.УстановитьТелоИзСтроки("Данные успешно приняты. ID транзакции: " + РезультатОбработки.ID);
Возврат Ответ;
КонецФункции
Обратите внимание на использование HTTPСервисОтвет. Мы должны всегда возвращать код состояния (200 — успех, 400 — ошибка в данных, 500 — ошибка сервера), чтобы внешняя система понимала результат своей операции.
Одной из главных проблем прямого API является риск «подвисания» внешней системы. Если 1С начнет проводить тяжелый документ в момент получения запроса, внешнее приложение будет ждать ответа и может отвалиться по таймауту. Чтобы этого избежать, применим метод асинхронной обработки:
ОчередьВходящихСообщений) и сразу отвечаем внешней системе: «Данные получены, статус: В очереди».РегламентноеЗадание, которое раз в минуту забирает новые записи из этой очереди и уже в фоновом режиме создает документы 1С.Такой подход делает обмен максимально отказоустойчивым. Даже если база 1С будет временно заблокирована (например, обновлением конфигурации), внешняя система сможет продолжать слать данные в буфер.
Работа через API требует особого внимания к безопасности. Создадим в базе отдельного пользователя, например, API_User. В его ролях необходимо отключить все права на интерактивный вход и оставить только права на использование конкретного HTTP-сервиса. Авторизация обычно происходит через Basic Auth (логин и пароль передаются в заголовке запроса в зашифрованном виде).
Для отладки обмена, когда внешняя система еще не готова, рекомендуем использовать инструмент Postman. Он позволяет имитировать запросы к 1С, передавать JSON и видеть, что именно возвращает ваш код в 1С. В самой 1С для отладки HTTP-сервисов необходимо зайти в параметры отладки и убедиться, что включен флаг «Отладка HTTP-сервисов».
Если после проработки вопроса руководство согласится, что публикация базы на веб-сервере нецелесообразна, можно модернизировать текущий файловый обмен. Вместо того чтобы оператор вручную нажимал кнопки, мы можем:
ФоновоеЗадание, которое будет раз в 5 минут проверять наличие новых файлов в этой папке.Это обеспечит ту же автоматизацию («без участия человека»), но сохранит простоту отладки, о которой говорилось в обсуждении: вы всегда сможете открыть файл блокнотом и проверить, что пришло из другой системы.
Резюме: для полноценного API в 1С:Бухгалтерии лучше всего использовать HTTPСервисы в связке с веб-сервером IIS. Для обеспечения стабильности используйте промежуточную таблицу (буфер) и фоновую обработку данных.