Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Возможна ли загрузка из XML в регистр сведений?

Возможна ли загрузка из XML в регистр сведений?
Я
   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
Согласовано.
   9451523
 
2 - 27.08.20 - 15:56
можете хотя бы примерно подсказать как? я пытался у меня не вышло
   9451523
 
3 - 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");
    запись.Производитель = стр.Производитель;
     НС.Записать();

    КонецЦикла;
    

КонецПроцедуры
   Pahomich
 
4 - 27.08.20 - 16:01
А загрузи из полученной ТЗ в регистр!
   lodger
 
5 - 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");

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.