Интеграция устаревших, но крайне гибких систем на базе 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:
Тип является обязательным. Для входящих документов реализации это обычно ДокОтгрВх или ФактураВх.НашаОрганизация позволяет отсеять документы, приходящие на другие ИНН, привязанные к тому же аккаунту (актуально для бухгалтеров на аутсорсе).Разберем пример 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...." }
}
]
Если в документе обнаружены ошибки, в концепции СБИС используется действие Отклонить. После вашего отклонения поставщик должен прислать корректировочный документ или новую редакцию. В учетной системе это обрабатывается как получение нового входящего объекта, структура которого должна соответствовать стандартам.
При использовании внешних компонент для HTTP-запросов в среде 1С 7.7 часто возникают проблемы с отображением кириллицы. Выясним причину: СБИС работает в UTF-8, а 1С 7.7 — в Windows-1251. Если вы получаете «битый» JSON, проанализируйте настройки перекодировки в вашей компоненте.
Рекомендуется отключать автоматическую перекодировку и выполнять её вручную после получения «сырых» бинарных данных, чтобы избежать искажения структуры JSON-пакета.
Используя предложенные методы, вы сможете создать надежный и «прозрачный» механизм обмена со СБИС, который будет работать внутри вашей конфигурации без необходимости запуска сторонних приложений и тяжелых библиотек.