Подмена объекта для работы расширения
Не очень люблю писать процедуры расширения с типом «изменение и контроль». Поэтому всячески пытаюсь избежать этого.
Вот и в этот раз я выкрутился. Нужно было изменить процедуру модуля ВариантыОтчетовКлиент. В ней была ошибка, т.к. форма была без объекта, не знаю почему 1С не исправили, код типовой:
Процедура ОформитьПользователейВариантаОтчета(Форма, СбрасыватьПризнакИспользования = Истина) Экспорт Элементы = Форма.Элементы; Объект = Форма.Объект; ПараметрыКлиента = СтандартныеПодсистемыКлиент.ПараметрыРаботыКлиента(); ЦветНеактивныхЗначений = ПараметрыКлиента.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет; Если Не СбрасыватьПризнакИспользования Тогда Элементы.ПользователиВарианта.ЦветТекста = ?(Объект.ТолькоДляАвтора, ЦветНеактивныхЗначений, Новый Цвет); Возврат; КонецЕсли; КоличествоПомеченных = 0; Для Каждого Строка Из Форма.ПользователиВарианта Цикл КоличествоПомеченных = КоличествоПомеченных + Булево(Строка.Пометка); КонецЦикла; Объект.ТолькоДляАвтора = (КоличествоПомеченных = 0); Форма.Доступен = ?(Объект.ТолькоДляАвтора, "ТолькоДляАвтора", "УказаннымПользователям"); Элементы.ПользователиВарианта.ЦветТекста = ?(Форма.Объект.ТолькоДляАвтора, ЦветНеактивныхЗначений, Новый Цвет); КонецПроцедуры
Процедура обрабатывала выбор пользователя при добавлении пользователя, которому доступен сохраняемый вариант отчета.
Я сделал подмену объекта:
&Вместо("ОформитьПользователейВариантаОтчета") Процедура дор_ОформитьПользователейВариантаОтчета(Форма, СбрасыватьПризнакИспользования) Попытка ТекОбъект = Форма.Объект; ПродолжитьВызов(Форма, СбрасыватьПризнакИспользования); Исключение //Если есть ошибка, то скопируем код из обработки, поправленный ТекФорма = Новый Структура(); ТекФорма.Вставить("Элементы", Форма.Элементы); ТекФорма.Вставить("ТолькоДляАвтора", Форма.ВариантТолькоДляАвтора); ТекФорма.Вставить("ПользователиВарианта", Форма.ПользователиВарианта); ТекФорма.Вставить("Доступен", Форма.Доступен); ТекФорма.Вставить("Объект", ТекФорма); ПродолжитьВызов(ТекФорма, СбрасыватьПризнакИспользования); Форма.ВариантТолькоДляАвтора= ТекФорма.ТолькоДляАвтора; Форма.Доступен = ТекФорма.Доступен; КонецПопытки; КонецПроцедуры
Такой подменой удалось обмануть расширение, в которую передаю не форму, а структуру. Обратите внимание на обратную передачу значения полей формы «Доступен» и «ВариантТолькоДляАвтора«.
Я такой метод использовал уже ранее, например вместо выборки можно подсунуть коду таблицу значений, чтобы при необходимости менять поля выборки.
Среда: УНФ 1.6.25.152
Свежие комментарии