понедельник, 19 декабря 2011 г.

Загрузка из xml в Штрих-М: Торговое предприятие, редакция 5.1

Leave a Comment


Рабочий пример загрузки следующей структуры xml в Штрих-М: Торговое предприятие, редакция 5.1

XML
---------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<КорневойУзел>
  <Накладная номерИд="1" дата="2011.12.19 11.33.53">
<Отправитель>1</Отправитель>
<Получатель>3</Получатель>
        <Товар>
 <ШК>2100100002077</ШК>
 <Количество>1</Количество>
        </Товар>
        <Товар>
<ШК>2100100072094</ШК>
<Количество>1</Количество>
        </Товар>
  </Накладная>
  <Накладная номерИд="2" дата="2011.12.05 11.33.53">
<Отправитель>1</Отправитель>
<Получатель>3</Получатель>
        <Товар>
<ШК>2100100002077</ШК>
<Количество>1</Количество>
        </Товар>
        <Товар>
<ШК>2100100072094</ШК>
<Количество>1</Количество>
        </Товар>
  </Накладная>
</КорневойУзел>

1c8.1
---------------------------------
Функция ПреобразоватьДату (Дата)
Стр = СтрЗаменить(Дата, ".", "");
Возврат Дата(СтрЗаменить(Стр, " ", ""));
КонецФункции

Процедура КнопкаВыполнитьНажатие(Кнопка)
Счетчик = 0;
ПредедущаяЗапись = Неопределено;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("c:/Обмен/Для сайта/export_orders.xml");
// Документ
ТЗД = Новый ТаблицаЗначений;
ТЗД.Колонки.Добавить("Дата");
ТЗД.Колонки.Добавить("номерИд");
    ТЗД.Колонки.Добавить("Отправитель");
ТЗД.Колонки.Добавить("Получатель");
// Табличная часть
    ТЗТ = Новый ТаблицаЗначений;
ТЗТ.Колонки.Добавить("номерИд");
    ТЗТ.Колонки.Добавить("ШК");
ТЗТ.Колонки.Добавить("Количество"); 

Пока ЧтениеXML.Прочитать() Цикл
     Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 
//Сообщить(ЧтениеXML.Имя); 
Если ЧтениеXML.Имя="Накладная" Тогда
Счетчик = Счетчик + 1;
НоваяСтрокаТЗД = ТЗД.Добавить();  
//Сообщить(ПреобразоватьДату(ЧтениеXML.ПолучитьАтрибут("дата")));
НоваяСтрокаТЗД.Дата = ПреобразоватьДату(ЧтениеXML.ПолучитьАтрибут("дата"));
НоваяСтрокаТЗД.номерИд = ЧтениеXML.ПолучитьАтрибут("номерИд");
НоваяСтрокаТЗТ = ТЗТ.Добавить();
НоваяСтрокаТЗТ.номерИд = ЧтениеXML.ПолучитьАтрибут("номерИд");
ИначеЕсли ЧтениеXML.Имя="Отправитель" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗД.Отправитель = ЧтениеXML.Значение; 
ИначеЕсли ЧтениеXML.Имя="Получатель" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗД.Получатель = ЧтениеXML.Значение; 
   ИначеЕсли ЧтениеXML.Имя="ШК" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗТ.ШК = ЧтениеXML.Значение; 
ИначеЕсли ЧтениеXML.Имя="Количество" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗТ.Количество = ЧтениеXML.Значение; 
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
Для Каждого Док Из ТЗД Цикл 
Документ = Документы.Перемещение.СоздатьДокумент();
ЗаполнениеШапкиДокумента(Документ, ДеревоНастроекПользователя, Истина);
//Документ.ТорговыйОбъект = Справочники.ТорговыеОбъекты.НайтиПоКоду("00001");
//Документ.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
Форма = Документ.ПолучитьФорму("ФормаДокумента");
Форма.ЭтаФорма.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
Форма.ЭтаФорма.ТорговыйОбъект = Справочники.ТорговыеОбъекты.НайтиПоКоду("00001");
Форма.Дата = Док.Дата;
Форма.ФирмаОтправитель = Справочники.Фирмы.НайтиПоКоду("0000001");
Отправитель = "ОС0000" + Док.Отправитель;
Форма.ЭлементыФормы.СкладОтправитель.Значение = Справочники.Склады.НайтиПоКоду(Отправитель);
Форма.ФирмаПолучатель  = Справочники.Фирмы.НайтиПоКоду("0000001");
Получатель = "ОС0000" + Док.Получатель;
Форма.ЭлементыФормы.СкладПолучатель.Значение = Справочники.Склады.НайтиПоКоду(Получатель);
//Форма.ЭлементыФормы.ПереместитьПоЦенамСкладаПолучателя.Значение = Истина;
Для Каждого Товар Из ТЗТ Цикл 
Если Док.номерИд = Товар.номерИд Тогда 
ШК = Справочники.ШтрихКоды.НайтиПоНаименованию(Товар.ШК);
Номенклатура = ШК.ХарактеристикаНоменклатуры.Владелец;
НоваяСтрока = Форма.ЭтаФорма.Товары.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = ШК.ХарактеристикаНоменклатуры;
НоваяСтрока.Единица    = ШК.Единица;
НоваяСтрока.Коэффициент = ШК.Единица.Коэффициент;
НоваяСтрока.Количество = Товар.Количество;
КонецЕсли;
КонецЦикла;
Форма.ОбновитьТабличнуюЧастьДокумента(Истина, Ложь, Ложь);
Форма.ЭтаФорма.Записать();
КонецЦикла;
КонецПроцедуры

Процедура ПриОткрытии()
Счетчик = 0;
ПредедущаяЗапись = Неопределено;
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл("c:/Обмен/Для сайта/export_orders.xml");
// Документ
ТЗД = Новый ТаблицаЗначений;
ТЗД.Колонки.Добавить("Дата");
ТЗД.Колонки.Добавить("номерИд");
    ТЗД.Колонки.Добавить("Отправитель");
ТЗД.Колонки.Добавить("Получатель");
// Табличная часть
    ТЗТ = Новый ТаблицаЗначений;
ТЗТ.Колонки.Добавить("номерИд");
    ТЗТ.Колонки.Добавить("ШК");
ТЗТ.Колонки.Добавить("Количество"); 

Пока ЧтениеXML.Прочитать() Цикл
     Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда 
//Сообщить(ЧтениеXML.Имя); 
Если ЧтениеXML.Имя="Накладная" Тогда
Счетчик = Счетчик + 1;
НоваяСтрокаТЗД = ТЗД.Добавить();  
//Сообщить(ПреобразоватьДату(ЧтениеXML.ПолучитьАтрибут("дата")));
НоваяСтрокаТЗД.Дата = ПреобразоватьДату(ЧтениеXML.ПолучитьАтрибут("дата"));
НоваяСтрокаТЗД.номерИд = ЧтениеXML.ПолучитьАтрибут("номерИд");
НоваяСтрокаТЗТ = ТЗТ.Добавить();
НоваяСтрокаТЗТ.номерИд = ЧтениеXML.ПолучитьАтрибут("номерИд");
ИначеЕсли ЧтениеXML.Имя="Отправитель" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗД.Отправитель = ЧтениеXML.Значение; 
ИначеЕсли ЧтениеXML.Имя="Получатель" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗД.Получатель = ЧтениеXML.Значение; 
   ИначеЕсли ЧтениеXML.Имя="ШК" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗТ.ШК = ЧтениеXML.Значение; 
ИначеЕсли ЧтениеXML.Имя="Количество" Тогда 
ЧтениеXML.Прочитать();
//Сообщить(ЧтениеXML.Значение);
НоваяСтрокаТЗТ.Количество = ЧтениеXML.Значение; 
        КонецЕсли;
    КонецЕсли;
КонецЦикла;
Для Каждого Док Из ТЗД Цикл 
Документ = Документы.Перемещение.СоздатьДокумент();
ЗаполнениеШапкиДокумента(Документ, ДеревоНастроекПользователя, Истина);
//Документ.ТорговыйОбъект = Справочники.ТорговыеОбъекты.НайтиПоКоду("00001");
//Документ.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
Форма = Документ.ПолучитьФорму("ФормаДокумента");
Форма.ЭтаФорма.Валюта = Константы.ВалютаУправленческогоУчета.Получить();
Форма.ЭтаФорма.ТорговыйОбъект = Справочники.ТорговыеОбъекты.НайтиПоКоду("00001");
Форма.Дата = Док.Дата;
Форма.ФирмаОтправитель = Справочники.Фирмы.НайтиПоКоду("0000001");
ККМОтправитель = Справочники.ККМ.НайтиПоРеквизиту("ЛогическийНомер", Число(Док.Отправитель));
//Отправитель = "ОС0000" + Док.Отправитель;
Форма.ЭлементыФормы.СкладОтправитель.Значение = Справочники.Склады.НайтиПоНаименованию(ККМОтправитель);
Форма.ФирмаПолучатель  = Справочники.Фирмы.НайтиПоКоду("0000001");
ККМПолучатель = Справочники.ККМ.НайтиПоРеквизиту("ЛогическийНомер", Число(Док.Получатель));
//Получатель = "ОС0000" + Док.Получатель;
Форма.ЭлементыФормы.СкладПолучатель.Значение = Справочники.Склады.НайтиПоНаименованию(ККМПолучатель);
//Форма.ЭлементыФормы.ПереместитьПоЦенамСкладаПолучателя.Значение = Истина;
Для Каждого Товар Из ТЗТ Цикл 
Если Док.номерИд = Товар.номерИд Тогда 
ШК = Справочники.ШтрихКоды.НайтиПоНаименованию(Товар.ШК);
Номенклатура = ШК.ХарактеристикаНоменклатуры.Владелец;
НоваяСтрока = Форма.ЭтаФорма.Товары.Добавить();
НоваяСтрока.Номенклатура = Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = ШК.ХарактеристикаНоменклатуры;
НоваяСтрока.Единица    = ШК.Единица;
НоваяСтрока.Коэффициент = ШК.Единица.Коэффициент;
НоваяСтрока.Количество = Товар.Количество;
КонецЕсли;
КонецЦикла;
    Форма.ЭлементыФормы.Комментарий.Значение = "Выгружен из интернет магазина " + ТекущаяДата();
Форма.ОбновитьТабличнуюЧастьДокумента(Истина, Ложь, Ложь);
Форма.ЭтаФорма.Записать();
    КонецЦикла;
    ЗавершитьРаботуСистемы();
КонецПроцедуры

0 коммент.:

Отправить комментарий