Имя: Пароль:
1C
1С v8
Запрос и обработка ответов в ЕРПН (експорт/импорт xml).
0 Kreont
 
19.04.12
10:37
Обработка готовая кому надо для работы или изучения :)
Експорт в хмл через запись обычного текст.файла.
Импорт уже с испольованием методов ЧтениеXML.
http://commerce.at.ua/load/1-1-0-6 (обработка)
http://commerce.at.ua/publ/1-1-0-18 (исх.текст)

Для 1С Бухгалтерия для Украины...

Пример импорта табличной части из ХМЛ в ТЗ:

ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.ОткрытьФайл(ФайлИмпорта);
ЧтениеXML.ИгнорироватьПробелы = Истина;
   
ТЗХМЛ = Новый ТаблицаЗначений;
ТЗХМЛ.Колонки.Добавить("T1RXXXXG2D", Новый ОписаниеТипов("Дата"));
ТЗХМЛ.Колонки.Добавить("T1RXXXXG31", Новый ОписаниеТипов("Число"));
ТЗХМЛ.Колонки.Добавить("T1RXXXXG32", Новый ОписаниеТипов("Число"));
ТЗХМЛ.Колонки.Добавить("T1RXXXXG33", Новый ОписаниеТипов("Строка"));

Если НЕ ИмпортХМЛвТЗ(ЧтениеXML, ТЗХМЛ, "T1RXXXX") Тогда
Сообщить("ошибка импорта ХМЛ");
ЧтениеXML.Закрыть();
Возврат;
КонецЕсли;
   
ЧтениеXML.Закрыть();

//В результате в ТЗХМЛ будет табличная часть хмлки с соотвеств. колнками/полями T1RXXXXG2D, ...

// ТЗХМЛ - таблица из структурой колонок = структуре ТЧ у файла ХМЛ // С модификацией таблици входной
// ТегТабл: чтоб обрботать только нужную ТЧ ХМЛ
// Ответ: тру/фалс зачитки данных.
Функция ИмпортХМЛвТЗ(ЧтениеXML, ТЗХМЛ, ТегТабл)
Пока ЧтениеXML.Прочитать() Цикл
   Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
       ТекУзел = ЧтениеXML.Имя;
       Если Найти(ТекУзел, ТегТабл) > 0 Тогда
           
           ТекНомерСтроки = 0;
           Если ЧтениеXML.ПрочитатьАтрибут()  Тогда
           ТекНомерСтроки =  Число(ЧтениеXML.Значение);
           КонецЕсли;
           
           Пока ТекНомерСтроки > ТЗХМЛ.Количество() Цикл
               ТЗХМЛ.Добавить();
           КонецЦикла;
           
       КонецЕсли;
       
   ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
       
       ТекЗначение = ЧтениеXML.Значение;
       Если (Прав(ТекУзел,1) = "D") и НЕ ПустаяСтрока(ТекЗначение) Тогда
           
       ТекДень    = Сред(ТекЗначение,1,2);
       ТекМес    = Сред(ТекЗначение,3,2);
       ТекГод    = Сред(ТекЗначение,5,4);
           
       ТекЗначение = Дата(""+ТекГод+ТекМес+ТекДень);
           
       КонецЕсли;
       
       Если Найти(ТекУзел, "XXXX") > 0 Тогда
       ТЗХМЛ[ТекНомерСтроки-1][ТекУзел] = ТекЗначение;
       КонецЕсли;
       
   КонецЕсли;

КонецЦикла;

Если ТЗХМЛ.Количество() <= 0 Тогда
   Возврат Ложь;
КонецЕсли;

Возврат Истина;

КонецФункции
1 Kreont
 
20.04.12
10:06
обработка не тони
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший