Создание Установка цен номенклатуры из XML файла

1. nsm 28.08.17 00:10 Сейчас в теме
Здравствуйте.
Необходимо создать и записать документ Установка цен номенклатуры
из XML файла
Фрагмент файла XML

Читаю файл так
Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    ЧтениеXML = Новый ЧтениеXML;
    ЧтениеXML.ОткрытьФайл("F:\OLD_DISK_C\1C\M13714small.xml");
    Имя = ЧтениеXML.Имя;
    Массив = Новый Структура(Имя);                                                     
    Пока ЧтениеXML.Прочитать() Цикл                  
        ПолучитьXMLТип(ЧтениеXML);
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента  Тогда
                        
            Имя = ЧтениеXML.Имя;
            
            Сообщить("Начало " + ЧтениеXML.Имя);
            Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
                Атрибут = ЧтениеXML.Значение;
                Сообщить("атрибут:" + ЧтениеXML.Имя + "=" + ЧтениеXML.Значение);
            КонецЦикла;
        КонецЕсли;
        
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
            Массив.Вставить(Имя,ЧтениеXML.Значение);
            Сообщить(ЧтениеXML.Значение);
        КонецЕсли;
    
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
            Если ЧтениеXML.Имя = "data" Тогда
            ДобавитьЭлемент(Массив);
            КонецЕсли;
            Сообщить("Конец " + ЧтениеXML.Имя);
        КонецЕсли;
    КонецЦикла;
    КонецПроцедуры
Показать

Читает, но когда переходит к созданию Документа
Процедура СоздатьДокУстЦен(Массив)
	
	Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
	Документ.Дата = ТекущаяДата();
	Документ.Ответственный = Пользователи.ТекущийПользователь();
		Для Каждого СтрокаДанных Из Массив Цикл
		артикул = СтрокаДанных.cae;
		НоваяСтрока = Документ.Товары.Добавить();
        НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("артикул",артикул);
        НоваяСтрока.ТипЦен      = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
        НоваяСтрока.Цена         = Массив.price;
        Документ.Товары.Свернуть("Номенклатура, ТипЦен, Цена");
	   	КонецЦикла;
	Документ.Записать();	
	
КонецПроцедуры
Показать

Получаю "Поле объекта не обнаружено (cae)". Хотя это реквизит из файла, и читается он первой частью правильно. Что я упускаю?
По теме из базы знаний
Найденные решения
8. nsm 11.10.17 01:01 Сейчас в теме
В общем получилась обработка которая и берёт Номенклатуру из xml файла, создаёт элементы справочника и тут же создаёт установку цен номенклатуры, если такое необходимо.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. japopov 68 28.08.17 10:04 Сейчас в теме
(1) Советую самостоятельно найти ошибку, Вам полезнее будет.

а) Можно установить точку останова на строчку про артикул;
б) можно в конфигураторе в меню Отладка / остановка по ошибке включить остановку по ошибке - система остановится при ошибке прямо перед выполнением сбойного участка кода.

Запускаете и смотрите, что у Вас в переменной Массив вообще, и в СтрокаДанных в частности. Потом ищете ошибку.
3. nsm 28.08.17 11:46 Сейчас в теме
(2) Вижу значение реквизита, но Документ создаётся пустой, без номенклатуры. И я так понимаю, что к ТипЦен что в Шапке так просто не обратишься, для установления значения
Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
	Документ.Дата = ТекущаяДата();
	//Документ.???? = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
	Документ.Ответственный = Пользователи.ТекущийПользователь();
	артикул = Массив.cae;
	Для Каждого СтрокаДанных Из Массив Цикл
		НоваяСтрока = Документ.Товары.Добавить();
        НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("артикул",артикул);
//		НоваяСтрока.ТипЦен      = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
//        НоваяСтрока.Цена         = Массив.price_sk3;
//        Документ.Товары.Свернуть("Номенклатура, ТипЦен, Цена");
		Документ.Товары.Свернуть("Номенклатура,,");
		Документ.Записать();
		
//		Отказ = Истина;
	   	КонецЦикла;
Показать
4. soulsb 28.08.17 12:34 Сейчас в теме
посмотрите раскладку клавиатуры в "сае", возможно какие то буквы в xml там они латиницей и кириллицей смешаны.
5. nsm 28.08.17 13:19 Сейчас в теме
6. nsm 28.08.17 13:53 Сейчас в теме
Процедура СоздатьДокУстЦен(Массив)
	
	Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
	Документ.Дата = ТекущаяДата();
	Документ.Ответственный = Пользователи.ТекущийПользователь();
	строкацена = Документ.Товары.Добавить();
	строкацена.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
	артикул = Массив.cae;
	Для Каждого СтрокаДанных Из Массив Цикл
		НоваяСтрока = Документ.Товары.Добавить();
        НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоРеквизиту("артикул",артикул);
		НоваяСтрока.ТипЦен      = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002");
        НоваяСтрока.Цена         = Массив.price_sk3;
        Документ.Товары.Свернуть("Номенклатура, ТипЦен, Цена");
		Документ.Товары.Свернуть("Номенклатура,,");
		Документ.Записать();
		
//		Отказ = Истина;
	   	КонецЦикла;
		
КонецПроцедуры
Показать

Ошибок нет, но и заполнения нет. По отладчику Артикул получает.
7. nsm 28.08.17 17:05 Сейчас в теме
Процедура КнопкаВыполнитьНажатие(Кнопка)	
	    
	    ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
//		ВидВалюты = Справочники.Валюты.НайтиПоНаименованию("руб.");
		ЕдиницаИзм = Справочники.ЕдиницыИзмерения.НайтиПоНаименованию("шт"); 
		
		ЧтениеXML = Новый ЧтениеXML;
    	ЧтениеXML.ОткрытьФайл("F:\4P\M13714small.xml");
		Имя = ЧтениеXML.Имя;
    	Массив = Новый Структура(Имя);

		Документ = Документы.УстановкаЦенНоменклатуры.СоздатьДокумент();
		Документ.Дата = ТекущаяДата();
		Документ.Ответственный = Пользователи.ТекущийПользователь();
//		Документ.мВалютаУправленческогоУчета = Справочники.Валюты.НайтиПоНаименованию("руб.");
		
		строкатиповцен = Документ.ТипыЦен.Добавить();
		строкатиповцен.ТипЦен= ТипЦен;
		                                                     
    Пока ЧтениеXML.Прочитать() Цикл                  
        ПолучитьXMLТип(ЧтениеXML);
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента  Тогда
                        
            Имя = ЧтениеXML.Имя;
            
            Пока ЧтениеXML.ПрочитатьАтрибут() Цикл
                Атрибут = ЧтениеXML.Значение;
            КонецЦикла;
        КонецЕсли;
        
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
            Массив.Вставить(Имя,ЧтениеXML.Значение);            
        КонецЕсли;
    
        Если ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
			Если ЧтениеXML.Имя = "data" Тогда
				Для Каждого Атрибут Из Массив Цикл
            Цена = Массив.price_sk3;
			Арт = Массив.cae;
				КонецЦикла;
            КонецЕсли;
        КонецЕсли;
    КонецЦикла;	
			
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Артикул,
		|	Номенклатура.Ссылка,
		|	Номенклатура.ЕдиницаХраненияОстатков КАК Ед,
		|	Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК К
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Артикул = &Артикул";

	Запрос.УстановитьПараметр("Артикул", Арт);

	Результат = Запрос.Выполнить();

	Если  НЕ Результат.Пустой() Тогда
	ВыборкаДетальныеЗаписи = Результат.Выбрать();

	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		Строка = Номенклатура.Добавить();
		Строка.Артикул = Арт;
		Строка.Цена = Цена;

    строкацена = Документ.Товары.Добавить();
	строкацена.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
	строкацена.Номенклатура = ВыборкаДетальныеЗаписи.Ссылка;
	строкацена.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Ед; 
	Документ.Записать();

	строкацена.Цена = Строка.Цена;

КонецЦикла;
Иначе
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Номенклатура.Наименование,
		|	Номенклатура.Ссылка,
		|	Номенклатура.ЕдиницаХраненияОстатков КАК Ед,
		|	Номенклатура.ЕдиницаХраненияОстатков.Коэффициент   КАК К
		|ИЗ
		|	Справочник.Номенклатура КАК Номенклатура
		|ГДЕ
		|	Номенклатура.Наименование = &Наименование";

	Запрос.УстановитьПараметр("Наименование",);

	Результат = Запрос.Выполнить();

	ВыборкаДетальныеЗаписи = Результат.Выбрать();

	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Строка = Номенклатура.Добавить();
		Строка.Артикул = Арт;
		Строка.Цена = Цена;

	строкацена = Документ.Товары.Добавить();
	строкацена.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Оптовая");
	строкацена.Номенклатура = ВыборкаДетальныеЗаписи.Ссылка;
	строкацена.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.Ед; 
	Документ.Записать();
	строкацена.Цена = Строка.Цена;

	КонецЦикла;

	КонецЕсли;	
						
		Документ.ПолучитьФорму("ФормаДокумента").Открыть();		
	
КонецПроцедуры
Показать

Переделал всё вот так. Заполняет ТипЦен. Добавляет Номенклатуру, но не могу понять как правильно переделать Цикл, что бы попадала вся имеющаяся номенклатура.
8. nsm 11.10.17 01:01 Сейчас в теме
В общем получилась обработка которая и берёт Номенклатуру из xml файла, создаёт элементы справочника и тут же создаёт установку цен номенклатуры, если такое необходимо.
Оставьте свое сообщение

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