Элегантное обновление печати этикеток и ценников. УТ 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 час.

fixin

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

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

комментария 2

  1. AdFixina:

    1. Неуниверсально
    2. Много копипасты

    • 1. не было цели универсальности. У клиента ограниченный бюджет.
      2. да, понимаю, я знал, что будут укоры в копипасте, но это следствие пункта 1.

      Зато выгода в простом обновлении. То, что наваял предыдущий деятель, обладало теми же недостатками, но еще и невозможностью обновления этого монолита.

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

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