Найдено результатов: 178
//Имя справочника для примера
ИмяСправочника = "Номенклатура";
/////////////////////////////////////////////////////////////////////////
//Выгрузка
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку();
//записываем объявление xml файла: <?xml version="1.0"?>
Запись.ЗаписатьОбъявлениеXML();
//записываем корневой элемент, по спецификации xml он может быть только один, назовем его "Данные"
Запись.ЗаписатьНачалоЭлемента("Данные");
//для того чтобы пространства имен не объявлялись сериализатором в кажом элементе, пишем их в корневой элемент
//они будут работать на все вложеные элементы
//пространство имен по-умолчанию
Запись.ЗаписатьСоответствиеПространстваИмен("", "http://v8.1c.ru/8.1/data/enterprise/current-config");
//пространства имен остальные префиксы
Запись.ЗаписатьСоответствиеПространстваИмен("xsd", "http://www.w3.org/2001/XMLSchema");
Запись.ЗаписатьСоответствиеПространстваИмен("xsi", "http://www.w3.org/2001/XMLSchema-instance");
//ограничение количества выгружаемых элементов для примера
Кол = 4;
Выборка = Справочники[ИмяСправочника].Выбрать();
Пока Выборка.Следующий() Цикл
//вместо этого кода в боевой реализации выгрузки будет создание ОбъектаXDTO и его сериализация
//через ФабрикуXDTO и загруженные в нее схемы конфигурации приемника
СериализаторXDTO.ЗаписатьXML(Запись, Выборка.ПолучитьОбъект());
//
Кол = Кол - 1;
Если Кол=0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
//записываем конец корневого элемента
Запись.ЗаписатьКонецЭлемента();
//покажем что получилось
Текст = Запись.Закрыть();
Сообщить("Содержимое файла:");
Сообщить(Текст);
//а теперь загрузим это обратно
/////////////////////////////////////////////////////////////////////////
//Загрузка
Сообщить("Данные полученные при загрузке:");
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(Текст);
//прочитаем начало xml файла
Чтение.ПерейтиКСодержимому();
//прочитаем начало корневого элемента
Чтение.Прочитать();
//читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника,
//а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого
Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл
//читаем очередной элемент справочника
Объект = СериализаторXDTO.ПрочитатьXML(Чтение);
//покажем что прочитали, осталось только записать объект
Сообщить(""+ТипЗнч(Объект)+" - "+Объект);
КонецЦикла;
Чтение.Закрыть();
КаталогВрФл = КаталогВременныхФайлов();
ФТПСоединение = Новый FTPСоединение("адрес",, "логин", "пароль",, Истина);
НайдемФайлаНаФТП = ФТПСоединение.НайтиФайлы("/", "*.xml");
Если НайдемФайлаНаФТП.Количество() = 0 Тогда
ФТПСоединение = Неопределено;
Возврат;
КонецЕсли;
ДанныеИзФайлаТовары = Новый ТаблицаЗначений();
ДанныеИзФайлаТовары.Колонки.Добавить("Артикул");
ДанныеИзФайлаТовары.Колонки.Добавить("ИД");
ДанныеИзФайлаТовары.Колонки.Добавить("Производитель");
ДанныеИзФайлаТовары.Колонки.Добавить("Номенклатура");
ДанныеИзФайлаТовары.Колонки.Добавить("Количество");
ДанныеИзФайлаТовары.Колонки.Добавить("Цена");
ДанныеИзФайлаТовары.Колонки.Добавить("Размер");
ДанныеИзФайлаТовары.Колонки.Добавить("Цвет");
ДанныеИзФайлаТовары.Колонки.Добавить("Серия");
ДанныеИзФайлаТовары.Колонки.Добавить("ЦенаСоСкидкой");
ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар");
ЕдиницаИзмШТ = Справочники.УпаковкиЕдиницыИзмерения.НайтиПоКоду("796");
ПриоритетСредний = Справочники.Приоритеты.НайтиПоНаименованию("Средний");
СкладОсновной = Справочники.Склады.НайтиПоНаименованию("Основной склад");
ТиповоеСоглашение = Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("Основное");
ВалютаДок = Константы.ВалютаРегламентированногоУчета.Получить();
Для каждого ФайлФТП из НайдемФайлаНаФТП Цикл
ДанныеИзФайлаТовары.Очистить();
НомерКП = ФайлФТП.ИмяБезРасширения;
ДатаКП = "";
ПутьКФайлуОбъект = КаталогВрФл + ФайлФТП.Имя;
Попытка
ФТПСоединение.Получить(ФайлФТП.ПолноеИмя, ПутьКФайлуОбъект);
ФТПСоединение.Переместить(ФайлФТП.ПолноеИмя, "OldFiles" + "\" + ФайлФТП.Имя);
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлуОбъект);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда Продолжить; КонецЕсли;
ИмяУзла = ЧтениеXML.ЛокальноеИмя;
Если ИмяУзла = "PRODUCT" Тогда
НоваяСтрока = ДанныеИзФайлаТовары.Добавить();
Продолжить;
КонецЕсли;
Если ИмяУзла = "ID" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.ИД = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "ARTICLE" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Артикул = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "SIZE" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Размер = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "COLOR" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Цвет = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "NAME" И ЧтениеXML.КонтекстПространствИмен.Глубина = 5 Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Серия = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "PROPERTY_PROVIDER_NAME" И ЧтениеXML.КонтекстПространствИмен.Глубина = 5 Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Производитель = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "NAME" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Номенклатура = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "QUANTITY" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Количество = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "PRICE" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.Цена = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "PRICE_DISCOUNT" Тогда
ЧтениеXML.Прочитать();
НоваяСтрока.ЦенаСоСкидкой = СокрЛП(ЧтениеXML.Значение);
Продолжить;
КонецЕсли;
Если ИмяУзла = "DATE" Тогда
ЧтениеXML.Прочитать();
ДатаСтр = СокрЛП(ЧтениеXML.Значение);
ДатаКП = Дата(ДатаСтр);
Продолжить;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
УдалитьФайлы(ПутьКФайлуОбъект);
Процедура ВыгрузитьСкладыНажатие(Элемент) //выгрузка склады
ЗаписьXML = Новый ЗаписьXML;
ПутьКФайлу = КаталогВременныхФайлов()+ "Склады.xml";
ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8"); //Открываем файл для записи, указываем кодировку
ЗаписьXML.ЗаписатьОбъявлениеXML(); // Записываем объявление XML
ЗаписьXML.ЗаписатьНачалоЭлемента("Склады"); // Начало элемента
Выборка = Справочники.Склады.ВыбратьИерархически();
Пока Выборка.Следующий() Цикл // Начинаем выгружать
если Выборка.ЭтоГруппа = Истина тогда
Если Выборка.УровеньВВыборке() = 0 Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("Склад"); // Начало элемента Склад
ЗаписьXML.ЗаписатьАтрибут("Код", Строка(Выборка.Код));
ЗаписьXML.ЗаписатьАтрибут("Наименование", Строка(Выборка.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Родитель", Строка(Выборка.Родитель));
ЗаписьXML.ЗаписатьКонецЭлемента();
Иначеесли Выборка.УровеньВВыборке() = 1 Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("Склад1");
ЗаписьXML.ЗаписатьАтрибут("Код1", Строка(Выборка.Код));
ЗаписьXML.ЗаписатьАтрибут("Наименование1", Строка(Выборка.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Родитель1", Строка(Выборка.Родитель));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
иначеесли Выборка.ЭтоГруппа = Ложь тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("Склад2");
ЗаписьXML.ЗаписатьАтрибут("Код2", Строка(Выборка.Код));
ЗаписьXML.ЗаписатьАтрибут("Наименование2", Строка(Выборка.Наименование));
ЗаписьXML.ЗаписатьАтрибут("Родитель2", Строка(Выборка.Родитель));
ЗаписьXML.ЗаписатьАтрибут("Подразделение2", Строка(Выборка.Подразделение));
ЗаписьXML.ЗаписатьАтрибут("ВидСклада2", Строка(Выборка.ВидСклада));
ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента Организация
КонецЕсли;
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента(); // Конец элемента
ЗаписьXML.Закрыть();
КонецПроцедуры
// Преобразует текст формата XML в таблицу значений,
// при этом колонки таблицы формируются на основе описания в XML.
//
// Параметры:
// ТекстXML - текст в формате XML.
//
// Схема XML:
//<?xml version="1.0" encoding="utf-8"?>
//<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
// <xs:element name="Items">
// <xs:complexType>
// <xs:sequence>
// <xs:element maxOccurs="unbounded" name="Item">
// <xs:complexType>
// <xs:attribute name="Code" type="xs:integer" use="required" />
// <xs:attribute name="Name" type="xs:string" use="required" />
// <xs:attribute name="Socr" type="xs:string" use="required" />
// <xs:attribute name="Index" type="xs:string" use="required" />
// </xs:complexType>
// </xs:element>
// </xs:sequence>
// <xs:attribute name="Description" type="xs:string" use="required" />
// <xs:attribute name="Columns" type="xs:string" use="required" />
// </xs:complexType>
// </xs:element>
//</xs:schema>
//
// Примеры XML-файлов см. в демонстрационной конфигурации.
//
// Пример использования:
// КлассификаторТаблица = ПрочитатьXMLВТаблицу(РегистрыСведений.АдресныйКлассификатор.
// ПолучитьМакет("КлассификаторАдресныхОбъектовРоссии").ПолучитьТекст());
//
// Возвращаемое значение:
// ТаблицаЗначений.
//
Функция ПрочитатьXMLВТаблицу(ТекстXML) Экспорт
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(ТекстXML);
// Прочитаем первый узел и проверим его
Если Не Чтение.Прочитать() Тогда
ВызватьИсключение("Пустой XML");
ИначеЕсли Чтение.Имя <> "Items" Тогда
ВызватьИсключение("Ошибка в структуре XML");
КонецЕсли;
// Получим описание таблицы и создадим ее
ИмяТаблицы = Чтение.ПолучитьАтрибут("Description");
ИменаКолонок = СтрЗаменить(Чтение.ПолучитьАтрибут("Columns"), ",", Символы.ПС);
Колонок = СтрЧислоСтрок(ИменаКолонок);
ТаблицаЗначений = Новый ТаблицаЗначений;
Для Сч = 1 По Колонок Цикл
ТаблицаЗначений.Колонки.Добавить(СтрПолучитьСтроку(ИменаКолонок, Сч), Новый ОписаниеТипов("Строка"));
КонецЦикла;
// Заполним значения в таблице
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла <> ТипУзлаXML.НачалоЭлемента Тогда
Продолжить;
ИначеЕсли Чтение.Имя <> "Item" Тогда
ВызватьИсключение("Ошибка в структуре XML");
КонецЕсли;
новСтр = ТаблицаЗначений.Добавить();
Для Сч = 1 По Колонок Цикл
ИмяКолонки = СтрПолучитьСтроку(ИменаКолонок, Сч);
новСтр[Сч-1] = Чтение.ПолучитьАтрибут(ИмяКолонки);
КонецЦикла;
КонецЦикла;
// Заполним результат
Результат = Новый Структура;
Результат.Вставить("ИмяТаблицы", ИмяТаблицы);
Результат.Вставить("Данные", ТаблицаЗначений);
Возврат Результат;
КонецФункции // ПрочитатьXMLВТаблицу()
ДанныеНакладной = Новый ТаблицаЗначений();
ДанныеНакладной.Колонки.Добавить("НоменклатураАртикул");
ДанныеНакладной.Колонки.Добавить("Количество");
ДанныеНакладной.Колонки.Добавить("Цена");
Для Каждого Стр Из Товары Цикл
Если Стр.Номенклатура.Артикул = "" Тогда
Сообщить ("Внимание! В номенклатуре " + Стр.Номенклатура + " не определен артикул.");
Иначе
СтрокаТЗ = ДанныеНакладной.Добавить();
СтрокаТЗ.НоменклатураАртикул = Стр.Номенклатура.Артикул;
СтрокаТЗ.Количество = Стр.Количество;
СтрокаТЗ.Цена = Стр.Цена;
КонецЕсли;
КонецЦикла;
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
XML = Новый ЗаписьXML;
ИмяФайла = "" + КРВ_ВспомогательныеФункции.УбратьНули(Номер)
+ " - " + КРВ_ВспомогательныеФункции.УбратьНедопустимыеСимволы(Контрагент);
XML.ОткрытьФайл("d:\1C_DATA\ОБМЕН\" + ИмяФайла + ".xml");
Сериализатор.ЗаписатьXML(XML, ДанныеНакладной);
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Фильтр = "Текст(*.XML)|*.XML";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
ДиалогОткрытияФайла.Заголовок = "Выберите файл для загрузки";
Если ДиалогОткрытияФайла.Выбрать() Тогда
ПутьКФайлу = ДиалогОткрытияФайла.ПолноеИмяФайла;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO);
ТЗ = Сериализатор.ПрочитатьXML(ЧтениеXML,Тип("ТаблицаЗначений"));
ЧтениеXML.Закрыть();
КонецЕсли;
ЭтотОбъект.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТЗ[0].КонтрагентИНН);
ЭтотОбъект.КРВ_IDМенеджер = ТЗ[0].IDМенеджер;
ЭтотОбъект.КРВ_НомерЗаказаУНФ = ТЗ[0].Номер;
ЭтотОбъект.Склад = Справочники.Склады.НайтиПоНаименованию(ТЗ[0].Склад);
Для каждого СтрокаТЗ Из ТЗ Цикл
КонецЦикла;
функция читаемХМЛ2014(путь,атр) экспорт
х = новый массив;
y = новый массив;
мДОМ = новый ПостроительDOM;
заявка = новый таблицаЗначений;
заявка.Колонки.Добавить("номерДок");
заявка.Колонки.Добавить("клиент");
заявка.Колонки.Добавить("адрес");
заявка.Колонки.Добавить("товар");
заявка.Колонки.Добавить("кодТовара");
заявка.Колонки.Добавить("количество");
заявка.Колонки.Добавить("цена");
заявка.Колонки.Добавить("сумма");
чтение = Новый ЧтениеXML ;
чтение.ОткрытьФайл(сокрЛП(путь));
мДокументДОМ = мДОМ.Прочитать(чтение);
чтение.Закрыть();
номерДок = "";
клиент = "";
адрес = "";
_documents = мДокументДОМ.ПолучитьЭлементыПоИмени("documents");
для каждого а1 из _documents цикл
_preorder = а1.ПолучитьЭлементыПоИмени("preorder");
для каждого а2 из _preorder цикл
_ттн = а2.дочерниеУзлы;
для каждого а21 из _ттн цикл
если (а21.имяУзла = "innercode") тогда
номерДок =а21.ТекстовоеСодержимое;
конецЕсли;
если (а21.имяУзла = "buypointjuridicalname") тогда
клиент = а21.ТекстовоеСодержимое;
конецЕсли;
если (а21.имяУзла = "buypointaddress") тогда
адрес = а21.ТекстовоеСодержимое;
конецЕсли;
конецЦикла;
_item = а2.ПолучитьЭлементыПоИмени("item");
для каждого а3 из _item цикл
_товар = а3.ДочерниеУзлы;
хх = заявка.Добавить();
хх.номерДок = номерДок;
хх.клиент = клиент;
хх.адрес = адрес;
для каждого а4 из _товар цикл
если (а4.имяУзла = "SKUname") тогда
хх.товар = а4.ТекстовоеСодержимое;
конецЕсли;
если (а4.имяУзла = "SKUcode")тогда
хх.кодТовара = а4.ТекстовоеСодержимое;
конецЕсли;
если (а4.имяУзла = "quantity")тогда
хх.количество = а4.ТекстовоеСодержимое;
конецЕсли;
если (а4.имяУзла = "priceDiscount") тогда
хх.цена = а4.ТекстовоеСодержимое;
конецЕсли;
если (а4.имяУзла = "amount") тогда
хх.сумма = а4.ТекстовоеСодержимое;
конецЕсли;
конецЦикла;
конецЦикла;
конецЦикла;
конецЦикла;
//мРазыменовательПИ = мДокументДОМ.СоздатьРазыменовательПИ(мДокументДОМ);
//мЗапрос = "/documents/preorders/preorder/body/item/*";
//мХПуть = мДокументДОМ.СоздатьВыражениеXPath(мЗапрос,мРазыменовательПИ);
//мРезультат = мХПуть.Вычислить(мДокументДОМ);
//мРодитель = мРезультат.ПолучитьСледующий();
//пока мРодитель <> неопределено цикл
// //если мРодитель.ИмяЭлемента = "body" тогда
// //
// //
// // сообщить("");
// // мРодитель=мРезультат.ПолучитьСледующий();
// // продолжить;
// //конецЕсли;
// х.Добавить( мРодитель.ИмяЭлемента+" "+мРодитель.ТекстовоеСодержимое);
// сообщить(мРодитель.ИмяЭлемента+" "+мРодитель.ТекстовоеСодержимое);
// мРодитель=мРезультат.ПолучитьСледующий();
//конецЦикла;
возврат заявка;
конецФункции //функция читаемХМЛ2014(путь)
Процедура ЛюбаяСЗапросом()
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьП, "UTF-8"); //Открываем файл для записи, указываем кодировку
ЗаписьXML.ЗаписатьОбъявлениеXML(); // Записываем объявление XML
ЗаписьXML.ЗаписатьНачалоЭлемента("ОстаткиТоваров"); // Начало элемента
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладах.Период КАК Период,
| ТоварыНаСкладах.Регистратор КАК Регистратор,
| ТоварыНаСкладах.Номенклатура КАК Номенклатура,
| ТоварыНаСкладах.Количество КАК Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
|ГДЕ
| ТоварыНаСкладах.Период МЕЖДУ &НачПериод И &КонПериод
| И ТоварыНаСкладах.Номенклатура В ИЕРАРХИИ(&Номенклатура)
|ИТОГИ ПО
| Регистратор";
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ОбойтиУровеньДерева(Дерево.Строки, ЗаписьXML); //вызов процедуры
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
КонецПроцедуры
Процедура ОбойтиУровеньДерева(Строки, Запись) // процедура для записи результата запроса с сохранением иерархии в текущий документ xml
Для каждого Строка из Строки Цикл
Если ПустаяСтрока(Строка(Строка.Номенклатура)) Тогда //Итог в запросе по "Регистратору"
Запись.ЗаписатьНачалоЭлемента("Уровень");
Запись.ЗаписатьАтрибут("Период", Строка(Строка.Период));
Запись.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
Запись.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
ОбойтиУровеньДерева(Строка.Строки, Запись);
Запись.ЗаписатьКонецЭлемента();
Иначе
Запись.ЗаписатьНачалоЭлемента("Уровни");
Запись.ЗаписатьАтрибут("Период", Строка(Строка.Период));
Запись.ЗаписатьАтрибут("Регистратор", Строка(Строка.Регистратор));
Запись.ЗаписатьАтрибут("Номенклатура", Строка(Строка.Номенклатура));
Запись.ЗаписатьАтрибут("Количество", Строка(Строка.Количество));
ОбойтиУровеньДерева(Строка.Строки, Запись);
Запись.ЗаписатьКонецЭлемента();
КонецЕсли
КонецЦикла;
КонецПроцедуры
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ИмяФайлаНаСервере);
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Цикл
Если ЧтениеXML.Имя = "Товар" Тогда // Считываем номенклатуру в XDTO
ДанныеТовараXML = ФабрикаXDTO.ПрочитатьXML(ЧтениеXML);
НоменклатураОбъект = Справочники.Номенклатура.СоздатьОбъект();
// Заполняем реквизиты номенклатруы данными объекта XDTO
НоменклатураОбъект.Записать();
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Создана:" + НоменклатураОбъект.Наименование;
Сообщение.Сообщить();
Иначе
ЧтениеXML.Прочитать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЧтениеXML.Закрыть();
&НаСервере
Процедура КомандаВыполнитьНаСервере()
ИмяФайла = "d:\test.xml";
Запрос = Новый Запрос("ВЫБРАТЬ
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.ЭтоГруппа = ЛОЖЬ");
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ИмяФайла,"UTF-8");
ВыборкаРезультата = Запрос.Выполнить().Выгрузить();
ЗаписьXML.ЗаписатьНачалоЭлемента("Номенклатура");
Для каждого Выборка Из ВыборкаРезультата Цикл
ЗаписатьXML(ЗаписьXML, Выборка.Номенклатура.ПолучитьОбъект());
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.Закрыть();
КонецПроцедуры
// Выполняет преобразование (десериализацию) XML-строки в значение.
// См. также ЗначениеВСтрокуXML.
//
// Параметры:
// СтрокаXML - Строка - XML-строка, с сериализованным объектом..
//
// Возвращаемое значение:
// Произвольный - значение, полученное из переданной XML-строки.
//
Функция ЗначениеИзСтрокиXML(СтрокаXML) Экспорт
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(СтрокаXML);
Возврат СериализаторXDTO.ПрочитатьXML(ЧтениеXML);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Возвращает XML представление типа XDTO.
//
// Параметры:
// ТипXDTO - ТипОбъектаXDTO, ТипЗначенияXDTO - тип XDTO для которого требуется получить.
// XML представление.
//
// Возвращаемое значение:
// Строка - XML представление типа XDTO.
//
Функция ПредставлениеТипаXDTO(ТипXDTO) Экспорт
Возврат СериализаторXDTO.XMLСтрока(Новый РасширенноеИмяXML(ТипXDTO.URIПространстваИмен, ТипXDTO.Имя))
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Преобразует (сериализует) любое значение в XML-строку.
// Преобразованы в могут быть только те объекты, для которых в синтакс-помощнике указано, что они сериализуются.
// См. также ЗначениеИзСтрокиXML.
//
// Параметры:
// Значение - Произвольный - значение, которое необходимо сериализовать в XML-строку.
//
// Возвращаемое значение:
// Строка - XML-строка.
//
Функция ЗначениеВСтрокуXML(Значение) Экспорт
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
СериализаторXDTO.ЗаписатьXML(ЗаписьXML, Значение, НазначениеТипаXML.Явное);
Возврат ЗаписьXML.Закрыть();
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Возвращает XML-представление XDTO-объекта.
//
// Параметры:
// ОбъектXDTO - ОбъектXDTO - объект, для которого требуется сформировать XML-представление.
// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XML-представление.
// Если параметр не указан - будет использоваться глобальная фабрика XDTO.
//
// Возвращаемое значение:
// Строка - XML-представление XDTO-объекта.
//
Функция ОбъектXDTOВСтрокуXML(Знач ОбъектXDTO, Знач Фабрика = Неопределено) Экспорт
ОбъектXDTO.Проверить();
Если Фабрика = Неопределено Тогда
Фабрика = ФабрикаXDTO;
КонецЕсли;
Запись = Новый ЗаписьXML();
Запись.УстановитьСтроку();
Фабрика.ЗаписатьXML(Запись, ОбъектXDTO, , , , НазначениеТипаXML.Явное);
Возврат Запись.Закрыть();
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Удаляет недопустимые символы в XML-строке.
//
// Параметры:
// Текст - Строка - строка, в которой требуется удалить недопустимые символы.
//
// Возвращаемое значение:
// Строка - Строка, полученная при удалении недопустимых символов в XML-строке.
//
Функция УдалитьНедопустимыеСимволыXML(Знач Текст) Экспорт
Возврат ЗаменитьНедопустимыеСимволыXML(Текст, "");
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Преобразует все входящие форматы контактной информации в XML.
//
// Параметры:
// ЗначенияПолей - Строка, Структура, Соответствие, СписокЗначений - описание полей контактной информации.
// XML должен соответствовать XDTO-пакету КонтактнаяИнформация или Адрес.
// Структура, Соответствие, СписокЗначений должен содержать поля в соответствии со структурой
// XDTO пакетов КонтактнаяИнформация или Адрес(для конфигурации с поддержкой специфики РФ).
// Представление - Строка - Представление контактной информации. Используется, если невозможно определить
// представление из параметра ЗначенияПолей (например, отсутствует поле Представление).
// ОжидаемыйВид - СправочникСсылка.ВидыКонтактнойИнформации, ПеречислениеСсылка.ТипыКонтактнойИнформации -
// Используется для определения типа, если его невозможно вычислить по полю ЗначенияПолей.
//
// Возвращаемое значение:
// Строка - Контактная информация в виде XML, соответствующего структуре XDTO пакетов КонтактнаяИнформация и Адрес.
//
Функция КонтактнаяИнформацияВXML(Знач ЗначенияПолей, Знач Представление = "", Знач ОжидаемыйВид = Неопределено) Экспорт
Результат = УправлениеКонтактнойИнформациейСлужебный.ПривестиКонтактнуюИнформациюXML(Новый Структура(
"ЗначенияПолей, Представление, ВидКонтактнойИнформации",
ЗначенияПолей, Представление, ОжидаемыйВид));
Возврат Результат.ДанныеXML;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Формирует XDTO-объект по XML-представлению.
//
// Параметры:
// СтрокаXML - Строка - XML-представление XDTO-объекта,
// Фабрика - ФабрикаXDTO - фабрика, с использованием которой требуется формировать XDTO-объект.
// Если параметр не указан - будет использоваться глобальная фабрика XDTO.
//
// Возвращаемое значение:
// ОбъектXDTO - XDTO-объект.
//
Функция ОбъектXDTOИзСтрокиXML(Знач СтрокаXML, Знач Фабрика = Неопределено) Экспорт
Если Фабрика = Неопределено Тогда
Фабрика = ФабрикаXDTO;
КонецЕсли;
Чтение = Новый ЧтениеXML();
Чтение.УстановитьСтроку(СтрокаXML);
Возврат Фабрика.ПрочитатьXML(Чтение);
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Преобразует контактную информацию XDTO в XML.
//
// Параметры:
// ОбъектXDTOИнформации - ОбъектXDTO - контактная информация.
//
// Возвращаемое значение:
// Строка - результат преобразования в формате XML.
//
Функция КонтактнаяИнформацияXDTOВXML(ОбъектXDTOИнформации) Экспорт
Запись = Новый ЗаписьXML;
Запись.УстановитьСтроку(Новый ПараметрыЗаписиXML(, , Ложь, Ложь, ""));
Если ОбъектXDTOИнформации <> Неопределено Тогда
ФабрикаXDTO.ЗаписатьXML(Запись, ОбъектXDTOИнформации);
КонецЕсли;
Результат = СтрЗаменить(Запись.Закрыть(), Символы.ПС, " ");
Результат = СтрЗаменить(Результат, "<ВнутригРайон/>", "");// Совместимость с КЛАДР
Если Метаданные.ОбщиеМодули.Найти("РаботаСАдресами") <> Неопределено Тогда
МодульРаботаСАдресами = ОбщегоНазначения.ОбщийМодуль("РаботаСАдресами");
Результат = МодульРаботаСАдресами.ПередЗаписьюXDTOКонтактнаяИнформация(Результат);
КонецЕсли;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Находит в XML содержимое находящееся в теге.
//
// Параметры:
// Текст - Строка - текст XML, в котором выполняется поиск.
// ИмяТега - Строка - тег, содержимое которого необходимо найти.
// ВключатьОткрывающийЗакрывающийТег - Булево - признак необходимости найденного тегом,
// по которому выполнялся поиск, по умолчанию Ложь.
// НомерПоПорядку - Число - позиция, с которой начинается поиск, по умолчанию 1.
//
// Возвращаемое значение:
// Строка - строка, из которой удалены символы перевода строки и возврата каретки.
//
Функция НайтиВXML(Текст, ИмяТега, ВключатьОткрывающийЗакрывающийТег = Ложь, НомерПоПорядку = 1) Экспорт
Результат = Неопределено;
Начало = "<" + ИмяТега;
Окончание = "</" + ИмяТега + ">";
Содержимое = Сред(
Текст,
СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку),
СтрНайти(Текст, Окончание, НаправлениеПоиска.СНачала, 1, НомерПоПорядку) + СтрДлина(Окончание) - СтрНайти(Текст, Начало, НаправлениеПоиска.СНачала, 1, НомерПоПорядку));
Если ВключатьОткрывающийЗакрывающийТег Тогда
Результат = СокрЛП(Содержимое);
Иначе
ОткрывающийТег = Лев(Содержимое, СтрНайти(Содержимое, ">"));
Содержимое = СтрЗаменить(Содержимое, ОткрывающийТег, "");
ЗакрывающийТег = Прав(Содержимое, СтрДлина(Содержимое) - СтрНайти(Содержимое, "<", НаправлениеПоиска.СКонца) + 1);
Содержимое = СтрЗаменить(Содержимое, ЗакрывающийТег, "");
Результат = СокрЛП(Содержимое);
КонецЕсли;
Возврат Результат;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////