Как настроить API в 1С для обмена данными с сайтом или другой программой?

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

Рассмотрим распространенную задачу: необходимо наладить обмен данными между 1С и внешней системой (например, сайтом или самописным приложением). Изначально обмен был реализован через выгрузку/загрузку файлов, но теперь требуется перейти на более современный и надежный способ — API. При этом внешняя система будет инициатором обмена, то есть она будет отправлять запросы в 1С для создания или обновления данных, например, заказов клиентов.

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

Решение 1: Создание собственного HTTP-сервиса

Этот подход является наиболее гибким и мощным. Он позволяет реализовать любую бизнес-логику на стороне 1С при обработке входящих запросов. Идея заключается в том, что мы создаем в конфигурации 1С специальную точку входа (endpoint), которая будет доступна по определенному URL и сможет принимать и обрабатывать HTTP-запросы.

Разберем процесс по шагам.

  1. Создание HTTP-сервиса в конфигураторе

    В дереве конфигурации перейдите в ветку Общие -> HTTP-сервисы и создайте новый сервис. Назовем его, например, WebAPI. Важнейшее свойство здесь — Корневой URL. Зададим ему значение, например, /api. Если вам требуется быстрая организация HTTP-сервиса, рекомендуется заранее подготовить модуль с универсальными процедурами, который позволит легко расширять API в будущем.

  2. Создание шаблона URL и метода

    Внутри нашего HTTP-сервиса нужно создать шаблон URL. Он определяет конкретный адрес, по которому будет обращаться внешняя система. Создадим шаблон с именем Orders и URL /orders. Для этого шаблона добавим метод, например, CreateOrder с типом HTTP-метода POST, так как мы планируем создавать новые объекты.

    В свойстве "Обработчик" этого метода нужно указать имя экспортной процедуры из общего модуля, которая будет выполнять всю работу. Например, ИнтеграцияAPI.CreateOrder.

  3. Передача данных: JSON в теле запроса

    Возникает вопрос: как передать данные для создания заказа? Внешняя система может передать множество полей: клиент, товары, количество, цены и т.д. Передавать их в виде отдельных параметров в URL (.../create?param1=value1¶m2=value2) — плохая практика. Это неудобно, нечитаемо и имеет ограничения по длине.

    Правильный подход — использовать работу с JSON в 1С и передавать все данные в теле POST-запроса. Это позволяет передавать структурированную информацию любого объема и сложности. Внешняя система будет формировать JSON-объект, аналогичный тому, что раньше выгружался в файл, и отправлять его в 1С.

    Посмотрим на пример структуры JSON для создания заказа:

    
    {
        "ТипИнформации": "СозданиеЗаказа",
        "Источник": "WebApp",
        "Документы": [
            {
                "УИД_Заказа": "a1b2-c3d4-e5f6-g7h8", 
                "ДатаЗаказа": "2023-10-27T12:00:00",
                "Клиент": "ООО Ромашка",
                "Сумма": 15000,
                "Товары": [
                    {
                        "Номенклатура": "Стол офисный",
                        "Количество": 1,
                        "Цена": 10000
                    },
                    {
                        "Номенклатура": "Стул офисный",
                        "Количество": 2,
                        "Цена": 2500
                    }
                ]
            }
        ]
    }
    
  4. Обработка запроса в 1С (код)

    Теперь напишем код обработчика в общем модуле ИнтеграцияAPI (не забудьте установить флаги "Сервер" и "Внешнее соединение" для модуля). Процедура должна принимать один параметр — объект типа HTTPСервисЗапрос.

    Основная логика такова: получить тело запроса как строку, прочитать из нее JSON, проанализировать полученные данные и создать на их основе документы в 1С. В конце необходимо сформировать и вернуть ответ.

    Посмотрим на пример кода:

    
    Процедура CreateOrder(Запрос) Экспорт
    
        // 1. Получаем тело запроса, где находится наш JSON
        ТелоЗапросаСтрокой = Запрос.ПолучитьТелоКакСтроку("UTF-8");
    
        // 2. Парсим JSON в объекты 1С (Структуры и Массивы)
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(ТелоЗапросаСтрокой);
        ДанныеЗапроса = ПрочитатьJSON(ЧтениеJSON, Истина); // Истина - чтобы можно было изменять данные
        ЧтениеJSON.Закрыть();
    
        // 3. Проверяем корректность полученных данных
        Если ДанныеЗапроса = Неопределено 
            Или НЕ ДанныеЗапроса.Свойство("ТипИнформации") 
            Или ДанныеЗапроса["ТипИнформации"] <> "СозданиеЗаказа" Тогда
            
            // Если что-то не так, возвращаем ошибку
            Ответ = Новый HTTPСервисОтвет(400); // 400 - Bad Request
            Ответ.УстановитьТелоИзСтроки("Ошибка формата запроса. Неверный ТипИнформации.");
            Возврат Ответ;
        КонецЕсли;
    
        // 4. Основная логика: обходим массив документов и создаем их
        РезультатыОбработки = Новый Массив;
        Для Каждого ДанныеДокумента Из ДанныеЗапроса.Документы Цикл
            // Здесь вызывается ваша функция по созданию документа "Заказ покупателя"
            // В нее передаются данные из ДанныеДокумента
            // РезультатСоздания - это структура с полями УИД, Статус, Информация
            РезультатСоздания = СоздатьЗаказПокупателяПоДанным(ДанныеДокумента); 
            РезультатыОбработки.Добавить(РезультатСоздания);
        КонецЦикла;
    
        // 5. Формируем ответ для внешней системы
        СтруктураОтвета = Новый Структура;
        СтруктураОтвета.Вставить("ТипИнформации", "РезультатЗагрузкиЗаказов");
        СтруктураОтвета.Вставить("Документы", РезультатыОбработки);
        
        ЗаписьJSON = Новый ЗаписьJSON;
        ЗаписьJSON.УстановитьСтроку();
        ЗаписатьJSON(ЗаписьJSON, СтруктураОтвета);
        СтрокаJSONОтвета = ЗаписьJSON.Закрыть();
    
        Ответ = Новый HTTPСервисОтвет(200); // 200 - OK
        Ответ.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8");
        Ответ.УстановитьТелоИзСтроки(СтрокаJSONОтвета);
    
        Возврат Ответ;
    
    КонецПроцедуры
    
  5. Авторизация и безопасность

    Чтобы к вашему API не мог подключиться кто угодно, крайне важно правильно настроить авторизацию и обеспечить безопасность. Самый простой способ — Basic-аутентификация. Также для профессиональных решений часто требуется регистрация и авторизация мобильного или web-приложения через расширение 1С, что позволяет более гибко управлять доступом.

    • Создайте в 1С отдельного пользователя (например, api_user) с ограниченными правами, достаточными только для выполнения операций обмена.
    • Внешняя система при каждом запросе должна передавать HTTP-заголовок Authorization с логином и паролем этого пользователя в формате Base64.
    • Важно: такой обмен обязательно должен происходить по защищенному протоколу HTTPS. Дополнительно можно реализовать публикацию HTTP-сервиса с использованием клиентского SSL-сертификата для обеспечения максимального уровня защиты.
  6. Публикация на веб-сервере

    Чтобы HTTP-сервис стал доступен извне, информационную базу необходимо опубликовать на веб-сервере (IIS или Apache). В процессе публикации не забудьте поставить галочку напротив вашего HTTP-сервиса WebAPI.

Решение 2: Стандартный интерфейс OData

Платформа 1С:Предприятие 8 предоставляет мощный механизм, который во многих случаях позволяет обойтись без написания кода — стандартный интерфейс OData. Это унифицированный протокол для доступа к данным.

В чем его преимущество? Если вам нужно выполнять стандартные операции (создание, чтение, изменение, удаление объектов) и не требуется сложная бизнес-логика на стороне 1С в момент получения запроса, то изучите наше развернутое руководство по OData. Этот механизм часто используют для простых задач, таких как интеграция 1С с Google Таблицами или другими облачными сервисами.

Как это работает?

  1. При публикации информационной базы на веб-сервере достаточно поставить флаг "Публиковать стандартный интерфейс OData".
  2. После этого внешняя система сможет обращаться к объектам конфигурации по стандартизированным URL.
  3. Например, чтобы создать новый документ "Заказ покупателя", достаточно отправить POST-запрос на URL вида http://<адрес_базы>/odata/standard.odata/Document_ЗаказПокупателя, передав в теле запроса JSON со свойствами документа.

Этот вариант значительно проще в настройке, так как не требует написания кода обработчиков. Однако он менее гибкий. Если при создании заказа нужно выполнить сложные проверки, создать связанные документы или запустить бизнес-процессы, то лучше использовать собственный HTTP-сервис.

Итоги и рекомендации

Мы рассмотрели два мощных способа организации API на стороне 1С.

Используйте стандартный интерфейс OData, если вам нужны простые CRUD-операции (создание, чтение, обновление, удаление) и не требуется сложная логика обработки на стороне 1С. Это быстро и не требует программирования.

Используйте собственный HTTP-сервис, если требуется сложная валидация данных, выполнение комплексных операций или нужен полный контроль над форматом данных. Для отладки и проверки работоспособности ваших сервисов мы рекомендуем тестирование API (например, через Postman).

Для задачи, описанной в начале, где требуется просто создавать заказы по данным из внешней системы, оба подхода применимы. Но создание собственного HTTP-сервиса даст больше контроля и возможностей для дальнейшего развития интеграции.

← На главную