Пример замены типового отчета внешним в УТ 11.5

Сделал доработки в СКД типового отчета «Прайс-лист».

В принципе, пользователь был бы согласен на использование его как дополнительным внешним отчетом, но в одном месте отчет вызывается программно — из обработки «Прайс-лист», здесь:

Сначала я хотел сделать в конфигурации еще один отчет, клон прайс-листа и вызывать его, но вспомнил, что тогда придется прописывать роли на этот отчет.

Поэтому я решил сделать вызов внешнего отчета программно там, где 1с пытается вызвать отчет Прайс-лист.

Добавил внешний отчет в 1С:

Важно — имя объекта берется из имени отчета, но имя отчета я менять не стал, чтобы не делать лишних изменений в типовом отчете:

Код по подключению внешнего отчета взял тут. Только я делаю поиск обработки по идентификатору (ИмяОбъекта), а не по наименованию.

Вызов внешнего отчета сделал расширением формы обработки «Прайс-лист»:

&НаКлиенте
&ИзменениеИКонтроль("ПечатьПрайсЛиста")
Процедура доп_ПечатьПрайсЛиста(Команда)

	ПараметрыОткрытия = Новый Структура;

	НовыеНастройки = Неопределено;
	ПолучитьНастройки(НовыеНастройки);

	СписокВидыЦен = Новый СписокЗначений;
	СписокВидыЦен.ЗагрузитьЗначения(УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект));

	Отбор = Новый Структура;
	Отбор.Вставить("ВидыЦен", УстановкаЦенКлиентСервер.ВыбранныеВидыЦен(ЭтотОбъект));
	Отбор.Вставить("ДатаОтчета", Дата);

	ПараметрыОткрытия.Вставить("ФиксированныеНастройки", НовыеНастройки);
	ПараметрыОткрытия.Вставить("КлючВарианта", "ПрайсЛистКонтекст");
	ПараметрыОткрытия.Вставить("СформироватьПриОткрытии", Истина);
	ПараметрыОткрытия.Вставить("Отбор", Отбор);
	ПараметрыОткрытия.Вставить("ВидимостьКомандВариантовОтчетов", Ложь);

#Вставка
	доп_клиент.ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами("ПрайсЛист", ПараметрыОткрытия, истина, ЭтаФорма);
	Возврат; //Чтобы стандартно не открывалось
#КонецВставки
	Если (ИспользуетсяЦенообразование25) Тогда
		ОткрытьФорму(
		"Отчет.ПрайсЛист2_5.ФормаОбъекта",
		ПараметрыОткрытия,
		ЭтотОбъект,
		Истина);
	Иначе
		ОткрытьФорму(
		"Отчет.ПрайсЛист.ФормаОбъекта",
		ПараметрыОткрытия,
		ЭтотОбъект,
		Истина);
	КонецЕсли;

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

Код модуля доп_Сервер:

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

Код модуля доп_Клиент:

&НаКлиенте
Процедура ОткрытьВнешнийОтчетОбработкуПоИмениСДопПараметрами(ИмяОтчетаОбработки, ПараметрыОткрытия, ЭтоОтчет, РодительскаяФорма = Неопределено) Экспорт
    ВнешнийОтчетОбработкаДляОткрытияСсылка = доп_Сервер.ПолучитьСсылкуНаВнешнийОтчетОбработкуПоИмениНаСервере(ИмяОтчетаОбработки);  
     // ВЫЗОВ ИЗ БСП ФУНКЦИИ ПОДКЛЮЧЕНИЯ ВНЕШНЕЙ ОБРАБОТКИ
    ИмяОбработкиСлужебное = ДополнительныеОтчетыИОбработкиВызовСервера.ПодключитьВнешнююОбработку(ВнешнийОтчетОбработкаДляОткрытияСсылка);
    Если ЭтоОтчет Тогда
        ОткрытьФорму("ВнешнийОтчет." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОткрытия, РодительскаяФорма);
    Иначе
        ОткрытьФорму("ВнешняяОбработка." + ИмяОбработкиСлужебное + ".Форма", ПараметрыОткрытия, РодительскаяФорма);
    КонецЕсли;
КонецПроцедуры

С замиранием сердца нажал кнопку формирования отчета и о чудо, он работает и с нужным отбором.

Автор статьи писала, что есть какие-то проблемы с пользовательскими настройками, но здесь они, слава богу, не используются.

Среда: УТ 11.5.7.394. Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *