Записки программиста 1с

ЗаписьXML в 1с

ЗаписьXML в 1с применяется для записи в файл xml.

В «1С:Предприятии» существует базовая подсистема работы с XML-документами. Основой этой подсистемы являются два объекта «1С:Предприятия»:

  • ЧтениеXML,
  • ЗаписьXML.

При работе с XML-документами данные объекты реализуют модель последовательного доступа. Основная особенность работы в этой модели заключается в том, что документ не загружается полностью, работа идет только с текущим его фрагментом (частью элемента XML, например началом элемента, текстом элемента и т. д.).

ЗаписьXML в 1с

Запись в Xml осуществляется с помощью ЗаписьXML. Процесс записи можно разделить на 3 шага.

  1. Создаем процедуру на Клиенте.
  2. Готовим процедуру для открытия файла на Клиенте.
  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.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *