Имя: Пароль:
1C
1С v8
Возможна ли загрузка из XML в регистр сведений?
0 9451523
 
27.08.20
15:54
Привет всем, можете посоветовать
вот код который выгружает с хмл файла в таблизу значений

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

КонецЦикла;
КонецПроцедуры

все отрабатывает нормально, но можно ли вместо Таблицы значений, так как это ФабрикаXDTO использовать РегистрСведений ?
1 Волшебник
 
27.08.20
15:54
Согласовано.
2 9451523
 
27.08.20
15:56
можете хотя бы примерно подсказать как? я пытался у меня не вышло
3 9451523
 
27.08.20
15:59
пытался так, очень долго выгружает , не пойдет

Перем ПрефиксБазы;
&НаКлиенте
Процедура Загрузить(Команда)
ПрефиксБазы = Строка(Команда.Имя);
Чтение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");
    запись.Производитель = стр.Производитель;
     НС.Записать();

    КонецЦикла;
    

КонецПроцедуры
4 Pahomich
 
27.08.20
16:01
А загрузи из полученной ТЗ в регистр!
5 lodger
 
27.08.20
16:22
(3) примерно так, но надо поглядеть что там с СоздатьНаборЗаписей и НС.Записать();

&НаКлиенте
Процедура Загрузить(Команда)
ПрефиксБазы = Строка(Команда.Имя);
ЗаполнитьНаСервере(ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные("D:\"+ПрефиксБазы+".xml"),ЭтаФорма.УникальныйИдентификатор));
конецпроедуры

&НаСервере
Процедура ЗаполнитьНаСервере(АдресВХ)
ДД = ПолучитьИзВременногоХранилища(АдресВХ)
НС = РегистрыСведений.Остатки.СоздатьНаборЗаписей();

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьПоток(ДД.ОткрытьПотокДляЧтения());
ПриходыXTDO = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);

Если ТипЗнч(ПриходыXTDO.ТЧ) <> Тип("СписокXDTO") Тогда
    СписокXTDOтч = Новый Массив;
    СписокXTDOтч.Добавить(ПриходыXTDO.ТЧ);
Иначе
    СписокXTDOтч = ПриходыXTDO.ТЧ;
КонецЕсли;

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

КонецЦикла;
НС.Записать();
КонецПроцедуры