Имя: Пароль:
1C
 
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 и как его править ?