Имя: Пароль:
1C
1С v8
сделать значение на основе SimpleType в xsd схеме, подскажите как
,
0 Бархат
 
16.05.18
10:07
Добрый день товарищи! Крым наш!

Подскажите, пожалуйста, вот есть схема xsd. Там в фабрику закинул, по свойствам расписал, все нормально... но вот у конечных свойств в схеме указан тип, например "typeAddrTotal"

<xs:element name="addr_fact_total" minOccurs="1" maxOccurs="1" type="typeAddrTotal" />


и почти в конце схемы его описание

<xs:simpleType name="typeAddrTotal">
      <xs:restriction base="xs:string">
         <xs:minLength value="1" />
         <xs:maxLength value="500" />
         <xs:pattern value="[a-zA-Zа-яА-ЯЁё0-9\- \.,'\\/№():_+|&quot;#?!;]*" />
      </xs:restriction>
   </xs:simpleType>

Видимо это фасеты...


Если конечное свойство просто присваиваю ( = "траливали")
или СвойствоХДТО.Установить("Траливали");
то свойство просто становится типа строка, при этом метод Проверить() не работает.

подскажите, как сделать значение на основе этого "typeAddrTotal"
1 Бархат
 
16.05.18
12:07
Ребят, как с фасетами из схемы работать?
2 Cyberhawk
 
16.05.18
12:10
Объектная модель ХДТО в платформе далеко не все поддерживает, что есть в ХСД-схеме
3 HomoAlbus
 
16.05.18
12:16
А ты бахни туда строку длиной 501 символ и проверь работает ли Проверить(). Поидее должен.

Ну и скрин панели свойств твоего свойства с типом typeAddrTotal в студию.
4 Бархат
 
16.05.18
12:17
а как фасеты дернуть в конфу? Тогда может так с ними можно работать?
5 HomoAlbus
 
16.05.18
12:19
Да просто xsd загрузи да и все.
6 HomoAlbus
 
16.05.18
12:21
7 Бархат
 
16.05.18
12:24
https://cloud.mail.ru/public/EibM/c8Ru5g5RX - скрин свойств

при загрузке XSD  в дереве пакетов XDTO ничего не происходит. всю схему гружу. Ошибок нет, но и новых элементов в дереве тоже.

бахнуть строку сейчас попробую
типы тоже попробую занести.
8 Бархат
 
16.05.18
12:42
Бахнуть не получилось, Свойство.Установить("очень длинная строка") выдала Недостаточно факт. параметров

занести типы в свой пакет получилось. Как с ним обращаться теперь? Фасеты есть в конфе.
9 Apokalipsec
 
16.05.18
12:43
Фасеты срабатывают на уровне валидации в веб-сервисе, то есть на уровне soap.
Базовый тип у тебя строка.
Если ты в этой строке будешь передавать исключаемые символы - то получишь отлуп от веб-сервиса на уровне валидации.
10 Бархат
 
16.05.18
12:46
не, мне просто проверить значение на соответвие. Я просто делаю xml на основе xsd. Это не для веб-сервисов. Мне как то в коде надо проверить значения.
11 Apokalipsec
 
16.05.18
12:48
(10) Фасет это обычное регулярное (regexp) выражение, проверяющее условие, проверяй свою строку этим regexp'ом и всё.
12 Бархат
 
16.05.18
12:48
типа есть значение, я его проверяю по соотв фасету. проходит - иду к след свойству, валит - кажу пользователю болт
13 Бархат
 
16.05.18
12:49
вот сейчас ищу как это сделать в 8.3
14 d4rkmesa
 
16.05.18
13:27
(0) Pattern в данном случае - аналог Pattern в RegExp. Фасеты в терминологии 1С XDTO - это скорее перечисления.
15 d4rkmesa
 
16.05.18
13:44
(0) А почему бы просто не сделать присваивание через Попытку ... Исключение для проверки? Можно собрать пакет XDTO с этим типом и пустой функцией. Навроде:
http://catalog.mista.ru/public/464971/
16 Бархат
 
16.05.18
13:47
ну может быть да, типа того. Только надо как-то вытащить фасет из определения типа. Типов прилично. Тот для примера просто взял. Тоже ту статью глядел тока на инфостарте
http://catalog.mista.ru/public/464971/
17 Бархат
 
16.05.18
13:48
18 Бархат
 
16.05.18
13:49
19 Бархат
 
16.05.18
13:50
та ё маё infostart..ru/public//464971/

переименовывается что ли
20 d4rkmesa
 
16.05.18
13:52
(16) Можно вытащить из пакета. См. в справке:

ВидФасетаXDTO.Образец (XDTOFacetType.Pattern)
ВидФасетаXDTO (XDTOFacetType)
Образец (Pattern)
Описание:

Фасет образца.
21 d4rkmesa
 
16.05.18
13:52
Код для перечисления, скорее всего аналогично для Pattern'а из типа вытаскивается:
Прокси = ПолучитьПрокси();
    Тип = Прокси.ФабрикаXDTO.Тип("http://tempuri.org/";, "NpoConnection");
    Для Каждого Элемент Из Тип.Фасеты Цикл
        МассивNpo.Добавить(Элемент.Значение);
    КонецЦикла;
22 Бархат
 
16.05.18
19:15
Всё проще оказалось.
1. сделал свой пакет в дереве
2. экспортировал его
3. вписал в него все simpletype из моей схемы
4. импортировал в конфу
5. использую :
ТестТипа = ФабрикаXDTO.Тип("Мой URI","один из типов в пакете");
тестТипа.Проверить("проверяемое значение");

Дальше раскручу по структурам и проч.

Спасибо всем участникам!
23 Cyberhawk
 
16.05.18
19:36
(22) А теперь без изменения дерева метаданных сделай )
24 d4rkmesa
 
16.05.18
20:33
(22) Вполне нормальное решение, если исходный пакет слишком "тяжелый" для этих целей.