Тендеры на корпоративные проекты

Если у вас планируется проект, и вы хотите получить лучшее предложение, оставьте заявку. Мы проведем экспертизу требований, подберем оптимальное решение и команду проекта.

Оставить заявку

Внимание! Текущий статус - «архив». Проект - не будет показано в списке проекты.
В список проектов
Название: Разработка корректной XSD схемы для обработки xml файла в 1С
Предполагаемый бюджет: 1 000 руб.
Категория: Обмен через XML
Сроки: От 10 ч. до 2 дн.
Бюджет: От 1 руб. до 10 000 руб.
Файл проекта: Скачать
Статус: Поиск исполнителя

1. Оценка проекта
и выбор
исполнителя
Претенденты
отправляют оценку стоимости и сроков выполнения проекта. Заказчик ведет переговоры и выбирает одного исполнителя.
2. Создание
этапов проекта со
стоимостью и сроками
Исполнитель
создает этап проекта,
в котором указаны стоимость, срок выполнения работ и список задач, которые необходимо
выполнить.
3. Депонирование
оплаты
Заказчик
перечисляет денежные средства на депонент. После получения депонента, исполнитель приступает к выполнению
работ.
4. Выполнение
работ и
сдача-приемка работ
заказчику
Исполнитель
выполняет работы по каждому этапу проекта. После сдачи-приемки этапа заказчику, исполнитель получает оплату
с депонента.
5. Рейтинг и отзывы
об исполнителе
и заказчике
Заказчик
оставляет отзыв об исполнителе. Исполнитель
оставляет отзыв о заказчике.

О проекте

Есть файл xml с плавающей структурой.
Возможные варианты структуры

1. Основной, когда есть данные
<result>
    <status>1</status> строка
    <price_results>
        <price_result>  
            <oem></oem> строка
            <make_name></make_name> строка
            <detail_name> </detail_name> строка
            <qnt></qnt> число
            <min_qnt></min_qnt> число
            <cost></cost> число
            <first_cost></first_cost> число
            <raw_cost></raw_cost> число
            <price_name></price_name> строка
            <price_id></price_id> строка
            <stat></stat> число
            <sup_logo></sup_logo> строка
            <visible_sup_logo></visible_sup_logo> строка
            <min_delivery_day></min_delivery_day> число
            <max_delivery_day></max_delivery_day> число
            <art_type_id></art_type_id> строка
            <selected_item></selected_item> булево
            <hash_key></hash_key> строка
            <selected_color></selected_color> строка
            <sys_info></sys_info> строка
            <weight></weight> число
            <volume></volume> число
            <supplier_id></supplier_id> строка
            <supplier_inn></supplier_inn> строка
            <mix_supplier></mix_supplier> строка
            <full_comment></full_comment> строка
        </price_result>
    </price_results>
</result>

2. Когда нет данных
<result>
    <status>1</status> строка
    <price_results>
    </price_results>
</result>

Мною были разработаны 2 варианта схем, но у каждой есть недостатки. Не силен в их составлении, полазил по публикациям, что смог то и получилось ))

1. Схема работает только для 1 варианта файла, на 2 варианте дает исключение, т.к не совпадает формат. Но по данной схеме 1С правильно определяет типы, на больших объемах данных (тестировалась на 20.000 + строк) работает в 1.5 раза быстрее, чем 2 схема.

СтрокаXSD = "<xs:schema xmlns:tns=""http://localhost/testXML"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"" targetNamespace=""http://localhost/testXML"" attributeFormDefault=""unqualified"" elementFormDefault=""qualified"">
            |<xs:complexType name=""result"">
            |    <xs:sequence>
            |        <xs:element name=""status"" type=""xs:string""/>
            |        <xs:element name=""price_results"" type=""tns:price_results"" maxOccurs=""unbounded""/>
            |    </xs:sequence>
            |</xs:complexType>
            |<xs:complexType name=""price_results"">
            |    <xs:sequence>
            |        <xs:element name=""price_result"" type=""tns:price_result"" maxOccurs=""unbounded""/>
            |    </xs:sequence>
            |</xs:complexType>
            |<xs:complexType name=""price_result"">
            |    <xs:sequence>
            |        <xs:element name=""oem"" type=""xs:string""/>
            |        <xs:element name=""make_name"" type=""xs:string""/>
            |        <xs:element name=""detail_name"" type=""xs:string""/>
            |        <xs:element name=""qnt"" type=""xs:decimal""/>
            |        <xs:element name=""min_qnt"" type=""xs:decimal""/>
            |        <xs:element name=""cost"" type=""xs:decimal""/>
            |        <xs:element name=""first_cost"" type=""xs:decimal""/>
            |        <xs:element name=""raw_cost"" type=""xs:decimal""/>
            |        <xs:element name=""price_name"" type=""xs:string""/>
            |        <xs:element name=""price_id"" type=""xs:string""/>
            |        <xs:element name=""stat"" type=""xs:decimal""/>
            |        <xs:element name=""sup_logo"" type=""xs:string""/>
            |        <xs:element name=""visible_sup_logo"" type=""xs:string""/>
            |        <xs:element name=""min_delivery_day"" type=""xs:decimal""/>
            |        <xs:element name=""max_delivery_day"" type=""xs:decimal""/>
            |        <xs:element name=""art_type_id"" type=""xs:string""/>
            |        <xs:element name=""selected_item"" type=""xs:boolean""/>
            |        <xs:element name=""hash_key"" type=""xs:string""/>
            |        <xs:element name=""selected_color"" type=""xs:string""/>
            |        <xs:element name=""sys_info"" type=""xs:string""/>
            |        <xs:element name=""weight"" type=""xs:decimal""/>
            |        <xs:element name=""volume"" type=""xs:decimal""/>
            |        <xs:element name=""supplier_id"" type=""xs:string""/>
            |        <xs:element name=""supplier_inn"" type=""xs:string""/>
            |        <xs:element name=""mix_supplier"" type=""xs:string""/>
            |        <xs:element name=""full_comment"" type=""xs:string""/>
            |    </xs:sequence>
            |</xs:complexType>
            |</xs:schema>";
            
2. Схема работает при двух вариантах файла, но 1С по ней не определяет типы (везде определяется как строка) и в случае пустых значений в качестве типа указывает "Объект XDTO"

СтрокаXSD = "<xs:schema attributeFormDefault=""unqualified"" elementFormDefault=""qualified"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">
            |  <xs:element name=""result"" type=""resultType""/>
            |  <xs:complexType name=""price_resultType"">
            |    <xs:sequence>
            |      <xs:element type=""xs:string"" name=""oem""/>
            |      <xs:element type=""xs:string"" name=""make_name""/>
            |      <xs:element type=""xs:string"" name=""detail_name""/>
            |      <xs:element type=""xs:decimal"" name=""qnt""/>
            |      <xs:element type=""xs:decimal"" name=""min_qnt""/>
            |      <xs:element type=""xs:decimal"" name=""cost""/>
            |      <xs:element type=""xs:decimal"" name=""first_cost""/>
            |      <xs:element type=""xs:decimal"" name=""raw_cost""/>
            |      <xs:element type=""xs:string"" name=""price_name""/>
            |      <xs:element type=""xs:string"" name=""price_id""/>
            |      <xs:element type=""xs:decimal"" name=""stat""/>
            |      <xs:element type=""xs:string"" name=""sup_logo""/>
            |      <xs:element type=""xs:string"" name=""visible_sup_logo""/>
            |      <xs:element type=""xs:decimal"" name=""min_delivery_day""/>
            |      <xs:element type=""xs:decimal"" name=""max_delivery_day""/>
            |      <xs:element type=""xs:string"" name=""art_type_id""/>
            |      <xs:element type=""xs:boolean"" name=""selected_item""/>
            |      <xs:element type=""xs:string"" name=""hash_key""/>
            |      <xs:element type=""xs:string"" name=""selected_color""/>
            |      <xs:element type=""xs:string"" name=""sys_info""/>
            |      <xs:element type=""xs:decimal"" name=""weight""/>
            |      <xs:element type=""xs:decimal"" name=""volume""/>
            |      <xs:element type=""xs:string"" name=""supplier_id""/>
            |      <xs:element type=""xs:string"" name=""supplier_inn""/>
            |      <xs:element type=""xs:string"" name=""mix_supplier""/>
            |      <xs:element type=""xs:string"" name=""full_comment""/>
            |    </xs:sequence>
            |  </xs:complexType>
            |  <xs:complexType name=""price_resultsType"">
            |    <xs:sequence>
            |      <xs:element type=""price_resultType"" name=""price_result""/>
            |    </xs:sequence>
            |  </xs:complexType>
            |  <xs:complexType name=""resultType"">
            |    <xs:sequence>
            |      <xs:element type=""xs:decimal"" name=""status""/>
            |      <xs:element type=""price_resultsType"" name=""price_results""/>
            |    </xs:sequence>
            |  </xs:complexType>
            |</xs:schema>";
            
Вообщем то задача наверное не сильно сложная, разработать корректную схему для предложенных вариантов, чтобы не вызывало исключений и правильно определялись типы при ее чтении.
К проекту прикрепил архив с 2-мя внешними обработками и 2-мя файлами xml. 1 внешняя обработка использует первую схему xsd, 2-ая соответственно вторую. Файлы xml надо положить в корень диска C, ну либо поправить в коде расположение файлов. С помощью обработок можно более детально ознакомиться с данной проблемой в режиме отладки.