|
Обмен через JSON | ☑ | ||
---|---|---|---|---|
0
semiluki
28.10.23
✎
14:56
|
Коллеги подскажите пожалуйста как лучше сделать. Начальство поставило задачу выгружать онлайн документы из одной базы 1с в другую идентичной конфигурации через http сервисы. Я делал несколько раз обмен через http и json но это были обмены с внешними системами. 1с просто отдавала нужные данные в формате json. Попробовал выгрузить (загрузить) документы 1с через json. Возник вопрос как быть с реквизитами. Каждый раз при записи реквизита документа дергать http сервис базы приемника и передавать в базу приемник реквизиты источника? Например чтобы записать документ "Заказ клиента" через json надо чтобы в базе приемника были заполнены склад, контрагент и т.д.
|
|||
1
RomanYS
28.10.23
✎
15:12
|
Планы обмена, регистрация изменений...
|
|||
2
Смотрящий
28.10.23
✎
15:26
|
(0) В источнике определяешь ключ синхронизации для склад, контрагент и т.д. - по коду, по наименованию, а уникальному идентификатору и т.п.
В json из источника в приемник передаешь ключ, в приемнике по ключу ищешь и заполняешь реквизиты |
|||
3
semiluki
28.10.23
✎
15:35
|
(2) "в приемнике по ключу ищешь и заполняешь реквизиты" Это понятно. У меня вопрос как в приемник передать реквизиты.
|
|||
4
Смотрящий
28.10.23
✎
15:44
|
У тебя будет ы json что то типа:
{ ТипДокумента: "ЗаказКлиента", КонтрагентКод: "00-0000001", КонтрагентНаименование: "Пупкин", СкладКод: "00-0000002", СкладНаименование: "Пупкин" } В приемнике ЗаказКлиента.Склад = СправочникСкладыПолучить("00-0000002", "Пупкин"); .... функция СправочникСкладыПолучить(СкладКод) Результат = Справочники.Склады.НайтиПоКоду(СкладКод); Если Результат.Пустая() Тогда Результат = Справочники.Склады.СоздатьЭлемент(); Результат.Код = СкладКод; Результат.Наименование = СкладНаименование; Результат.Записать(); КонецЕсли; Возврат Результат.Ссылка; Конецункции |
|||
5
semiluki
28.10.23
✎
15:50
|
(4) Спасибо. Получается надо формировать json документа со всеми подчиненными реквизитами до примитивных типов так?
|
|||
6
Смотрящий
28.10.23
✎
15:50
|
Ога
|
|||
7
AAA
28.10.23
✎
17:20
|
Здесь думай, не думай, а вариантов всего два
1 - регистрация изменений, тащить все что изменилось, получать ответ и снимать с регистрации 2 - тащить все, что входит в документ Второе медленнее, но гораздо проще. |
|||
8
AAA
28.10.23
✎
17:24
|
При выгрузке нескольких документов как вариант можно завести регистратор ссылок. Если ссылки в регистраторе нет, то выгружается с потрохами и регистрируется, если есть, то выгружается только ключ синхронизации
|
|||
10
stopa85
28.10.23
✎
18:07
|
А почему http сервис нельзя использовать просто как транспорт xml файла?
В простейшем случае, одностороннего обмена: Вот у тебя есть http-метод ПолучитьИзменения(КодУзлаОбмена, НомерПоследненогоПринятогоСообщения) В этом методе 1. Удаляешь регистрацию изменений по НомерПоследненогоПринятогоСообщения 2. Формируешь xml-файл обмена, возвращаешь его в качестве ответа. |
|||
11
stopa85
28.10.23
✎
18:12
|
А справочники склады, контрагенты
1) ты либо включаешь в план обмена (тогда при изменении контрагента он отправится и без документов) 2) или при формировании сообщения включаешь в него все "реквизиты" встречающиеся в документах: контрагенты, склады и т.п. |
|||
12
AAA
28.10.23
✎
18:15
|
(10)на мой субъективный взгляд формат JSON гораздо проще, понятнее, удобнее, чем XML.
|
|||
13
Bigbro
28.10.23
✎
18:18
|
нужно поделить на 2 шага выгрузку
1 делается запрос какие из объектов присутствуют в приемнике (те самые контрагенты склады и прочая) 2 производится выгрузка. те которые уже есть передаются по УИД, те которых нет передаются полностью для создания в приемнике. |
|||
14
Bigbro
28.10.23
✎
18:21
|
ну или двусторонний обмен - выгружаем в приемник документ, там ищем соответствующие ссылочные реквизиты и те, которых не находим - делаем запросики обратно в базу-источник чтобы получить полные данные и создать их в приемнике.
|
|||
15
stopa85
28.10.23
✎
18:28
|
(12) в таком случае замените в моих сообщениях xml на JSON и ничего не изменится.
На мой взгляд, JSON просто более человекочитаемый. |
|||
16
AAA
28.10.23
✎
18:44
|
(15)Понятно, что от формата файла обмена идеология обмена практически не меняется. Это никто не оспаривает. Просто Вы сами спросили автора, а почему не XML
(13)При одностороннем обмене "те, которые есть" возможно надо переписать, так как они могли измениться в базе источнике. Тогда одного УИД недостаточно и надо либо сравнивать объекты, либо хотя бы один раз передавать в приемник каждый объект с потрохами |
|||
17
stopa85
28.10.23
✎
18:45
|
Ну и не забывай ответить на такой вопрос: А выполняются ли твои обмены? И как ты собираешься это мониторить.
В моем примере из (10) нужен нулевой шаг: Если НомерОтправленного=НомерПринятого Тогда ОбменВыполняется(Истина); Иначе ОбменВыполняется(Ложь); КонецЕсли; Я мониторинг обменов к zabbix прикрутил, но это большая тема не много не по топику. |
|||
18
Aleksey
28.10.23
✎
18:57
|
(7) Вариантов всегда больше. Я к примеру с документами не тащу справочники, только их GUIDы и если в приемнике нет элемента я просто создаю новый с нужным гуидом, но не заполненный. А вечером (раз в сутки) отдельно тупо выгружаю все справочники и обновляю только те которые найдены в приемнике.
|
|||
19
AAA
28.10.23
✎
19:13
|
(16)ну пусть больше. Хотя описанный Вами вариант это не самостоятельный, новый вариант, а последовательное выполнение двух базовых. А зачем в приемнике незаполненный вновь созданный элемент?
|
|||
20
Aleksey
28.10.23
✎
19:20
|
(19) А почему бы и нет?
Зато это сильно уменьшает время выгрузки и загрузки и освобождает от необходимости регистрации так как это 7-ка, и там с регистрацией чуть сложнее чем в 8-ке. |
|||
21
stopa85
28.10.23
✎
19:25
|
Ну и в конец концов. Я лично с этим не работал, знаком поверхностно, но ведь есть Подсистема БСП ОбменДанными. Там как раз трансфер уже реализван через web сервисы и в справочниках даты последнего удачного обмена нарисованы...
Погугли как настроить обмен данными между БУХ и ЗУП. У тебя будет аналогично, только нужно будет правила обмена на конвертации данных 2.0 написать. Учитывая что базы идентичны, будет не сложно. И будет по методике 1С, что классно для человека который тебя со временем заменит. |
|||
22
Valdis2007
28.10.23
✎
19:26
|
(0) если базы идентичные, большой разницы нет json xml
если в приемнике нет данных которые содержат реквизиты, твоего передаваемого объекта, придется их тоже отправлять из источника. Обычно "улетает" не один объект, а некий набор связанных с ним |
|||
23
rphosts
29.10.23
✎
02:04
|
(3) сразу все данные.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |