Friday, April 29, 2011

Объединение таблиц значений в 1С 8.х через запрос и временные таблицы

Запрос = Новый Запрос;
Запрос.Текст = "Выбрать * ПОМЕСТИТЬ ВремТабл Из &ТабЗнач1 как ТабЗнач1;
| Выбрать * ПОМЕСТИТЬ ВремТабл1 Из &ТабЗнач как ТабЗнач;
| Выбрать * ИЗ ВремТабл ОБЪЕДИНИТЬ ВСЕ Выбрать * ИЗ ВремТабл1";

Запрос.УстановитьПараметр("ТабЗнач",ТаблицаИсточник1);
Запрос.УстановитьПараметр("ТабЗнач1",ТаблицаИсточник2);
ИтоговаяТаблица = Запрос.Выполнить().Выгрузить();

Загрузка объектов xml через XDTO

ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогОткрытияФайла.Заголовок = "Выберите файл xml";
ДиалогОткрытияФайла.Фильтр = "Формат xml(*.xml)|*.xml";
ДиалогОткрытияФайла.ПроверятьСуществованиеФайла = Истина;
Если Не ДиалогОткрытияФайла.Выбрать() тогда
возврат;
КонецЕсли;
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл(ДиалогОткрытияФайла.ПолноеИмяФайла);
//прочитаем начало xml файла
Чтение.ПерейтиКСодержимому();

//прочитаем начало корневого элемента
Чтение.Прочитать();

//читаем содержимое пока текущим не станет конец корневого элемента, т.к. мы писали туда только целые элементы справочника,
//а сериализатор читает каждый из их полностью, то мы упремся именно в конец корневого
Пока Чтение.ТипУзла<>ТипУзлаXML.КонецЭлемента Цикл

//читаем очередной элемент справочника
Объект = СериализаторXDTO.ПрочитатьXML(Чтение);
Объект.ОбменДанными.Загрузка = Истина;
Объект.Записать();
//покажем что прочитали, осталось только записать объект
Сообщить(""+ТипЗнч(Объект)+" - "+Объект);
КонецЦикла;

Чтение.Закрыть();