Интеграция программы 1С 8.3 с внешними сервисами через JSON и Base64

В современном мире эффективный обмен данными между различными системами является ключевым фактором успешной автоматизации бизнес-процессов. Программы “1С:Предприятие” предоставляют разработчикам гибкие инструменты для интеграции с внешними сервисами, и одними из наиболее популярных форматов для такого обмена являются JSON и Base64.

Что такое JSON (JavaScript Object Notation) и Base64?

JSON (JavaScript Object Notation) — это легковесный текстовый формат обмена данными, основанный на синтаксисе JavaScript. Он легко читается как человеком, так и машиной, что делает его идеальным для передачи структурированной информации между различными приложениями и платформами. Данные в JSON представляются в виде пар “ключ-значение”, а также могут включать в себя массивы и вложенные объекты, что позволяет описывать сложные структуры данных.

Base64 — это метод кодирования двоичных данных (таких как изображения, PDF-документы, архивы и т.д.) в текстовое представление. Это необходимо, когда требуется передать бинарные данные через каналы, предназначенные исключительно для передачи текстовой информации, например, в составе JSON-сообщения или XML-документа. При кодировании в Base64 объем данных увеличивается примерно на 33%, но это позволяет обеспечить их корректную передачу.

Зачем нужна интеграция 1С с внешними сервисами?

Интеграция “1С:Предприятие” с внешними сервисами открывает широкие возможности для бизнеса:

  • Расширение функциональности: Подключение к специализированным сервисам (например, службы доставки, платежные системы, CRM, системы электронного документооборота (ЭДО)) обогащает возможности учетной системы.
  • Автоматизация бизнес-процессов: Устранение ручного ввода данных и автоматический обмен информацией между системами сокращают трудозатраты и минимизируют ошибки.
  • Создание единого информационного пространства: Данные из различных систем консолидируются, обеспечивая целостное представление о деятельности компании.[5]
  • Повышение оперативности: Быстрый обмен данными с внешними системами (например, сайтом, маркетплейсами) позволяет оперативно реагировать на изменения и принимать взвешенные решения.
  • Улучшение качества обслуживания клиентов: Интеграция с CRM и другими клиентскими сервисами помогает лучше понимать потребности клиентов и повышать их лояльность.
  • Обмен данными с контрагентами: Передача электронных документов через системы ЭДО упрощает и ускоряет взаимодействие с партнерами.

Возможности интеграции 1С с внешними сервисами через JSON

Платформа “1С:Предприятие” предоставляет встроенные механизмы для работы с JSON, что делает этот формат удобным для интеграции.

Основные возможности:

  • Обмен структурированными данными: JSON идеально подходит для передачи данных о товарах, заказах, клиентах, документах и любой другой структурированной информации между 1С и внешними системами.
  • Взаимодействие с REST API: Большинство современных веб-сервисов используют REST API с передачей данных в формате JSON. 1С может как отправлять запросы к таким API, так и выступать в роли сервера, предоставляя собственный API.
  • Интеграция с веб-сайтами и мобильными приложениями: JSON часто используется для обмена данными между бэкэндом на 1С и фронтэндом веб-сайта или мобильного приложения.
  • Обмен данными между различными конфигурациями 1С: JSON может служить форматом для обмена данными между разными базами “1С:Предприятие”.

Платформа 1С предлагает несколько подходов для работы с JSON:

  • Объектный подход: Позволяет конвертировать примитивные типы данных 1С (числа, строки, булево, даты) и коллекции (массивы, структуры, соответствия) в JSON и обратно. Это наиболее простой способ при работе с четко определенными структурами данных.

  • Потоковый (построчный) подход: Дает больше контроля над процессом формирования и чтения JSON, позволяя обрабатывать данные по частям. Это может быть полезно при работе с большими объемами данных или при необходимости формирования JSON с динамической структурой.

  • Сериализация прикладных объектов (XDTO): Платформа 1С позволяет сериализовать свои прикладные объекты (например, справочники, документы) напрямую в JSON с использованием механизма XDTO.

Пример чтения JSON в 1С:

// Предположим, есть строка с данными в формате JSON
JSONСтрока = "{""Имя"":""Иван"",""Возраст"":30,""Город"":""Москва""}";

// Создаем объект для чтения JSON
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(JSONСтрока);

// Читаем данные из JSON в структуру 1С
// Второй параметр (Истина) позволяет получить Соответствие вместо Структуры, 
// что полезно, если ключи JSON не соответствуют правилам именования идентификаторов 1С.
Данные = ПрочитатьJSON(ЧтениеJSON, Истина);

// Теперь можно обращаться к данным
Сообщить("Имя: " + Данные["Имя"]);
Сообщить("Возраст: " + Данные["Возраст"]);

ЧтениеJSON.Закрыть();

Пример записи (формирования) JSON в 1С:

// Создаем структуру с данными
ДанныеДляJSON = Новый Структура;
ДанныеДляJSON.Вставить("Товар", "Ноутбук");
ДанныеДляJSON.Вставить("Цена", 75000);
ДанныеДляJSON.Вставить("ВНаличии", Истина);

// Создаем объект для записи JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(); // Результат будет записан в строку
// Можно также указать параметры форматирования JSON
// ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Авто, " ", Истина));

// Записываем данные в JSON
ЗаписатьJSON(ЗаписьJSON, ДанныеДляJSON);

// Получаем результирующую JSON-строку
JSONСтрокаРезультат = ЗаписьJSON.Закрыть();

Сообщить(JSONСтрокаРезультат);

Интеграция 1С:Предприятие с внешними сервисами через Base64

Base64 используется в сценариях интеграции, когда необходимо передать двоичные данные (файлы) через текстовые каналы, в том числе в составе JSON-сообщения. Например, если нужно отправить изображение товара, скан документа или любой другой файл через API, которое принимает JSON.

Процесс выглядит следующим образом:

  1. Кодирование в 1С: Двоичные данные файла в 1С преобразуются в строку формата Base64 с помощью встроенной функции Base64Строка().
  2. Передача: Полученная строка Base64 включается в качестве значения одного из полей JSON-объекта.
  3. Декодирование на принимающей стороне: Внешний сервис получает JSON, извлекает из него строку Base64 и декодирует ее обратно в исходные двоичные данные.
  4. Обратный процесс: При получении файла от внешнего сервиса в формате Base64 (внутри JSON), 1С использует функцию Base64Значение() для преобразования строки обратно в двоичные данные.

Пример кодирования файла в Base64 и включения в JSON:

// Предположим, есть двоичные данные файла (например, прочитанные из файла или хранилища значения)
// Для примера создадим двоичные данные из строки
ДвоичныеДанныеФайла = ПолучитьДвоичныеДанныеИзСтроки("Это содержимое нашего файла.", КодировкаТекста.UTF8);

// Кодируем двоичные данные в Base64
СтрокаBase64 = Base64Строка(ДвоичныеДанныеФайла);

// Формируем JSON с файлом в Base64
ДанныеДляJSON = Новый Структура;
ДанныеДляJSON.Вставить("ИмяФайла", "document.txt");
ДанныеДляJSON.Вставить("СодержимоеBase64", СтрокаBase64);

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

Сообщить("JSON с файлом: " + JSONДляОтправки);

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

Если ПрочитанныеДанные.Свойство("СодержимоеBase64") Тогда
    ПолученнаяСтрокаBase64 = ПрочитанныеДанные["СодержимоеBase64"];
    ВосстановленныеДвоичныеДанные = Base64Значение(ПолученнаяСтрокаBase64);
    
    Если ВосстановленныеДвоичныеДанные <> Неопределено Тогда
        // Теперь с ВосстановленныеДвоичныеДанные можно работать (например, сохранить в файл)
        Сообщить("Файл успешно декодирован.");
        // Сообщить(ПолучитьСтрокуИзДвоичныхДанных(ВосстановленныеДвоичныеДанные, КодировкаТекста.UTF8));
    Иначе
        Предупреждение("Ошибка декодирования Base64!");
    КонецЕсли;
КонецЕсли;

Иногда, для преобразования строки в двоичные данные перед кодированием в Base64 (если исходные данные – это текст, который нужно передать как файл) или наоборот, после декодирования, может потребоваться использование временных файлов или потоков, особенно при работе со специфическими кодировками.

Преимущества интеграции программы 1С через JSON и Base64

  • Стандартность и совместимость: JSON является общепринятым стандартом, поддерживаемым большинством современных API и веб-сервисов. Base64 также является стандартным методом кодирования.
  • Гибкость: JSON позволяет описывать сложные иерархические структуры данных. Base64 обеспечивает передачу различных типов двоичных файлов внутри JSON.
  • Простота реализации: Платформа “1С:Предприятие” предоставляет встроенные и удобные инструменты для работы с JSON и Base64, что упрощает разработку интеграционных решений.
  • Многофункциональность: Данные форматы позволяют интегрировать 1С с широким спектром внешних систем и сервисов: от веб-сайтов и мобильных приложений до CRM, ERP и облачных платформ.
  • Легковесность JSON: По сравнению с XML, JSON обычно более компактен, что снижает объем передаваемых данных и может улучшить производительность обмена.
  • Удобочитаемость JSON: Формат JSON легко читается человеком, что упрощает отладку и анализ передаваемых данных.

Когда стоит использовать JSON (JavaScript Object Notation) и Base64

Выбор JSON и Base64 для интеграции целесообразен в следующих случаях:

  • Интеграция с веб-сервисами (REST API): Подавляющее большинство современных RESTful API используют JSON для обмена данными.
  • Разработка веб-приложений и мобильных клиентов: JSON является нативным форматом для JavaScript, что делает его удобным для взаимодействия между бэкендом на 1С и фронтендом.
  • Обмен структурированными данными: Когда необходимо передавать данные с четкой структурой (каталоги, документы, заказы и т.п.).
  • Передача файлов в составе структурированных сообщений: Когда требуется отправить или получить файлы (изображения, PDF, офисные документы, архивы) вместе с другими данными через API, принимающее JSON. В этом случае содержимое файла кодируется в Base64 и передается как строковое поле в JSON.
  • Интеграция с системами, поддерживающими эти форматы: Если внешняя система или сервис предоставляет API, работающее с JSON, или ожидает файлы в Base64.
  • Создание собственных HTTP-сервисов в 1С: При разработке собственных API на платформе 1С, JSON является предпочтительным форматом для запросов и ответов.
  • Обмен данными между различными приложениями 1С: JSON может использоваться как универсальный и простой формат для таких обменов.

Пример отправки POST-запроса с JSON-данными (включая файл в Base64)

// Данные для JSON (с файлом в Base64 - см. пример выше)
// JSONДляОтправки - строка JSON, содержащая имя файла и его содержимое в Base64

// Адрес внешнего сервиса
АдресСервиса = "api.example.com"; // Замените на ваш URL
ПутьКРесурсу = "/upload_file";

Попытка
    // Создаем HTTP-соединение
    // Для HTTPS нужно указать порт 443 и объект ЗащищенноеСоединениеOpenSSL
    // Соединение = Новый HTTPСоединение(АдресСервиса, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL);
    Соединение = Новый HTTPСоединение(АдресСервиса);

    // Создаем HTTP-запрос
    Запрос = Новый HTTPЗапрос(ПутьКРесурсу);
    Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8"); // Указываем тип контента [13, 34]
    // Могут потребоваться другие заголовки, например, для авторизации
    // Запрос.Заголовки.Вставить("Authorization", "Bearer ВашТокенДоступа");

    // Устанавливаем тело запроса
    Запрос.УстановитьТелоИзСтроки(JSONДляОтправки, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);

    // Отправляем POST-запрос
    ОтветHTTP = Соединение.ОтправитьДляОбработки(Запрос); // или Соединение.Записать(Запрос) / Соединение.ВызватьHTTPМетод("POST", Запрос)

    // Анализируем ответ
    Если ОтветHTTP.КодСостояния = 200 Или ОтветHTTP.КодСостояния = 201 Тогда // Успех или Создано
        JSONОтветСервера = ОтветHTTP.ПолучитьТелоКакСтроку();
        Сообщить("Ответ сервера: " + JSONОтветСервера);
        // Здесь можно распарсить JSONОтветСервера, если он есть
    Иначе
        Сообщить("Ошибка HTTP: " + ОтветHTTP.КодСостояния + ". " + ОтветHTTP.ПолучитьТелоКакСтроку());
    КонецЕсли;

Исключение
    Сообщить("Ошибка при выполнении HTTP-запроса: " + ОписаниеОшибки());
КонецПопытки;

В заключение, интеграция “1С:Предприятие” с внешними сервисами с использованием форматов JSON и Base64 является мощным и гибким инструментом, позволяющим значительно расширить функциональность системы и автоматизировать множество бизнес-процессов.

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

4 × 2 =

К НАЧАЛУ