Элегантное обновление печати этикеток и ценников. УТ 11.4
При обновлении с УТ 11.4 на УТ 11.5 столкнулся с доработкой в конфигурации у клиента в печати этикеток и ценников. И решил перенести ее в расширение.
Но в том виде, что она была реализована, перенести было сложно.
Там менялись схемы компоновки данных макета ПоляШаблонаПечатьТовары и ПоляШаблонаТовары, например:
Изменен не только тест запроса, но и поля.
А все для того, чтобы в макете ценника прописать цену со скидкой:
В общем программист взял обработку ПечатьЭтикетокИЦенников и изнасиловал ее, нисколько не беспокоясь об обновлениях.
Сначала я хотел повторить изменения в макеты, но потом плюнул и добавил все в элегантное расширение модуля менеджера обработки ПечатьЭтикетокИЦенников:
&Вместо("ПодготовитьСтруктуруДанных") Функция дор_ПодготовитьСтруктуруДанных(СтруктураНастроек, Режим) СтруктураРезультата = ПродолжитьВызов(СтруктураНастроек, Режим); ТаблицаРезультата = СтруктураРезультата.Таблица; ТаблицаРезультата.Колонки.Добавить("Скидка10"); ТаблицаРезультата.Колонки.Добавить("Скидка20"); ТаблицаРезультата.Колонки.Добавить("Скидка30"); ТаблицаРезультата.Колонки.Добавить("Скидка40"); ТаблицаРезультата.Колонки.Добавить("Скидка50"); ТаблицаРезультата.Колонки.Добавить("Скидка60"); ТаблицаРезультата.Колонки.Добавить("Скидка70"); Для Каждого Строка ИЗ ТаблицаРезультата Цикл Если Строка.Цена = NULL Тогда Цена = 0 Иначе Цена = Строка.Цена; КонецЕсли; Строка.Скидка10 = Окр(Цена * (1-0.1), 2); Строка.Скидка20 = Окр(Цена * (1-0.2), 2); Строка.Скидка30 = Окр(Цена * (1-0.3), 2); Строка.Скидка40 = Окр(Цена * (1-0.4), 2); Строка.Скидка50 = Окр(Цена * (1-0.5), 2); Строка.Скидка60 = Окр(Цена * (1-0.6), 2); Строка.Скидка70 = Окр(Цена * (1-0.7), 2); КонецЦикла; Соо = СтруктураРезультата.СоответствиеПолейСКДКолонкамТаблицы; Соо.Вставить("Скидка10", "Скидка10"); Соо.Вставить("Скидка20", "Скидка20"); Соо.Вставить("Скидка30", "Скидка30"); Соо.Вставить("Скидка40", "Скидка40"); Соо.Вставить("Скидка50", "Скидка50"); Соо.Вставить("Скидка60", "Скидка60"); Соо.Вставить("Скидка70", "Скидка70"); Возврат СтруктураРезультата; КонецФункции
И все корректно работает:
Среда: УТ 11.5.12.215. Объем: 1 час.
1. Неуниверсально
2. Много копипасты
1. не было цели универсальности. У клиента ограниченный бюджет.
2. да, понимаю, я знал, что будут укоры в копипасте, но это следствие пункта 1.
Зато выгода в простом обновлении. То, что наваял предыдущий деятель, обладало теми же недостатками, но еще и невозможностью обновления этого монолита.