Печать старой зачеркнутой цены на ценнике

Клиенту нужно печатать ценники со скидками. Старая цена должна быть выводиться зачеркнутой, новая — как обычная цена.

Причем в качестве старой берется текущая розничная цена, а в качестве новой — цена с заданным процентом скидки. На кассе товар пробивается со скидкой от розничной цены, поэтому товар на кассе пробьется по новой цене на ценнике. Тут все нормально.

Для начала я добавил на форму обработки поле для ввода процента скидки:

Код для вставки стандартный:

&НаСервере
Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	
	//Поле для ввода скидки
    ДобавляемыеРеквизиты = Новый Массив;
    ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("дор_ПроцентСкидки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), , ,Истина));
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);

	
	ПередЭлемент = Элементы.ГруппаТовары;
    Элемент = Элементы.Вставить("дор_ПроцентСкидки", Тип("ПолеФормы"), ПередЭлемент.Родитель, ПередЭлемент);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.Заголовок = "% скидки";
    Элемент.ПутьКДанным = "дор_ПроцентСкидки";
	
КонецПроцедуры

Но дальше у меня возник вопрос — а как передать процент скидки в модуль менеджера обработки, где и происходила печать типовым способом?

Я посмотрел код, где формируется передача параметров и решил, что если буду передавать параметры типовым способом, то заночую:

Поэтому решил воспользоваться трюком, который уже ранее применял при расчете зарплаты. Только на этот раз я решил воспользоваться параметром сеанса.

На Фреше такой способ не работает, приходится заводить регистр сведений, но эта база была хоть и на облаке, но на обычном.

Параметр сохраняю при начале печати:

&НаКлиенте
Процедура дор_ПечатьПеред(Команда)
	дор_СохранитьПараметрыНаСервер();
КонецПроцедуры

&НаСервере
Процедура дор_СохранитьПараметрыНаСервер()
	ПараметрыСеанса.дор_ПроцентСкидки = ЭтаФорма.дор_ПроцентСкидки;
КонецПроцедуры

И восстанавливаю уже при печати:


&Вместо("СформироватьПечатныеФормыЭтикетокИЦенников")
//Осипов - целиком заменяем процедуру
//Изменения помечены как Осипов
Функция прэ_СформироватьПечатныеФормыЭтикетокИЦенников(СтруктураНастроек, ПечататьЭтикетки, ПечататьЦенники)
					...					
					Для каждого Рисунок Из Область.Рисунки Цикл
					...
					КонецЦикла;
					
					//Осипов - ищем блок 
					ИскОбласть = Область.НайтиТекст("$ЦенаНовая",,,,ложь,,ложь); //ищем целиком, с учетом регистра
					Если ИскОбласть <> Неопределено Тогда
						
						ТекЦена = СтрокаТовары.Цена;
						ПроцентСкидки = ПараметрыСеанса.дор_ПроцентСкидки;
						НоваяЦена = Окр(ТекЦена * (100 - ПроцентСкидки)/100, -1);
						//Если НоваяЦена % 100 
						
						НовыйТекст = Формат(НоваяЦена, "ЧДЦ=0; ЧН=");
						ИскОбласть.Текст = СтрЗаменить(ИскОбласть.Текст, "$ЦенаНовая", НовыйТекст);
						
					КонецЕсли; //Конец $ЦенаНовая
					
					...
					
					Для Инд = 1 По СтрокаТовары[ПечатнаяФорма.ИмяКолонкиКоличество] Цикл // Цикл по количеству экземпляров.
					...
					КонецЦикла; // Цикл по количеству экземпляров.
					...
КонецФункции

Как видите, я целиком заменил процедуры печати из менеджера на свой код.

Кстати, я ищу не полное вхождение, а частичное, т.е. пользователь может к цене добавлять любую надпись, редактируя макет, например, «руб.».

Цену округляю до 10.

В макете ценника разметка выглядит так:

Однако, когда я присмотрелся, увидел, что линии нарисовал кривовато и поправил их, отдав дань перфекционизму:

В готово виде часть ценника с старой ценой выглядит так:

Среда: Розница 2.3.4.33, Платформа: 8.3.18.1289.
Режим совместимости 8.3.14
Время план: 2 час.

fixin

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

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

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

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