0. svenderevsky 683 05.11.14 14:00 Сейчас в теме

Разбор XML документа - почти все возможные способы

К вам пришел XML документ, как получить из него данные для обработки в 1С.
ЧтениеXML, ДокументDOM, XPath, ФабрикаXDTO, ПакетыXDTO в сравнении.


Перейти к публикации

Вознаграждение за ответ
Показать полностью
Комментарии
Избранное Подписка Сортировка: Древо развёрнутое
Свернуть все
1. caponid 05.11.14 16:20 Сейчас в теме
Поправь картинку для XPath - слетела
2. ksvd 05.11.14 16:52 Сейчас в теме
Ну заодно и первую, а то она 8 раз повторилась
3. salexdv 1612 05.11.14 18:14 Сейчас в теме
Приходится часто обрабатывать файл известной структуры размером от 300 Мб до 1.5 Гб. Для быстрого чтения использую простую схему.
1. Из файла выделяются блоки (у меня называются "offer"), которых может быть до нескольких сотен тысяч. Делается это через чтение текста с разделителем.
// Чтение файла по блокам <offer>...</offer>
Файл = Новый ЧтениеТекста(ИмяФайла, , "</offer>");	
ТекСтрока = Файл.ПрочитатьСтроку();
Пока ТекСтрока <> Неопределено Цикл
     // Обработка блока
    ТекСтрока = Файл.ПрочитатьСтроку();


2. Каждый блок разбирается с помощью регуляного выражения <ИмяСвойства>(.*?)</ИмяСвойства>

Последний файл размером 460 Мб, обработал за 2 минуты. Но тут надо учитывать, что обработка включала в себя еще чтение/запись в БД.
Памяти такой метод практически не потребляет, правда плохо подходит для файлов со сложной структурой (большим уровнем вложенности)
user712426; acanta; tovpeko; cry; mirco; zxcvb98765; tsukanov; for_questions; NN2P; zerg17; yuraer; veiuper; Зеленоград; Valerich; +14 Ответить
12. svenderevsky 683 06.11.14 13:44 Сейчас в теме
(3) salexdv,
Преимущество XML документа, в том что это широко используемый международный стандарт
pavelpribytkin96; +1 Ответить
15. salexdv 1612 06.11.14 15:18 Сейчас в теме
(12) Я знаю что такое XML, какие у него преимущества/недостатки, и как его можно прочитать. Попробуйте без затрат памяти, и быстро, прочитать файл в 1.5 Гб. Я просто привел способ, которым делаю это я. Согласен у него просто масса недостатков, но в некоторых случаях он очень сильно выручает.
31. SeverBaP 4 12.11.14 14:47 Сейчас в теме
(3) salexdv, Да реальная тема, есть более подробный пример как читаешь оферы?
32. svenderevsky 683 12.11.14 15:01 Сейчас в теме
(31) SeverBaP,
А что такое оферы?
pavelpribytkin96; +1 Ответить
33. SeverBaP 4 12.11.14 15:29 Сейчас в теме
(32) svenderevsky, "</offer>" - из YML понятие товарное предложение (товар).
На данный момент написал такое:
	Файл = Новый ЧтениеТекста(ФайлХМЛ,КодировкаТекста.UTF8, "</offer>");    
	ТекСтрока = Файл.ПрочитатьСтроку();
	Пока ТекСтрока <> Неопределено Цикл
		
		ТекСтрока = СокрЛП(Файл.ПрочитатьСтроку());
		ТекСтрока = ТекСтрока + "</offer>";
		Сч = Сч+1;
		ЧтениеХМЛ = Новый ЧтениеXML;
		ПараметрыЧтенияХМЛ = Новый ПараметрыЧтенияXML(,,,,,,,,Истина,Истина);
		ЧтениеХМЛ.УстановитьСтроку(ТекСтрока,ПараметрыЧтенияХМЛ);
		
		ПостроительDOM = Новый ПостроительDOM();
		ДокументDOM = ПостроительDOM.Прочитать(ЧтениеХМЛ);
		ЧтениеХМЛ.Закрыть();
		
		Списокoffer=ДокументDOM.ПолучитьЭлементыПоИмени("offer");
		Для Каждого НоменклатураУзел ИЗ Списокoffer Цикл
                 //Тута делаем все что нужно
              КонецЦикла;
         КонецЦикла;
Показать
belchonokh; +1 Ответить
34. svenderevsky 683 12.11.14 16:33 Сейчас в теме
(33) SeverBaP,
	РезультатРазборки = Новый Массив;
	ТипПриходныйОрдерXDTO = ФабрикаXDTO.Тип("http://localhost/testXML","ПриходныйОрдер");
	
	Пока ЧтениеXML.Прочитать() Цикл
			
		Пока ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "ПриходныйОрдер" Цикл 
			ПриходныйОрдерXDTO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML,ТипПриходныйОрдерXDTO);
			ДокументПриходныйОрдер = Новый Структура("Номер,Дата,Поставщик,Состав");
			
			ДокументПриходныйОрдер.Номер = ПриходныйОрдерXDTO.Номер;
			ДокументПриходныйОрдер.Дата = ПриходныйОрдерXDTO.Дата;
			ДокументПриходныйОрдер.Поставщик = ПриходныйОрдерXDTO.Поставщик;
			
			ДокументПриходныйОрдер.Состав = Новый Массив;
			Для Каждого СтрокаСоставаXDTO Из ПриходныйОрдерXDTO.Состав.СтрокаСостава Цикл 
				СтрокаСоставаСтруктура = Новый Структура("Номенклатура,Количество");
				СтрокаСоставаСтруктура.Номенклатура = СтрокаСоставаXDTO.Номенклатура;
				СтрокаСоставаСтруктура.Количество = СтрокаСоставаXDTO.Количество;
				ДокументПриходныйОрдер.Состав.Добавить(СтрокаСоставаСтруктура);
			КонецЦикла;
			
			РезультатРазборки.Добавить(ДокументПриходныйОрдер);
		КонецЦикла;
		
	КонецЦикла;
 
Показать


В принципе то же самое, только позволяет несколько сэкономить память при последовательном чтении XML
pavelpribytkin96; q_i; +2 Ответить
35. SeverBaP 4 12.11.14 16:43 Сейчас в теме
(34) svenderevsky, в памяти все нормально но скорость просто жесть.. вот думаю как лучше.
36. svenderevsky 683 12.11.14 18:19 Сейчас в теме
(35) SeverBaP,
Работа с DOM самая тяжелая операция из всех методов разбора XML, явное увеличение быстродействия может дать работа с фабрикой XDTO
pavelpribytkin96; user712426; kadild; +3 Ответить
37. SeverBaP 4 13.11.14 12:22 Сейчас в теме
(36) svenderevsky, непонятно как допустим используя XDTO вытянуть текст из: <category id="85115" parentId="85354">Платья и сарафаны</category> - "Платья и сарафаны" ведь в объектеXDTO только свойства.
user712426; +1 Ответить
38. svenderevsky 683 13.11.14 18:48 Сейчас в теме
(37) SeverBaP,
В пакете XDTO создайте тип category и добавте к нему три свойства - id,parentId и text (впрочем третье имя может быть любым), для первых двух свойств установите Форма - атрибут, а для третьего Форма - текст. Тогда фабрика XDTO поймет строку вида <category id="85115" parentId="85354">Платья и сарафаны</category>
39. kirillkr 28 21.11.14 10:41 Сейчас в теме
(38) svenderevsky, можно пример? у меня аналогичная ситуация.
40. svenderevsky 683 21.11.14 20:54 Сейчас в теме
(39) kirillkr,
Не совсем, точнее совсем, непонятно пример чего?
41. kirillkr 28 24.11.14 08:58 Сейчас в теме
(40) svenderevsky,
В пакете XDTO создайте тип category и добавте к нему три свойства - id,parentId и text (впрочем третье имя может быть любым), для первых двух свойств установите Форма - атрибут, а для третьего Форма - текст.

Как программно!! (без изменения конфигурации) создать или модифицировать пакет xdto, чтобы можно было прочитать и атрибуты и само содержимое тега?
42. SeverBaP 4 24.11.14 11:46 Сейчас в теме
45. kirillkr 28 25.11.14 08:58 Сейчас в теме
(42) SeverBaP, спасибо, читал, но не помогло.
(43), (44), использовал, но может некорректную схему написал - все равно не видит. Вот мой код,
http://code.kraeg.ru/128, а в аттаче пример файла.

В схеме использовал разные варианты, но ни один не видел текст, который между тегами, но прекрасно видит атрибуты.
Прикрепленные файлы:
Реализация товаров № СД00892653 от 25112014.xml
43. svenderevsky 683 24.11.14 13:04 Сейчас в теме
(41) kirillkr,
В последнем примере статьи фабрика XDTO создается программно из строки. тут и надо указывать требуемые элементы пакета
pavelpribytkin96; +1 Ответить
58. jobkostya1c8 11.10.15 20:41 Сейчас в теме
Прочитав статью про XDTO (не заметил раньше) нашел как минимизировать время на модификацию документа только в корневом теге (№ 3, частично № 4 и № 5 - по методу ЧтениеТекста.Прочитать(размер в байт если нельзя построчно):
Получается следующее при нижеприведенном коде и слегка расширенном тестовом XML:
Начали чтение ХМЛ
Контрагент № 1, Наименование учредители
Контрагент № 2, Наименование Фирма1
Договор № 3, Наименование Основной договор
Контрагент № 5, Наименование Последний без подчиненных договоров!
Прочитали ХМЛ


Код обработки (кол. атрибутов "N" теперь 5 и в последнем тоже нет подчиненных узлов с договорами). Тут сразу тоже вопрос: есть ли методы "по-человечески" проверить наличие подчиненного узла (или просто узла по имени? При такой конструкции мы сваливаемся по ошибке при делении на ноль без каких-либо сообщений.

Процедура ТестXDTO() Экспорт
	Попытка
		ЧтениеТекста = Новый ЧтениеТекста(ПутьЗагрузки, КодировкаТекста.UTF8);
		СтрокаXML = ЧтениеТекста.Прочитать(); // Для проверки технологии XDTO читаем до конца, а не порциями
		СтрокаXML = СтрЗаменить(СтрокаXML, "<ROOT", "<ROOT xmlns=""http://localhost/testXML"" ");
		
		ЧтениеXML = Новый ЧтениеXML;
		// Ниже в УстановитьСтроку(<СтрокаXML>, <Параметры>, <НаборСхемXML>) - ТРИ ПАРАМЕТРА!
		//Набор схем XML, используемых при проверки читаемого документа XML.
		//Если набор схем указан, но не проверен и включена проверка документа XML,
		//то будет выполнена проверка набора схем. 
		ЧтениеXML.УстановитьСтроку(СтрокаXML); //<НаборСхемXML> - Вопрос заодно про третий параметр и его смысл, т.к. в статье описан другой прием
		
		РезультатРазборки = Новый Массив;
		ЧтениеXMLСхемы = Новый ЧтениеXML;
		Макет = ПолучитьМакет("схемаXSD");
		СтрокаXSD = Макет.ПолучитьТекст(); // Макет текстовый!
		ЧтениеXMLСхемы.УстановитьСтроку(СтрокаXSD);
		ПостроительDOM = Новый ПостроительDOM;
		ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXMLСхемы);
		ПостроительСхемXML = Новый ПостроительСхемXML;
		СхемаXML = ПостроительСхемXML.СоздатьСхемуXML(ДокументDOM);
		НаборСхемXML = Новый НаборСхемXML;
		НаборСхемXML.Добавить(СхемаXML);
		
		СвояФабрикаXDTO = Новый ФабрикаXDTO(НаборСхемXML);
		ТипКореньXDTO = СвояФабрикаXDTO.Тип("http://localhost/testXML",    "ROOT");
		
		КореньXDTO = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипКореньXDTO);
		//
		Сообщить("Начали чтение ХМЛ");
		Узлы = КореньXDTO.KON;
		Для каждого Узел из Узлы Цикл
			Сообщить("Контрагент № "+Узел.N+", Наименование "+Узел.Наименование); // Обработка контрагента как структуры
			Попытка
				Узлы = Узел.DOG;
				Для Каждого Узел из Узлы Цикл
					Сообщить(""+Символы.Таб+"Договор № "+Узел.N+", Наименование "+Узел.Наименование); // Обработка всех договоров (если есть) контрагента как подчиненных узлов
					F = 1/0; // Модель ошибки!
				КонецЦикла;	   
			Исключение
				А=1; // Нет узла! Пропускаем!
			КонецПопытки;
		КонецЦикла;	
		Сообщить("Прочитали ХМЛ");		
	Исключение
		Инф = ИнформацияОбОшибке();
		Сообщить(ПодробноеПредставлениеОшибки(Инф) );
	КонецПопытки;
	
КонецПроцедуры	
Показать


Позже приходит на ум "заплатка":
Попытка	
				Узлы = Узел.DOG;
			Исключение
				Продолжить; // Нет узла! Пропускаем!
			КонецПопытки;

Тестовая ошибка будет диагностирована правильно (например тег/атрибут отсутствует).
Начали чтение ХМЛ
Контрагент № 1, Наименование учредители
Договор № 1, Наименование учредители
{ВнешняяОбработка.тестТехнологииЧтенияXMLЧерезXDTO.МодульОбъекта(43)}: Деление на 0
F = 1/0; // Модель ошибки!


Кстати, получается не вижу разницы - объектXDTO можно передавать в процедуры дальше как структуру - тоже большой плюс.
Осталось только запись откатать :) Исправленную версию обработки с файлов XML прилагаю (схема не менялась).
Прикрепленные файлы:
in.xml
тестТехнологииЧтенияXMLЧерезXDTO.epf
44. stas4tor 24.11.14 14:25 Сейчас в теме
(41) kirillkr, А что Вам мешает сделать как показано в последнем примере из статьи? То есть "Программно!!" создать пакет.. Позволю себе процитировать автора:"фабрика XDTO создается на ходу из текстового описания XML схемы". Должно решит вашу проблему кмк.
68. Westbound 20.09.17 10:56 Сейчас в теме
(41) Получаешь последовательность, а потом текст:
Последовательность = ТвойОбъектXDTO_СТекстом.Последовательность();
Текст = Последовательность.ПолучитьТекст(0);
lelbraun; fmanaseev; +2 Ответить
57. jobkostya1c8 11.10.15 12:47 Сейчас в теме
В рамках данной темы по чтению XML посредством фабрики XDTO и xsd схем решил создать тестовый пример in.xml, сгенерировать вышеприведенной утилитой xsd.exe (еще вопрос по ее возможностям и есть ли что-то получше) тестовую схему, дальше загнать ее в макет тестовой обработки и попытаться проверить методы чтения, но не тут то было. Валится с ошибками.
Вопросы:
1. Что не так (может отдельными методами нужно по чтению ХМЛ)? Или еще как-то?
2. Почему все-таки схема xsd не грузится в конфигуратор? Статьи по фабрике и схемам читал, но там не все понятно. Метод интересен, т.к. быстрота чтения и также фабрику XDTO использует перспективная технология веб-сервисов и прочие.
3. Можно ли как-то читать с сохранением быстроты методики фабрики XDTO файлы большого размера без преобразования их заголовков методами СтрЗаменить для добавления в тег http:\\<Что-то непонятное с locajhost> и также смысл этих адресов-имен? На редактирование же требуется время, а на передающей стороне из-за таких конструкций очень сильно возрастает размер файла?
4. Можно ли как читать все это дело (по контрагенту все его договора) как при последовательном чтении.
5. Не проверял еще, но не будет ли при такой технологии переполняться ОЗУ на очень-очень больших файлах (1-2 Гб) - Хоть тут и последовательное чтение методом ЧтениеТекста "за раз" (я про ДокументDOM)?
Вот сообщение об ошибке:
ТестСтрока Контрагенты: N=1, учредители
ТестСтрока Контрагенты: N=2, Фирма1
{ВнешняяОбработка.тестТехнологииЧтенияXMLЧерезXDTO.МодульОбъекта(38)}: Ошибка при вызове метода контекста (ПрочитатьXML)
ДоговорыXDTO = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипДоговорXDTO); // НА ЭТОЙ СТРОКЕ ОШИБКА!!!
по причине:
Ошибка при вызове метода объекта модели XDTO.
Неверный параметр.

Ниже код обработки:
Процедура ТестXDTO() Экспорт
	Попытка
		ЧтениеТекста = Новый ЧтениеТекста(ПутьЗагрузки, КодировкаТекста.UTF8);
		СтрокаXML = ЧтениеТекста.Прочитать(); // Для проверки технологии XDTO читаем до конца, а не порциями
		СтрокаXML = СтрЗаменить(СтрокаXML, "<KON", "<KON xmlns=""http://localhost/testXML"" ");
		СтрокаXML = СтрЗаменить(СтрокаXML, "<DOG", "<DOG xmlns=""http://localhost/testXML"" ");
		
		ЧтениеXML = Новый ЧтениеXML;
		// Ниже в УстановитьСтроку(<СтрокаXML>, <Параметры>, <НаборСхемXML>) - ТРИ ПАРАМЕТРА!
		//Набор схем XML, используемых при проверки читаемого документа XML.
		//Если набор схем указан, но не проверен и включена проверка документа XML,
		//то будет выполнена проверка набора схем. 
		ЧтениеXML.УстановитьСтроку(СтрокаXML); //<НаборСхемXML> - Вопрос заодно про третий параметр и его смысл, т.к. в статье описан другой прием
		
		РезультатРазборки = Новый Массив;
		ЧтениеXMLСхемы = Новый ЧтениеXML;
		Макет = ПолучитьМакет("схемаXSD");
		СтрокаXSD = Макет.ПолучитьТекст(); // Макет текстовый!
		ЧтениеXMLСхемы.УстановитьСтроку(СтрокаXSD);
		ПостроительDOM = Новый ПостроительDOM;
		ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXMLСхемы);
		ПостроительСхемXML = Новый ПостроительСхемXML;
		СхемаXML = ПостроительСхемXML.СоздатьСхемуXML(ДокументDOM);
		НаборСхемXML = Новый НаборСхемXML;
		НаборСхемXML.Добавить(СхемаXML);
		
		СвояФабрикаXDTO = Новый ФабрикаXDTO(НаборСхемXML);
		ТипКонтаргентXDTO = СвояФабрикаXDTO.Тип("http://localhost/testXML",    "KON");
		ТипДоговорXDTO    = СвояФабрикаXDTO.Тип("http://localhost/testXML", "DOG");
		
		КонтрагентыXDTO = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипКонтаргентXDTO);
				
		Для каждого ТестСтрока Из КонтрагентыXDTO.KON Цикл
			Сообщить("ТестСтрока Контрагенты: N="+ТестСтрока.N+", "+ТестСтрока.Наименование);// Тест чтения - проверка механизма - дальше более-меннее понятно.
		КонецЦикла;
		
		// Вопрос: Как быть дальше если нужно последовательно читать внутри одного контрагента все договоры (как в последовательном переборе)?
		ДоговорыXDTO    = СвояФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипДоговорXDTO); // НА ЭТОЙ СТРОКЕ ОШИБКА!!!
		Для каждого ТестСтрока Из ДоговорыXDTO.DOG Цикл
			Сообщить("ТестСтрока договоры N "+ТестСтрока.N);// Тест чтения - проверка механизма - дальше более-меннее понятно.
		КонецЦикла;

	Исключение
		Инф = ИнформацияОбОшибке();
		Сообщить(ПодробноеПредставлениеОшибки(Инф) );
	КонецПопытки;
	
КонецПроцедуры	
Показать

Платформа 8.3.6.2041 режим исполнения: толстый клиент, конфигурация нетиповая 1С:Весовой терминал (почти с нуля написана).
Буду раз любой консультации кто сталкивался с подобными трудностями внедрения новой технологии. Тут важно понять смысл стоит ли использовать по быстроте и простоте и когда лучше "по-старому" :)
Прикрепленные файлы:
in.xml
in.xsd
тестТехнологииЧтенияXMLЧерезXDTO.epf
xsd.exe
eeeio; Talim; +2 Ответить
4. Yashazz 3248 05.11.14 20:34 Сейчас в теме
Не вижу итогов производительности по последнему методу (который с прямым указанием xsd).

А вообще - спасибо. У меня всё руки не доходили померять, в результате исходил из пристрелки "на глазок". Рад, что ваши наблюдения подтвердили мои приблизительные замеры.

Эх, ещё бы посмотреть, что больше съедается, куда кэшируется...
18. svenderevsky 683 07.11.14 08:58 Сейчас в теме
(4) Yashazz,
Быстродействие практически такое же как и при использовании ФабрикиXDTO и ПакетаXDTO
5. Armando 1393 05.11.14 21:17 Сейчас в теме
Позволю себе процитировать ИТС. В контексте этой статьи полезно будет.

ИТС: Оптимизация использования оперативной памяти:
Недопустимо работать с большими XML документами с помощью объектов встроенного языка, предназначенных для обработки файлов целиком: текстовые документы в ТекстовыйДокумент, XML в ДокументDOM и HTML в ДокументHTML, а также создавать в памяти XDTO-пакеты размером с весь XML-файл целиком.

В противном случае, весь файл загружается в оперативную память целиком. Исключения составляют отдельные случаи, когда необходим произвольный доступ к содержимому файла, к какой-то конкретной его части.

Следует использовать объекты для последовательной записи и последовательного чтения: ЧтениеXML, ЧтениеТекста, ЗаписьXML, ЗаписьТекста, с помощью которых можно прочитать файл порциями и расходовать память экономно.

При использовании механизмов XDTO неправильно зачитывать в память весь XML-файл целиком (ФабрикаXTDO.ПрочитатьXML(ЧтениеXML)). Вместо этого следует зачитывать XML-файл последовательно, с помощью объекта ЧтениеXML, а его отдельные фрагменты (теги) десериализовывать с помощью фабрики XDTO.
Razlagutt; Gendelf; user712426; 1v7; user828703; CyberCerber; rayastar; for_questions; zzz14; echo77; NN2P; veiuper; alevnev; infostart user; jobkostya1c8; Resha; alexscamp; bashirov.rs; mgn; FrLenok; help1Ckr; thevist; AfroditaS; Silenser; mr.Samuelson; logarifm; almierm; dj_serega; nsirotkin@mail.ru; kirillkr; awk; rtnm; +32 Ответить
14. svenderevsky 683 06.11.14 13:54 Сейчас в теме
(5) Armando,
Если подавать на вход фабрики XDTO не весь документ, а частями (в тестовом примере каждый ПриходныйОрдер отдельно), то несколько снижается быстродействие - при 100 000 записях с 31 сек до 35. В программировании всегда так - экономим память - ухудшаем быстродействие и наоборот. Экономия памяти не самоцель. Обрабатывать как единое целое или по частям XML документ стоит выбирать для каждого конкретного случая
19. dj_serega 370 07.11.14 09:04 Сейчас в теме
Всегда использую XDTO. Если правильно продумать логику то и кодить не нужно если новый объект добавился.
Для этого я использую ОбщийМакет.

Что хотел сказать XDTO рулит :)
Собственно в (5) этому подтверждение :)
6. husky 6 05.11.14 22:09 Сейчас в теме
Подскажите методику, есть HTML страница, есть ли возможность к ней применить вышеизложенные методы, если да, то как?
7. Поручик 4406 06.11.14 08:43 Сейчас в теме
(6) HTML-страницы нормально можно парсить только через DOM-модель.
		ЧтениеHTML = Новый ЧтениеHTML;
		ЧтениеHTML.УстановитьСтроку(СтрокаHTML);
		ПостроительDOM = Новый ПостроительDOM;
		ДокументHTML = ПостроительDOM.Прочитать(ЧтениеHTML);

Они, как правило, относительно небольшого размера, поэтому быстродействие приемлемое. Я сейчас делаю один проект и в нём как раз есть получение страниц с сайта и их разбор. В цикле дёргаются и разбираются порядка ста страниц.
NN2P; rayastar; jobkostya1c8; Spacer; Rustig; +5 Ответить
8. husky 6 06.11.14 10:42 Сейчас в теме
(7) Поручик, этот механизм понятен, сам им пользуюсь, а если альтернативные варианты, может xpath можно использовать или еще как?
9. Yashazz 3248 06.11.14 11:24 Сейчас в теме
(8) husky, я вот использую в своих парсерах именно XPath.
11. Поручик 4406 06.11.14 12:48 Сейчас в теме
(9) Расскажи про использование XPath для разбора html
13. svenderevsky 683 06.11.14 13:47 Сейчас в теме
(11) Поручик,
Почти весь полезный программный код в статье - поэтому скачивание и не сильно требуется
90. t_yuri 17 01.08.19 14:45 Сейчас в теме
(89)
Сорри, нашел все в "Общие команды"...)
10. ZMGMSC 68 06.11.14 12:29 Сейчас в теме
Положительных голосов на порядок больше чем скачиваний... Странно.
28. help1Ckr 12.11.14 13:12 Сейчас в теме
(10) ZMGMSC, старт мани есть не у всех, точнее есть у всех, но не все их могут использовать)
16. Trotter_NN 07.11.14 08:11 Сейчас в теме
Скачал конфу, в ней нету всех методов, а качал для того что бы посмотреть функцию МассивВСтроку() Не могли бы поделится ?)) А то ЗначениеВСтрокуВнутр даёт немного другой результат
Lutcenko; baracuda; +2 Ответить
17. svenderevsky 683 07.11.14 08:56 Сейчас в теме
(16) Trotter_NN,
Функция находится в модуле общей команды РазобратьXML
20. logarifm 1074 07.11.14 13:14 Сейчас в теме
Статья шикарная. Радует глаз сравнение визуально в коде всех методов. Я много занимаюсь обменами и всегда использую методы последовательного чтения ХМЛ. Попробую применить два последних метода. Автору однозначно плюсую.
21. dj_serega 370 07.11.14 15:41 Сейчас в теме
(20) logarifm, Попробуйте совместить последовательное чтение + xdto. Будете приятно удивлены :)
22. Иной 08.11.14 23:53 Сейчас в теме
Спасибо. У самого времени не было потестить все методы.
23. rozer 268 09.11.14 19:56 Сейчас в теме
очень поучительно, плюс однозначно..
24. PiccaHut001 10.11.14 11:34 Сейчас в теме
когда-нибуть пригодится
25. anton.fly7 149 12.11.14 09:27 Сейчас в теме
>>...то они должны передать вам и XML схему данных – файл с расширением .xsd ...

их файла xml можно самому собрать xsd-схему, есть консольная утилита xsd.exe
Прикрепленные файлы:
xsd.exe
AnL24; jobkostya1c8; +2 Ответить
26. svenderevsky 683 12.11.14 11:36 Сейчас в теме
(25) anton.fly7,
По крайней мере мои попытки использовать эту программу оканчивались неудачей - полученный xsd файл проще было не доделывать до кондиции, а создать свой вручную.
27. anton.fly7 149 12.11.14 13:05 Сейчас в теме
(26) svenderevsky, ну не знаю... возможно... я им постоянно пользуюсь когда переношу что-то через xml файлы. в базе источнике записываю данные в текстовик xml, потом генею xsd, потом в базе приемнике через фабрику читаю xml
56. jobkostya1c8 11.10.15 11:04 Сейчас в теме
(25) anton.fly7, решил проверить технологию. Файл из консольной утилиты создается, но ошибка при импорте XML-схемы в конфигурацию 1С
Импорт схем XSD завершен.
Часть схем не была импортирована, возможные причины:
-файл не содержит определение схемы XSD.
-импортируемая схема не содержит определение целевого пространства имен (targetNamespace)
Платформа 8.3.6.2041 Режим толстый клиент. Конфа нетиповая - почти с нуля
прилагаю схему XML, батник
c:\1C\xsd.exe in.xml /c
pause
и файл утилиты xsd.exe. Может нужно другие параметры командной строки или нужно

Формат входного файла простой: выгружаются элементы справочника контрагенты, в атрибутах несколько параметров и - подчиненные элементы договоры тоже с минимумом атрибутов (фрагмент in.xml):

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
<KON ЭтоГруппа="true" Родитель="" ИНН="" КПП="" КодПоОКПО="" Наименование="учредители" НаименованиеПолное="" НалоговыйНомер="" РегистрационныйНомер="" РасширенноеПредставлениеИНН="" РасширенноеПредставлениеКПП="" КодГосударственногоОргана="" Комментарий="" N="1"/>
<KON ЭтоГруппа="false" Родитель="" ИНН="5501555666" КПП="550101001" КодПоОКПО="" Наименование="фирма1" НаименованиеПолное="ООО "Фирма1"" НалоговыйНомер="" РегистрационныйНомер="" РасширенноеПредставлениеИНН="" РасширенноеПредставлениеКПП="" КодГосударственногоОргана="" Комментарий="" N="2">
<DOG НомерДоговора="" ДатаДоговора="0001-01-01T00:00:00" Наименование="Основной договор" Организация="ООО "Фирма1"" ВидДоговора="СПокупателем" ВидВзаиморасчетов="" УстановленСрокОплаты="false" СрокОплаты="0" НаименованиеДляСчетаФактурыНаАванс="" ПорядокРегистрацииСчетовФактурНаАвансПоДоговору="" Комментарий="" N="3"/>
<DOG НомерДоговора="" ДатаДоговора="0001-01-01T00:00:00" Наименование="основной" Организация="ООО "Фирма2"" ВидДоговора="СПокупателем" ВидВзаиморасчетов="" УстановленСрокОплаты="false" СрокОплаты="0" НаименованиеДляСчетаФактурыНаАванс="" ПорядокРегистрацииСчетовФактурНаАвансПоДоговору="" Комментарий="" N="4"/>
</KON>
схему in.xsd прикрепляю ниже.
Заголовок cхемы xsd:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="ROOT" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:s chemas-microsoft-com:xml-msdata">
<xs:element name="ROOT" msdata:IsDataSet="true" msdata:Locale="en-US">
<xs:complexType>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="KON">
<xs:complexType>
<xs:sequence>
<xs:element name="DOG" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="НомерДоговора" type="xs:string" />
<xs:attribute name="ДатаДоговора" type="xs:string" />
<xs:attribute name="Наименование" type="xs:string" />
Показать

Может проблема в заголовке схемы xsd?
Хотело бы проверить новую технологию XDTO на быстродействие и удобство чтоб впоследствии переписать код обработок загрузки-выгрузки больших файлов. Хотелось бы проверить методы № 4 и № 5 из статьи.
Прикрепленные файлы:
in.xsd
start xsd.bat
xsd.exe
user712426; +1 Ответить
29. bulpi 174 12.11.14 14:03 Сейчас в теме
Сразу, сходу, не дочитав статью :
В первом методе, ИМХО, быстродействие тормозит вот это : МассивВСтроку(). Проверь без него, т.е. вообще не нужно использовать ТекущийПуть. Он нужен только в том случае, если есть неуникальные имена узлов, а в примере их нет
30. bulpi 174 12.11.14 14:08 Сейчас в теме
В примере для метода 4 один абзац написан дважды.
46. alexscamp 28.12.14 19:55 Сейчас в теме
Статья отличная, просто учебник для всех, побольше бы таких, ну и дополнение про оптимизацию, память и ссылку на ИТС было бы неплохо указать - тогда было бы просто идеально! Буду рекомендовать коллегам к прочтению :)
47. dyak84 08.01.15 11:37 Сейчас в теме
Спасибо за статю много поучительного и интересного.Я бы сказал статья для чайников.Буду детально разбиратся с каждым примером. Автор так держать
48. Yashazz 3248 11.01.15 20:01 Сейчас в теме
Обнаружил пренеприятнейшую вещь - при действительно больших объёмах (4 585 894 строк, 222 411 694 символов) вызываемый из 1С объект Shell.RegExp валит 1С по недостатку памяти, даже на достойных серверах. Сами куски мелкие, рубить их ЧтениемТекста по разделителю - мало смысла. Жаль, что нет метода Прочитать(КоличествоСтрок,Разделитель), а есть только Прочитать(КолвоСимволов).

Кстати, никто не в курсе, ЧтениеУзловDOM сразу берёт всё (т.е. требует памяти) или идёт последовательно?
jobkostya1c8; +1 Ответить
49. ya.Avoronov 109 13.01.15 06:09 Сейчас в теме
Журнал регистрации из под 8.2 не открылся в вашей конфе.

{Обработка.ЗагрузитьДанныеXML(1128)}: Ошибка чтения журанала регистрации: C:\Documents and Settings\voronov\Рабочий стол\Журнал регистрации1.xml
{Обработка.ЗагрузитьДанныеXML(1057)}: Неверный формат
ВызватьИсключение Ошибка;

Увы. У вас есть наработки с поддержкой 8.2 или 8.3 форматов журнала регистрации?
50. svenderevsky 683 13.01.15 10:48 Сейчас в теме
(49) ya.Avoronov,
У меня таких наработок нет
51. Yashazz 3248 21.01.15 14:06 Сейчас в теме
(49) Я потихоньку делаю такую читалку, недели через 2-3 выложу.
52. sebum 19.02.15 13:37 Сейчас в теме
Статья хорошая, а вот файл скачивать не стоит.
В прилагаемой конфигурации есть только два первых способа разбора, остальные отсутствуют. Копипастинг не получится :)
Листинги же этих способов в тексте даны мелкими картинками, на небольшом экране сломаешь глаза.
Но в остальном - прекрасное пособие для начинающих.
user712426; FSerg; alevnev; JohnyDeath; stupidgamer; +5 Ответить
61. FSerg 66 09.05.16 20:47 Сейчас в теме
(52) sebum, Блин, сначала скачал, потом комент увидел. Качал просто чтобы код не набирать :)
53. binex 265 21.07.15 15:56 Сейчас в теме
Как можно проверить наличие свойства некоторго тега у XML?

Использую 4-вариант (ФабрикаХДТО), некоторые поля могут быть нобязательные, поэтому приходится проверять их наличие самописной функцией (вернее дёргать значение свойства через неё):


Функция СвойствоХДТО(пОбъектХДТО,пИмяСвойства,пЗначениеПоУмолчанию = Неопределено)
	лКоллекцияСвойств = пОбъектХДТО.Свойства();
	лСвойствоХДТО = лКоллекцияСвойств.Получить(пИмяСвойства);
	Если лСвойствоХДТО = Неопределено Тогда
		Возврат пЗначениеПоУмолчанию;
	Иначе
		Возврат пОбъектХДТО.Получить(лСвойствоХДТО);
	КонецЕсли;
КонецФункции

Показать
user712426; HIVvich; jobkostya1c8; +3 Ответить
54. Valerich 1677 18.08.15 08:32 Сейчас в теме
Еще бы для сравнения варианты обработки с преобразованием XSLT. Позволяет несколькими строками кода получить на выходе требуемый объект в терминах 1С. Вот только для больших файлов XML (1 ГБ и больше) сложность возникает - памяти не всегда хватает.

Еще хотелось бы понять. Само по себе открытие файла XML уже занимает какие-то ресурсы, зависящие от размера файла. Есть предположение, что при открытии происходит проверка валидности файла. Есть информация по этой теме?

А то в последнее время приходится работать с XML сложной структуры просто огромных размеров. приходится извращаться. Иначе клиент валится по нехватке памяти. Про быстродействие молчу.
jobkostya1c8; +1 Ответить
55. Armando 1393 18.08.15 16:55 Сейчас в теме
(54) Valerich, про нехватку памяти см (5)
59. jobkostya1c8 11.10.15 21:56 Сейчас в теме
Напоследок, еще проблемы новой технологии "в массы":
1. Когда всего один подчиненный узел тип ОбъектXDTO, а когда больше одного СписокXDTO - но это уже решается "человеческими" методами при переборе коллекции (выяснилось при разборе большого файла.
2. Даже при ручном указании в схеме xsd типов даты "datatime" и вещественного числа "decimal" (в обработке ) вместо string все равно приходится "парсить" вручную как при классическом методе ЧтениеXML конструкцией XMLЗначение(Тип("Дата") , УзелДог.ДатаДоговора ); или XMLЗначение(Тип("Число") , УзелДог.ВещественноеЧисло10_2); Возможно я тут ошибся в типах схемы (есть ли более совершенные редакторы с автораспознаванием типов)? Не зря автор статьи писал про то что он делает схему руками (может не те параметры командной строки)? Фрагмент схемы ниже:
<xs:element name="DOG" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:attribute name="НомерДоговора" type="xs:string" />
<xs:attribute name="ДатаДоговора" type="xs:datatime" />
<xs:attribute name="Наименование" type="xs:string" />
<xs:attribute name="Организация" type="xs:string" />
<xs:attribute name="ВидДоговора" type="xs:string" />
<xs:attribute name="ВидВзаиморасчетов" type="xs:string" />
<xs:attribute name="УстановленСрокОплаты" type="xs:string" />
<xs:attribute name="СрокОплаты" type="xs:string" />
<xs:attribute name="НаименованиеДляСчетаФактурыНаАванс" type="xs:string" />
<xs:attribute name="ПорядокРегистрацииСчетовФактурНаАвансПоДоговору" type="xs:string" />
<xs:attribute name="Комментарий" type="xs:string" />
<xs:attribute name="ВещественноеЧисло10_2" type="xs:Decimal" />
<xs:attribute name="N" type="xs:string" />
</xs:complexType>
</xs:element>
Показать


Ниже окончательный вариант который читает большие файлы:
// ПРОБЛЕМА № 1 - есть ли узел (и есть ли метод без Попытка-исключение?)
			Попытка	
				УзлыДог = Узел.DOG;
			Исключение
				Продолжить; // Нет узла! Пропускаем!
			КонецПопытки;
			
			// ПРОБЛЕМА № 2 - сколько этих узлов 1 или больше (тип то разный ОбъектXDTO или СписокXDTO из этих самых объектов)? 
			Если ТипЗнч(УзлыДог) = Тип("СписокXDTO") Тогда
				Для Каждого УзелДог из УзлыДог Цикл
					Сообщить(""+Символы.Таб+"Договор № "+УзелДог.N+", Наименование "+УзелДог.Наименование+" - (Тип узла СписокXDTO у КА много договогов)"); // Обработка всех договоров (если есть) контрагента как подчиненных узлов
					//F = 1/0; // Модель ошибки!
				КонецЦикла;
			ИначеЕсли ТипЗнч(УзлыДог) = Тип("ОбъектXDTO") Тогда
				УзелДог = УзлыДог; // Еще заплатка для однотипности передаваемого объекта "в обработку"
				XMLЗначение(Тип("Дата") , УзелДог.ДатаДоговора ); // - Опять старые проблемы - вручную десериализовывать по типам XMLЗначение(Тип("Дата") , УзелДог.ДатаДоговора ) 
				Сообщить(""+Символы.Таб+"Договор № "+УзелДог.N+", Наименование "+УзелДог.Наименование+" - (ОДИН договор у КА и тип узла ОбъектXDTO"); // Обработка всех договоров (если есть) контрагента как подчиненных узлов
			Иначе
				ВызватьИсключение("Неизвестный тип XDTO в строке ");
			КонецЕсли;
Показать

Но, в целом не нужно вручную мучиться с набивкой структуры для дальнейшей обработки. Для простых файлов с одинаковой структурой такой метод более "прост" по сравнению с "классическим" если XML получен не из 1С.
Ниже результат чтения в строке сообщений 1С:
Начали чтение ХМЛ
Контрагент № 1, Наименование учредители
Контрагент № 2, Наименование Фирма1
Договор № 3, Наименование Основной договор - (Тип узла СписокXDTO у КА много договогов)
Договор № 4, Наименование основной - (Тип узла СписокXDTO у КА много договогов)
Контрагент № 5, Наименование Тесть КА и 1 договор (тип объектXDTO, а не список)
Договор № 6, Наименование Когда всего 1 договор (тип объектXDTO, а не список) - (ОДИН договор у КА и тип узла ОбъектXDTO
Контрагент № 7, Наименование Последний без подчиненных договоров!
Прочитали ХМЛ

Вот такое вот "веселое" знакомство при переходе на новую технологию (еще если глюков не будет).
Прикрепленные файлы:
тестТехнологииЧтенияXMLЧерезXDTO.epf
in.xml
Vida; eeeio; st4rk; +3 Ответить
60. kirilyan 08.04.16 12:19 Сейчас в теме
Случайно обнаружил, что для фабрики XDTO схема XML может быть такой :

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" </xs:schema>

и 1С все прекрасно прочитает. Можно не париться ни с пакетами XDTO (3 вариант), ни со схемой (4 вариант). Все равно, какие бы типы элементов и атрибутов ты не определил в схеме, 1С их читает как string.
Также, если XML-файл не содержит реквизита URL-пространство имен, то это не помеха для чтения.
62. Saldor 20.09.16 10:42 Сейчас в теме
А пятый листинг по api позволит с сайта забрать приходные накладные? Если со стороны сайта все готово.
63. user634590_serdyuk.n.s 03.11.16 14:40 Сейчас в теме
А как поступить, если необходимо сериализовать большой табличный документ? Его же не запишешь частями? И в память приходится грузить целиком, в результате чего 1с падает по ошибке недостаточно памяти...
64. timeforlive 15 02.03.17 06:04 Сейчас в теме
Автор, необходимо предупреждать в начале поста, что для .cf нужна платформа 8.3.5

Почему не прикрепить .rar, в котором прикрепить как .cf, так и сами обработки отдельно?
65. orange-2 02.04.17 13:05 Сейчас в теме
Решил попробовать разобрать 5-м методом xml файл с госзакупок. Разработчики как раз там поставляют и сам xml и схему xsd.

В документации сказано:
"... Данные выгружаются в виде XML-файлов, сформированных в соответствии со схемой fcsExport.xsd и упакованных в ZIP-архивы...."


При попытке чтения вываливается с ошибкой..
 
ЧтениеXML = Новый ЧтениеXML();
ЧтениеXML.ОткрытьФайл("C:\1\fcs_notificationEFDateChange_0373100133116000101_8918.xml");
	
ТипXDTO = ФабрикаXDTO.Тип("http://zakupki.gov.ru/oos/types/1", "zfcs_notificationEFDateChangeType");
Извещение = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML, ТипXDTO);


Кто-то читал файлы с госзакупок при помощи поставляемой схемы? Подскажите в чем может быть ошибка?
Прикрепленные файлы:
66. CagoBHuK 32 24.04.17 12:52 Сейчас в теме
Почему вы всегда игнорируете инструменты XSLT?
67. jobkostya1c8 05.06.17 17:27 Сейчас в теме
(66) кто-нибудь скиньте ссылочку и в двух словах про преимущества XSLT. Много информации не всегда нужный объем задач по парсингу XML.
69. EvgeniyNP 30.01.18 11:45 Сейчас в теме
А не подскажет кто-нибудь?
есть такой xml-файл


можно для него использовать 5 метод?
и можно xmlns передавать из файла или нужно его задавать заранее?
Прикрепленные файлы:
СчетФактураМФТИ.xml
70. EvgeniyNP 30.01.18 13:01 Сейчас в теме
(69)
и можно xmlns передавать из файла или нужно его задавать заранее?

я подразумевал, что нужно передевать в тип и можно ли взять это из файла?
71. EvgeniyNP 31.01.18 13:38 Сейчас в теме
(69) И еще вопрос.
можно ли в коде наложить условие на проверку, что это ОбъектXDTO или СписокXDTO?
74. 🅵🅾️🆇 20.02.18 16:50 Сейчас в теме
(71) Ты серьезно?)
ТипЗнч(ФабрикаXDTO.СписокXDTO) = Тип("СписокXDTO")
72. progaoff 01.02.18 14:46 Сейчас в теме
Подскажите, как правильно сделать XDTO пакет для xml файла,
Прикрепленные файлы:
73. 🅵🅾️🆇 20.02.18 16:01 Сейчас в теме
Возможно сочтете за некропостинг, но теперь многое из написаного можно записать еще более емко с помощью: ЗаполнитьЗначениеСвойств()

Вот упрощенный вариант понятного чтения в несколько строк небольших файлов, на примере типичного документа с табличной частью (сверка актов из 1с 77):
ЧтениеXML	= Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(Файл.ПолноеИмя);
АктыXDTO	= ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
Акты		= Новый Структура("ОрганизацияИНН,ОрганизацияНаименование,КонтрагентИНН,КонтрагентНаименование,Договор,ОрганизацияФИО,ОрганизацияДолжность,КонтрагентФИО,КонтрагентДолжность,ДатаНачала,ДатаОкончания,Операции");
ЗаполнитьЗначенияСвойств(Акты, АктыXDTO);
Акты.Вставить("Операции", Новый Массив);
Для Каждого ОперацияXDTO Из АктыXDTO.Операция Цикл
	Операция	= Новый Структура("Номер,Операция,Дебет,Кредит,Согласован");
	ЗаполнитьЗначенияСвойств(Операция, ОперацияXDTO);
	Акты.Операции.Добавить(Операция);	
КонецЦикла; // Для Каждого Операция Из АктыXDTO.Операция
// Не забываем закрывать, господа:
ЧтениеXML.Закрыть();
Показать
mst; Vida; +2 Ответить
75. dimasts 22 02.04.18 09:40 Сейчас в теме
Не могу понять, как заставить фабрику прочитать значение из строки:
<Контрагент xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="CatalogRef.Контрагенты">3722b978-d17a-11e5-89f0-001fc663b5b0</Контрагент>

Все объекты без проблем читаются методом = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML)
и только контрагент имеет один атрибут type со значением CatalogRef.Контрагенты, куда девается ссылка?

Пакеты xdto вообще не использую, так как все объекты нормально читаются, но походу надо создать маленький пакет специально для этой строки.

Подскажите пожалуйста, как должен выглядеть этот микро-пакет или надо всё-таки создавать огромный пакет для всех объектов?
76. dimasts 22 02.04.18 16:35 Сейчас в теме
(75) Ответ на вопрос, может кому поможет (А Я УВЕРЕН В ЭТОМ ТАК КАК ПОТРАТИЛ НЕДЕЛЮ)

ОбъектXDTO.Body.DocumentObject_СписаниеСРасчетногоСчета[0].Контрагент.Последовательность().ПолучитьТекст(0)
Caliban; w_maG; baakir; KVG; eeeio; +5 Ответить
83. baakir 21 07.02.19 17:33 Сейчас в теме
(76)
.Последовательность().ПолучитьТекст(0)

Безмерно благодарен, уж как только не пробовал схемы XML загружать, ниче не получалось. Я бы тоже неделю искал если не больше, если бы не твой коммент.
77. boss_kuz 89 04.08.18 06:15 Сейчас в теме
Почему в фале cf нет примеров кода использованного на картинках ? Лажа...
78. CatZero 16.08.18 08:34 Сейчас в теме
(77) В общие команды загляните
79. boss_kuz 89 18.08.18 04:27 Сейчас в теме
80. Andry.Boris 55 21.08.18 00:16 Сейчас в теме
Автору спасибо, пригодилось очень.
81. F1_1 31.10.18 13:06 Сейчас в теме
82. stroga 83 28.11.18 13:45 Сейчас в теме
84. tovpeko 24.02.19 17:16 Сейчас в теме
Спасибо, познавательная статья, как раз в скором времени пригодится))
85. vlabal 27.02.19 12:13 Сейчас в теме
Большое спасибо автору за примеры!
Возникла неудобная ситуация с обработкой списка в XML.
Если в списке одна строка, то возникает ошибка при попытке выполнить цикл, т.к. ЗаявкаXDTO.POSBreakages.POSBreakage является почему-то объектом XDTO, а если несколько строк, то ЗаявкаXDTO.POSBreakages.POSBreakage видится как СписокXDTO и обход проходит нормально, можно выкрутиться через попытку исключение, но красивое решение пока не удалось найти.

Для Каждого СтрокаPOSBreakages Из ЗаявкаXDTO.POSBreakages.POSBreakage Цикл

СтрокаPOSBreakagesСтруктура = Новый Структура("POSBreakage_ID,SC_POSBreakage_ID,POSBreakage_Name");
СтрокаPOSBreakagesСтруктура.POSBreakage_ID = СтрокаPOSBreakages.POSBreakage_ID;
СтрокаPOSBreakagesСтруктура.SC_POSBreakage_ID = СтрокаPOSBreakages.SC_POSBreakage_ID;
СтрокаPOSBreakagesСтруктура.POSBreakage_Name = СтрокаPOSBreakages.POSBreakage_Name;
ДокументЗаявкаСтруктура.POSBreakages.Добавить(СтрокаPOSBreakagesСтруктура);

КонецЦикла;

Предложите лучший вариант.
87. suepifanov 27.02.19 12:28 Сейчас в теме
(85) я просто проверял такие строки на тип Если ТипЗнч(ЗаявкаXDTO.POSBreakages.POSBreakage)=Тип("СписокXDTO") Тогда
Цикл... Иначе не цикл ...
88. vlabal 27.02.19 15:39 Сейчас в теме
89. t_yuri 17 01.08.19 13:42 Сейчас в теме
Почему в cf не все указанные варианты примеров?

В разборе вижу только:
// Простой обход дерева
// Использование XPath

Где другие варианты??
91. t_yuri 17 01.08.19 14:51 Сейчас в теме
Сорри, нашел ,в "Общие команды"...)
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Автор новостных обзоров на тему 1С и бухучета
Санкт-Петербург
По совместительству

Программист 1С
Санкт-Петербург
зарплата до 150 000 руб.
Полный день

Программист 1С
Екатеринбург
зарплата от 80 000 руб. до 130 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 150 000 руб.
Полный день

Ведущий программист 1С (УТ 11)
Москва
зарплата до 200 000 руб.
Полный день