Пример замены типового отчета внешним в УТ 11.5
Сделал доработки в СКД типового отчета «Прайс-лист».
В принципе, пользователь был бы согласен на использование его как дополнительным внешним отчетом, но в одном месте отчет вызывается программно — из обработки «Прайс-лист», здесь:
Сначала я хотел сделать в конфигурации еще один отчет, клон прайс-листа и вызывать его, но вспомнил, что тогда придется прописывать роли на этот отчет.
Поэтому я решил сделать вызов внешнего отчета программно там, где 1с пытается вызвать отчет Прайс-лист.
Добавил внешний отчет в 1С:
Важно — имя объекта берется из имени отчета, но имя отчета я менять не стал, чтобы не делать лишних изменений в типовом отчете:
Код по подключению внешнего отчета взял тут. Только я делаю поиск обработки по идентификатору (ИмяОбъекта), а не по наименованию.
Вызов внешнего отчета сделал расширением формы обработки «Прайс-лист»:
&НаКлиенте &ИзменениеИКонтроль("ПечатьПрайсЛиста") Процедура доп_ПечатьПрайсЛиста(Команда) ПараметрыОткрытия = Новый Структура; НовыеНастройки = Неопределено; ПолучитьНастройки(НовыеНастройки); СписокВидыЦен = Новый СписокЗначений; СписокВидыЦен.ЗагрузитьЗначения(УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект)); Отбор = Новый Структура; Отбор.Вставить("ВидыЦен", УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект)); Отбор.Вставить("ДатаОтчета", Дата); ПараметрыОткрытия.Вставить("ФиксированныеНастройки", НовыеНастройки); ПараметрыОткрытия.Вставить("КлючВарианта", "ПрайсЛистКонтекст"); ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина); ПараметрыОткрытия.Вставить("Отбор", Отбор); ПараметрыОткрытия.Вставить("ВидимостьКомандВариантовОтчетов", Ложь); #Вставка доп_клиент.ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами("ПрайсЛист", ПараметрыОткрытия, истина, ЭтаФорма); Возврат; //Чтобы стандартно не открывалось #КонецВставки Если (ИспользуетсяЦенообразование25) Тогда ОткрытьФорму( "Отчет.ПрайсЛист2_5.ФормаОбъекта", ПараметрыОткрытия, ЭтотОбъект, Истина); Иначе ОткрытьФорму( "Отчет.ПрайсЛист.ФормаОбъекта", ПараметрыОткрытия, ЭтотОбъект, Истина); КонецЕсли; КонецПроцедуры
Код модуля доп_Сервер:
&НаСервере Функция ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки) Экспорт Возврат Справочники.ДополнительныеОтчетыИОбработки.НайтиПоРеквизиту("ИмяОбъекта", ИмяОтчетаОбработки).Ссылка; КонецФункции
Код модуля доп_Клиент:
&НаКлиенте Процедура ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами(ИмяОтчетаОбработки, ПараметрыОткрытия, ЭтоОтчет, РодительскаяФорма = Неопределено) Экспорт ВнешнийОтчетОбработкаДляОткрытияСсылка = доп_Сервер.ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки); // ВЫЗОВ ИЗ БСП ФУНКЦИИ ПОДКЛЮЧЕНИЯ ВНЕШНЕЙ ОБРАБОТКИ ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка); Если ЭтоОтчет Тогда ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОткрытия, РодительскаяФорма); Иначе ОткрытьФорму("ВнешняяОбработка." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОткрытия, РодительскаяФорма); КонецЕсли; КонецПроцедуры
С замиранием сердца нажал кнопку формирования отчета и о чудо, он работает и с нужным отбором.
Автор статьи писала, что есть какие-то проблемы с пользовательскими настройками, но здесь они, слава богу, не используются.
Среда: УТ 11.5.7.394. Объем: 1 час.
Свежие комментарии