Интеграция с 1С
Чаще всего у клиентов: 1С:Управление торговлей 11, 1С:ERP, 1С:Комплексная автоматизация, 1С:Бухгалтерия для Казахстана, 1С:УНФ. Есть три пути — от простого к полному.
| Путь | Что нужно | Когда подходит |
|---|---|---|
| Файл из 1С | ничего, кроме выгрузки в Excel | начало работы, пилот — см. Без программиста |
| Расширение Orda TMS Connector (.cfe) | установить расширение, ввести адрес и ключ | типовые конфигурации, постоянная работа |
| Свой обмен через HTTP | программист 1С | доработанные конфигурации, особые правила |
Расширение Orda TMS Connector (.cfe)
Заголовок раздела «Расширение Orda TMS Connector (.cfe)»Статус: в разработке (Этап 3). Описание ниже — как оно будет работать.
Расширение ставится без изменения типовой конфигурации (Администрирование → Расширения → Добавить из файла) и не мешает обновлениям 1С.
Что делает:
- Настройки: адрес API, API-ключ (хранится в безопасном хранилище 1С), режим «Тест / Бой», склады 1С ↔ склады Orda, какие документы выгружать (Реализация товаров и услуг, Заказ клиента, Расходный ордер на товары).
- Справочники: партнёры/контрагенты с адресами доставки → точки доставки Orda (
/customers, ключ —externalId= уникальный идентификатор ссылки 1С). - Выгрузка заказов по расписанию (регламентное задание, например каждые 10 минут) и по кнопке
«Отправить в Orda» в списке документов:
POST /orders/bulk,externalId= идентификатор документа,number= номер документа, вес и объём — из характеристик номенклатуры, сумма к оплате — если оплата при получении. - Обратно: статусы доставки, причины недоставки и номер маршрута — в реквизиты/дополнительные сведения документа;
по
plan.approved— маршрутный лист с порядком точек. - Журнал обмена в 1С: что ушло, что вернулось, строки с ошибками и их коды.
Как 1С получает статусы
Заголовок раздела «Как 1С получает статусы»- Вебхуки на HTTP-сервис 1С — мгновенно. В 1С создаётся HTTP-сервис (метод POST), база публикуется на веб-сервере (Apache/IIS) по https с доступом из интернета. Orda отправляет события, 1С проверяет подпись и обновляет документ.
- Опрос — если публиковать базу наружу нельзя: регламентное задание раз в 1–5 минут вызывает
GET /orders?date=…(илиGET /orders/external/{код}) и обновляет изменившиеся документы.
Пример: отправка пакета заказов из 1С
Заголовок раздела «Пример: отправка пакета заказов из 1С»Функция ОтправитьВOrda(Заказы, КлючПакета) Экспорт // Заказы — Массив структур с полями externalId, number, deliveryDate, customerExternalId, weightKg ... Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); ЗаписатьJSON(Запись, Новый Структура("orders", Заказы)); Тело = Запись.Закрыть();
Соединение = Новый HTTPСоединение("api.ordatms.kz", 443, , , , 60, Новый ЗащищенноеСоединениеOpenSSL); Запрос = Новый HTTPЗапрос("/api/v1/orders/bulk"); Запрос.Заголовки.Вставить("X-Api-Key", ПолучитьКлючOrda()); // из безопасного хранилища Запрос.Заголовки.Вставить("Content-Type", "application/json; charset=utf-8"); Запрос.Заголовки.Вставить("Idempotency-Key", КлючПакета); Запрос.УстановитьТелоИзСтроки(Тело, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Ответ = Соединение.ОтправитьДляОбработки(Запрос); Если Ответ.КодСостояния <> 200 Тогда ВызватьИсключение СтрШаблон("Orda: %1 %2", Ответ.КодСостояния, Ответ.ПолучитьТелоКакСтроку()); КонецЕсли; Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку()); Возврат ПрочитатьJSON(Чтение); // created, updated, failed, results — записать ошибки в журналКонецФункцииПример: проверка подписи вебхука в 1С
Заголовок раздела «Пример: проверка подписи вебхука в 1ѻ платформе нет готовой функции HMAC — она собирается из ХешированиеДанных (пример для платформы 8.3.11+):
Функция HMAC_SHA256_Hex(Секрет, ТелоДвоичные) Ключ = ПолучитьДвоичныеДанныеИзСтроки(Секрет, КодировкаТекста.UTF8, Ложь); Блок = 64; Если Ключ.Размер() > Блок Тогда Х = Новый ХешированиеДанных(ХешФункция.SHA256); Х.Добавить(Ключ); Ключ = Х.ХешСумма; КонецЕсли; БуферКлюча = Новый БуферДвоичныхДанных(Блок); БуферКлюча.Записать(0, ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Ключ)); Внутр = Новый БуферДвоичныхДанных(Блок); Внешн = Новый БуферДвоичныхДанных(Блок); Для i = 0 По Блок - 1 Цикл Внутр.Установить(i, ПобитовоеИсключительноеИли(БуферКлюча.Получить(i), 54)); // 0x36 Внешн.Установить(i, ПобитовоеИсключительноеИли(БуферКлюча.Получить(i), 92)); // 0x5C КонецЦикла; Х = Новый ХешированиеДанных(ХешФункция.SHA256); Х.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Внутр)); Х.Добавить(ТелоДвоичные); Промежуточный = Х.ХешСумма; Х = Новый ХешированиеДанных(ХешФункция.SHA256); Х.Добавить(ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Внешн)); Х.Добавить(Промежуточный); Возврат НРег(ПолучитьHexСтрокуИзДвоичныхДанных(Х.ХешСумма));КонецФункции
// В обработчике POST HTTP-сервиса:// Подпись = Запрос.Заголовки.Получить("Orda-Signature") → t=...,v1=...// Данные = ПолучитьДвоичныеДанныеИзСтроки(t + ".") + Запрос.ПолучитьТелоКакДвоичныеДанные()// (склеить через ПотокВПамяти или СоединитьДвоичныеДанные)// Сравнить HMAC_SHA256_Hex(Секрет, Данные) с v1, проверить, что t не старше 5 минут,// ответить 200 и обработать событие (лучше — фоновым заданием).Сопоставление полей (типовое УТ 11)
Заголовок раздела «Сопоставление полей (типовое УТ 11)»| Orda | 1С |
|---|---|
externalId |
Документ.Ссылка.УникальныйИдентификатор() |
number |
Документ.Номер |
deliveryDate |
ДатаОтгрузки / ЖелаемаяДатаОтгрузки |
customerExternalId |
идентификатор партнёра или адреса доставки |
address |
адрес доставки из документа (если точки нет в справочнике) |
weightKg, volumeM3 |
сумма веса/объёма номенклатуры по строкам |
amount, paymentType |
сумма к оплате при получении, форма оплаты |
windowFrom, windowTo |
«Время доставки с/по» из документа |
Точное сопоставление настраивается под конфигурацию клиента — это входит в услугу подключения.