Конструктор обмена данными в формате JSON
Расширение конфигурации для организации обмена данными между 1С и сторонними системами по протоколу http. Формат обмена json. В 1С настраиваются правила загрузки и отправки данных. В корреспондирующих системах настраиваются такие же правила.
Расширение универсальное. Не привязано ни к одной конфигурации. БСП не используется.
- Описание
- Подробнее
Описание
Одному правилу (сущности) в 1С можно поставить в соответствие объект метаданных и узел обмена. При синхронизации 1С может отправлять только изменённые объекты данных.
Выборка данных в 1С может выполняться схемой компоновки данных или программно. Запись только программно в обработке загрузки.
В расширении два справочника.
В справочнике Описание данных настраиваются правила выборки и загрузки, а также указывается план синхронизхации.
В справочнике Планы синхронизации настраивается подключение к корреспондирующим системам.
Проще всего настроить выборку данных с помощью схемы компоновки данных.
Для этого указываем способ выборки данных «Схема компоновки данных» (СКД)

В СКД необходимо прописать список выбираемых полей и установить имя для каждой группировки. Имя верхней группировки должно совпадать с наименованием элемента справочника AINSYS_ОписаниеДанных.

Эта таблица будет видна на странице http-сервиса. Таким образом документируется интерфейс с другой системой.
Дерево значений, возвращаемое СКД, можно программно обработать. Код для этого прописывается на вкладке «Обработка выгрузки».
На вкладке «Обработка загрузки» прописывается программный код записи в 1С. Данные, переданные другой системой, будут в переменной стркСДанными.
На вкладке «Обработка отправки данных» можно указать код, исполняемый при периодической отправке данных. Если код не указан, то отправятся все данные.
Вот такой код отправит первые 100 объектов, изменённых с момента последней синхронизации:
РезультатОтправки = ОтправитьДанные(ЭтоПравило, 100, 0,Истина,);
После успешной отправки пометка изменённости снимается.
На вкладке «Настройка синхронизации» указывается план синхронизации к которому принадлежит данное правило.
Ведущий объект регистрации изменений и узел регистрации используются для получения списка изменённых объектов.

Дерево описания данных показывается на странице http сервиса. Пример запроса для получения описания данных
https://server1c/ut11/hs/ainsys/md/?k=cogitoergosum
https://server1c/ut11/hs/ainsys — путь к сервису
md – признак того, что требуются метаданные (описание) сервиса
?k=cogitoergosum – ключ и значение ключа, указанные в плане синхронизации

Если сторонняя система готова автоматически загружать описание интерфейса, то его можно получить в формате json. По запросу https://server1c/ut11/hs/ainsys/md/json?k=cogitoergosum
В интерфейсе возможны следующие типы данных Строка, Дата, Число, Булево, Массив, Объект, Идентификатор. При получении данных Объект json преобразуется в Структуру. Тип Ссылка в терминологии json является объектом с полями id и Представление. При загрузке 1С пытается получить объект данных по id.
Получение данных от 1С
Обмен данными выполняется двумя способами: 1С:AINSYS может отдавать по GET запросу или отправлять POST запрос с данными на адрес корреспондирующего узла, указанный в плане синхронизации.
Чтение GET запросом
Чтение GET запросом возможно через браузер либо другим удобным способом.
https://server1c/lyayut11/hs/ainsys/data/ИДЕНТИФИКАТОР/ФОРМАТ/КОЛИЧЕСТВО/СМЕЩЕНИЕ?ПараметрыЗапроса, где
ИДЕНТИФИКАТОР – идентификатор описания сущности.
ФОРМАТ – строка json или html. В этом формате 1С вернёт результат. Html не предназначен для передачи пользователю, нужен только для оценки результата работы алгоритма.
КОЛИЧЕСТВО – число объектов, которое требуется получить.
СМЕЩЕНИЕ – с какого объекта следует начать отсчёт количества.
Например, запрос https://server1c/ut11/hs/ainsys/data/c8917b66-cc53-11ec-8250-005056af18e8/json/10/11/?k=kluch&n=true
Вернёт 10 элементов, начиная с 11. Ключ n=true означает, что вернуть необходимо только изменённые элементы.
ВАЖНО! 1C:AINSYS снимает пометку изменения с элементов, отданных по запросу с ключом n.
В теле GET запроса можно задать отбор. Для этого нужно отправить json с полями, соответствующими первому уровню описания данных. Отбор ведётся только на равенство значений
Пример запроса для получения одного элемента справочника:
{"Ссылка": "11a95b9e-e8ce-45ad-8ee6-08c69cb76123"}
Ответ:
{"Ошибка": null,
"Данные": [
{"ВидНоменклатуры": "9142645a-23cc-11e8-80e2-f6fd97ac31f9",
"Артикул": "ADD-AP100 ",
"Наименование": "ADD-AP100 (1 FXS, 2x 10/100 Fast Ethernet), шлюз",
"Неликвид": false,
"Код": "00000020034",
"Ссылка": "11a95b9e-e8ce-45ad-8ee6-08c69cb76123"
}
],
"Правило": "c8917b66-cc53-11ec-8250-005056af18e8"
}
Пример запроса для поиска по текстовому полю:
{"Артикул": "FBP-SM03-EU-C"}
Отправка данных из 1С POST запросом
1С:AINSYS отправляет данные корреспондирующей системе по адресу, указанному в плане синхронизации.
К сожалению, платформа 1С не позволяет создавать регламентные задания. Инициировать отправку можно http запросом по корневому адресу ainsys. При этом в параметре k нужно передать ключ плана обмена. Пример запроса: https://server1c /ut11/hs/ainsys?k=kluch
При получении такого http запроса 1С:AINSYS выбирает все настройки с установленной галкой «Автоматически отправлять данные кор узлу» и выполняет программный код либо отправляет все данные.
На картинке ниже показан код для отправки первых двух товаров, отмеченных как изменённые в плане обмена, связанном с данным правилом.
РезультатОтправки = ОтправитьДанные(ЭтоПравило,2,, Истина, );

Регулярную отправку данных корреспондирующим узлам можно наладить с помощью расписания операционной системы. Для этого достаточно по расписанию выполнять команду curl. Пример: curl https://server1c /ut11/hs/ainsys?k=kluch
Формат POST запроса
1С принимает и отправляет данные POST запросом в одинаковом формате.
Входящие данные в формате JSON содержат объект или массив объектов с полями:
entity – ссылка на описание данных в 1С. Собственно описание ищется по entity.id, если найти не удалось, то по entity.name.
action – в исходящем запросе всегда указывается UPDATE. Во входящих данных поле не анализируется.
payload – объект или массив объектов, содержащий структуру, соответствующую описанию в справочнике
AINSYS_ОписаниеДанных
Пример данных в формате JSON
[
{"entity": {
"id": "40c0f117-67d4-11ec-8265-f6fd97ac31f9",
"name": "Заказы"
},
"action": "ADD"
"payload": {
"Ссылка": 40c0f117-67d4-11ec-8265-f6fd97ac31f9",
"Комментарий": "некий комментарий ",
"Сумма": 1667.69,
"Номер": "ЕТ00-001124",
"Дата": "2021-12-29T16:15:15"
}
},
]
Если в payload обнаружатся поля, не описанные в справочнике AINSYS_ОписаниеДанных, то они будут показаны справа от описания данных. Проверка наличия новых полей выполняется один раз в сутки.

Запись данных в 1С
1C:AINSYS принимает данные для записи только http POST запросом. Для записи необходимо отправить данные по относительному адресу /data/?k=kluch, где kluch – ключ, указанный в плане синхронизации.
Полный адрес для отправки данных POST запросом может выглядеть так:
https://server1c/ut11/hs/ainsys/data/?k=kluch
Формат принимаемых данных совпадает с форматом, исходящего POST запроса.
1C:AINSYS преобразует полученные данные в массив структур с полями указанными на вкладке «Описание данных». Поля типа
Идентификатор 1C:AINSYS преобразует в ссылки на объекты базы данных.
Запись выполняется кодом, на вкладке «Обработка загрузки».

Отправка данных из 1С в корр. систему
Поскольку расширения 1С не могут содержать регламентные задания, то инициировать отправку данных из 1С в AINSYS возможно, например командой операционной системы с любого компьютера. Для этого достаточно отправить GET запрос http сервису AINSYS.
Пример запроса:
curl https://server1c/ut11/hs/ainsys/?k=kluch
Чтобы отправка выполнялась периодически, достаточно создать командный файл, исполняемый при запуске системы. В операционной системе Linux исполняемый файл может выглядеть так:
#!/bin/bash
while true
do
curl "https://server1c/ut11/hs/ainsys/?k=kluch" -b "SESSION=$SESSION" —http1.1
echo -e »
sleep 30
done
В операционной системе Windows командный файл может выглядеть так:
@ECHO OFF
:l1
curl https://server1c/ut11/hs/ainsys/?k=kluch
TIMEOUT /T 30
goto l1
Приведенные выше скрипты каждые 30 секунд будут давать команду 1С отправить в AINSYS данные.
Эту разработку я писал как 1Сную часть системы AINSYS
Эта разработка на GIThub‘е

