Имя: Пароль:
1C
1С v8
Обмен со сторонними ПО используя XSD, XDTO
0 Said_We
 
26.05.18
04:26
Стоит задача обмена базы 1С с другими ПО, используя XDTO.
Как я вижу решение задачи:
1. Создается пакет XDTO, который в виде схемы XSD передается сторонним ПО. Сторонние ПО могут быть как на 1С так и нет. Как будут выгружать данные сторонние ПО фиолетово - это их задача, формат XSD с нашей стороны. Те что на 1С могут использовать только ФабрикуXDTO и не могут СериализаторXDTO, так как физическая структура хранения данных в ПО источнике совсем другая и может совсем не пересекаться. Используя ФабрикуXDTO необходимо прописывать заполнение каждого ЗначенияXDTO ручками.
2. Собственно чтение XML и ручной разбор всего, что пришло.

Существуют варианты, как эту задачу решить проще?
Понятно что "1С:Конвертация данных" не подходит, так как сторонние ПО совсем не 1С. Но выгрузку, если сторонняя программа всё же 1С, может быть можно упростить. Может быть как-то составить пакет XDTO, что бы загрузку можно было осуществлять проще.

Нужен совет.
1 lEvGl
 
гуру
26.05.18
08:32
можно построчно писать хмл с приведением к примитивным типам
2 MaxS
 
26.05.18
08:36
(0)> Понятно что "1С:Конвертация данных" не подходит, так как сторонние ПО совсем не 1С.
Непонятно почему такой вывод.
Кто мешает формировать сторонними программами xml файл в универсальном формате обмена EnterpriseData, например.
На стороне 1С в этом случае практически ничего не нужно дорабатывать.
В самом простом случае берем обработку из состава конфигурации "Выгрузка загрузка EnterpriseData", скармливаем ей текстовую строку из сторонней программы и она загружает данные  в себя, так же может отдать в строку.
3 Said_We
 
28.05.18
12:35
(2) Совсем не типовая конфигурация. Нет там никакого EnterpriseData. Поэтому и создаю свой ПакетXDTO, что бы можно было быстро давать структуру на вход для стороннего ПО.

(1) Как-то это совсем руками. Не удобно. На 77 похоже, до КД так делали. А тут ПакетXDTO помогает только писать удобнее визуально. Но все же "Пишите Шура пишите"...
4 VitShvets
 
28.05.18
13:00
Так XDTO же это объектная модель. Есть схема, заполнил её, выгрузил (передал) XML. При загрузке обратная история -  скормил файл фабрике XDTO, получил объект с данными. Да руками придётся писать соответствие полей документа-справочника и атрибутам-узлам XML. Но если хочется как в конвертации, чтобы поменьше руками писать, то надо двигаться, как написано в (2). EnterpriseData есть в БСП, накатить на любую смописную конфигурацию вполне реально. См. документацию по БСП, раздел "Обмен данными". https://its.1c.ru/db/bsp246doc#content:1827:1
5 Said_We
 
28.05.18
23:12
(4) "EnterpriseData есть в БСП, накатить на любую самописную конфигурацию вполне реально" - Предлагаешь перетянуть формат типовых объектов и не использовать не один из них? Или я что-то не понял?
6 Сияющий в темноте
 
29.05.18
09:54
Вы просто не встречали сторонние системы,где нет ни документов ни справочников,а есть только выборки из базы данных.
И,когдп система может вам выплюнуть только поток действий с уникальным ключом только по транзакции ручное формирование xml не покажется такой сложной вещью.
7 Apokalipsec
 
29.05.18
10:01
В (0) какой-то поток сознания по 1му пункту.
Смотрите - у вас есть пакетXDTO, который вы нарисовали руками, система вам начинает передавать пакет, в который добавлено новое поле и он у вас ломается на валидации, вам придется сначала поправить пакет, потом код. Используя сериализатор - вы просто будете обходить свойства проверяя их наличие, есть - заполнили, нет - пошли дальше/ругнулись.

Для начала определитесь с архитектурой вашего решения, чтобы потом не мучиться.
8 DrShad
 
29.05.18
10:09
зачем вам пакетXDTO, если у вас есть XSD
юзайте DOM
9 Said_We
 
29.05.18
10:28
(7) Не пойму какой сериализатор, если источник левые базы в левых ПО. Эти левые ПО не знают про ссылки 1С ничего.
Если добавлены поля и я их не описал в пакете, то они не будут переданы. Если описал, то будут переданы. Если не передали и поле обязательное, то должно прерывать прием по ошибке пакета.

(8) XDTO визуально удобнее и не требует приведение в XSD после сторонних редакторов в вид, который 1С понимает. Один раз делаем в стороннем и один раз переносим в 1С, далее редактируем в 1С. В моем случае объектов не много, можно и в 1С помучиться.

(6) В моем случае как раз выборки. Аналогов объектов в сторонних системах нет. Собственно по этому я и не понимаю про какой сериализатор ведется речь в (7).
10 DrShad
 
29.05.18
10:30
(9) сам то понял что сказал?
11 Said_We
 
29.05.18
10:43
(10) Примерно да. :-) Не сильно прозрачно когда описание данных и сами данные в одном месте. Я плохо понимаю как это  объяснить разработчикам стороннего ПО - у них нет аналогов объектов, только выборки.
12 DrShad
 
29.05.18
10:45
(11) у них есть XSD - больше ничего не нужно
13 Apokalipsec
 
29.05.18
10:48
(9) Если они руками собирать будут пакет, то они могут добавить поля и им пофигу будет на схему. Про сериализатор это я неправильно сам написал, простое чтениеXML.
Можно ещё веб-сервис запилить, если они умеют. С пакетом и без файликов.)
14 VitShvets
 
29.05.18
11:23
(5) Предлагаю для начала почитать. БСП можно накатить избирательно - только необходимый минимум.
15 Said_We
 
29.05.18
11:28
(14) Ссылку в (4) я почитал. Не понимаю чем мне это поможет. Не писать сам механизм обмена файлами по FTP по почте и т.д. У меня сейчас вопрос не в этом.
16 DrShad
 
29.05.18
11:30
пример XSD в студию, т.к. тебе более всего необходимо в ней разобраться
17 mTema32
 
29.05.18
11:50
(0) Два года назад я использовал 1-ый вариант. Но задача была немного другая. Была схема от стороннего источника данных, я ее свою самописку запилил и потом читал xml с помощью XDTO.
Сегодня опять похожая задача встает. Буду ее решать через EnterpriseData. Да, придется схему в конвертации 3.0 пилить и отдавать сторонним разработчикам, т.е. он будет совсем не типовая. Но мне кажется в таком формате будет удобнее разработку загрузки вести в КД3.0.
18 MaxS
 
29.05.18
20:31
Решал как-то задачу синхронизации базы на MS SQL c 1С УПП.
Пытались сделать массовое решение для связи этого стороннего решения с любой 1С.
Сделал всё на EnterpriseData. Обработка в УПП прямыми запросами извлекает данные и создаёт xml файл в формате ED, потом другая обработка в УПП импортирует xml файл в базу 1С. Несколько месяцев возился.

Пришел к выводу, что нужно сделать промежуточную 1С конфигурацию на БСП, которая напрямую работает со сторонней программой. Такое решение позволит настроить обмен с любой 1С базой. Сегодня УПП, завтра ERP и не нужно заново писать обмен. Реализовать идею не удалось, т.к. заказчик не одобрил.
19 Said_We
 
31.05.18
12:51
(18) Если в EnterpriseData нет твоих объектов, то чем это поможет? Свой формат EnterpriseData делать отдельно сбоку?
20 Said_We
 
31.05.18
12:52
(18) А регистры сведений как предполагается в EnterpriseData переносить? Не вижу их в перечне объектов.
21 Tateossian
 
31.05.18
12:56
Народ, а скиньте шаблон, начало интересует, как написать шаблон XSL, чтобы из вот этого:

<?xml version="1.0" encoding="utf-8"?>
<DocumentObject.ЗаказПокупателя xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
  <Ref>377b50c4-edf5-11e6-9306-0cc47a067dfb</Ref>
  <DeletionMark>false</DeletionMark>

родилось вот это:

<?xml version="1.0" encoding="UTF-8"?>
<DocumentObject.Задание xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
    <Ref>377b50c4-edf5-11e6-9306-0cc47a067dfb</Ref>
    <DeletionMark>false</DeletionMark>
    <Date>2017-02-08T14:53:14</Date>

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"; xmlns="http://www.w3.org/TR/xhtml1/strict">;

    
    <xsl:output omit-xml-declaration="yes" indent="yes"/>
    <xsl:strip-space elements="*"/>
    
    <xsl:template match="/">
        <DocumentObject.Задание xmlns="http://v8.1c.ru/8.1/data/enterprise/current-config"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
        
<xsl:copy-of select="./Ref" />
    
        </DocumentObject.Задание>
    </xsl:template>





    
    <xsl:template match="DocumentObject.ЗаказПокупателя">
  
    </xsl:template>

</xsl:stylesheet>



Не могу понять, как идти ниже от корня по иерархии
22 Tateossian
 
31.05.18
12:57
Как root/Ref выдернуть и дальше соседей всех?
23 MaxS
 
31.05.18
13:35
(19) Например, у Вас есть коробка для перевозки гвоздей, на ней так и написано "Гвозди!". Вдруг Вам понадобилось перевезти шурупы, но нет коробки "Шурупы!". Почему бы не использовать коробку для гвоздей? Нужно лишь предупредить кладовщика на той стороне, чтобы выгружали в ящик для шурупов.
Так же и с EnterpriseData. Подбираем максимально подходящий объект и переносим что угодно, в самом объекте ED или в AdditionalInfo.

Для переноса регистра сведений штрихкоды используется объект формата Справочник.Штрихкоды и т.п.