|
Програмный вызов произвольного отчета с параметрами | ☑ | ||
---|---|---|---|---|
0
Strategius
05.10.19
✎
09:04
|
Всем добрый день.
Есть произвольный отчет на СКД с вариантом отчета и тремя параметрами (Период, ТипЦен и Номенклатура), по которым происходит отбор данных и формирование отчета. Сам по себе отчет формируется нормально при изменении параметров. Однако мне необходимо запустить этот отчет по нажатию на кнопку из другой формы (Справочники.Номенклатура.ФормаЭлемента) и тут возникают проблемы с передачей параметров. Параметры в форму отчета передаются, но формируется она без указанных параметров. Реализация следующая: Процедура КоманднаяПанельЦеныНоменклатурыСтоимостьКомплектующих(Кнопка) ПроизвольныйОтчетСсылка = Справочники.ПроизвольныеОтчеты.НайтиПоНаименованию("Стоимость комплекта").Ссылка; СохраненнаяНастройка = Справочники.СохраненныеНастройки.НайтиПоНаименованию("Номенклатура"); ОтчетОбъект = Отчеты.ПроизвольныйОтчет.Создать(); ОтчетОбъект.УстановитьПроизвольныйОтчет(ПроизвольныйОтчетСсылка, СохраненнаяНастройка); //Внутреняя процедура 1С, которая устанавливает вариант отчета ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура").Использование = Истина; ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура").Значение = Ссылка; Форма = ОтчетОбъект.ПолучитьФорму(,, ПроизвольныйОтчетСсылка); Форма.ВосстанавливатьЗначенияПриОткрытии = Ложь; Форма.Открыть(); КонецПроцедуры При попытке передать параметры через ОткрытьФорму("Имя Формы", Параметры) вместо Форма.Открыть(), возникает проблема определения имени формы, которую необходимо открыть - неизвестно откуда ее брать. Собственно вопрос: Как реализовать открытие произвольного отчета с параметрами? |
|||
1
Мимохожий Однако
05.10.19
✎
10:01
|
Покажи процедуру УстановитьПроизвольныйОтчет()
Отладчик, что показывает в ней? |
|||
2
Strategius
05.10.19
✎
10:59
|
Процедура достаточно большая. В ней происходит загрузка сохраненных параметров варианта отчета. По сути - загружаются значения по умолчанию. После этого я присваиваю значения тем параметрам, которые мне нужны.
Процедура УстановитьПроизвольныйОтчет(ПроизвольныйОтчетСсылка, СохраненнаяНастройкаСсылка = Неопределено, ФормаОтчета = Неопределено, ВосстановитьНастройкуПоумолчанию = Истина) Экспорт ПроизвольныйОтчет = ПроизвольныйОтчетСсылка; Если СохраненнаяНастройкаСсылка = Неопределено Тогда СохраненнаяНастройка = Справочники.СохраненныеНастройки.ПустаяСсылка(); Иначе СохраненнаяНастройка = СохраненнаяНастройкаСсылка; КонецЕсли; ЗначенияНастроекПанелиПользователя = Новый ХранилищеЗначения(ТиповыеОтчеты.ПолучитьЗначенияНастроекПанелиПользователяПоУмолчанию(ЭтотОбъект, ФормаОтчета)); ПараметрыПанелиПользователя = Новый ХранилищеЗначения(ТиповыеОтчеты.ПолучитьПараметрыПанелиПользователяПоУмолчанию(ЭтотОбъект)); Если ПроизвольныйОтчет.Пустая() ИЛИ ПроизвольныйОтчет.ЭтоГруппа Тогда СхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных; ВидПроизвольногоОтчета = Перечисления.ВидыПроизвольныхОтчетов.ПустаяСсылка(); Иначе СхемаКомпоновкиДанных = ПроизвольныйОтчет.СхемаКомпоновкиДанных.Получить(); ВидПроизвольногоОтчета = ПроизвольныйОтчет.ВидПроизвольногоОтчета; КонецЕсли; КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); ТиповыеОтчеты.ОбновитьТаблицуДоступныхНастроекПользователю(ЭтотОбъект); Если ФормаОтчета <> Неопределено Тогда ФормаОтчета.КомпоновщикНастроекПользователя.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных)); КонецЕсли; #Если Клиент Тогда ТиповыеОтчеты.УстановитьВариантПоУмолчанию(ЭтотОбъект, ФормаОтчета); #КонецЕсли Если СохраненнаяНастройка.Пустая() Тогда ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(ЭтотОбъект); КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); Иначе ПрименитьНастройку(); ТиповыеОтчеты.ПрименитьНастройкуПользователяНастройкиОтчета(ЭтотОбъект); КонецЕсли; #Если Клиент Тогда Если ФормаОтчета <> Неопределено Тогда ТиповыеОтчеты.ОбработкаФормыПослеПримененияНастройки(ЭтотОбъект, ФормаОтчета); // Нарисуем кнопки выбора настроек на верхней панели ТиповыеОтчеты.ОбновитьКнопкиВыбораНастроек(ФормаОтчета, ЭтотОбъект, ФормаОтчета.ПредставлениеНастройки, ФормаОтчета.РежимРедактированияНастройки); КонецЕсли; #КонецЕсли КонецПроцедуры // |
|||
3
Strategius
05.10.19
✎
11:17
|
Что самое противное, что отладчик показывает, что во всех вхождениях КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура").Значение формы и отчета установлено требуемое значение, но по нему отчет не формируется
|
|||
4
Strategius
05.10.19
✎
12:52
|
Сам создал тему, сам и отвечаю. Пришлось идти по отладчику и смотреть, куда деваются данные. Оказалось, что до момента обновления формы, все манипуляции с присвоением данных бесполезны. В результате заработала такая конструкция:
Процедура КоманднаяПанельЦеныНоменклатурыСтоимостьКомплектующих(Кнопка) ПроизвольныйОтчетСсылка = Справочники.ПроизвольныеОтчеты.НайтиПоНаименованию("Стоимость комплекта").Ссылка; СохраненнаяНастройка = Справочники.СохраненныеНастройки.НайтиПоНаименованию("Номенклатура"); ОтчетОбъект = Отчеты.ПроизвольныйОтчет.Создать(); ОтчетОбъект.УстановитьПроизвольныйОтчет(ПроизвольныйОтчетСсылка, СохраненнаяНастройка,,Ложь); //Внутреняя процедура 1С, которая устанавливает вариант отчета ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура").Использование = Истина; ОтчетОбъект.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура").Значение = Ссылка; Форма = ОтчетОбъект.ПолучитьФорму(,, ПроизвольныйОтчетСсылка); Форма.Обновить(); Форма.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Номенклатура").Значение = Ссылка; Форма.Открыть(); //Форма отрывается данные есть, но автоматически не формируется Форма.ОбновитьОтчет(); //Внутреняя процедура 1С, которая обновляет и формирует произвольный отчет на форме КонецПроцедуры Таким образом удалось прикрутить кнопку на вкладке "цены" на форме элемента номенклатура для вызова отчета, по которому сразу можно видеть стоимость комплектующих номенклатуры и проверять, на какие комплектующие не установлены цены |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |