При разработке интерфейсов в 1С часто возникает задача сделать данные более наглядными. Одной из таких задач является отображение знака «+» перед положительными числами в колонках списков (например, в регистрах сведений или документах), чтобы они визуально уравновешивались с отрицательными числами, имеющими знак «-». По умолчанию 1С выводит минус для отрицательных значений, но скрывает плюс для положительных.
В этой статье мы подробно разберем, как реализовать вывод числа с лидирующим плюсом, проанализируем различные подходы — от простого визуального оформления до программных методов — и выясним, какой из них наиболее оптимален для производительности системы.
Этот метод является наиболее «правильным» и стандартным для управляемых форм. Он позволяет изменить только визуальное представление данных, не затрагивая само значение числа. Это критически важно для сохранения возможности правильной сортировки и автоматического подсчета итогов в подвалах списка.
Рассмотрим пошагово процесс настройки в конфигураторе:
Формат. В открывшемся окне конструктора форматной строки в поле «Формат» введем выражение: ЧФ=+Ч. Это укажет системе принудительно выводить знак плюс для положительных чисел.Значение > 0 (где Значение — это имя вашей колонки с числом).Преимущество этого подхода в том, что он работает на уровне платформы и не требует написания сложного кода в модуле формы. Проанализируем ситуацию: если число равно нулю, условие не сработает, и ноль выведется без знака, что соответствует стандартным требованиям бухгалтерского и управленческого учета.
Малоизвестный, но крайне эффективный способ заключается в использовании полной структуры форматной строки. Платформа 1С позволяет задать разные форматы для положительных, отрицательных и нулевых значений в одной строке, разделяя их точкой с запятой. Синтаксис выглядит так: ЧФ='<ФорматПоложительных>;<ФорматОтрицательных>;<ФорматНуля>'.
Разберем пример такой строки:
ЧФ='+ #0.00; - #0.00; 0.00'
Если мы установим такое значение в свойство «Формат» непосредственно в свойствах колонки пути к данным (без всякого условного оформления), система будет:
Этот метод еще более производителен, так как не требует от системы проверки условий оформления для каждой строки списка. Однако стоит учитывать, что в некоторых версиях платформы (особенно старых) такая сложная форматная строка может интерпретироваться неоднозначно, поэтому всегда проверяйте результат в режиме «1С:Предприятие».
Иногда требуется более сложная логика, например, если знак зависит не от самого числа, а от другого реквизита. В этом случае мы можем прибегнуть к изменению текста запроса динамического списка. Посмотрим на пример кода в запросе:
ВЫБРАТЬ
Регистр.Сумма КАК СуммаЧислом,
ВЫБОР
КОГДА Регистр.Сумма > 0 ТОГДА "+"
ИНАЧЕ ""
КОНЕЦ КАК ЗнакСуммы
ИЗ
РегистрСведений.НашРегистр КАК Регистр
После этого мы можем применить прием группировки колонок. В настройках формы объединим поле ЗнакСуммы и СуммаЧислом в одну группу с режимом отображения «В одной колонке». Таким образом, текстовый знак будет визуально прижат к числу. Однако помните: сортировка при клике на заголовок такой группы может работать непредсказуемо, так как она будет происходить по первому полю в группе.
Если вы создаете форму или добавляете колонки динамически из кода, вам потребуется программная установка оформления. Рассмотрим, как это сделать в процедуре ПриСозданииНаСервере:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
НовыйЭлемент = УсловноеОформление.Элементы.Добавить();
// Устанавливаем формат
ПолеФормата = НовыйЭлемент.Оформление.УстановитьЗначениеПараметра("Формат", "ЧФ='+ #0'");
// Настраиваем условие: Сумма > 0
ЭлементУсловия = НовыйЭлемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Сумма");
ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ЭлементУсловия.ПравоеЗначение = 0;
// Указываем оформляемое поле
ОформляемоеПоле = НовыйЭлемент.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Сумма");
КонецПроцедуры
Этот программный метод гарантирует, что оформление будет применено корректно, даже если пользователь сбросит настройки формы к стандартным.
Проанализируем возможные проблемы, с которыми сталкиваются разработчики:
Courier New) для этих полей.Выяснив причину того, почему стандартное форматирование не всегда подходит, мы можем сделать вывод: для большинства задач идеально подходит Условное оформление с параметром ЧФ=+Ч. Оно гибкое, понятное и сохраняет все математические свойства данных.