Задача:
Из-за того, что прошлые программисты изменили типовые регистры на свои необходимо сделать отчет Резервы на складах.
Нужно заменить типовой отчет "Товары в резерве на складах".
Отчет должен вызываться из справочника номенклатура(список номенклатуры) и показывать резервы по номенклатуре, на которой установлен курсор.
Номенклатура может быть папкой или элементом.
Выполнение:
Алгоритм:
- Создать СКД отчет по требованию заказчика - в данной статье рассматриваться не будет.
- Создать процедуру в СКД отчете для программного вывода отчета. Процедура может принимать параметром настройки выводимого отчета. Если настройки не указаны, то используются стандартные настройки
- Прописать в справочнике номенклатура вывод этого отчета при нажатии на кнопку "Резервы на складах"
Создадим у него форму и повесим процедуру на кнопку.
процедура СформироватьОтчет(настройки=Неопределено) экспорт СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"); Если настройки=Неопределено тогда // если не передали настройки, то используем настройки по умолчанию Настройки = КомпоновщикНастроек.ПолучитьНастройки(); конецЕсли; КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки); ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки,истина); Результат = ЭлементыФормы.Результат; Результат.Очистить(); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(Результат); ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных); КонецПроцедуры
Теперь необходимо в справочнике номенклатура заменить вывод типового отчета на "ТоварыВРезервеОстатки2019". При вызове отчета устанавливается отбор по выбранной номенклатуре и происходит вывод отчета:
Текст процедуры:
//отчет по резервам 2019 процедура открытьОтчетПоРезервам2019() Если ЭлементыФормы.Список.ТекущиеДанные = Неопределено Тогда // ничего нет Возврат; КонецЕсли; ТекущиеДанные = ЭлементыФормы.Список.ТекущиеДанные.Ссылка; отчет=отчеты.ТоварыВрезервеОстатки2019.Создать(); настройки=отчет.КомпоновщикНастроек.Настройки; отборы=отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы; отборы.Очистить(); отбор1=отборы.Добавить(тип("ЭлементОтбораКомпоновкиДанных")); отбор1.Использование=истина; отбор1.ЛевоеЗначение=отчет.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы.Найти("Номенклатура").Поле; отбор1.ВидСравнения=ВидСравненияКомпоновкиДанных.ВИерархии; отбор1.ПравоеЗначение=ТекущиеДанные; //!!!!!!!!!!!!!!!!!!!!!!!!!если стандартный отчет - можно попробовать так!!!!! //ФормаОтчета = отчет.ПолучитьФорму(); // отчет.СформироватьОтчет(ФормаОтчета.ЭлементыФормы.Результат,,, ФормаОтчета); // ФормаОтчета.Открыть(); // отчет.КомпоновщикНастроек.ЗагрузитьНастройки(настройки); формаОтчета=отчет.ПолучитьФорму("ФормаОтчета"); формаОтчета.сформироватьОтчет(настройки); формаОтчета.Открыть(); КонецПроцедуры
Результат:
p.s.
Если нужно еще заполнять параметры, то можно сделать так
параметры=отчет.КомпоновщикНастроек.Настройки.Параметры.Элементы; нужныйПараметр=параметры.элементы.найти("имяНужногоПараметра"); нужныйПараметр.использование=истина; нужныйПараметр.значение=ЗначениеВашегоПараметра;