1.
serega9507585993
2502.12.17 18:19 Сейчас в теме
К сожалению, на просторах интернета не нашел подходящей статьи или примера. (чтобы не пришлось переделывать сам отчет) Выкладываю свой пример.
&НаКлиенте
Процедура НаличиеНаСкладеВосстановленныхГДТ(Команда)
СтрПараметры = Новый Структура;
СтрПараметры.Вставить("Период", КонецДня(Объект.Дата));
СтрПараметры.Вставить("ТипСклада", ПредопределенноеЗначение("Перечисление.ТипыСкладовГДТ.СкладВосстановленных"));
ПользовательскиеНастройки = УстановитьПользовательскиеНастройкиОтчета("ОстаткиНоменклатурыПоТипуСклада",СтрПараметры);
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Объект.Продукция);
Отбор.Вставить("Организация", Объект.Организация);
ПараметрыФормы = Новый Структура("Отбор,ПользовательскиеНастройки, СформироватьПриОткрытии", Отбор,ПользовательскиеНастройки, Истина);
ОткрытьФорму("Отчет.ОстаткиНоменклатурыПоТипуСклада.Форма.ФормаОтчетаУправляемая", ПараметрыФормы);
КонецПроцедуры
&НаСервере
Функция УстановитьПользовательскиеНастройкиОтчета(ТипОтчета,СтруктураПараметров)
СтруктураНастроек = Новый Структура;
ОтчетОбъект = Отчеты[ТипОтчета].Создать();
ПользовательскиеНастройки = ОтчетОбъект.КомпоновщикНастроек.ПользовательскиеНастройки;
Для Каждого ЭлПараметр Из СтруктураПараметров Цикл
Для Каждого ПараметрСКД Из ПользовательскиеНастройки.Элементы Цикл
Если ТипЗнч(ПараметрСКД) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
Если строка(ПараметрСКД.Параметр) = ЭлПараметр.Ключ Тогда
ПараметрСКД.Значение = ЭлПараметр.Значение;
ПараметрСКД.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ПользовательскиеНастройки;
КонецФункции
Показать
Остальные параметры формы СКД можно найти в синтаксис- помошнике по ключу "Расширение управляемой формы для отчета "
Была подобная задача.
Сначала воспользовался этим примером, но есть минус в том, что значения отборов на форме нельзя изменить.
Решил с помощью другого примера из этого форума, ссылка в конце.
Может кому пригодиться и этот вариант решения (и что бы меньше тратить время на поиск):
Задача - сформировать отчет по кнопке на панели функций
1- Создать общую команду
2- Обработка команды
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
// Параметры
стрПараметры = Новый Структура;
стрПараметры.Вставить("Период", КонецДня(ТекущаяДата()));
// Отбор
стрОтборы = Новый Структура;
стрОтборы.Вставить("Организация", <Организация>);
ПользовательскиеНастройки = УстановитьНастройкиОтчета(<НаименованиеОтчета>, стрПараметры, стрОтборы);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ОткрытьФорму("Отчет.<НаименованиеОтчета>.Форма",
ПараметрыФормы,
ПараметрыВыполненияКоманды.Источник,
ПараметрыВыполненияКоманды.Уникальность,
ПараметрыВыполненияКоманды.Окно);
КонецПроцедуры
&НаСервере
Функция УстановитьНастройкиОтчета(ВидОтчета, стрПараметры, стрОтборы)
ОтчетОбъект = Отчеты[ВидОтчета].Создать();
КомпоновщикНастроек = ОтчетОбъект.КомпоновщикНастроек;
Настройки = КомпоновщикНастроек.Настройки;
ПользовательскиеНастройки = КомпоновщикНастроек.ПользовательскиеНастройки;
Для Каждого ЭлПараметр Из стрПараметры Цикл
ЭлементНастройки = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных(ЭлПараметр.Ключ));
ЭлементНастройки.Значение = ЭлПараметр.Значение;
Если ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскийПараметр = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ЭлементНастройки.ИдентификаторПользовательскойНастройки);
Если ТипЗнч(ПользовательскийПараметр) = Тип("ЗначениеПараметраНастроекКомпоновкиДанных") Тогда
ПользовательскийПараметр.Значение = ЭлементНастройки.Значение;
ПользовательскийПараметр.Использование = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого ЭлОтбор Из стрОтборы Цикл
текОтбор = Новый ПолеКомпоновкиДанных(ЭлОтбор.Ключ);
Для Каждого ЭлементНастройки Из Настройки.Отбор.Элементы Цикл
Если ЭлементНастройки.ЛевоеЗначение = текОтбор Тогда
ЭлементНастройки.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементНастройки.ПравоеЗначение = ЭлОтбор.Значение;
ЭлементНастройки.Использование = Истина;
Если ЗначениеЗаполнено(ЭлементНастройки.ИдентификаторПользовательскойНастройки) Тогда
ПользовательскийПараметр = КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ЭлементНастройки.ИдентификаторПользовательскойНастройки);
Если ТипЗнч(ПользовательскийПараметр) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда
ПользовательскийПараметр.ВидСравнения = ЭлементНастройки.ВидСравнения;
ПользовательскийПараметр.ПравоеЗначение = ЭлементНастройки.ПравоеЗначение;
ПользовательскийПараметр.Использование = ЭлементНастройки.Использование;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат ПользовательскиеНастройки;
КонецФункции
Подскажите а как установить отбор на дополнительный реквизит из номенклатуры?
делаю так
ПараметрыОткрытия = Новый Структура("СформироватьПриОткрытии", Истина);
ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Номенклатура.обобщающая характеристика",ОбщаяХарактеристика));
ОткрытьФорму("Отчет.ОстаткиИДоступностьТоваров.Форма",ПараметрыОткрытия,ЭтаФорма,,,,,РежимОткрытияОкнаФормы.Независимый);
Недопустимое значение параметра (параметр номер '1')
{Документ.ЗаказКлиента.Форма.ФормаДокумента.Форма(6041)}: ПараметрыОткрытия.Вставить("Отбор", Новый Структура("Номенклатура.обобщающая характеристика",ОбщаяХарактеристика));
В конфигурации на ОФ мне понадобилось из одного нетипового отчёта СКД открывать обычную форму другого нетипового отчёта СКД, чтобы в ней сразу формировался отчёт, с параметрами первого отчёта.
Найти в ИТС пример кода я не смог, и мне пришлось потратить определённое время на "изобретение велосипеда".
Чтобы в следующий раз не заниматься "изобретением велосипеда" столкнувшись с подобной задачей, я решил написать статью, в ней рассматривается в том числе и решение подобной задачи на управляемых формах.
FYI создавать форму отчета необязательно "Отчет.ОстаткиНоменклатурыПоТипуСклада.Форма.ФормаОтчетаУправляемая", можно и так "Отчет.ОстаткиНоменклатурыПоТипуСклада.Форма"
Была похожая задача. Там, правда, задача была вывести команду открытия стандартного отчёта в документ, чтобы при его открытии подтягивался из реквизита документа параметр отчёта. Для этого во внешнюю обработку позаимствовал из отчёта все его макеты, реквизиты и форму. А далее определил внешнюю обработку в модуле объекта как печатную форму с вызовом клиентского метода. Там передавал в отчёт параметр из реквизита документа и открывал форму со стандартным заполнением параметра отчёта.
Кто нибудь подскажет как сделать тоже самое, только для обычного приложения? Делаю тоже самое, но само по себе ничего не выводится, а параметры не добавляются. Хотя в управляемом все ок.