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

Отчет СКД: расшифровка элемента, который отсутствует на форме. Как?

Автор PSP, 15 мар 2019, 11:44

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

PSP

После отработки запроса на форму выводится Номенклатура. В доступных полях есть связанная с номенклатурой спецификация. Но на форму я её не хочу выносить, так как она будет занимать много места, а отчет и так широкий, будет трудно с ним работать. Хочется, чтобы в расшифровке для номенклатуры был пункт "Открыть спецификацию", при нажатии на который открывалась бы привязанная к номенклатуре спецификация. Как это сделать?

LexaK

посмотрите на форме отчета есть событие расшифровка

вот какой-то пример, если разберетесь примените к своей задачи

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

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

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

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

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

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

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

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

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

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

КонецЕсли;

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

КонецЕсли;

КонецПроцедуры

если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск