О форматировании прочерка в шаблонах документов УНФ
Пользователь жалуется, что установил формат, чтобы при нулевом НДС в Word-шаблоне прописывался ноль, в строках прописывается нормально, а в общем итоге прочерк:

Прочерк добавляется в модуле менеджера заказа ПриВыводеТаблицыЗапасыПараметровШаблона:

Стек при этом выглядит весьма непросто:


Искать, в чем разница между строками и итогом не стал, сделал заплатку в модуле менеджера, как уже раньше делал:
&После("ДобавитьПараметрыЗаказаПокупателяВШаблон") Процедура дор_ДобавитьПараметрыЗаказаПокупателяВШаблон(НазначениеШаблона, ПараметрыШаблона) МетаданныеЗаказа = Метаданные.Документы.ЗаказПокупателя; ШаблоныПечатиОфисныхДокументов.ДобавитьПараметрШаблона(ПараметрыШаблона, "ЗаказПокупателя.ВалютаДокумента", МетаданныеЗаказа.Реквизиты.ВалютаДокумента.Синоним); КонецПроцедуры &После("ЗаполнитьЗначенияПараметровЗаказа") Процедура дор_ЗаполнитьЗначенияПараметровЗаказа(ОбъектПечати, ОписаниеПараметров, ДополнительныеПараметры) //Осипов 2021-04-12 Для Каждого Эл ИЗ ОписаниеПараметров Цикл Если Эл.Ключ = "ЗаказПокупателя.ВалютаДокумента" Тогда Если ЗначениеЗаполнено(Эл.Формат) Тогда Эл.Значение = СокрЛП(ОбъектПечати.ВалютаДокумента[Эл.Формат]); Иначе Эл.Значение = СокрЛП(ОбъектПечати.ВалютаДокумента.НаименованиеПолное); КонецЕсли; //Прервать; ИначеЕсли Эл.Ключ = "ЗаказПокупателя.СуммаНДС" Тогда //Если хотели ноль, а получили прочерк, заменяем на ноль 26.03.04 Если Эл.Значение = "-" И Найти(Эл.Формат, "ЧН='0'") <> 0 Тогда Эл.Значение = "0"; КонецЕсли; КонецЕсли; КонецЦикла; КонецПроцедуры
Но это не помогло. Пришлось отлаживать процедуру ВывестиЗначениеПараметраДокумента модуля ШаблоныПечатиОфисныхДокументов:

Тут-то я и обнаружил, что значение успело обратно поменяться на прочерк:

Где оно поменялось, искать не стал, в итоге перенес заплатку уже в момент вывода в Word:
&Вместо("ПолучитьЗначениеПараметра") Функция дор_ПолучитьЗначениеПараметра(ОписаниеПараметров, ИмяПараметра) //26.03.04 подменяем ОписаниеПараметра = ОписаниеПараметра(ОписаниеПараметров, ИмяПараметра, Истина); Если ОписаниеПараметра = Неопределено Тогда Возврат ""; КонецЕсли; ЗначениеПараметра = ОписаниеПараметра.Значение; Если ИмяПараметра = "ЗаказПокупателя.СуммаНДС" Тогда //Если хотели ноль, а получили прочерк, заменяем на ноль 26.03.04 Если ОписаниеПараметра.Значение = "-" И Найти(ОписаниеПараметра.Формат, "ЧН='0'") <> 0 Тогда Возврат "0"; КонецЕсли; КонецЕсли; Результат = ПродолжитьВызов(ОписаниеПараметров, ИмяПараметра); Возврат Результат; КонецФункции
Кто так пишет, 1с?! Где однообразие, стройность?




Свежие комментарии