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