Как объединить сумму и валюту в одной колонке динамического списка 1С?

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

При разработке интерфейсов на управляемых формах часто возникает задача сделать отчет или список более компактным. Одной из частых просьб пользователей является визуальное объединение числового значения суммы и строкового наименования валюты в одной ячейке (например, «15 000 руб.» вместо двух отдельных колонок). Давайте разберем, как реализовать такую задачу в динамическом списке, какие инструменты для этого доступны и с какими ограничениями можно столкнуться.

Почему это не всегда тривиальная задача?

Основная сложность заключается в том, что динамический список в 1С базируется на запросе к базе данных. Когда мы пытаемся объединить число и строку в запросе, результат автоматически приводится к типу Строка. Это лишает нас двух важных преимуществ: стандартного отбора по сумме (сравнение «больше», «меньше») и возможности автоматического вывода итогов в подвале списка. Тем не менее, если визуальная составляющая приоритетнее, мы можем применить несколько подходов.

Решение 1: Использование условного оформления

Одним из самых простых способов «обмануть» интерфейс без изменения структуры запроса является настройка Условное оформление. Этот метод позволяет изменять визуальное представление данных, не затрагивая их тип в базе.

  1. Откройте форму списка в конфигураторе.
  2. Перейдите в свойства динамического списка и найдите раздел Условное оформление.
  3. Добавьте новый элемент оформления.
  4. В качестве поля оформления выберите колонку «Сумма».
  5. В поле Оформление найдите параметр Формат.
  6. Укажите строку формата, например: ЧФ='Ч руб.'.

Важное примечание: Этот метод имеет ограничение. Если в вашем списке используются разные валюты, универсальная настройка формата не подойдет, так как для каждой валюты потребуется создавать отдельное правило в условном оформлении, что может привести к избыточности настроек.

Решение 2: Программная обработка через ПриПолученииДанных

Если требуется высокая гибкость (например, валюта берется из текущей строки и должна отображаться динамически), эффективным методом будет использование события ПриПолученииДанных. Это событие вызывается при формировании каждой строки списка, что позволяет нам «на лету» подменять отображаемый текст ячейки.

Разберем пример реализации. Предположим, у нас есть колонки Сумма и Валюта, которые мы хотим скрыть или просто дополнить текстом в основной колонке:


&НаСервере
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
    Для Каждого Оформление Из ОформленияСтрок Цикл
        ДанныеСтроки = Оформление.ДанныеСтроки;
        Сумма = ДанныеСтроки.Сумма;
        Валюта = ДанныеСтроки.Валюта;
        
        // Форматируем сумму, убирая лишние разделители, если это необходимо
        СтрокаСуммы = Формат(Сумма, "ЧГ=0");
        
        // Объединяем значения
        Оформление.Ячейки.Сумма.Текст = СтрокаСуммы + " " + Валюта;
    КонецЦикла;
КонецПроцедуры

При использовании этого метода важно помнить о функции Формат(). Если вы просто сложите число и строку, система может добавить нежелательный разделитель групп разрядов или точку. Используя ЧГ=0, мы принудительно отключаем группировку разрядов, что позволяет получить «чистую» строку для отображения.

Анализ проблем при объединении

Работая над этой задачей, важно учитывать следующие аспекты:

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

← На главную