|
Внешний отчет на СКД | ☑ | ||
---|---|---|---|---|
0
егаис
12.04.17
✎
13:22
|
Приветствую, подскажите по такому вопросу, никогда не приходилось сталкиваться.
Есть отчет на СКД. Но мне нужно обработать получаемые данные и вывести в макет. Напрмер, надо пропарсить "Способ отражения расходов в ЗУП" и вывести рассчитанный результат. Дополнительно нужно получить данные по COM соединению с другой базой и "засунуть" в этот же отчет. В качестве форма отчета использую общие формы отчета, настройки и вариантов. Получается надо перехватить результат компоновки, дополнительно его обработать и выдать результат в макет. Как это реализовать? |
|||
1
Гипервизор
12.04.17
✎
13:34
|
Данные из другой базы в ТЗ;
ТЗ в компоновку через ВнешниеНаборыДанных: ПроцессорКомпоновкиДанных.Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>); ТЗ описать в схеме как набор данных объект. |
|||
2
егаис
12.04.17
✎
13:50
|
а если создать НаборДанных "Объект" и подсунуть общую ТЗ ( с учетом COM) в ПриКомпоновкеРезультата()?
|
|||
3
DrShad
12.04.17
✎
13:54
|
так об этом и речь
|
|||
4
егаис
12.04.17
✎
15:33
|
подскажите, а как программно очистить настройки СКД?
Короче, устанавливаю отбор через изменить вариант по полю, который не участвует с отборе. Парсю свой запрос с учетом этого отбора. Но потом этот отбор участвует МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки); Он не нужен, как его очистить? |
|||
5
егаис
12.04.17
✎
15:34
|
код такой
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.ФизическоеЛицо, | ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете, | СУММА(ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.Сумма) КАК Сумма |ИЗ | Документ.ОтражениеЗарплатыВБухучете.НачисленнаяЗарплатаИВзносы КАК ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы |ГДЕ | ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания | |СГРУППИРОВАТЬ ПО | ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.СпособОтраженияЗарплатыВБухучете, | ОтражениеЗарплатыВБухучетеНачисленнаяЗарплатаИВзносы.ФизическоеЛицо"; Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала)); Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(ДатаОкончания)); ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("ОбъектВыполнения", Новый ОписаниеТипов("Строка")); ТЗ.Колонки.Добавить("СтатьяЗатрат", Новый ОписаниеТипов("Строка")); ТЗ.Колонки.Добавить("ФизическоеЛицо", Новый ОписаниеТипов("СправочникСсылка.ФизическиеЛица")); КвалификаторыЧисла = Новый КвалификаторыЧисла(15, 2, ДопустимыйЗнак.Неотрицательный); ОписаниеЧисла = Новый ОписаниеТипов("Число", КвалификаторыЧисла); ТЗ.Колонки.Добавить("Сумма", ОписаниеЧисла); ТЗ.Колонки.Добавить("СуммаПремии", ОписаниеЧисла); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ОтборОбъектов = ""; СписокЭлементов = КомпоновщикНастроек.Настройки.Отбор.Элементы; Для Каждого Элемент из СписокЭлементов Цикл Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОбъектВыполнения") Тогда ОтборОбъектов = Элемент.ПравоеЗначение; Прервать; КонецЕсли; КонецЦикла; МассивОбъектов = СтрРазделить(СтрЗаменить(ОтборОбъектов," ",""), ";", Ложь); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл //распарсим способ отражения расходов СпособОтраженияЗарплатыВБухучете = СокрЛП(ВыборкаДетальныеЗаписи.СпособОтраженияЗарплатыВБухучете); Счет = Лев(СпособОтраженияЗарплатыВБухучете, 2); Если Счет = "26" Тогда ОбъектВыполненияКод = "АУП"; СтатьяЗатрат = "Зарплата"; ИначеЕсли Счет = "25" Тогда ОбъектВыполненияКод = "ИТР"; СтатьяЗатрат = "Зарплата"; ИначеЕсли Счет = "20" Тогда ОбъектВыполненияКод = Сред(СпособОтраженияЗарплатыВБухучете, 7, 4); СтатьяЗатрат = ПолучитьСтатьюЗатратПоКоду(Прав(СпособОтраженияЗарплатыВБухучете, 3)); Иначе ОбъектВыполненияТаблица = ""; СтатьяЗатрат = ""; КонецЕсли; Если МассивОбъектов.Количество() > 0 Тогда НайденныйЭлеменМассива = МассивОбъектов.Найти(ОбъектВыполненияКод); Если НайденныйЭлеменМассива = Неопределено Тогда Продолжить; КонецЕсли; КонецЕсли; ОбъектВыполнения = Справочники.ОбъектыВыполнения.НайтиПоКоду(ОбъектВыполненияКод); НоваяСтрокаТЗ = ТЗ.Добавить(); НоваяСтрокаТЗ.ОбъектВыполнения = ОбъектВыполнения; НоваяСтрокаТЗ.СтатьяЗатрат = СтатьяЗатрат; НоваяСтрокаТЗ.ФизическоеЛицо = ВыборкаДетальныеЗаписи.ФизическоеЛицо; НоваяСтрокаТЗ.Сумма = ВыборкаДетальныеЗаписи.Сумма; КонецЦикла; //Связь между таблицей значений и именами в СКД ВнешниеНаборыДанных = Новый Структура; ВнешниеНаборыДанных.Вставить("ЗарплатаПоОбъектам", ТЗ); //Макет компоновки КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки); //Компоновка данных ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки); //Вывод результата ДокументРезультат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КонецПроцедуры |
|||
6
егаис
12.04.17
✎
15:40
|
все ,разобрался
КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить(Элемент); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |