Чтение и запись из xml в 1с

1. user933577 18.09.18 10:19 Сейчас в теме
xml следующего вида (маленькая часть - пример):
<?xml version="1.0" encoding="windows-1251"?>
<!--DocSale--><Root>
	

	<Doc ID="89121145" SNAME="4" >
		<String NOM="1" ID_EL="47594" SNAME="Лапша" />
                <String NOM="2" ID_EL="47595" SNAME="Греча" />
	</Doc>
	
	
</Root>

Показать


Документ с тэгом DOC, строка документа (массив) с тэгом STRING (эти данные идут в табличную часть.

первая часть кода:
Для каждого Doc Из ОбъектXDTO.Doc Цикл
			
			
					НовыйДок = Документы.Приход.СоздатьДокумент();
					НовыйДок.Наименование = DOC.SNAME;
					НовыйДок.Дата= ТекущаяДата();
					НовыйДок.Код = Doc.ID;
Показать


цикл на этом не заканчивается, а добавляется табличная часть
при чтении и записи выдает ошибку "Поле объекта не обнаружено (string)
МассивСтрок = ОбъектXDTO.DOC.string;"

Именно на этом месте:

МассивСтрок =  ОбъектXDTO.DOC.string;
						Для каждого МассивСтрок Из Doc.String Цикл



Помогите пожалуйста разобраться с массивом
По теме из базы знаний
Найденные решения
6. user933577 18.09.18 11:19 Сейчас в теме
все получилось!!!

сделал функцию :

Функция  КоллекцияXDTO(Элемент)
    Если ТипЗнч(Элемент)=Тип("ОбъектXDTO") Тогда
        МассивXDTO=Новый Массив;
        МассивXDTO.Добавить(Элемент);
        Возврат МассивXDTO;
    КонецЕсли;
    Возврат Элемент;
КонецФункции

Показать


далее прописал так:

МассивСтрок =  DOC.string;
					
	Для Каждого String из КоллекцияXDTO(МассивСтрок) Цикл
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 18.09.18 10:34 Сейчас в теме
значит нет такого реквизита. Надо смотреть определения типов XDTO, что там в этом DOC.
3. user933577 18.09.18 10:53 Сейчас в теме
(2)в этом DOC строки состава с тэгом string. Но я так понял, стринг - идет как массив, все перепробовал.

хотя, был пример такого xml:
<RegContr>
		<Contr ID="3139" SNAME="Контрагент1;" />
</RegContr>



Все идеально считывается.

Для каждого Contr Из ОбъектXDTO.RegContr.Contr Цикл


Но все потому, что contr не идет как массив, а отдельные строки для справочника.
как быть с массивом, уже все перепробовал.
4. SPID 18.09.18 11:13 Сейчас в теме
В отладчике если посмотреть, есть поле DOC.string? Посмотрите как DOC определился, возможно это список и нужно получить конкретный элемент списка вначале.
5. tgnike 18.09.18 11:19 Сейчас в теме
Doc - это и есть массив, String - его элементы. Ты их перебираешь в первом цикле Для каждого Doc Из ОбъектXDTO.Doc Цикл.
6. user933577 18.09.18 11:19 Сейчас в теме
все получилось!!!

сделал функцию :

Функция  КоллекцияXDTO(Элемент)
    Если ТипЗнч(Элемент)=Тип("ОбъектXDTO") Тогда
        МассивXDTO=Новый Массив;
        МассивXDTO.Добавить(Элемент);
        Возврат МассивXDTO;
    КонецЕсли;
    Возврат Элемент;
КонецФункции

Показать


далее прописал так:

МассивСтрок =  DOC.string;
					
	Для Каждого String из КоллекцияXDTO(МассивСтрок) Цикл
Оставьте свое сообщение

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