Программное использование универсальной обработки Выгрузка Загрузка Данных XML Для работы, необходимо взять
обработку "ВыгрузкаЗагрузкаДанныхXML" , которая находится в шаблоне "Конвертация данных".
Пример обработки(автор Misha Macklaud):
Скачивать файлы может только зарегистрированный пользователь!
а это ее код:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
ОбработкаОбмен = Обработки. ВыгрузкаЗагрузкаДанныхXML. Создать( ) ;
ОбработкаОбмен. Инициализация( ) ;
ОбработкаОбмен. ОбработанныхКонстант = 0 ;
ОбработкаОбмен. ОбработанныхНаборовЗаписей = 0 ;
СписокОбъектовВыгрузки = Новый СписокЗначений;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. РеализацияТоваровУслуг) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. ПоступлениеТоваровУслуг) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. ТребованиеНакладная) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. Выгружать= 1 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
Построитель = ОбработкаОбмен. ПодготовитьПостроительДляВыгрузки( СтрокаВыгрузки) ;
СписокСсылокВыгрузки = Новый СписокЗначений;
Для Каждого СтрокаТабДокументы Из ТабДокументы Цикл
Если ( СтрокаТабДокументы. Документ. Метаданные( ) = СписокОбъектовВыгрузки[й]. Значение) И ( СтрокаТабДокументы. ФлагВыгружать) Тогда
СписокСсылокВыгрузки. Добавить( СтрокаТабДокументы. Документ. Ссылка) ;
КонецЕсли ;
КонецЦикла ;
Отбор = Построитель. Отбор;
Отбор. Добавить( "Ссылка" , "Ссылка" ) ;
Отбор[0 ]. Использование = Истина ;
Отбор[0 ]. ВидСравнения = ВидСравнения. ВСписке;
Отбор[0 ]. Значение = СписокСсылокВыгрузки;
СтрокаВыгрузки. НастройкиПостроителя = Построитель. ПолучитьНастройки( ) ;
СтрокаВыгрузки. ИспользоватьОтбор = Истина ;
КонецЦикла ;
СписокОбъектовВыгрузки. Очистить( ) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. ВыгружатьПриНеобходимости = 0 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
КонецЦикла ;
СписокОбъектовВыгрузки. Очистить( ) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Справочники. Номенклатура) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. Выгружать= 1 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
КонецЦикла ;
ИмяФайлаЗагрузки = "D:\А-Б.xml" ;
ОбработкаОбмен. ВыполнитьЗагрузку( ИмяФайлаЗагрузки) ;
ИмяФайлаВыгрузки = "D:\Б-А.xml" ;
ОбработкаОбмен. ВыполнитьВыгрузку( ИмяФайлаВыгрузки) ;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Истина ;
НастройкаПериода. ВариантНастройки = ВариантНастройкиПериода. Период;
НастройкаПериода. УстановитьПериод( НачПериода, ? ( КонПериода= '0001 - 01 - 01 ', КонПериода, КонецДня( КонПериода) ) ) ;
Если НастройкаПериода. Редактировать( ) Тогда
НачПериода = НастройкаПериода. ПолучитьДатуНачала( ) ;
КонПериода = НастройкаПериода. ПолучитьДатуОкончания( ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ПриОткрытии()
НачПериода = ТекущаяДата( ) ;
КонПериода = ТекущаяДата( ) ;
КонецПроцедуры
Процедура ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ)
Запрос. Текст = "ВЫБРАТЬ
| ОбъектЗапроса.Ссылка
|ИЗ
| Документ." + ОбъектЗапроса+ " КАК ОбъектЗапроса
|ГДЕ
| ОбъектЗапроса.ПометкаУдаления = ЛОЖЬ И
| ОбъектЗапроса.Дата МЕЖДУ &ДатаНач И &ДатаКон" ;
Запрос. УстановитьПараметр( "ДатаНач" , НачалоДня( НачПериода) ) ;
Запрос. УстановитьПараметр( "ДатаКон" , КонецДня( КонПериода) ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
НоваяСтрока = ТЗ. Добавить( ) ;
НоваяСтрока. Дата = Выборка. Ссылка. Дата;
НоваяСтрока. Документ = Выборка. Ссылка;
КонецЦикла ;
КонецПроцедуры
Процедура ЗаполнитьНажатие(Элемент)
ТабДокументы. Очистить( ) ;
ТЗ = Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "Дата" ) ;
ТЗ. Колонки. Добавить( "Документ" ) ;
Запрос = Новый Запрос;
Если флРеализация Тогда
ОбъектЗапроса = "РеализацияТоваровУслуг" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
Если флПоступление Тогда
ОбъектЗапроса = "ПоступлениеТоваровУслуг" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
Если флТребованиеНакладная Тогда
ОбъектЗапроса = "ТребованиеНакладная" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
ТЗ. Сортировать( "Дата" ) ;
Для Каждого Стр Из ТЗ Цикл
НоваяСтрока = ТабДокументы. Добавить( ) ;
НоваяСтрока. Документ = Стр. Документ;
НоваяСтрока. ФлагВыгружать = Истина ;
КонецЦикла ;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Как отчет на СКД сохранить в таблицу значений, а потом выгрузить в файл? Допустим у нас есть отчет с ОсновнойСхемойКомпановкиДанных,
Создадим ФормуОтчета:
На форму добавим Кнопку Выгрузка( Процедура ДействияФормыВыгрузка(Кнопка) ) и Выбор Периода формирования отчета
ВНИМАНИЕ!!!
Ошибка генерации макета
по причине: Не поддерживается вывод таблиц, диаграмм и вложенных отчетов в универсальную коллекцию значений
Выводить можно только Группировки:
Код отчета будет следующий:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
Диалог = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
Диалог. Заголовок = "Выберите файл для сохранения данных" ;
Диалог. ПолноеИмяФайла = "NDFL_" + Формат( НачПериода, "ДФ=MM_yyyy" ) ;
Диалог. Фильтр = "TXT (*.txt)|*.txt" ;
Диалог. МножественныйВыбор = Ложь ; Диалог. Каталог = "D:\" ;
Если Диалог. Выбрать( ) Тогда
ФайлСохранения = Диалог. ПолноеИмяФайла;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета. Выполнить( СхемаКомпоновкиДанных, КомпоновщикНастроек. Настройки, , , Тип( "ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений" ) ) ;
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных. Инициализировать( МакетКомпоновкиДанных) ;
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ДанныеТЗ = Новый ТаблицаЗначений;
ПроцессорВывода. УстановитьОбъект( ДанныеТЗ) ;
ПроцессорВывода. Вывести( ПроцессорКомпоновкиДанных) ;
Текст = Новый ЗаписьТекста( ФайлСохранения, КодировкаТекста. ANSI) ;
Текст. ЗаписатьСтроку( "Организация~КПП~Начислено13~Начислено30" ) ;
Для Каждого стр из ДанныеТЗ Цикл
Текст. ЗаписатьСтроку( СокрЛП( Строка( стр. Организация) ) + "~" + СокрЛП( стр. ПодразделениеОрганизацииКПП) + "~" + Формат( стр. Начислено13 , "ЧГ=0" ) + "~" + Формат( стр. Начислено30 , "ЧГ=0" ) ) ;
КонецЦикла ;
Текст. Закрыть( ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода. УстановитьПериод( НачПериода, ? ( КонПериода= '0001 - 01 - 01 ', КонПериода, КонецДня( КонПериода) ) ) ;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Истина ;
НастройкаПериода. ВариантНастройки = ВариантНастройкиПериода. Период;
Если НастройкаПериода. Редактировать( ) Тогда
НачПериода = НастройкаПериода. ПолучитьДатуНачала( ) ;
КонПериода = НастройкаПериода. ПолучитьДатуОкончания( ) ;
КонецЕсли ;
КомпоновщикНастроек. Настройки. ПараметрыДанных. Элементы[4 ]. Значение = НачПериода;
КомпоновщикНастроек. Настройки. ПараметрыДанных. Элементы[5 ]. Значение = КонПериода;
КонецПроцедуры
Смотрите так же:
Вывод отчета СКД в коллекцию значений - Дерево Значений Категория:
Схема Компоновки Данных Как программно изменить период в журнале? Код 1C v 8.х
НастройкаПериода = ЭлементыФормы. Список. СтандартныйПериод ;
НастройкаПериода. ВариантНачала = ВариантГраницыПериода. Месяц;
НастройкаПериода. ВариантОкончания = ВариантГраницыИнтервала. БезОграничения;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Ложь ;
Данная обработка устанавливает период в окне редактирования периода, но не назначает его. Т.е. еще нужно открыть окно выбора периода и нажать "Ок". *09
Из-за этого приходится использовать отбор:
Код 1C v 8.х ДокументСписок. Отбор. Дата. Использование = Истина ;
ДокументСписок. Отбор. Дата. ВидСравнения = ВидСравнения. ИнтервалВключаяГраницы;
ДокументСписок. Отбор. Дата. ЗначениеС = ДатаНачало;
ДокументСписок. Отбор. Дата. ЗначениеПо = ДатаКонец;
ДокументСписок. Отбор. Дата. установить( ) ;
Тема
обсуждения в Вопросах. Категория:
Список Справочника, Документов, Регистров Выбор периода, задать период Код 1C v 8.х
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода. УстановитьПериод( НачПериода, ? ( КонПериода= '0001 - 01 - 01 ', КонПериода, КонецДня( КонПериода) ) ) ;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Истина ;
НастройкаПериода. ВариантНастройки = ВариантНастройкиПериода. Период;
Если НастройкаПериода. Редактировать( ) Тогда
НачПериода = НастройкаПериода. ПолучитьДатуНачала( ) ;
КонПериода = НастройкаПериода. ПолучитьДатуОкончания( ) ;
КонецЕсли ;
КонецПроцедуры
Код 1C v 7.x
// Функция ВвестиПериод выдает на экран диалог специального вида,
// при помощи которого пользователь может выбрать период.
// Выбранный пользователем период записывается в переменные, передаваемые как параметры при вызове метода.
Дата1 = '01.01.97';
Дата2 = '31.03.97';
Если ВвестиПериод(Дата1, Дата2, "Введите период отчета") <> 1 Тогда
// Нажата кнопка «Отмена», клавиша или закрыто окно диалога
Возврат 0;
Иначе
СформироватьОтчет(Дата1, Дата2);
КонецЕсли;
Категория:
Работа с Датами (Временем)