Печать старой зачеркнутой цены на ценнике
Клиенту нужно печатать ценники со скидками. Старая цена должна быть выводиться зачеркнутой, новая — как обычная цена.
Причем в качестве старой берется текущая розничная цена, а в качестве новой — цена с заданным процентом скидки. На кассе товар пробивается со скидкой от розничной цены, поэтому товар на кассе пробьется по новой цене на ценнике. Тут все нормально.
Для начала я добавил на форму обработки поле для ввода процента скидки:
Код для вставки стандартный:
&НаСервере Процедура дор_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) //Поле для ввода скидки ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("дор_ПроцентСкидки", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15, 2)), , ,Истина)); ИзменитьРеквизиты(ДобавляемыеРеквизиты); ПередЭлемент = Элементы.ГруппаТовары; Элемент = Элементы.Вставить("дор_ПроцентСкидки", Тип("ПолеФормы"), ПередЭлемент.Родитель, ПередЭлемент); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.Заголовок = "% скидки"; Элемент.ПутьКДанным = "дор_ПроцентСкидки"; КонецПроцедуры
Но дальше у меня возник вопрос — а как передать процент скидки в модуль менеджера обработки, где и происходила печать типовым способом?
Я посмотрел код, где формируется передача параметров и решил, что если буду передавать параметры типовым способом, то заночую:
Поэтому решил воспользоваться трюком, который уже ранее применял при расчете зарплаты. Только на этот раз я решил воспользоваться параметром сеанса.
На Фреше такой способ не работает, приходится заводить регистр сведений, но эта база была хоть и на облаке, но на обычном.
Параметр сохраняю при начале печати:
&НаКлиенте Процедура дор_ПечатьПеред(Команда) дор_СохранитьПараметрыНаСервер(); КонецПроцедуры &НаСервере Процедура дор_СохранитьПараметрыНаСервер() ПараметрыСеанса.дор_ПроцентСкидки = ЭтаФорма.дор_ПроцентСкидки; КонецПроцедуры
И восстанавливаю уже при печати:
&Вместо("СформироватьПечатныеФормыЭтикетокИЦенников") //Осипов - целиком заменяем процедуру //Изменения помечены как Осипов Функция прэ_СформироватьПечатныеФормыЭтикетокИЦенников(СтруктураНастроек, ПечататьЭтикетки, ПечататьЦенники) ... Для каждого Рисунок Из Область.Рисунки Цикл ... КонецЦикла; //Осипов - ищем блок ИскОбласть = Область.НайтиТекст("$ЦенаНовая",,,,ложь,,ложь); //ищем целиком, с учетом регистра Если ИскОбласть <> Неопределено Тогда ТекЦена = СтрокаТовары.Цена; ПроцентСкидки = ПараметрыСеанса.дор_ПроцентСкидки; НоваяЦена = Окр(ТекЦена * (100 - ПроцентСкидки)/100, -1); //Если НоваяЦена % 100 НовыйТекст = Формат(НоваяЦена, "ЧДЦ=0; ЧН="); ИскОбласть.Текст = СтрЗаменить(ИскОбласть.Текст, "$ЦенаНовая", НовыйТекст); КонецЕсли; //Конец $ЦенаНовая ... Для Инд = 1 По СтрокаТовары[ПечатнаяФорма.ИмяКолонкиКоличество] Цикл // Цикл по количеству экземпляров. ... КонецЦикла; // Цикл по количеству экземпляров. ... КонецФункции
Как видите, я целиком заменил процедуры печати из менеджера на свой код.
Кстати, я ищу не полное вхождение, а частичное, т.е. пользователь может к цене добавлять любую надпись, редактируя макет, например, «руб.».
Цену округляю до 10.
В макете ценника разметка выглядит так:
Однако, когда я присмотрелся, увидел, что линии нарисовал кривовато и поправил их, отдав дань перфекционизму:
В готово виде часть ценника с старой ценой выглядит так:
Среда: Розница 2.3.4.33, Платформа: 8.3.18.1289.
Режим совместимости 8.3.14
Время план: 2 час.
Свежие комментарии