Постановка задачи:
БП 3.0, в расширении отчет ОтчетПоСотрудникамСПростоямиИЗП на СКД. Необходимо выгружать отчеты по каждому сотруднику в папку на сервере.
Решение (общий порядок):
Создана внешняя обработка:
- реквизиты:
КаталогСохранения
, типСтрока
;ТипФайла
, типСтрока
.
- форма, на которую добавлены реквизиты и кнопка "Выгрузить".
В модуле объекта отчета переопределяем процедуру ПриКомпоновкеРезультата():
Код
Необходимо для отключения стандартной обработки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
&НаСервере Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры |
[свернуть]
В модуле формы обработки:
Команда и процедура выгрузки файлов.
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
&НаКлиенте Процедура Выгрузить(Команда) ВыгрузитьНаСервере(); КонецПроцедуры #Область СлужебныеПроцедурыИФункции // Код процедур и функций, составляющих внутреннюю реализацию модуля // Процедура сохраняет табличный документ, сформированный функцией СоздатьОтчет(ТабДок, СтрокаТЗ.Ссылка), // в файл на диске и отправляет сохраненный файл на Яндекс Диск в папку "/data/" &НаСервере Процедура ВыгрузитьНаСервере() //Создадим табличный документ ТабДок = Новый ТабличныйДокумент; // В эту функцию можно потом задать передачу параметров отбора в запрос (из реквизитов формы обработки - при ручной выгрузке) СписокСотрудниковТЗ = СписокСотрудниковПоЗаданномуОтбору(); Для каждого СтрокаТЗ Из СписокСотрудниковТЗ Цикл ПолноеИмяФайла = ПолноеИмяФайла(СтрокаТЗ.Ссылка.Наименование); ТипФайла = ТипФайла(); //Создадим и запишем файл (пустой) ТабДок.Записать(ПолноеИмяФайла, ТипФайла); //Заполним ТабДок на сервере ТабДок = СоздатьОтчет(ТабДок, СтрокаТЗ.Ссылка); //Запишем заполненную таблицу в тот же файл ТабДок.Записать(ПолноеИмяФайла, ТипФайла); // Отправка файла на ЯндексДиск ++ *********************** // токен приложения Яндекс // (подробнее о получении токена https://flagman.top/about-business/ehkzamen-1s/zagruzka-iz-1s-na-yandex-disk) token = "xxxxxxxxxxxxxxxxxxx-xxxxxxxxx"; КраткоеИмяФайла = СтрЗаменить(ПолноеИмяФайла,"E:\Отчеты_тест_выгрузки\",""); path = "/data/" + КраткоеИмяФайла; // каталог на Яндекс Диске + имя выгружаемого файла с расширением ЗагрузитьОбновитьФайлНаЯндексДиске(token, path, Истина, ПолноеИмяФайла) // Отправка файла на ЯндексДиск -- *********************** КонецЦикла; КонецПроцедуры |
[свернуть]
Функция создания табличного документа на основе отчета из расширения.
Код
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
// Функция возвращает табличный документ, созданный на основе отчета ОтчетПоСотрудникамСПростоямиИЗП, включенного в расширение Функция СоздатьОтчет(ТабДок, СотрудникСсылка) // Создаем отчет и получаем настройки ОтчетДок = Отчеты.ОтчетПоСотрудникамСПростоямиИЗП.Создать(); КомпоновщикНастроек = ОтчетДок.КомпоновщикНастроек; НастройкиОтчета = КомпоновщикНастроек.Настройки; НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра("Сотрудник", СотрудникСсылка); СхемаКомпоновкиДанных = ОтчетДок.СхемаКомпоновкиДанных; ПараметрыОтчета = СхемаКомпоновкиДанных.Параметры; // здесь прописывается логика определения и назначения параметров отчета // через НастройкиОтчета.ПараметрыДанных.УстановитьЗначениеПараметра() СтандартнаяОбработка = Ложь; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки()); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки); ТабДок.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ТабДок); ПроцессорВывода.Вывести(ПроцессорКомпоновки); Возврат ТабДок; КонецФункции |
[свернуть]