Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 12:34

XDTO ошибка при создании свойств

Автор subrain, 28 окт 2020, 15:07

0 Пользователей и 1 гость просматривают эту тему.

subrain

Здравствуйте!
Изучаю XDTO.
Задача: выгрузить справочник Контрагенты из самописной конфы. Другие способы не предлагать, нужно именно XDTO.
Решение: Создаю пакет, Добавляю типы данных, Добавляю свойства.

Проблема: Почему не даёт создать свойство с именем "ИНН"?  С именем "ИНН1" всё нормально. В справочнике "Контрагенты" есть реквизит ИНН тип строка.
Скрин приложил.
Помогите плиз, понимаю, что вопрос простой.
Ошибка такая:
Ошибка проверки модели XDTO: xdto-objectType-4.1.5   тип: CatalogObject.Контрагент   пакет: http://www.mypack
Обнаружено несоответствие URI пространства имен XML представления свойства 'ИНН' при наследовании ограничением
Ошибка проверки модели XDTO: xdto-objectType-4.1.8   тип: CatalogObject.Контрагент   пакет: http://www.mypack
Верхняя граница количества значений свойства 'ИНН' не может быть больше верхней границы переопределяемого свойства
   

LexaK

а зачем прописывать реквизиты, да еще каждый?
используйте фабрику ХДТО! она выгрузит все реквизиты автоматом
попробуйте такой код

лкСпр = Справочники.Контрагенты.НайтипоНаименованию("ООО 1С");
прОбъект = лкСпр.ПолучитьОбъект();

лкОбъектXDTO = СериализаторXDTO.ЗаписатьXDTO(прОбъект);
лкЗаписьXML = Новый ЗаписьXML;
лкЗаписьXML.УстановитьСтроку();
ФабрикаXDTO.ЗаписатьXML(лкЗаписьXML,лкОбъектXDTO);
лкСтрока = лкЗаписьXML.Закрыть();

Сообщить(лкСтрока);


вам вернется такой текст (можно сохранять в файл)

Цитировать
<CatalogObject.Контрагенты 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>2e5915b6-f49b-11e8-bba0-000c291f6823</Ref>
    <DeletionMark>false</DeletionMark>
    <Description>ООО 1С</Description>
    <ИНН>7721212121</ИНН>
    <ОбособленноеПодразделение>false</ОбособленноеПодразделение>
    <ЮридическоеФизическоеЛицо>ЮридическоеЛицо</ЮридическоеФизическоеЛицо>
    <ГоловнойКонтрагент>2e5915b6-f49b-11e8-bba0-000c291f6823</ГоловнойКонтрагент>
    <КодПоОКПО/>
    <КПП>772211221</КПП>
    <НаименованиеПолное>ООО "1С"</НаименованиеПолное>
    <ДополнительнаяИнформация>From FOX</ДополнительнаяИнформация>
    <Партнер>ca716dfa-f49e-11e8-bba0-000c291f6823</Партнер>
    <ЮрФизЛицо>ЮрЛицо</ЮрФизЛицо>
    <НДСПоСтавкам4и2>false</НДСПоСтавкам4и2>
    <СтранаРегистрации>4b3e06cd-1d47-11e8-af3e-00259035bb67</СтранаРегистрации>
    <РегистрационныйНомер/>
    <НалоговыйНомер/>
    <НаименованиеМеждународное/>
    <Номер>31001</Номер>
    <НомерПоставщика>0</НомерПоставщика>
    <КонтактнаяИнформация>
        <Тип>Адрес</Тип>
    </КонтактнаяИнформация>
</CatalogObject.Контрагенты>
если помогло нажмите: Спасибо!

IGGR

Уважаемый LexaK, может и мне поможете...
Суть в чём, пытаюсь с одной базы передать в другую объект, ну например Справочник.Должности. У этого справочника есть реквизит Ответственный типа Справочник.Сотрудники.
Выгружаю в файл XML, в нём есть ссылка на него:


<CatalogObject.Должности 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" xsi:type="CatalogObject.Должности">
    <Ref>a2286407-f262-11ee-8a9b-7427ea0d172b</Ref>
    <DeletionMark>false</DeletionMark>
    <Code>000000007</Code>
    <Description>ДругойПодход</Description>
    <Ответственный>0b6cd7dc-36a0-11e9-8bb2-642737df2048</Ответственный>
</CatalogObject.Должности>

Но, в приёмной базе эту ссылку не читает, пишется что Объект не найден.
В схеме указываю оба справочника:

<xs:schema xmlns:ns1="http://v8.1c.ru/8.1/data/core" xmlns:ns2="http://v8.1c.ru/8.1/data/enterprise" xmlns:tns="1С-current-config" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="1С-current-config" attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:import namespace="http://v8.1c.ru/8.1/data/core"/>
    <xs:import namespace="http://v8.1c.ru/8.1/data/enterprise"/>
    <xs:simpleType name="CatalogRef.Должности">
        <xs:restriction base="ns2:AnyRef"/>
    </xs:simpleType>
    <xs:simpleType name="CatalogRef.Сотрудники">
        <xs:restriction base="ns2:AnyRef"/>
    </xs:simpleType>
    <xs:complexType name="CatalogObject.Должности">
        <xs:sequence>
            <xs:element name="Ref" type="tns:CatalogRef.Должности"/>
            <xs:element name="DeletionMark" type="xs:boolean"/>
            <xs:element name="Code" type="xs:string"/>
            <xs:element name="Description" type="xs:string"/>
            <xs:element name="PredefinedDataName" type="xs:string" minOccurs="0"/>
            <xs:element name="Ответственный" type="tns:CatalogRef.Сотрудники"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="CatalogObject.Сотрудники">
        <xs:sequence>
            <xs:element name="Ref" type="tns:CatalogRef.Сотрудники"/>
            <xs:element name="DeletionMark" type="xs:boolean"/>
            <xs:element name="Code" type="xs:string"/>
            <xs:element name="Description" type="xs:string"/>
            <xs:element name="PredefinedDataName" type="xs:string" minOccurs="0"/>
            <xs:element name="ДатаРождения" type="xs:dateTime"/>
            <xs:element name="КоличествоДетей" type="xs:decimal"/>
            <xs:element name="Работает" type="xs:boolean"/>
            <xs:element name="Стаж" type="xs:string"/>
            <xs:element name="Должность" type="tns:CatalogRef.Должности"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

Может надо как то в схеме по другому строить зависимость ссылки Ответственного у Справочник.Должности от Справочника.Сотрудники?
Или надо так же передавать и в том же XML описание экземпляра объекта Справочник.Сотрудники, где будет указана ссылка на этого сотрудника, который является ссылкой для Ответственного у Справочник.Должности???

А если и оба справочника имеют ссылки друг на друга (в данном случае Ответственный и Должность)? Это допустимо.

Нужен код обработок обоих баз?

IGGR

Цитата: LexaK процитировал вопрос выше, сразу не понял как к Вам обратиться

antoneus

Ну для этого надо, чтобы уникальные идентификаторы у обоих элементов в обеих базах совпадали. Если это не так - то не получится перенести значения реквизитов ссылочного типа через XML.

IGGR

Цитата: antoneus от 04 апр 2024, 14:07Ну для этого надо, чтобы уникальные идентификаторы у обоих элементов в обеих базах совпадали.

А как этого добиться?
Базы будут разные, например. На разных платформах.
Если я объект переношу полностью то он записывается, а ссылки внутри него надо как то сравнивать по УИ? я правильно понимаю?

LexaK

Справочник Сотрудники тоже перенесите.
Появится ссылка нужного сотрудника.
Вообще лучше почитать теорию обмена.
Что бы понимать элементарные положения.
если помогло нажмите: Спасибо!

IGGR

Цитата: LexaK от 04 апр 2024, 14:59Справочник Сотрудники тоже перенесите.
Появится ссылка нужного сотрудника.
Вообще лучше почитать теорию обмена.
Что бы понимать элементарные положения.

Не судите строго!!! Т.е. я правильно понял нужен и другой справочник.
И это всё строится на обмене данных, спасибо что направили в нужное русло)))
Меня в данный момент интересовало, всё ли в порядке с схемой или я в ней напортачил. Как я понимаю схема правильная?

antoneus

Ну при переносе через конвертацию данных уид (по-моему) синхронизируется. И через универсальную выгрузку - тоже.

LexaK

Зависит какой у вас обмен, какие базы,
распределеная или разные, какие ПКО и тд
Не обязательно что при обмене передаётся гуид
Поиск может задаваться по
коду, номеру, наименованию и тд
если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск