Расшифровка отчета СКД этим же отчетом, но другой схемой на 8.3 УФ
Добрый день!!!
Есть внешний самописный отчет, созданы две схемы (основнаясхемаотчета и схемарасшифровки) и одна форма. Отчет должен работать следующим образом: выбирается период отчета задается отбор и после нажатия кнопки сформировать формируется отчет по основной схеме компоновки, далее, если нам необходимо расшифровать определенную ячейку, то по клике мышкой по этой ячейки должна открываться расшифровка в виде отдельного окна с отчетом по расшифровке в разрезе регистраторов по другой схеме. Получилось все, кроме одной проблемы, которую никак не можем победить. Кода открывается окно с расшифровкой и в этом окне нажимаешь на кнопку изменить вариант, то внутри на вкладке "Поля" в окне доступные поля находятся все поля от основной схемы и название варианта тоже от основной схемы, а не от схемы расшифровки и соответственно нет возможности сделать дополнительные отборы в этом окне расшифровки. Если через кнопку "еще" применить стандартные настройки и нажать кнопку Сформировать, то отчет формируется полностью по основной схеме. Почему то окно открывается только по основной схеме. Перерыли кучу форумов и статей, но внятной информации, а тем более примера так и не нашли, такое ощущение, что никто и никогда не делал отчеты с расшифровкой по другой схеме на 8.3 управляемые формы . Люди добрые, подскажите, есть ли решение такой проблемы?
Есть внешний самописный отчет, созданы две схемы (основнаясхемаотчета и схемарасшифровки) и одна форма. Отчет должен работать следующим образом: выбирается период отчета задается отбор и после нажатия кнопки сформировать формируется отчет по основной схеме компоновки, далее, если нам необходимо расшифровать определенную ячейку, то по клике мышкой по этой ячейки должна открываться расшифровка в виде отдельного окна с отчетом по расшифровке в разрезе регистраторов по другой схеме. Получилось все, кроме одной проблемы, которую никак не можем победить. Кода открывается окно с расшифровкой и в этом окне нажимаешь на кнопку изменить вариант, то внутри на вкладке "Поля" в окне доступные поля находятся все поля от основной схемы и название варианта тоже от основной схемы, а не от схемы расшифровки и соответственно нет возможности сделать дополнительные отборы в этом окне расшифровки. Если через кнопку "еще" применить стандартные настройки и нажать кнопку Сформировать, то отчет формируется полностью по основной схеме. Почему то окно открывается только по основной схеме. Перерыли кучу форумов и статей, но внятной информации, а тем более примера так и не нашли, такое ощущение, что никто и никогда не делал отчеты с расшифровкой по другой схеме на 8.3 управляемые формы . Люди добрые, подскажите, есть ли решение такой проблемы?
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
У вас одна форма. и основной реквизит ее отчет, и схема соответственно основная. Соответственно компоновщик тоже основной.
Нужно делать новую форму без основного реквизита и на ней уже привязывать компоновщик от другой скд и саму СКД.
Нужно делать новую форму без основного реквизита и на ней уже привязывать компоновщик от другой скд и саму СКД.
первый попавшийся пример без доп форм. Для обычных форм.
Функция ДобавитьИВыполнитьРасшифровку(Расшифровка,ДополнительныеДействия)
ВыполненноеДействие = Неопределено;
ОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ДанныеРасшифровки,Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
Настройки = ОбработкаРасшифровки.Выполнить(Расшифровка,ВыполненноеДействие,,ДополнительныеДействия);
Если Настройки <> Неопределено Тогда
КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
ЭлементыФормы.Результат.Очистить();
СкомпоноватьРезультат(ЭлементыФормы.Результат,ДанныеРасшифровки);
Возврат Неопределено;
КонецЕсли;
Возврат ?(ТипЗнч(ВыполненноеДействие) = Тип("ДействиеОбработкиРасшифровкиКомпоновкиДанных"),Неопределено,ВыполненноеДействие);
КонецФункции
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
ПолеРасшифровки = ДанныеРасшифровки.Элементы[Расшифровка].ПолучитьПоля()[0];
ВыполненноеДействие = Неопределено;
Если ПолеРасшифровки.Поле = "Товар" Тогда
СтандартнаяОбработка = Ложь;
ДополнительныеДействия = Новый СписокЗначений;
ДополнительныеДействия.Добавить(0,"Обороты по товару");
ДополнительныеДействия.Добавить(1,"Обороты по товарам полный форш");
ВыполненноеДействие = ДобавитьИВыполнитьРасшифровку(Расшифровка,ДополнительныеДействия);
КонецЕсли;
Если ТипЗнч(ВыполненноеДействие) = Тип("Число") Тогда
СКДРегистратор = ПолучитьМакет("Макет");
Настройки = СКДРегистратор.НастройкиПоУмолчанию;
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("НачалоПериода"
, КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода").Значение);
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("КонецПериода"
, КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода").Значение);
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Товар"
, ?(ВыполненноеДействие, МаркированныйТовар, ПолеРасшифровки.Значение));
Если ВыполненноеДействие Тогда
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Контрагент", Справочники.Контрагенты.ПустаяСсылка())
Иначе
ИндексРП = Расшифровка - 1;
Пока ИндексРП Цикл
ПоляРасш = ДанныеРасшифровки.Элементы[ИндексРП];
Если ТипЗнч(ПоляРасш) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
ПолеРасш = ПоляРасш.ПолучитьПоля()[0];
Если ПолеРасш.Поле = "ЮрЛицо" Тогда
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("Контрагент", ПолеРасш.Значение);
Прервать;
КонецЕсли;
КонецЕсли;
ИндексРП = ИндексРП - 1;
КонецЦикла;
КонецЕсли;
Результат = Новый ТабличныйДокумент;
Результат.ТолькоПросмотр = Истина;
Результат.ОтображатьСетку = Ложь;
Результат.ОтображатьЗаголовки = Ложь;
РегистраторДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(КомпоновщикМакета.Выполнить(СКДРегистратор, Настройки, РегистраторДанныеРасшифровки)
,, РегистраторДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
Если ВыполненноеДействие Тогда
файл = КаталогВременныхФайлов() + "Регистраторы.XLSX";
Результат.Записать(файл, ТипФайлаТабличногоДокумента.XLSX);
Сообщить("Создан файл - " + файл);
Иначе
Для ОбХ = 1 По Результат.ШиринаТаблицы Цикл
Для ОбУ = 1 По Результат.ВысотаТаблицы Цикл
Область = Результат.Область(ОбХ, ОбУ);
Если ТипЗнч(Область.Расшифровка) = Тип("ИдентификаторРасшифровкиКомпоновкиДанных") Тогда
ЭлементРасшифровка = РегистраторДанныеРасшифровки.Элементы[Область.Расшифровка];
Если ТипЗнч(ЭлементРасшифровка) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
Область.Расшифровка = ЭлементРасшифровка.ПолучитьПоля()[0].Значение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Результат.Показать("Регистраторы для товара: " + ПолеРасшифровки.Значение);
КонецЕсли;
КонецЕсли
КонецПроцедуры
Показать
(5) Дело в том еще, что таких расшифровок на разных ячейках будет 4 (расшифровка выручки, затрат 20 счета, затрат 26 счета, расшифровка 91 счета) и получается, что надо делать 4 доп. внешних отчета((( Как-то не очень вариант получается((( Но спасибо за совет с формой, попробуем, что из этого может получиться.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот