ЗаписьXML в 1с применяется для записи в файл xml.
В «1С:Предприятии» существует базовая подсистема работы с XML-документами. Основой этой подсистемы являются два объекта «1С:Предприятия»:
- ЧтениеXML,
- ЗаписьXML.
При работе с XML-документами данные объекты реализуют модель последовательного доступа. Основная особенность работы в этой модели заключается в том, что документ не загружается полностью, работа идет только с текущим его фрагментом (частью элемента XML, например началом элемента, текстом элемента и т. д.).
ЗаписьXML в 1с
Запись в Xml осуществляется с помощью ЗаписьXML. Процесс записи можно разделить на 3 шага.
- Создаем процедуру на Клиенте.
- Готовим процедуру для открытия файла на Клиенте.
- Делаем Запись в XML на Сервере.
Во-первых создаем процедуру на клиенте:
&НаКлиенте
Процедура Команда1(Команда)
ПутьКФайлу = ПолучитьПутьКФайлу(РежимДиалогаВыбораФайла.Сохранение);
Если ПутьКФайлу = Неопределено Тогда
Сообщить("Файл не выбран");
возврат;
КонецЕсли;
ЗаписьВФайлXML(ПутьКФайлу);
КонецПроцедуры
Во-вторых готовим процедуру для открытия файла. Открытие файла выполняется с помощью Диалога выбора файла.
&НаКлиенте
Функция ПолучитьПутьКФайлу(Режим)
ЗаписьXML = Новый ЗаписьXML;
Диалог = Новый ДиалогВыбораФайла(Режим);
Диалог.Заголовок = "Выбрать";
Диалог.Фильтр = "XML (*.xml)|*.xml";
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
Иначе
возврат Неопределено;
КонецЕсли;
Объект.ИмяФайла=ПутьКФайлу ;
Возврат ПутьКФайлу ;
КонецФункции
В третьих делаем процедуру записи в xml на Сервере.
Процедура ЗаписьВФайлXML(ПутьКФайлу)
Документ = Объект.СсылкаНаДокумент;
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл(ПутьКФайлу, "UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML(); // Записываем объявление XML
ЗаписьXML.ЗаписатьНачалоЭлемента("РасходнаяНакладная");
ЗаписьXML.ЗаписатьАтрибут("Дата",Строка(Документ.Дата));
ЗаписьXML.ЗаписатьАтрибут("Номер",Строка(Документ.Номер));
ЗаписьXML.ЗаписатьАтрибут("СуммаПоДокументу",Строка(Документ.СуммаПоДокументу));
ЗаписьXML.ЗаписатьАтрибут("Склад",Строка(Документ.Склад));
Для каждого СтрокаТЧ из Документ.СписокНоменклатуры цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("СписокНоменклатуры");
ЗаписьXML.ЗаписатьАтрибут("Номенклатура",Строка(СтрокаТЧ.Номенклатура));
ЗаписьXML.ЗаписатьАтрибут("Количество",Строка(СтрокаТЧ.Количество));
ЗаписьXML.ЗаписатьАтрибут("Цена",Строка(СтрокаТЧ.Цена));
ЗаписьXML.ЗаписатьАтрибут("Сумма",Строка(СтрокаТЧ.Сумма));
ЗаписьXML.ЗаписатьКонецЭлемента();
конеццикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Сообщить("Файл успешно записан!");
конецпроцедуры
ЧтениеXML в 1с
Чтение в Xml осуществляется с помощью ЧтениXML. Процесс записи можно разделить на 3 шага.
- Создаем процедуру на Клиенте.
- Готовим процедуру для открытия файла на Клиенте.
- Делаем Чтение в XML на Сервере.
Процедуру открытия файла логично поместить в Общий модуль. Функцию необходимо сделать Экспортной.
&НаКлиенте
Функция ПолучитьПутьКФайлу(Режим) Экспорт
ЗаписьXML = Новый ЗаписьXML;
Диалог = Новый ДиалогВыбораФайла(Режим);
Диалог.Заголовок = "Выбрать";
Диалог.Фильтр = "XML (*.xml)|*.xml";
Диалог.МножественныйВыбор = Ложь;
Если Диалог.Выбрать() Тогда
ПутьКФайлу = Диалог.ПолноеИмяФайла;
Иначе
возврат Неопределено;
КонецЕсли;
Объект.ИмяФайла=ПутьКФайлу ;
Возврат ПутьКФайлу ;
КонецФункции
Первые два этапа будут соответствовать построению ЗаписиXML. Третий этап представлен ниже:
&НаСервере
Процедура Команда1НаСервере(ПутьКФайлу)
//
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ПутьКФайлу);
Документ = Документы.РасходнаяНакладная.СоздатьДокумент();
СписокНоменклатуры = Документ.СписокНоменклатуры;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Имя = "РасходнаяНакладная" Тогда
Документ.Дата = Текущаядата();
Документ.Номер = ЧтениеXML.ЗначениеАтрибута("100");
Документ.Склад = Справочники.Склады.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута("Склад"));
Документ.СуммаПоДокументу=ЧтениеXML.ЗначениеАтрибута("СуммаПоДокументу");
конецесли;
Если ЧтениеXML.Имя = "СписокНоменклатуры" Тогда
НоваяСтрока=СписокНоменклатуры.Добавить();
НоваяСтрока.Номенклатура=Справочники.Номенклатура.НайтиПоНаименованию(ЧтениеXML.ЗначениеАтрибута("Номенклатура"));
НоваяСтрока.Количество=ЧтениеXML.ЗначениеАтрибута("Количество");
НоваяСтрока.Цена=ЧтениеXML.ЗначениеАтрибута("Цена");
НоваяСтрока.Сумма=ЧтениеXML.ЗначениеАтрибута("Сумма");
конецесли;
конецесли;
конеццикла;
Документ.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
В результате нами написаны обработки для записи и чтения файла XML в 1С : Предприятие 8.