XDTO

1. user1236217 28.11.23 18:57 Сейчас в теме
Здравствуйте! Тупой конечно вопрос, но у меня тут проблема с XDTO причем наверное самая банальная. хочу просто для теста сохранить готовый xml-запрос на локальном диске и споткнулся об заполнения XDTO.
Поле объекта недоступно для записи (bc).
Да уж кажись понял в чем собственно проблема, это то что на пакете стоит только чтение. Извиняюсь за это тогда другой вопрос каким образом я могу заполнить этот пакет и сохранить?
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
15. user1236217 29.11.23 20:09 Сейчас в теме
Пошел по такому пути не знаю насколько это правильно, но вроде работает
Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	Шапка.Код КАК ИдентификаторФСРАР,
	|	Шапка.ФорматОбмена КАК ФорматОбмена
	|ИЗ
	|	Справочник.КлассификаторОрганизацийЕГАИС КАК Шапка
	|ГДЕ
	|	Шапка.Код = &Ссылка");
	
	Запрос.УстановитьПараметр("Ссылка", Организация());	
	Шапка = Запрос.Выполнить().Выбрать();
	Шапка.Следующий();
	ФорматОбмена = ИнтеграцияЕГАИСКлиентСервер.ФорматОбмена(Шапка.ФорматОбмена);                                              
	Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросПроверкиАкцизныхМарокНаОстаткахОрганизации;
	ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
	ЗапросXDTO = ИнтеграцияЕГАИС.ОбъектXDTO(ПространствоИмен, "QueryFilter");
	АкцизнаяМарка="236200053897321018001V3QKZFRNKSPNE2RP3F2QYMLQ­ME2EGSPJZIOHD4TEHHQ2HHIHZAATSEPNKTMEZ2OMCREVUA4YP7OYN74WJJEK­DK5RHK2HGBOZXMPZKPGR55OXF7YVJTUDVS4Y6KK2LZPMI";
	ЗапросXDTO.bc.Добавить(АкцизнаяМарка);
	Текст = ИнтеграцияЕГАИС.ОбъектXDTOВXML(ЗапросXDTO,Организация(),ПространствоИмен,"QueryFilter");
ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8",,,Истина);
Тест = Новый ЗаписьТекста("G:\1.xml", КодировкаТекста.UTF8);
Тест.Записать(Текст);
Тест.Закрыть();
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. newlogin1 29.11.23 10:46 Сейчас в теме
(1)Пакет в конфигураторе? Если да, то правой кнопкой - экспорт XML схемы - чем не подходит?
3. user1236217 29.11.23 11:44 Сейчас в теме
(2) Добрый день, насколько я понимаю если таким образом сделать то и в коде я потом должен указать путь то выгруженной схемы, что не совсем мне подходит, так как внешняя обработка будет использоваться на других компах.
4. user1236217 29.11.23 12:12 Сейчас в теме
Нашел как сам 1с заполняет документ и что-то не совсем понимаю в чем отличия от того что я изначально писал в коде.
Прикрепленные файлы:
5. Sashares 34 29.11.23 12:28 Сейчас в теме
(4)Отличия в том, что bc это список значений XDTO, и в него надо добавлять значения.
Вы же присваиваете строковое значение.
6. user1236217 29.11.23 13:01 Сейчас в теме
Так хорошо этот момент понял, сейчас переписал следующим образом. Я же могу теперь эту часть записать в файл XML и сохранить на локальном диске?
Прикрепленные файлы:
7. Sashares 34 29.11.23 13:36 Сейчас в теме
(6)Да, записывайте, сохраняйте.

ПараметрыЗаписиXML = Новый ПараметрыЗаписиXML("UTF-8",,, Истина);
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла, ПараметрыЗаписиXML);
ЗаписьXML.ЗаписатьОбъявлениеXML();

ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, Запрос1);
	
ЗаписьXML.Закрыть();
Показать
8. user1236217 29.11.23 17:44 Сейчас в теме
Записать получилось. Теперь столкнулся с другой проблемой в xml файле должен быть указан код организации.
<?xml version="1.0" encoding="UTF-8"?>
<ns:Documents xmlns="http://fsrar.ru/WEGAIS/QueryFilter"
    xmlns:ns="http://fsrar.ru/WEGAIS/WB_DOC_SINGLE_01"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ns:Owner>
    <ns:FSRAR_ID>030000266400</ns:FSRAR_ID>
</ns:Owner>
<ns:Document>
    <ns:QueryFilter>
     <bc>239300009178301018001XG5UNFTMJSFI3OZYW37KLEM3IYF5KDOSAIB­QRZWKWRWZ5EWWEAYS2KX6BLZG4BUHT4GBV2KC42TBAMW73AOJJNOMM4QIGCK­AVBGHCBQG6W3VBIHK5XIALWNHDQYUIKG6Y</bc>
     <bc>239300009178601018001UT7YIGOOVCK32EKLSGQ2FKMVTEV6WBJCCSU­CTH6U4LRKSYWKU4FT7QEEXFX5EZ43P77QPW3QEIYYE5JSRXU7NH3XLPSEAP5­QQJ2X5SZPHQOZ5U2DOGLEE3FZI3PAAD52Q</bc>
     <bc>2393000091790310180017GQWTWBJC3T5SDGQTMWE2IHOBU5PNWZWC3I­ACDLEWJDDEO3N4Q44FVGEUJABYTGS2RDHP2D3E4DYWVKV5POPDGANA3OISY4­Y6I4Q7KLDJUQ5D2CQV4GEAYWOEWTT5NRPA</bc>
     <bc>188402713618900222001EAOELS3K623GIJY4IQMTKQQAXQIL42WE2MD­HY6SXS7XERK6HZADRPKTZKRHMATUW33XIFYYN6IE5EMUDVTCM6V5HGJ243YJ­PYR6L2YOYAXNAUOJMA224VK476R2FKPDQA</bc>
    </ns:QueryFilter>
</ns:Document>
</ns:Documents>
Показать

А получаю документ следующего вида
<?xml version="1.0" encoding="UTF-8"?>
<QueryFilter xmlns="http://fsrar.ru/WEGAIS/QueryFilter"
		xmlns:xs="http://www.w3.org/2001/XMLSchema"
		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<bc>236200053897321018001V3QKZFRNKSPNE2RP3F2QYMLQME2EGSPJZIO­HD4TEHHQ2HHIHZAATSEPNKTMEZ2OMCREVUA4YP7OYN74WJJEKDK5RHK2HGBO­ZXMPZKPGR55OXF7YVJTUDVS4Y6KK2LZPMI</bc>
</QueryFilter>
9. user1236217 29.11.23 18:00 Сейчас в теме
Сейчас просмотрел код конфигурации, походу дела заполнение идет отсюда
Функция ОбъектXDTOВXML(ОбъектXDTO, ИдентификаторФСРАР, ПространствоИмен, ИмяТипа) Экспорт
	
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку("UTF-8");
	
	ЗаписьXML.ЗаписатьНачалоЭлемента("Documents", КорневоеПространствоИмен());
	
	ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(
		Перечисления.ВидыДокументовЕГАИС.ПрефиксПространстваИмен(КорневоеПространствоИмен()),
		КорневоеПространствоИмен());
	
	Зависимости = Новый Массив;
	Зависимости.Добавить("http://www.w3.org/2001/XMLSchema-instance");
	Зависимости.Добавить("http://www.w3.org/2001/XMLSchema");
	
	ИнтеграцияИС.ЗависимыеПространстваИмен(ФабрикаXDTO.Пакеты.Получить(ПространствоИмен).Зависимости, Зависимости);
	
	Если Зависимости.Найти(ПространствоИмен) = Неопределено Тогда
		Зависимости.Добавить(ПространствоИмен);
	КонецЕсли;
	
	Для Каждого ЗависимоеПространство Из Зависимости Цикл
		Префикс = Перечисления.ВидыДокументовЕГАИС.ПрефиксПространстваИмен(ЗависимоеПространство);
		Если НЕ ПустаяСтрока(Префикс) Тогда
			ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(Префикс, ЗависимоеПространство);
		КонецЕсли;
	КонецЦикла;
	
	СодержимоеXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(КорневоеПространствоИмен(), "DocBody"));
	СодержимоеXDTO[ИмяТипа] = ОбъектXDTO;
	
	ОтправительXDTO = ФабрикаXDTO.Создать(ФабрикаXDTO.Тип(КорневоеПространствоИмен(), "SenderInfo"));
	ЗаполнитьСвойствоXDTO(ОтправительXDTO, "FSRAR_ID", ИдентификаторФСРАР);
	
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, ОтправительXDTO, "Owner",    КорневоеПространствоИмен());
	ФабрикаXDTO.ЗаписатьXML(ЗаписьXML, СодержимоеXDTO,  "Document", КорневоеПространствоИмен());
	
	ЗаписьXML.ЗаписатьКонецЭлемента();
	
	ТекстXML = ЗаписьXML.Закрыть();
	ТекстXML = СтрЗаменить(ТекстXML, "unqualified_element:", "");
	ТекстXML = СтрЗаменить(ТекстXML, "remove:", "");
	ТекстXML = СтрЗаменить(ТекстXML, "xmlns:remove", "xmlns");
	
	Возврат ТекстXML;
	
КонецФункции
Показать
10. user1236217 29.11.23 18:02 Сейчас в теме
Понятное дело что не все строчки мне нужны, какие я должен оставить?
11. Sashares 34 29.11.23 18:17 Сейчас в теме
(10)Все нужны.
Передавайте в эту функцию ваш объект XDTO - Запрос1, идентификатор организации и остальные параметры, получите текст в нужном виде.
Имя типа = "QueryFilter"
Пространство имен ="http://fsrar.ru/WEGAIS/QueryFilter"
12. user1236217 29.11.23 18:50 Сейчас в теме
(11) Извините, а можете пояснить для чего вот эти строчки
Код
   ТекстXML = СтрЗаменить(ТекстXML, "unqualified_element:", "");
    ТекстXML = СтрЗаменить(ТекстXML, "remove:", "");
    ТекстXML = СтрЗаменить(ТекстXML, "xmlns:remove", "xmlns");
Показать полностью

Для Каждого ЗависимоеПространство Из Зависимости Цикл
Префикс = Перечисления.ВидыДокументовЕГАИС.ПрефиксПространстваИмен(ЗависимоеПространство);
Если НЕ ПустаяСтрока(Префикс) Тогда
ЗаписьXML.ЗаписатьСоответствиеПространстваИмен(Префикс, ЗависимоеПространство);
КонецЕсли;
КонецЦикла;
И вот это пожалуйста
16. Sashares 34 29.11.23 20:28 Сейчас в теме
(12) Блок со СтрЗаменить - заменяет пространство имен в файле. Зачем - я хз.
Цикл - добавляет нужные пространства имен в корень xml.
13. user1236217 29.11.23 19:49 Сейчас в теме
(11)Все получилось большое спасибо за помощь. Очень конечно тяжко копаться в этой горе кода конфигурации.
14. user1236217 29.11.23 20:04 Сейчас в теме
Так я походу чет совсем запутался. Вот я передаю в функцию все данные, возвращается уже готовый текст XML, а как теперь собственно этот текст сохранить на локальном диске, чет запутался.
Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	Шапка.Код КАК ИдентификаторФСРАР,
	|	Шапка.ФорматОбмена КАК ФорматОбмена
	|ИЗ
	|	Справочник.КлассификаторОрганизацийЕГАИС КАК Шапка
	|ГДЕ
	|	Шапка.Код = &Ссылка");
	
	Запрос.УстановитьПараметр("Ссылка", Организация());	
	Шапка = Запрос.Выполнить().Выбрать();
	Шапка.Следующий();
	ФорматОбмена = ИнтеграцияЕГАИСКлиентСервер.ФорматОбмена(Шапка.ФорматОбмена);                                              
	Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросПроверкиАкцизныхМарокНаОстаткахОрганизации;
	ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
	ЗапросXDTO = ИнтеграцияЕГАИС.ОбъектXDTO(ПространствоИмен, "QueryFilter");
	АкцизнаяМарка="236200053897321018001V3QKZFRNKSPNE2RP3F2QYMLQ­ME2EGSPJZIOHD4TEHHQ2HHIHZAATSEPNKTMEZ2OMCREVUA4YP7OYN74WJJEK­DK5RHK2HGBOZXMPZKPGR55OXF7YVJTUDVS4Y6KK2LZPMI";
	ЗапросXDTO.bc.Добавить(АкцизнаяМарка);
	Текст = ИнтеграцияЕГАИС.ОбъектXDTOВXML(ЗапросXDTO,Организация(),ПространствоИмен,"QueryFilter");
ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8",,,Истина);
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("G:\1.xml", ПараметрыЗаписи);
Запись.ЗаписатьОбъявлениеXML();

Запись.Закрыть();
Показать
15. user1236217 29.11.23 20:09 Сейчас в теме
Пошел по такому пути не знаю насколько это правильно, но вроде работает
Запрос = Новый Запрос(
	"ВЫБРАТЬ
	|	Шапка.Код КАК ИдентификаторФСРАР,
	|	Шапка.ФорматОбмена КАК ФорматОбмена
	|ИЗ
	|	Справочник.КлассификаторОрганизацийЕГАИС КАК Шапка
	|ГДЕ
	|	Шапка.Код = &Ссылка");
	
	Запрос.УстановитьПараметр("Ссылка", Организация());	
	Шапка = Запрос.Выполнить().Выбрать();
	Шапка.Следующий();
	ФорматОбмена = ИнтеграцияЕГАИСКлиентСервер.ФорматОбмена(Шапка.ФорматОбмена);                                              
	Операция = Перечисления.ВидыДокументовЕГАИС.ЗапросПроверкиАкцизныхМарокНаОстаткахОрганизации;
	ПространствоИмен = Перечисления.ВидыДокументовЕГАИС.ПространствоИмен(Операция, ФорматОбмена);
	ЗапросXDTO = ИнтеграцияЕГАИС.ОбъектXDTO(ПространствоИмен, "QueryFilter");
	АкцизнаяМарка="236200053897321018001V3QKZFRNKSPNE2RP3F2QYMLQ­ME2EGSPJZIOHD4TEHHQ2HHIHZAATSEPNKTMEZ2OMCREVUA4YP7OYN74WJJEK­DK5RHK2HGBOZXMPZKPGR55OXF7YVJTUDVS4Y6KK2LZPMI";
	ЗапросXDTO.bc.Добавить(АкцизнаяМарка);
	Текст = ИнтеграцияЕГАИС.ОбъектXDTOВXML(ЗапросXDTO,Организация(),ПространствоИмен,"QueryFilter");
ПараметрыЗаписи = Новый ПараметрыЗаписиXML("UTF-8",,,Истина);
Тест = Новый ЗаписьТекста("G:\1.xml", КодировкаТекста.UTF8);
Тест.Записать(Текст);
Тест.Закрыть();
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот