Загрузка из XML в регистр сведений

1. damir-it 27.08.20 15:15 Сейчас в теме
Уважаемые форумчане, помогите с кодом
нужно из файла XML загрузить данные в регистр сведений,
в таблицу значений выгружает нормально, а вот напрямую в регистр сведений
не получается загрузить

Перем ПрефиксБазы;

&НаКлиенте

Процедура Загрузить(Команда)
ПрефиксБазы = Строка(Команда.Имя);
ЧтениеXML = Новый ЧтениеXML; 
ЧтениеXML.ОткрытьФайл("D:\"+ПрефиксБазы+".xml");
ПриходыXTDO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Если ТипЗнч(ПриходыXTDO.ТЧ) <> Тип("СписокXDTO") Тогда
	СписокXTDOтч = Новый Массив;
	СписокXTDOтч.Добавить(ПриходыXTDO.ТЧ);
Иначе
	СписокXTDOтч = ПриходыXTDO.ТЧ;
КонецЕсли;
Для Каждого СтрокаXDTO ИЗ СписокXTDOтч Цикл
        НС = ТЗ.Добавить();
	НС.Префикс = ПрефиксБазы;
	НС.Номенклатура = СтрокаXDTO.Номенклатура;
	НС.Производитель = СтрокаXDTO.Производитель;
	НС.ОстатокТовара = Формат(СтрокаXDTO.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");

КонецЦикла;

ЗаполнитьНаСервере(ТЗ);

 
	
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(ТЗ)
      НС = РегистрыСведений.Остатки.СоздатьНаборЗаписей();
	Для Каждого стр из ТЗ цикл
	запись = НС.Добавить();	
	запись.Префикс = ПрефиксБазы;
	запись.Номенклатура = стр.Номенклатура;
	запись.ОстатокТовара = Формат(стр.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");
	запись.Производитель = стр.Производитель;
	НС.Записать();
    КонецЦикла;
	
КонецПроцедуры
Показать


С Уважением Дамир
По теме из базы знаний
Найденные решения
9. user5300 1060 27.08.20 16:45 Сейчас в теме
&НаКлиенте
Процедура Загрузить(Команда)
	ПрефиксБазы = Строка(Команда.Имя);
	ИмяФайла = "D:\"+ПрефиксБазы+".xml"

	ЗаполнитьНаСервере(ИмяФайла,ПрефиксБазы);

КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(ИмяФайла,ПрефиксБазы)
		 
	ЧтениеXML = Новый ЧтениеXML; 
	ЧтениеXML.ОткрытьФайл(ИмяФайла);
	ПриходыXTDO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

	Если ТипЗнч(ПриходыXTDO.ТЧ) <> Тип("СписокXDTO") Тогда
	    СписокXTDOтч = Новый Массив;
	    СписокXTDOтч.Добавить(ПриходыXTDO.ТЧ);
	Иначе
	    СписокXTDOтч = ПриходыXTDO.ТЧ;
	КонецЕсли;
	Для Каждого стр ИЗ СписокXTDOтч Цикл
		НоваяЗапись = РегистрыСведений.Остатки.СоздатьМенеджерЗаписи();
		НоваяЗапись.Префикс = ПрефиксБазы;
		НоваяЗапись.Номенклатура = стр.Номенклатура;
		НоваяЗапись.ОстатокТовара = Формат(стр.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");
		НоваяЗапись.Производитель = стр.Производитель;
		НоваяЗапись.Записать(Истина);
	КонецЦикла;

КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Jeka44 27.08.20 15:27 Сейчас в теме
(1)с типами все нормально? а то вы в регистр сейчас строки номенклатура и производитель пытаетесь записать
5. damir-it 27.08.20 15:30 Сейчас в теме
(1) да с типами все так и должно быть там все в строку вываливается, код отрабатывает но очень долго , в итого все данные загружаются , нужно просто оптимизировать код что бы напрямую в регистр сведений записывал без таблицы значений, это возможно?
6. Jeka44 27.08.20 15:34 Сейчас в теме
(5)НС.Записать(); надо после цикла писать, а не в цикле и все норм будет
&НаСервере
Процедура ЗаполнитьНаСервере(ТЗ)
НС = РегистрыСведений.Остатки.СоздатьНаборЗаписей();
Для Каждого стр из ТЗ цикл
запись = НС.Добавить();
запись.Префикс = ПрефиксБазы;
запись.Номенклатура = стр.Номенклатура;
запись.ОстатокТовара = Формат(стр.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");
запись.Производитель = стр.Производитель;

КонецЦикла;

НС.Записать();

КонецПроцедуры
Показать
7. damir-it 27.08.20 15:44 Сейчас в теме
(6)НС.Записать() если за цикл вывести то ошибка вываливается
8. Jeka44 27.08.20 15:56 Сейчас в теме
(7)https://its.1c.ru/db/metod8dev/content/2486/hdoc
Вот ссылка на ИТС, Записать после цикла и все норм должно быть. Какая ошибка вываливается?
3. erazh 27.08.20 15:27 Сейчас в теме
Корявый цикл. Рискну предположить, что в итоге в регистре остается только одна последняя строка из ТЗ.
4. erazh 27.08.20 15:28 Сейчас в теме
(3)При этом все остальные записи, какие бы они ни были - херятся.
9. user5300 1060 27.08.20 16:45 Сейчас в теме
&НаКлиенте
Процедура Загрузить(Команда)
	ПрефиксБазы = Строка(Команда.Имя);
	ИмяФайла = "D:\"+ПрефиксБазы+".xml"

	ЗаполнитьНаСервере(ИмяФайла,ПрефиксБазы);

КонецПроцедуры

&НаСервере
Процедура ЗаполнитьНаСервере(ИмяФайла,ПрефиксБазы)
		 
	ЧтениеXML = Новый ЧтениеXML; 
	ЧтениеXML.ОткрытьФайл(ИмяФайла);
	ПриходыXTDO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

	Если ТипЗнч(ПриходыXTDO.ТЧ) <> Тип("СписокXDTO") Тогда
	    СписокXTDOтч = Новый Массив;
	    СписокXTDOтч.Добавить(ПриходыXTDO.ТЧ);
	Иначе
	    СписокXTDOтч = ПриходыXTDO.ТЧ;
	КонецЕсли;
	Для Каждого стр ИЗ СписокXTDOтч Цикл
		НоваяЗапись = РегистрыСведений.Остатки.СоздатьМенеджерЗаписи();
		НоваяЗапись.Префикс = ПрефиксБазы;
		НоваяЗапись.Номенклатура = стр.Номенклатура;
		НоваяЗапись.ОстатокТовара = Формат(стр.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");
		НоваяЗапись.Производитель = стр.Производитель;
		НоваяЗапись.Записать(Истина);
	КонецЦикла;

КонецПроцедуры
Показать
10. damir-it 28.08.20 07:02 Сейчас в теме
(9)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайла);
ПриходыXTDO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Если ТипЗнч(ПриходыXTDO.ТЧ) <> Тип("СписокXDTO") Тогда
СписокXTDOтч = Новый Массив;
СписокXTDOтч.Добавить(ПриходыXTDO.ТЧ);
Иначе
СписокXTDOтч = ПриходыXTDO.ТЧ;
КонецЕсли;
Для Каждого стр ИЗ СписокXTDOтч Цикл
НоваяЗапись = РегистрыСведений.Остатки.СоздатьМенеджерЗаписи();
НоваяЗапись.Префикс = ПрефиксБазы;
НоваяЗапись.Номенклатура = стр.Номенклатура;
НоваяЗапись.ОстатокТовара = Формат(стр.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");
НоваяЗапись.Производитель = стр.Производитель;
НоваяЗапись.Записать(Истина);
КонецЦикла;
Показать


Спасибо все отработало как надо, только надо было добавить ОбновитьИнтерфейс() на клиенте
11. alex-l19041 8 28.08.20 09:20 Сейчас в теме
(10) в этом регистре тип ОстатокТовара - строка ?

Формат(стр.ОстатокТовара,"ЧДЦ=3; ЧН=0; ЧГ=0");
- тут результат строка...
12. damir-it 28.08.20 15:18 Сейчас в теме
Оставьте свое сообщение

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