|
Помогите выбрать структуру данных | ☑ | ||
---|---|---|---|---|
0
terr
04.12.17
✎
06:38
|
Добрый день,
На стороне 1С поднят HTTP-сервис, в который прилетают документы из сторонней (не 1С) СУБД. Прилетают они в XML примерно такого вида: <package> <data> <doc type="income" id="0755F286-D342-11E7-BA3E-626611313036"> <deleted>false</deleted> <docDate>2017-11-17</docDate> <docNumber>80227</docNumber> <storeId>23</storeId> <subtype>Прочие поступления</subtype> <rows> <row> <deleted>false</deleted> <productId>762</productId> <quantity>1</quantity> <sumWithTax>27</sumWithTax> </row> <row> <deleted>false</deleted> <productId>17105</productId> <quantity>1</quantity> <sumWithTax>560</sumWithTax> </row> </rows> </doc> </data> </package> Задача: подхватить передаваемый документ и создать такой же в 1С То есть тут прослеживается соответствие со структурой данных 1С - также - реквизиты документа, названия табличных частей и реквизиты табличных частей. В зависимости от <doc type ="xxx"> - структура может содержать абсолютно другое описание. Основной принцип в том, что передается некая структура данных, похожая на данные, хранящиеся в 1С, которые можно сопоставить по передаваемым id Также можно заранее прописать "правила" или "соответствия" таких пакетов данных. Например в этом конкретном случае я понимаю, что если тип документа "income" - я создаю документ "ПоступлениеТоваров". deleted - пометка удаления docDate - дата docNumber - номер rows - Табличная часть "Товары" и т.п. Вопрос: Каким способом лучше всего задавать и хранить соответствие реквизитов объектов в 1С, при условии, что они по структуре очень похожи и различаются лишь названиями, а обмен проходит при помощи таких файлов через HTTP сервис? C XDTO ранее не работал. Имеет ли смысл копать в данном направлении или же есть какой-то другой вариант задать соответствие данных между собой в сторонней системе и в 1С? Сейчас в модуле HTTP сервиса написано громадное условие, которое в зависимости от типа документа вызывает одну из процедур модуля, в ней, в свою очередь куча условий... весь модуль на 80% - копипаст одной процедуры. Не очень красиво... Спасибо за подсказки. |
|||
1
Peltzer
04.12.17
✎
06:47
|
Я бы запихал в макет соответствие имен полей источника и имен реквизитов приёмника, и читал бы из макета в какое поле что нужно записать. А сам XML пихал бы в Соответствие (парсинг, емнип, штатными средствами идёт). Это структура, но индексируемая.
Тогда всё считывание умещается в два вложенных цикла (для ТЧ). Ну, максимум, подбор правила по типу приёмника (по наименованию, по ИНН, предопределенные и т.д.). |
|||
2
DrZombi
гуру
04.12.17
✎
07:36
|
(0) Забить на структуру, добавить реквизит ИД или как там у вас, и далее пишешь все в нужные документы, создавая нужную номенклатуру, либо сообщая обратно, что нет такой номенклатуры и нужно, что бы сторонняя программа создала вам позицию, но уже через другую веб службу :)
|
|||
3
Адинэснег
04.12.17
✎
07:54
|
берешь WSDL, и по описанию создаешь структуру и реквизиты нужных тиипов, ws сам себя должен описывать, что там гадать
|
|||
4
mistеr
04.12.17
✎
08:26
|
Можно написать XSLT преобразование входящего XML в формат КД2 или ED. Дальше очевидно.
Плюсы: все декларативно, ни строчки кода, можно иметь несколько версий при эволюции формата. Минусы: нужно знать XSL. |
|||
5
terr
04.12.17
✎
11:40
|
спасибо
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |