Вывод копеек отдельно в макет ценника. Розница 3.0
UPD 2023-06-13: доработал обработку рублей и исправил ошибку в выводе копеек.
Клиент захотел, чтобы в макете копейки выводились отдельно:
К сожалению, с помощью форматирования нельзя выделить дробную часть из числа (недостаток 1С, оставил пожелание).
Поэтому приходится брать в руки код и писать расширение модуля менеджера обработки ПечатьЭтикетокИЦенников:
&Вместо("СформироватьПечатныеФормыЭтикетокИЦенников") Функция M_СформироватьПечатныеФормыЭтикетокИЦенников(НастройкиПечати, ПечататьЭтикетки, ПечататьЦенники) КоллекцияПечатныхФорм = ПродолжитьВызов(НастройкиПечати, ПечататьЭтикетки, ПечататьЦенники); Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл ТабличныйДокумент = ПечатнаяФорма.ТабличныйДокумент; //Копейки Начало = Неопределено; Пока истина Цикл Область = ТабличныйДокумент.НайтиТекст("#КОП:", Начало); Если Область = Неопределено Тогда Прервать; КонецЕсли; Текст = Область.Текст; Текст = СтрЗаменить(Текст, "#КОП:", ""); Текст = СтрЗаменить(Текст, ",", "."); Поз = Найти(Текст, "."); Если Поз <> 0 Тогда Текст = Сред(Текст, Поз + 1); Иначе Текст = "00"; КонецЕсли; //Добавляем до десятков копеек если после запятой одно число Если СтрДлина(Текст) = 1 Тогда Текст = Текст + "0"; КонецЕсли; //Попытка //Текст = Формат(Число(Текст), "ЧЦ=2; ЧН=00; ЧВН="); //Исключение //КонецПопытки; Область.Текст = Текст; КонецЦикла; //Рубли Начало = Неопределено; Пока истина Цикл Область = ТабличныйДокумент.НайтиТекст("#РУБ:", Начало); Если Область = Неопределено Тогда Прервать; КонецЕсли; Текст = Область.Текст; Текст = СтрЗаменить(Текст, ",", "."); Текст = СтрЗаменить(Текст, "#РУБ:", ""); Поз = Найти(Текст, "."); Если Поз <> 0 Тогда Текст = Лев(Текст, Поз - 1); Иначе Текст = Текст; КонецЕсли; Попытка Текст = Формат(Число(Текст), "ЧН=0"); Исключение КонецПопытки; Область.Текст = Текст; КонецЦикла; //НПП - неразрывные пробелы убираем Начало = Неопределено; Пока истина Цикл Область = ТабличныйДокумент.НайтиТекст("#НПП:", Начало); Если Область = Неопределено Тогда Прервать; КонецЕсли; Текст = Область.Текст; Текст = СтрЗаменить(Текст, Символы.НПП, ""); Текст = СтрЗаменить(Текст, "#НПП:", ""); Область.Текст = Текст; КонецЦикла; КонецЦикла; Возврат КоллекцияПечатныхФорм; КонецФункции
К сожалению, функция печати ценников монолитна, в нее нельзя вмешаться, поэтому делаем обработку уже после формирования готового табличного документа с ценниками.
В макете поле выглядит так:
В начале поля добавляю префикс #КОП: подобрал такой префикс, чтобы не встречался в наименованиях товаров.
Для рублей также использую префикс #РУБ: потому что если использовать целочисленный формат, то цена округляется по правилам округления, в форматировании нет возможности получения просто целой части числа.
Также добавил команду-префикс #НПП: которая убирает неразрывные пробелы из ячейки.
Результат я привел в первой картинке этой статьи.
Для УТ 11.4 всё аналогично, только вместо функции — процедура с другим названием и параметрами:
&Вместо("СформироватьПечатныеФормыЭтикетокИЦенниковТоваров") Процедура дор_СформироватьПечатныеФормыЭтикетокИЦенниковТоваров(ДанныеПечати, ОбъектыПечати, КоллекцияПечатныхФормБСП) ПродолжитьВызов(ДанныеПечати, ОбъектыПечати, КоллекцияПечатныхФормБСП); ... КонецПроцедуры
Среда: Розница 3.0.3.147, УТ 11.4.13.46
Свежие комментарии