Еще один пример спускания контекста внутрь черного ящика. УНФ 1.6
Мне понадобилось в некоторых печатных формах делать замены в названии характеристик.
Где делать замены, я нашел — эта функция вызывалась из всех интересных мне отчетов:
Но заменять надо было не всегда, а только в определенных отчетах. А в функции нет сведений о том, какой отчет формируется.
Вот тут я и вспомнил свою методику спуска контекста вниз по стеку, о которой писал ранее.
Я завел параметр сеанса и процедуры по его установке:
//Модуль ТР_Сервер Функция ПолучитьЭтоПечатнаяФормаКлиенту() Экспорт УстановитьПривилегированныйРежим(Истина); Попытка Возврат ПараметрыСеанса.ТР_ЭтоПечатнаяФормаКлиенту; Исключение КонецПопытки; Возврат ложь; КонецФункции Процедура УстановитьЭтоПечатнаяФормаКлиенту(Значение) Экспорт УстановитьПривилегированныйРежим(Истина); ПараметрыСеанса.ТР_ЭтоПечатнаяФормаКлиенту = Значение; КонецПроцедуры
Далее я написал определение, нужно ли менять представление характеристики в зависимости от печатной формы (внутренней, для склада, или внешней, для клиента) для модуля ПечатьДокументов:
&НаСервере &Вместо("СформироватьПечатныеФормы") Функция ТР_СформироватьПечатныеФормы(ИменаМакетов, Отказ) ЭтоПечатнаяФормаКлиенту = ИменаПечатныхФормКлиента(Параметры.ИсточникДанных) //Для внешних обработок ИЛИ ИменаПечатныхФормКлиента(Параметры.ИменаМакетов) //Для встроенных макетов; ; ТР_Сервер.УстановитьЭтоПечатнаяФормаКлиенту(ЭтоПечатнаяФормаКлиенту); Результат = ПродолжитьВызов(ИменаМакетов, Отказ); Возврат Результат; КонецФункции &НаСервере Функция ИменаПечатныхФормКлиента(Знач Имя) Экспорт Имя = СокрЛП(ВРЕГ(Строка(Имя))); Возврат Найти(Имя, "СЧЕТ") <> 0 ИЛИ Найти(Имя, "КОММЕРЧ")<> 0 ИЛИ Найти(Имя, "ЗАКАЗ") <> 0 И Найти(Имя, "КЛИЕНТ") <> 0 ИЛИ Найти(Имя, "ЗАКАЗ") <> 0 И Найти(Имя, "ПОКУПАТЕЛ") <> 0 ; КонецФункции
Ну и теперь, обладая данными о том, с какой формой работаю, можно принимать решение, делать замены или нет:
&Вместо("ПредставлениеНоменклатурыДляПечати") Функция ТР_ПредставлениеНоменклатурыДляПечати(ПредставлениеНоменклатуры, ПредставлениеХарактеристики, ПредставлениеСерииНоменклатуры, ПредставлениеПартии, ПредставлениеКодаТНВЭД, НеобходимоВыделитьКакСоставНабора) //Осипов 2022-05-16 убираем нюансы из печатных форм клиенту //Новое представление нужно, т.к. если сюда передается ссылка, мы не можем ее менять НовоеПредставлениеХарактеристики = ПредставлениеХарактеристики; Если ТР_Сервер.ПолучитьЭтоПечатнаяФормаКлиенту() Тогда ПозУбрать = Найти(ВРЕГ(ПредставлениеХарактеристики), "- ХХ.СС."); Если ПозУбрать = 0 Тогда ПозУбрать = Найти(ВРЕГ(ПредставлениеХарактеристики), "- ХХ.НН."); КонецЕсли; Если ПозУбрать = 0 Тогда ПозУбрать = Найти(ВРЕГ(ПредставлениеХарактеристики), "- ММ КК"); КонецЕсли; Если ПозУбрать <> 0 Тогда НовоеПредставлениеХарактеристики = Лев(ПредставлениеХарактеристики, ПозУбрать - 1); КонецЕсли; КонецЕсли; Результат = ПродолжитьВызов(ПредставлениеНоменклатуры, НовоеПредставлениеХарактеристики, ПредставлениеСерииНоменклатуры, ПредставлениеПартии, ПредставлениеКодаТНВЭД, НеобходимоВыделитьКакСоставНабора); Возврат Результат; КонецФункции
Среда: 1.6.26.172. Объем: 1.5 час.
Свежие комментарии