Как зачеркнуть цену косой чертой на ценнике в 1С?

Программист 1С v8.3 (Управляемые формы) 1С:Розница Торговля и дистрибуция
← На главную

При оформлении акционных ценников в розничной торговле часто требуется наглядно показать старую и новую цену. Стандартное свойство шрифта Зачеркнутый проводит только горизонтальную черту посередине текста. Чтобы зачеркнуть цену диагональной или косой линией, необходимо использовать графические возможности табличного документа 1С. Рассмотрим подробнее, как это реализовать, с какими ограничениями платформы можно столкнуться и как решить возможные проблемы с отображением при печати.

Ограничения табличного документа 1С

Прежде чем перейти к реализации, проанализируем базовые особенности работы платформы с табличными документами:

  1. Отсутствие диагональных границ у ячеек. В отличие от электронных таблиц, таких как Microsoft Excel, в табличном документе 1С у ячейки можно настраивать только свойства ГраницаСверху, ГраницаСнизу, ГраницаСлева и ГраницаСправа. Сделать диагональную границу встроенным свойством ячейки невозможно.
  2. Ориентация штатной прямой линии. Графический объект РисунокТабличногоДокумента с типом ТипРисункаТабличногоДокумента.Прямая всегда проводится строго из левого верхнего угла ограничивающего прямоугольника в правый нижний угол. Сделать восходящую линию этим инструментом не получится.

Способ 1. Использование графического объекта «Прямая» в интерактивном макете

Разберем самый простой вариант добавления косой линии непосредственно в макете ценника через визуальный редактор конфигуратора или пользовательского макета:

  1. Откроем макет ценника в редакторе табличного документа.
  2. В главном меню перейдем в раздел Таблица — Рисунки — Прямая.
  3. Нарисуем линию поверх ячейки, в которую выводится старая цена.
  4. Откроем палитру свойств созданной линии и убедимся, что свойство Выводить на печать установлено в значение Истина. При необходимости настроим толщину и цвет линии (например, выберем красный цвет для акцента).

Важная причина, почему линия может не выводиться на печать:

Если линия нарисована в макете, но её границы хотя бы на пиксель выходят за пределы именованной секции ценника, платформа при выполнении метода ТабДок.Вывести(Область) не включает графический объект в вывод. Линия должна строго принадлежать той секции макета, которая отправляется на печать, либо перекрывать область целиком в пределах одной секции.

Способ 2. Программное создание и позиционирование линии

Чтобы избежать проблем со смещением линии при динамическом изменении длины цены или размеров строк ценника, наилучшим решением является программное добавление линии в коллекцию рисунков выводимой области. Метод Расположить() позволяет вписать графический объект ровно в границы целевой ячейки.

Посмотрим на пример кода формирования ценника:


// Получаем область ценника из макета
ОбластьЦенника = Макет.ПолучитьОбласть("Ценник");

// Заполняем параметры области
ОбластьЦенника.Параметры.СтараяЦена = СтараяЦена;
ОбластьЦенника.Параметры.НоваяЦена = НоваяЦена;

// Создаем графическую линию перечеркивания
ЛинияПеречеркивания = ОбластьЦенника.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Прямая);
ЛинияПеречеркивания.ВыводитьНаПечать = Истина;
ЛинияПеречеркивания.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.Сплошная, 2);
ЛинияПеречеркивания.ЦветЛинии = WebЦвета.Красный;

// Точно вписываем линию в границы ячейки со старой ценой
ЛинияПеречеркивания.Расположить(ОбластьЦенника.Область("СтараяЦена"));

// Выводим секцию в итоговый табличный документ
ТабДок.Вывести(ОбластьЦенника);

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

Способ 3. Прозрачная картинка поверх цены

Если требуется зачеркнуть цену снизу вверх (классический росчерк справа налево или слева направо наверх), стандартный объект Прямая не подойдет из-за фиксированного направления отрисовки. В такой ситуации разберем использование прозрачного изображения:

  1. Подготовим изображение в формате PNG с прозрачным фоном, на котором нарисована линия под нужным углом и в нужном направлении.
  2. Добавим объект в макет ценника как ТипРисункаТабличногоДокумента.Картинка поверх ячейки цены либо поместим его в общие картинки конфигурации.
  3. В свойствах объекта установим прозрачный фон и признак Выводить на печать. Также можно позиционировать картинку программно через метод Расположить(), аналогично первому способу.

Способ 4. Текстовое перечеркивание с помощью символов Unicode

Выясним еще один альтернативный способ, который не требует работы с графическими объектами табличного документа. Это актуально при выводе на специализированные термопринтеры ценников и этикеток, где векторная графика иногда масштабируется некорректно. Можно воспользоваться специальным комбинируемым символом Unicode U+0338 (Combining Long Solidus Overlay), который накладывает косую черту на предшествующий символ.

Рассмотрим функцию преобразования текста цены:


Функция ЗачеркнутьКосойЧертой(ИсходныйТекст)
    СимволСлеша = Символ(824); // U+0338
    Результат = "";
    Для Позиция = 1 По СтрДлина(ИсходныйТекст) Цикл
        Результат = Результат + Сред(ИсходныйТекст, Позиция, 1) + СимволСлеша;
    КонецЦикла;
    Возврат Результат;
КонецФункции

Обратите внимание: корректность отрисовки комбинированного символа зависит от шрифта, выбранного для ценника. Рекомендуется протестировать печать на используемом принтере перед внедрением этого способа.

← На главную