Имя: Пароль:
1C
1С v8
Помогите выбрать структуру данных
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
спасибо
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший