Как организовать загрузку данных в 1С:Бухгалтерию из стороннего приложения через API?

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

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

Выбор архитектурной модели: Push против Pull

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

  1. Модель Push (Внешняя система -> 1С): В этом случае стороннее приложение само инициирует отправку данных. Оно «стучится» в 1С и передает информацию (например, JSON-пакет). Для реализации этой модели обязательно требуется публикация 1С на веб-сервере (IIS или Apache). 1С в данной схеме выступает в роли сервера.
  2. Модель Pull (1С -> Внешняя система): Здесь инициатором выступает 1С. По расписанию (регламентным заданием) 1С сама обращается к API сторонней базы, забирает данные и обрабатывает их. В этом случае публикация 1С на веб-сервере не требуется, так как 1С выступает в роли HTTP-клиента.

Рассмотрим подробнее ситуацию, когда начальство настаивает на «современном API», подразумевая мгновенную передачу данных из внешней системы в 1С. Это классическая Push-модель. Проанализируем, как ее реализовать.

HTTP-сервисы или Web-сервисы: что выбрать?

В платформе 1С существуют два основных механизма для создания собственных API:

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

HTTP-сервисы (REST) — наиболее гибкий и легкий вариант. Они позволяют работать напрямую с HTTP-заголовками и телом запроса. Чаще всего для обмена используется формат JSON. Поскольку в исходной задаче данные уже выгружаются в JSON, HTTP-сервисы являются приоритетным выбором. Мы сами определяем структуру URL, методы (GET, POST, PATCH) и алгоритмы обработки входящих данных.

Настройка веб-сервера и публикация

Чтобы 1С могла принимать входящие HTTP-запросы, нам необходимо развернуть веб-сервер. Разберем этот процесс по шагам:

  1. Установим на сервер, где работает 1С, веб-сервер Microsoft IIS или Apache.
  2. В составе платформы 1С должен быть установлен компонент «Модули расширения веб-сервера».
  3. Зайдем в Конфигуратор под правами администратора и перейдем в меню «Администрирование» — «Публикация на веб-сервере».
  4. На закладке «HTTP-сервисы» отметим галочками те сервисы, которые мы хотим сделать доступными извне. Важно: для работы API не обязательно публиковать всю базу или веб-клиент, достаточно опубликовать только конкретные сервисы для минимизации рисков безопасности.

Реализация HTTP-сервиса в 1С

Рассмотрим пример создания простого 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. При получении JSON-пакета через API мы не создаем документы сразу.
  2. Мы записываем полученную строку JSON в специальный справочник или Регистр Сведений (назовем его ОчередьВходящихСообщений) и сразу отвечаем внешней системе: «Данные получены, статус: В очереди».
  3. В 1С настраиваем РегламентноеЗадание, которое раз в минуту забирает новые записи из этой очереди и уже в фоновом режиме создает документы 1С.

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

Безопасность и отладка

Работа через API требует особого внимания к безопасности. Создадим в базе отдельного пользователя, например, API_User. В его ролях необходимо отключить все права на интерактивный вход и оставить только права на использование конкретного HTTP-сервиса. Авторизация обычно происходит через Basic Auth (логин и пароль передаются в заголовке запроса в зашифрованном виде).

Для отладки обмена, когда внешняя система еще не готова, рекомендуем использовать инструмент Postman. Он позволяет имитировать запросы к 1С, передавать JSON и видеть, что именно возвращает ваш код в 1С. В самой 1С для отладки HTTP-сервисов необходимо зайти в параметры отладки и убедиться, что включен флаг «Отладка HTTP-сервисов».

Альтернатива: автоматизация обмена файлами

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

  1. Настроить внешнюю базу на автоматическую выгрузку JSON в сетевую папку или на FTP по расписанию.
  2. В 1С запустить ФоновоеЗадание, которое будет раз в 5 минут проверять наличие новых файлов в этой папке.
  3. После успешной загрузки 1С будет перемещать файл в папку «Архив» или удалять его.

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

Резюме: для полноценного API в 1С:Бухгалтерии лучше всего использовать HTTPСервисы в связке с веб-сервером IIS. Для обеспечения стабильности используйте промежуточную таблицу (буфер) и фоновую обработку данных.

← На главную