Как отправить данные из 1С на сайт и получить ответ? Разбор на примере интеграции 1С:Медицина с лабораторией на Python

Программист 1С v8.3 (Управляемые формы) Сфера услуг, туризм и социальный сектор
← На главную

Интеграция конфигураций «1С:Предприятие» с внешними веб-ресурсами — одна из наиболее частых задач современных разработчиков. Особенно остро этот вопрос стоит в медицинских организациях, где требуется оперативно передавать заказы на исследования из 1С:Медицина в сторонние лаборатории и мгновенно получать результаты анализов обратно.

В этой статье мы подробно разберем, как правильно организовать двусторонний обмен данными между вашей базой 1С и внешним сайтом, написанным на Python (или любом другом языке/фреймворке), используя современные кроссплатформенные механизмы платформы «1С:Предприятие 8.3».

Почему стоит отказаться от устаревших COM-объектов?

В некоторых старых руководствах и на форумах (например, в сообщении №4) для отправки запросов предлагается использовать внешние Windows-компоненты, такие как WinHttp.WinHttpRequest.5.1 или MSScriptControl.ScriptControl для разбора JSON. Мы настоятельно рекомендуем отказаться от этого подхода по следующим причинам:

  1. Платформозависимость: COM-объекты работают исключительно в операционной системе Windows. Если сервер вашего приложения 1С работает под управлением Linux (что является стандартом для многих современных инсталляций), данный код моментально вызовет критическую ошибку.
  2. Разрядность процессов: Компонент MSScriptControl является 32-битным. На современных 64-битных серверах 1С он просто не инициализируется без сложных системных манипуляций.
  3. Наличие встроенных инструментов: Платформа «1С:Предприятие 8.3» уже много лет обладает мощным, надежным и кроссплатформенным функционалом для работы с HTTP-запросами и сериализации JSON.

Шаг 1. Согласование API и структуры JSON с разработчиком сайта

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

  1. Адрес (эндпоинт) для отправки запросов: Например, https://api.lab.ru/v1/orders.
  2. Метод отправки: Для создания новых документов (заказов) стандартно используется метод POST.
  3. Токен авторизации: Ключ API (API Key) или OAuth-токен, который подтверждает, что запрос отправлен именно из вашей авторизованной системы.
  4. Структура JSON-файла: Список полей, которые ожидает получить сайт (ФИО пациента, дата рождения, перечень анализов, организация и т. д.).

Шаг 2. Формирование JSON в 1С

Рассмотрим, как правильно сформировать структурированный текстовый файл JSON на стороне 1С. Для этого мы будем использовать встроенный объект ЗаписьJSON и сериализовать структуру данных.

Разберем по шагам пример формирования данных заказа:


// Создаем структуру с данными заказа
ДанныеЗаказа = Новый Структура;
ДанныеЗаказа.Вставить("id_1c", "DOC-000124");
ДанныеЗаказа.Вставить("patient_fio", "Иванов Иван Иванович");
ДанныеЗаказа.Вставить("patient_birthdate", "1985-05-12");
ДанныеЗаказа.Вставить("organization", "Клиника Альфа");

// Добавляем массив заказываемых исследований
МассивИсследований = Новый Массив;
МассивИсследований.Добавить("Клинический анализ крови");
МассивИсследований.Добавить("Общий анализ мочи");
ДанныеЗаказа.Вставить("tests", МассивИсследований);

// Сериализуем структуру в строку JSON
ЗаписьJSON = Новый ЗаписьJSON;
ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет);
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписи);
ЗаписатьJSON(ЗаписьJSON, ДанныеЗаказа);
СтрокаJSON = ЗаписьJSON.Закрыть();

Шаг 3. Отправка POST-запроса на сайт

Теперь рассмотрим процесс создания защищенного HTTPS-соединения и отправки сформированной JSON-строки на сервер. Обратите внимание, что для работы с защищенным протоколом HTTPS мы обязательно инициализируем объект ЗащищенноеСоединениеOpenSSL.


// Определяем параметры подключения
Сервер = "api.yourlabsite.ru"; // Указываем только имя домена, без "https://"
Порт = 443; // Стандартный SSL-порт
ПутьКРесурсу = "/api/v1/orders"; // Путь к принимающей функции сайта

// Создаем защищенное соединение
ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();

// Настраиваем HTTP-соединение
HTTPСоединение = Новый HTTPСоединение(Сервер, Порт, , , , 30, ЗащищенноеСоединение);

// Формируем запрос
HTTPЗапрос = Новый HTTPЗапрос(ПутьКРесурсу);
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("Authorization", "Bearer ВАШ_ТОКЕН_БЕЗОПАСНОСТИ");

// Записываем JSON-строку в тело запроса
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеМаркераПоследовательностиБайтов.НеИспользовать);

// Отправляем запрос и обрабатываем ответ сервера
Попытка
    HTTPОтвет = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
    
    // Проверяем статус ответа (200 - OK, 201 - Created)
    Если HTTPОтвет.КодСостояния = 200 Или HTTPОтвет.КодСостояния = 201 Тогда
        СтрокаОтвета = HTTPОтвет.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8);
        
        // Разбираем ответ от сервера сайта
        ЧтениеJSON = Новый ЧтениеJSON;
        ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);
        РезультатОтвета = ПрочитатьJSON(ЧтениеJSON);
        ЧтениеJSON.Закрыть();
        
        // Получаем присвоенный сайтом ID заказа
        ИдентификаторНаСайте = РезультатОтвета.Получить("site_order_id");
        ВызватьАльтернативноеДействие = Ложь; 
    Иначе
        ЗаписьЖурналаРегистрации("Интеграция.Сайт", УровеньЖурналаРегистрации.Ошибка, , , 
            "Ошибка сервера. Код ответа: " + HTTPОтвет.КодСостояния);
    КонецЕсли;
Исключение
    ЗаписьЖурналаРегистрации("Интеграция.Сайт", УровеньЖурналаРегистрации.Ошибка, , , 
        "Ошибка отправки данных: " + ОписаниеОшибки());
КонецПопытки;

Шаг 4. Получение результатов анализов обратно в 1С

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

  1. Модель опроса (Polling / Pull): 1С выступает инициатором соединения. В системе настраивается РегламентныеЗадания (фоновое задание), которое, например, каждые 30 минут обращается к сайту с запросом: «Есть ли готовые результаты для наших заказов?». Если сайт возвращает массив готовых результатов, 1С обрабатывает их и записывает в систему. Это самый простой и безопасный способ, не требующий публикации базы 1С "наружу".
  2. Модель вебхуков (Webhooks / Push): Сайт на Python сам отправляет запрос в 1С в тот момент, когда результат готов. Для реализации этого сценария на стороне 1С создается и публикуется на веб-сервере (Apache или IIS) собственный HTTPСервисы. База 1С должна иметь постоянный внешний статический IP-адрес или домен, защищенный SSL-сертификатом.

Важные аспекты безопасности и отраслевых стандартов

Поскольку в конфигурации 1С:Медицина обрабатываются медицинские данные пациентов, при обмене необходимо строго соблюдать требования законодательства о персональных данных (в РФ — ФЗ-152 «О персональных данных»):

Резюме: Интеграция 1С с внешними сайтами — это стандартная процедура, реализуемая штатными средствами платформы 1С. Откажитесь от использования COM-объектов в пользу кроссплатформенных объектов HTTPСоединение и встроенных механизмов сериализации JSON. Это гарантирует быструю, стабильную и безопасную работу вашей информационной системы.

← На главную