![]() |
![]() |
![]() |
|
XDTO : Установить в Неопределено реквизит объекта XDTO | ☑ | ||
---|---|---|---|---|
0
bvb
25.07.25
✎
11:02
|
Добрый день
Нужно в процедуре, получив параметром объект XDTO очистить его реквизиты (свойства) установленные как строки Я пытаюсь это сделать так : Процедура ОчиститьЗначениеXDTO(Элемент, ИмяРеквизита) //Элемент.Свойства().Получить("ИмяРеквизита") Если Элемент[ИмяРеквизита] <> Неопределено Тогда Элемент[ИмяРеквизита] = Неопределено; Но он не очищает и ругается на то , что у свойства установлен фасет
|
|||
1
mikecool
25.07.25
✎
11:09
|
емнип - нельзя установить значение, не соответствующее ограничению поля
|
|||
2
bvb
25.07.25
✎
11:59
|
(1) Походу, да.
Но мне очень нужно. И да, мне доступен только сам объект XDTO. Метод .Очистить для него не работает. Может можно подправить типизацию через Элемент.Свойства().Получить("ИмяРеквизита") ? |
|||
3
АнализДанных
25.07.25
✎
11:48
|
(0) Очень мало информации. Если нужен xml, который сделан по схеме XSD, но при этом ты хочешь изменить какие-то значения, которые противоречат схеме, то можно сделать так:
Сначала сохранить объект XDTO в xml файл, потом прочить это xml, через фабрикуXDTO, но при этом не указывать схему, тогда можно будет зачистить нужные поля. Правда при сохранении что-то в файле может сохраниться иначе, например, если в схеме есть список, но он с одной строкой, то он сохранится не как список, а как какой-то одинарный тип. |
|||
4
bvb
25.07.25
✎
12:21
|
(3) Если подробно - мне нужно отредактировать контент Utd820SellerContent исходящего документа в Контур Диадок в части адресов продавца и покупателя (грузополучатель норм)
Проблема в том, что нужно взять подробный юридический адрес строкой из представления юр. адреса. Первоначально контент адреса заполнен из полей. В юр адресе заполнены поля и представление. Очищать стандартные поля я не хочу (это на крайний случай) Я подставляю текстовое представление но если, не очистить поля, то для выгружаемого документа, приоритетнее значения из полей Вот я и пытаюсь очистить поля оставив заполненным только AdressText. |
|||
5
denk32
25.07.25
✎
15:51
|
(0) можно попробовать создать новый объект xdto, заполнить как нужно и его присвоить:
НовыйОбъектXDTO = ГенерацияXML.НовыйProtoОбъектXDTO( "AddressInfo970", Ложь ); ГенерацияXML - это встроенная обработка в макет КонтурДиадокГенерацияXML |
|||
6
mikecool
25.07.25
✎
15:53
|
(4) а нельзя это сделать в подключаемом модуле и пользоваться объектной моделью?
|
|||
7
denk32
25.07.25
✎
15:54
|
+ из подключаемого модуля можно создать так:
Ядро = ПолучитьИзВременногоХранилища(ОсновнойМодуль.ОбщийКонтекстКлиентСервер.АдресОбработкиЯдра); ГенерацияXML = Ядро.Модуль_ГенерацияXML(Ядро) |
|||
8
mikecool
26.07.25
✎
10:32
|
(7) да там и попроще есть путь, не помню только наизусть
типа передвыгрузкой или как-то так, доступен объект, который впоследствии выгружается |
|||
9
denk32
25.07.25
✎
16:15
|
(8) ПодготовитьЭлектронныйДокумент?
|
|||
10
bvb
31.07.25
✎
11:51
|
8,9) Все правильно. ПодготовитьЭлектронныйДокумент
это Событие мы перехватываем, но контент xml как я понимаю уже там сформирован Content = Параметры.Результат.Content; И менять нужно пытаться его Функция ПодготовитьЭлектронныйДокумент(Параметры) // Имя шаблона: Произвольное изменение контента УПД Если ТипЗнч(Параметры) = Тип("Структура") И Параметры.Свойство("Результат_ИМ") Тогда Content = Параметры.Результат.Content; Документ1С = Параметры.Результат.Документ1С; ВидДокументаРазвернутый = Параметры.ВидДокументаРазвернутый; ТипКонтента_XDTO = ВидДокументаРазвернутый.ТипКонтента; //+СКБ Контур Петровская E1C_in-201559 05.02.2025 //Если ВРЕГ(ТипКонтента_XDTO) = ВРЕГ("Utd820SellerContent") Тогда Если ОсновнойМодуль.ТипСоответствуетКонтентуУПД(ВидДокументаРазвернутый) Тогда //-СКБ Контур Петровская E1C_in-201559 05.02.2025 УПД_ИзменитьКонтент(Content, Документ1С); Нужно поменять поля в Content.Consignees[0].Address все кроме .AddressText (в нем произвольный адрес) поставить в неопределенно, но они не сбрасываются Можно только очистить строку (кроме полей RegionCode, ZipCode, - они фасетные) |
|||
11
bvb
31.07.25
✎
11:57
|
(5) Вы мне предлагаете создать новый объект XDTO "Address" с нужной структурой и наполнением полей?
А как пихнуть его на место нативного Content.Consignees[0].Address |
|||
12
mikecool
31.07.25
✎
11:58
|
(10) не, было событие, завязанное на подготовку контента, которое срабатывает не только при отправке, но и для печатных форм, к примеру...
|
|||
13
mikecool
31.07.25
✎
12:00
|
+12 в новом модуле это
Функция ПослеПодготовкиПакета(Параметры) |
|||
14
bvb
31.07.25
✎
16:55
|
(13) Дык проблема останется
Я также получу Content = Параметры.Результат.Content; Это будет объект XDTO и как его править ? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |