Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 мая 2022, 04:47

Расшифровка в СКД своим отчетом

Автор FourRoom, 18 мар 2022, 12:00

0 Пользователей и 1 гость просматривают эту тему.

FourRoom

Добрый день.
1С:Предприятие 8.3 (8.3.20.1674)
Зарплата и управление персоналом КОРП, редакция 3.1 (3.1.21.36)

Есть отчет написанный на СКД.
Запрос
ВЫБРАТЬ
   ОтражениеВБухучетеНачисленныйНДФЛОбороты.Организация КАК Организация,
   ОтражениеВБухучетеНачисленныйНДФЛОбороты.ФизическоеЛицо КАК ФизическоеЛицо,
   ОтражениеВБухучетеНачисленныйНДФЛОбороты.СуммаОборот КАК СуммаОборот
ИЗ
   РегистрНакопления.ОтражениеВБухучетеНачисленныйНДФЛ.Обороты КАК ОтражениеВБухучетеНачисленныйНДФЛОбороты

Две группировки: "Органицзация", "Физическое лицо". И сумма в качестве ресурса.
Задача такая, нужно чтобы нажав на "СуммуОборот" в отчете, открывался другой, не типовой отчет с отбором по "Организации" и "Физическому лицу", к которым относится сумма оборот.
Вопрос как получить значения этой организации и физического лица?
Пробовал рассматривать обработчик РезультатОбработкаРасшифровки, и нашел там как получить значение суммы, а вот организацию и физическое лицо не знаю.
Может кто-нибудь подсказать ка к это сделать? Может делали что-то аналогичное? Может как-то можно получить настройки компоновки, где установлен отбор по этим полям?
Спасибо.





LexaK

FourRoom, какой отчет? встроенный или внешний?
если внешний и есть форма отчета, то вот примерный обработчик события расшифровки (просто пример)
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)

лкКоллекцияПолей = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
Если лкКоллекцияПолей.Количество() > 0 Тогда

СтандартнаяОбработка = Ложь;
лкВыбранноеДействие = Неопределено;
лкОбработчик = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

//***** Формирование списка доступных действий
лкОснДействия = Новый Массив();
лкОснДействия.Добавить(ДействиеобработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение);
лкОснДействия.Добавить(ДействиеобработкиРасшифровкиКомпоновкиДанных.Отфильтровать);

лкДопДействия = Новый СписокЗначений();
//лкДопДействия.Добавить("Открыть","Открыть");
//лкДопДействия.Добавить("Отфильтровать","Отфильтровать");

лкНастройкиРасшифровки = лкОбработчик.Выполнить(Расшифровка,лкВыбранноеДействие,лкОснДействия,лкДопДействия);
Если лкВыбранноеДействие = ДействиеобработкиРасшифровкиКомпоновкиДанных.Нет Тогда
Возврат;
ИначеЕсли лкВыбранноеДействие = ДействиеобработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
ОткрытьЗначение(лкКоллекцияПолей[0].Значение);
Возврат;
КонецЕсли;

лкНовыйОтчет = ВнешниеОтчеты.Создать(ЭтотОбъект.ИспользуемоеИмяФайла);
лкНоваяФорма = лкНовыйОтчет.ПолучитьФорму("ФормаОтчета");
лкНоваяФорма.ВосстанавливатьЗначенияПриОткрытии = ложь;
лкНоваяФорма.ДанныеРасшифровки = ЭтаФорма.ДанныеРасшифровки;
лкНоваяФорма.Открыть();
лкНоваяФорма.УстановитьВариантыНастроек();
лкНоваяФорма.СменаВариантаНастройки(Настройки,КомпоновщикНастроек.ПолучитьНастройки());

ЗаполнитьЗначенияСвойств(лкНовыйОтчет,ЭтотОбъект);

Если лкВыбранноеДействие = ДействиеобработкиРасшифровкиКомпоновкиДанных.Отфильтровать Тогда

ЭлементОтбора = лкНоваяФорма.КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(лкКоллекцияПолей[0].Поле);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = лкКоллекцияПолей[0].Значение;

КонецЕсли;

лкНоваяФорма.СформироватьОтчет(Ложь);

КонецЕсли;

КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

FourRoom

Да отчет внешний, однако Вы получаете значение в текущей ячейке с помощью
 лкКоллекцияПолей    = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля();
А как получить значения группировок, в которых данная ячейка лежит?

LexaK

с данными в каждой ячейки находятся связанные, родительские значения группировок.
запустите под отладчиком, проанализируйте данные реквизитов которые получаете. там все просто.
ответ Понравился? (в смысле пригодился?)

FourRoom

Вот, что в отладчике
Нет там такого )

FourRoom


LexaK

FourRoom, Надо уметь читать СП!  :befhbt: 
(прямо детский сад какой-то)
Поле - Тип ЗначенияПолейРасшифровкиКомпоновкиДанных
у него есть метод Получить()

там же, в отладчике, посмотрите это

Поле.Получить()
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск