0
1сПупс
11.11.16
✎
10:45
|
привет!
выгружаю справочник из 1с посредсвом хмл:
&НаСервереБезКонтекста
Процедура Команда1НаСервере()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| контрагенты.Код,
| контрагенты.Наименование,
| контрагенты.ЭтоГруппа
|ИЗ
| Справочник.контрагенты КАК контрагенты";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Файл = Новый ЗаписьXML;
Файл.ОткрытьФайл("E:/1.xml");
Файл.ЗаписатьОбъявлениеXML();
Файл.ЗаписатьНачалоЭлемента("Root");
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Файл.ЗаписатьНачалоЭлемента("Контрагент");
Файл.ЗаписатьАтрибут("Код", ВыборкаДетальныеЗаписи.Код);
Файл.ЗаписатьАтрибут("ЭтоГруппа", ?(ВыборкаДетальныеЗаписи.ЭтоГруппа,"1","0"));
Файл.ЗаписатьТекст(ВыборкаДетальныеЗаписи.Наименование);
Файл.ЗаписатьКонецЭлемента();
КонецЦикла;
Файл.ЗаписатьКонецЭлемента();
//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
Вот загрузка:
&НаСервереБезКонтекста
Процедура Команда1НаСервере()
Файл = Новый ЧтениеXML;
Файл.ОткрытьФайл("e:\1.xml");
Пока Файл.Прочитать() Цикл
Если Файл.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
Пока файл.ПрочитатьАтрибут() Цикл
Если файл.Имя = "Код" Тогда
Код = файл.Значение;
ИначеЕсли файл.Имя = "ЭтоГруппа" Тогда
ЭтоГруппа = ?(Файл.Значение="0",Ложь,Истина);
//ИначеЕсли файл.Имя = "Родитель" Тогда
// Родитель = Файл.Значение;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Код) И Не ЗначениеЗаполнено(Справочники.контрагенты.НайтиПоКоду(Код)) Тогда
Если ЭтоГруппа Тогда
ЭлементСправочника = Справочники.контрагенты.СоздатьГруппу();
Иначе
ЭлементСправочника = Справочники.контрагенты.СоздатьЭлемент();
КонецЕсли;
ЭлементСправочника.Код = Код;
Если Файл.Прочитать() Тогда
Если Файл.ТипУзла=ТипУзлаXML.Текст Тогда
ЭлементСправочника.Наименование = Файл.Значение;
ЭлементСправочника.Записать();
Иначе
Сообщить("ошибка формата!");
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Файл = Новый ЧтениеXML;
Файл.ОткрытьФайл("e:\1.xml");
Пока Файл.Прочитать() Цикл
Если Файл.ТипУзла=ТипУзлаXML.НачалоЭлемента Тогда
Пока файл.ПрочитатьАтрибут() Цикл
Если файл.Имя = "Код" Тогда
Код = файл.Значение;
ИначеЕсли файл.Имя = "Родитель" Тогда
Родитель = Файл.Значение;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Код) И ЗначениеЗаполнено(Родитель) Тогда
Элемент = Справочники.контрагенты.НайтиПоКоду(код);
РедактируемыйЭлемент = Элемент.ПолучитьОбъект();
РедактируемыйЭлемент.Родитель = Справочники.контрагенты.НайтиПоКоду(Родитель);
РедактируемыйЭлемент.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Файл.Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура Команда1(Команда)
Команда1НаСервере();
КонецПроцедуры
как оптимизировать код и не читать 2 раз файл хмл?
|
|