Как реализовать интеграцию 1С 7.7 со СБИС через JSON-RPC API без использования SDK

Программист 1С v7.7 Управленческий учет IT и автоматизация бизнеса
← На главную

Интеграция устаревших, но крайне гибких систем на базе 1С 7.7 с современными сервисами электронного документооборота (ЭДО), такими как СБИС, — задача непростая, но выполнимая. Часто стандартные компоненты (SDK) от оператора оказываются «черным ящиком», который сложно внедрить в сильно кастомизированные конфигурации («клюшки»). В данной статье мы разберем, как построить прямое взаимодействие с сервером СБИС, используя протокол JSON-RPC, и решим основные проблемы, возникающие при обработке входящих документов.

Авторизация и получение идентификатора сессии

Первым шагом в работе с API СБИС является получение X-SBISSessionID. Для этого используется КЭП (квалифицированная электронная подпись). Проанализируем процесс: мы должны отправить запрос к методу аутентификации, передав данные владельца сертификата. Важно помнить, что идентификатор сессии имеет ограниченный срок жизни (обычно 24 часа при отсутствии активности, хотя может жить до 7 суток). Мы рекомендуем реализовать механизм кэширования токена в текстовый файл с проверкой даты его создания.

Рассмотрим пример формирования заголовков для последующих запросов, когда ID сессии уже получен:


// Пример установки заголовков HTTP-запроса
Заголовки = СоздатьОбъект("СписокЗначений");
Заголовки.ДобавитьЗначение("application/json-rpc;charset=utf-8", "Content-Type");
Заголовки.ДобавитьЗначение(ИдентификаторСессии, "X-SBISSessionID");

Получение списка входящих документов

Для получения документов используется метод СБИС.СписокДокументов. Здесь важно правильно настроить фильтрацию. Посмотрим на структуру типичного фильтра для входящих накладных (УПД). Если вы планируете ответную отправку, вам может пригодиться выгрузка УПД в формате ЭДО для Бухгалтерии 7.7:

  1. Параметр Тип является обязательным. Для входящих документов реализации это обычно ДокОтгрВх или ФактураВх.
  2. Параметр НашаОрганизация позволяет отсеять документы, приходящие на другие ИНН, привязанные к тому же аккаунту (актуально для бухгалтеров на аутсорсе).

Разберем пример JSON-запроса для получения списка за период:


{
 "jsonrpc": "2.0",
 "method": "СБИС.СписокДокументов",
 "params": {
  "Фильтр": {
   "Тип": "ДокОтгрВх",
   "ДатаС": "01.01.2024",
   "ДатаПо": "31.01.2024",
   "Навигация": { "РазмерСтраницы": "20", "Страница": "0" }
  }
 },
 "id": 1
}

Обработка вложений и сопоставление номенклатуры

При получении ответа от сервера мы сталкиваемся с тем, что один «Документ» в СБИС может содержать несколько «Вложений». Внимание: не все вложения являются целевыми документами. Например, вместе с УПД могут приходить справки к ГТД или протоколы. Для автоматизации загрузки в 1С 7.7 необходимо:

Подписание и выполнение действий (утверждение)

Процесс подписания в СБИС состоит из двух этапов: СБИС.ПодготовитьДействие и СБИС.ВыполнитьДействие. Именно здесь программисты чаще всего совершают ошибку. Проанализируем ситуацию: если в документе несколько первичных документов (например, Счет + Акт + СФ), сервер требует передать подписи для каждого вложения.

Важнейший нюанс: список вложений в методе ВыполнитьДействие должен передаваться строго в виде массива JSON. Чтобы корректно закодировать бинарные данные подписи в строку запроса, рекомендуется использовать внешнюю компоненту Base64 для 1С 7.7.

Пример структуры массива вложений для выполнения действия:


"Вложение": [
 {
  "Идентификатор": "e2f7d8e2-e56c-4547-a05f-21d46eec5c61",
  "Подпись": { "Данные": "MII....Base64_Sign_Data...." }
 },
 {
  "Идентификатор": "f3a8e9...next_id",
  "Подпись": { "Данные": "MII....Base64_Sign_Data...." }
 }
]

Запрос уточнения и отклонение

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

Решение проблем с кодировкой (UTF-8)

При использовании внешних компонент для HTTP-запросов в среде 1С 7.7 часто возникают проблемы с отображением кириллицы. Выясним причину: СБИС работает в UTF-8, а 1С 7.7 — в Windows-1251. Если вы получаете «битый» JSON, проанализируйте настройки перекодировки в вашей компоненте.

Рекомендуется отключать автоматическую перекодировку и выполнять её вручную после получения «сырых» бинарных данных, чтобы избежать искажения структуры JSON-пакета.

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

← На главную