Программное использование универсальной обработки Выгрузка Загрузка Данных 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);
КонецЕсли;
Категория:
Работа с Датами (Временем)