Архив метки: xml

Еще один вариант выгрузки остатков товаров из 1С Розница 2.2 в файл XML.

Данную обработку можно использовать как основу для выгрузки списка товаров в интернет магазин. У меня и выгрузка из 1С и загрузка на сайт самописные, потому всё просто и понятно получается.  Обработку можно скачать тут


&НаКлиенте
Процедура КатегорииТовараНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	ПараметрыПодбора = Новый Структура;    
	ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Истина);
	ПараметрыПодбора.Вставить("МножественныйВыбор", Истина);
	ПараметрыПодбора.Вставить("ВыборГруппИЭлементов", ИспользованиеГруппИЭлементов.ГруппыИЭлементы);   
	ОткрытьФорму("Справочник.Номенклатура.ФормаВыбора", ПараметрыПодбора, Элементы.КатегорииТовара);
КонецПроцедуры


 &НаСервере
  Процедура ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение)
     Для Каждого вЗнч Из ВыбранноеЗначение Цикл        
           нстр=объект.КатегорииТовара.Добавить(вЗнч);
     КонецЦикла;
  КонецПроцедуры

&НаКлиенте
Процедура КатегорииТовараОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
	 СтандартнаяОбработка = Ложь;
     ИтоговаяТаблицаОбработкаВыбораНаСервере(ВыбранноеЗначение);
КонецПроцедуры


 &НаСервере
  Процедура ЗаполнитьПриСтартеНаСервере()
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1127       "));
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("00-00001342"));
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1161       "));
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1434       "));
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("1078       "));
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("00-00001392"));
	нстр=объект.КатегорииТовара.Добавить(Справочники.Номенклатура.НайтиПоКоду("00-00001239"));
	объект.Склад=Справочники.Склады.НайтиПоНаименованию("Вологда Торговля");
	объект.ФайлВыгрузки="c:\temp\export.xml";
  КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	// заполняем при старте
	ЗаполнитьПриСтартеНаСервере();
КонецПроцедуры

&НаСервере
Функция СведенияПоНоменклатуре(ЗаписьXML,Номенклатура);
 		Запрос = Новый Запрос;
 		Запрос.Текст = 			
		"ВЫБРАТЬ
		|	НоменклатураДополнительныеРеквизиты.Значение КАК Значение,
		|	НоменклатураДополнительныеРеквизиты.Ссылка.Ссылка КАК Ссылка,
		|	НоменклатураДополнительныеРеквизиты.Свойство.Наименование КАК СвойствоНаименование,
		|	НоменклатураДополнительныеРеквизиты.Свойство.Заголовок КАК СвойствоЗаголовок
		|ИЗ
		|	Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты
		|ГДЕ
		|	НоменклатураДополнительныеРеквизиты.Ссылка = &Ссылка";		
		Запрос.УстановитьПараметр("Ссылка", Номенклатура);
		Результат = Запрос.Выполнить().Выбрать();
		пока  Результат.Следующий() цикл
			ЗаписьXML.ЗаписатьНачалоЭлемента("meaning");
			 ЗаписьXML.ЗаписатьБезОбработки("<name>"+Результат.СвойствоЗаголовок+"</name>"+Символы.ПС);			
			 ЗаписьXML.ЗаписатьБезОбработки("<value>"+Результат.Значение+"</value>"+Символы.ПС);			
			ЗаписьXML.ЗаписатьКонецЭлемента();							
		конеццикла;

	КонецФункции	
	
	
&НаСервере
Функция СведенияПоЦенамНоменклатуры(ЗаписьXML,Номенклатура);
 		Запрос = Новый Запрос;
 		Запрос.Текст = 			
		"ВЫБРАТЬ
		|	ЦеныНоменклатурыСрезПоследних.ВидЦены КАК ВидЦены,
		|	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
		|ИЗ
		|	РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
		|ГДЕ
		|	ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура";		
		Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
		Результат = Запрос.Выполнить().Выбрать();
		пока  Результат.Следующий() цикл
			ЗаписьXML.ЗаписатьНачалоЭлемента("price");
			 ЗаписьXML.ЗаписатьБезОбработки("<type>"+Результат.ВидЦены+"</type>"+Символы.ПС);			
			 ЗаписьXML.ЗаписатьБезОбработки("<cost>"+Формат(Результат.Цена,"ЧГ=")+"</cost>"+Символы.ПС);			
			ЗаписьXML.ЗаписатьКонецЭлемента();							
		конеццикла;

КонецФункции	

&НаСервере
Функция СведенияПоКомплектующим(ЗаписьXML,Номенклатура);
 		Запрос = Новый Запрос;
 		Запрос.Текст = 			
		"ВЫБРАТЬ
		|	КомплектующиеНоменклатуры.Комплектующая.Наименование КАК КомплектующаяНаименование,
		|	КомплектующиеНоменклатуры.Комплектующая.Код КАК КомплектующаяКод
		|ИЗ
		|	РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры
		|ГДЕ
		|	КомплектующиеНоменклатуры.Номенклатура = &Номенклатура";		
		Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
		Результат = Запрос.Выполнить().Выбрать();
		пока  Результат.Следующий() цикл
			ЗаписьXML.ЗаписатьНачалоЭлемента("order");
			 ЗаписьXML.ЗаписатьБезОбработки("<name>"+Результат.КомплектующаяНаименование+"</name>"+Символы.ПС);			
			 ЗаписьXML.ЗаписатьБезОбработки("<code>"+Результат.КомплектующаяКод+"</code>"+Символы.ПС);			
			ЗаписьXML.ЗаписатьКонецЭлемента();							
		конеццикла;

КонецФункции	

&НаСервере
Функция Фотографии(ЗаписьXML,Номенклатура);
	
 Запрос = Новый Запрос;
Запрос.Текст =      
"ВЫБРАТЬ
|   НоменклатураПрисоединенныеФайлы.Ссылка КАК Ссылка,
|   НоменклатураПрисоединенныеФайлы.ПутьКФайлу КАК ПутьКФайлу,
|   НоменклатураПрисоединенныеФайлы.ТипХраненияФайла КАК ТипХраненияФайла,
|   НоменклатураПрисоединенныеФайлы.Том КАК Том,
|   НоменклатураПрисоединенныеФайлы.ФайлХранилище КАК ФайлХранилище
|ИЗ
|   Справочник.НоменклатураПрисоединенныеФайлы КАК НоменклатураПрисоединенныеФайлы
|ГДЕ
|   НоменклатураПрисоединенныеФайлы.ВладелецФайла.Ссылка = &ном"    ;
         
     Запрос.УстановитьПараметр("ном", Номенклатура);                 
     файлы=Запрос.Выполнить().Выбрать();            
     n=0;
     Пока файлы.Следующий() Цикл        
		 ЗаписьXML.ЗаписатьБезОбработки("<name>"+файлы.ПутьКФайлу+"</name>"+Символы.ПС);						 			
     конеццикла;     	
КонецФункции	

	
&НаСервере
	
Функция ЗаменитьСпецСимволы(_стр)
	стр=СтрЗаменить(_стр, "&", "&amp;");
	стр=СтрЗаменить(стр, """", "&quot;"); 
	стр=СтрЗаменить(стр, "<", "&lt;");
	стр=СтрЗаменить(стр, ">", "&gt;");
	стр=СтрЗаменить(стр, "‘", "'");
Возврат стр;

КонецФункции	
&НаСервере
Функция СоздатьXMLНаСервере()
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.ОткрытьФайл(объект.ФайлВыгрузки,"UTF-8");
	ЗаписьXML.ЗаписатьОбъявлениеXML();
		ЗаписьXML.ЗаписатьНачалоЭлемента("export");	
		
		для каждого ГруппаНоменклатуры из объект.КатегорииТовара цикл
 		Запрос = Новый Запрос;
 		Запрос.Текст = 		
			"ВЫБРАТЬ
			|	ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток КАК КоличествоКонечныйОстаток,
			|	ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот КАК КоличествоОборот,
			|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура КАК Номенклатура,
			|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Родитель.Ссылка КАК НоменклатураРодитель,
			|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ПометкаУдаления КАК НоменклатураПометкаУдаления,
			|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Описание КАК НоменклатураОписание,
			|	ТоварыНаСкладахОстаткиИОбороты.Номенклатура.Марка.Наименование КАК НоменклатураМаркаНаименование
			|ИЗ
			|	РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты КАК ТоварыНаСкладахОстаткиИОбороты
			|ГДЕ
			|	ТоварыНаСкладахОстаткиИОбороты.Склад = &Склад
			|	И ТоварыНаСкладахОстаткиИОбороты.Номенклатура В ИЕРАРХИИ(&Номенклатура)
			|	И ТоварыНаСкладахОстаткиИОбороты.КоличествоОборот > 0
			|	И ТоварыНаСкладахОстаткиИОбороты.Номенклатура.ЭтоГруппа = ЛОЖЬ";
			Запрос.УстановитьПараметр("Склад", объект.Склад);
			Запрос.УстановитьПараметр("Номенклатура", Справочники.Номенклатура.НайтиПоНаименованию(ГруппаНоменклатуры));
			Результат = Запрос.Выполнить().Выбрать();  
			
			пока  Результат.Следующий() цикл
				
					ЗаписьXML.ЗаписатьНачалоЭлемента("goods");
					ЗаписьXML.ЗаписатьБезОбработки("<good_cat>"+ГруппаНоменклатуры+"</good_cat>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<good_name>"+Результат.Номенклатура.Наименование+"</good_name>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<good_code>"+Результат.Номенклатура.Код+"</good_code>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<good_art>"+Результат.Номенклатура.Артикул+"</good_art>"+Символы.ПС);
					
					описание=ЗаменитьСпецСимволы(Результат.НоменклатураОписание);
				
					ЗаписьXML.ЗаписатьБезОбработки("<good_comment>"+описание+"</good_comment>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<is_delete>"+Результат.НоменклатураПометкаУдаления+"</is_delete>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<good_parent_name>"+Результат.НоменклатураРодитель.Наименование+"</good_parent_name>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<good_parent_code>"+Результат.НоменклатураРодитель.Код+"</good_parent_code>"+Символы.ПС);
					ЗаписьXML.ЗаписатьБезОбработки("<count>"+Результат.КоличествоКонечныйОстаток+"</count>"+Символы.ПС);
					
						ЗаписьXML.ЗаписатьНачалоЭлемента("prices");
							СведенияПоЦенамНоменклатуры(ЗаписьXML,Результат.Номенклатура);
						ЗаписьXML.ЗаписатьКонецЭлемента();							
					
						ЗаписьXML.ЗаписатьНачалоЭлемента("propety");
							СведенияПоНоменклатуре(ЗаписьXML,Результат.Номенклатура);
						ЗаписьXML.ЗаписатьКонецЭлемента();							
				
						ЗаписьXML.ЗаписатьНачалоЭлемента("soorders");
							СведенияПоКомплектующим(ЗаписьXML,Результат.Номенклатура);
						ЗаписьXML.ЗаписатьКонецЭлемента();							

						ЗаписьXML.ЗаписатьНачалоЭлемента("photos");
							Фотографии(ЗаписьXML,Результат.Номенклатура);
						ЗаписьXML.ЗаписатьКонецЭлемента();							
						
						
					ЗаписьXML.ЗаписатьКонецЭлемента();
			конеццикла;	

		конеццикла;
		
		ЗаписьXML.ЗаписатьКонецЭлемента();
	

	//возврат ЗаписьXML;
КонецФункции


&НаКлиенте
Процедура СоздатьXML(Команда)	
	СоздатьXMLНаСервере();
КонецПроцедуры

Берем погоду у Яндекса в xml формате

Задача: получить погоду на сегодня и на завтра.

Решение: воспользуемся сервисом pogoda.yandex.ru
1. Найдем свой код города по справочнику https://pogoda.yandex.ru/static/cities.xml
2. По ссылке вида http://export.yandex.ru/weather-ng/forecasts/код_города.xml, мы имеем погоду в формате xml. Распарсим её например так:
<?php
 $wz = new SimpleXMLElement($xml);
 $cn=0;
 foreach ($wz->day as $value) {
  $cnt=0;
  foreach ($value->hour as $hr) {
  if (($cnt==2) or ($cnt==12) or ($cnt==18)) {
    $t=$hr->temperature;
    $weather_condition=$hr->weather_condition[«code»];
    echo «$t;$weather_condition</br>»;
   };
   $cnt++;
  };
  $cn++;
  if ($cn==2) {die();};
}
?>

Выгрузка списка контрагентов в XML (1C 8.2)

Достаточно простой код, используя обьект 1С ЗаписьXML:

 Запрос = Новый Запрос;
 Запрос.Текст = 
 "ВЫБРАТЬ
	|	Контрагенты.Наименование как имя,
	|	Контрагенты.НаименованиеПолное как полноеимя,
	|	Контрагенты.Код как код,
	|	Контрагенты.ИНН как инн,
	|	Контрагенты.КПП как кпп,
	|	Контрагенты.Ссылка,
	|	Контрагенты.Покупатель как покупатель,
	|	Контрагенты.Поставщик как поставщик
	|ИЗ
	|	Справочник.Контрагенты КАК Контрагенты";
	
  Результат = Запрос.Выполнить().Выбрать();  
  ЗаписьXML = Новый ЗаписьXML;
  ЗаписьXML.ОткрытьФайл("\\10.80.16.34\Documents\counterpart.xml","UTF-8");
  ЗаписьXML.ЗаписатьОбъявлениеXML();

  ЗаписьXML.ЗаписатьНачалоЭлемента("export");
  пока  Результат.Следующий() цикл
   	 ЗаписьXML.ЗаписатьНачалоЭлемента("counterpart");
	 ЗаписьXML.ЗаписатьБезОбработки("<name>"+Результат.имя+"</name>");
	 ЗаписьXML.ЗаписатьБезОбработки("<fullname>"+Результат.полноеимя+"</fullname>");
	 ЗаписьXML.ЗаписатьБезОбработки("<code>"+Результат.код+"</code>");
	 ЗаписьXML.ЗаписатьБезОбработки("<inn>"+Результат.инн+"</inn>");
	 ЗаписьXML.ЗаписатьБезОбработки("<kpp>"+Результат.кпп+"</kpp>");
	 ЗаписьXML.ЗаписатьБезОбработки("<buyer>"+Результат.покупатель+"</buyer>");
	 ЗаписьXML.ЗаписатьБезОбработки("<supplier>"+Результат.поставщик+"</supplier>");
	 ЗаписьXML.ЗаписатьКонецЭлемента();

  конеццикла;
  ЗаписьXML.ЗаписатьКонецЭлемента();

Простая обработка XML файлов на PHP

Самый простой способ работать с XML в PHP — использовать функцию simplexml_load_file. Функция возвращает значение false в случае ошибки чтения и массив DOM в случае успеха. Не применимо к большим файлам, ибо весь файл в данном случае грузится в память.

Пример файла XML:

<?xml version="1.0" encoding="windows-1251" ?> 
<tables>
<table name="org">
<reqtable name="users">
<fromkey>id</fromkey> 
<tokey>orgid</tokey> 
</reqtable>
<reqtable name="places">
<fromkey>id</fromkey> 
<tokey>orgid</tokey> 
</reqtable>
<reqtable name="equipment">
<fromkey>id</fromkey> 
<tokey>orgid</tokey> 
</reqtable>
</table>
</tables>

Пример файла на PHP — обработчик:

if (file_exists('delete.xml')) {
    $xml = simplexml_load_file('delete.xml');
    var_dump($xml); // вывод структуры "для наглядности"
    echo "<hr>";
        foreach($xml->table as $data)
        {
         echo "Обработка таблицы: $data[name]<br/>";
         foreach($data->reqtable as $rectable)
         {
          echo "- зависимость $rectable[name] (в $rectable[name].$rectable->tokey нет значений $data[name].$rectable->fromkey)<br/>";   
         };
        };
} else {
    exit('Ошибка открытия схемы delete.xml');
}