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

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

При разработке интерфейсов на платформе 1С:Предприятие 8 часто возникает задача сделать списки документов или табличные части более наглядными. Самый эффективный способ — добавить колонку с иконкой статуса (проведен, помечен на удаление, только записан), как это реализовано в стандартных журналах документов. В этой статье мы подробно разберем, как работает механизм «нарезки» картинок платформой, как правильно подготовить коллекцию пиктограмм и как вычислить нужный индекс в запросе.

Принцип работы коллекций картинок в 1С

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

Выясним, как платформа определяет, какой фрагмент показать. Механизм довольно прост: 1С берет высоту картинки (в нашем примере это 16 пикселей) и принимает её за размер стороны квадрата. Затем вся ширина картинки (144 пикселя) мысленно делится на эти отрезки. В результате получается массив из 9 виртуальных квадратов (144 / 16 = 9), каждый из которых имеет свой индекс, начиная с 0.

Важные требования к картинке-коллекции:

  1. Пропорции: Ширина картинки обязательно должна быть кратна её высоте. Если пропорции будут нарушены (например, 150х16), платформа все равно попытается разделить ширину на высоту, что приведет к «наползанию» иконок друг на друга и визуальным искажениям.
  2. Формат: Рекомендуется использовать PNG с прозрачным фоном для корректного отображения в разных темах интерфейса (например, «Такси»).

Настройка элементов формы

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

  1. Добавим в таблицу (или динамический список) колонку с типом Число. Именно в этой колонке будет храниться индекс иконки.
  2. В свойствах самой таблицы (элемента формы) найдем поле КартинкиСтрок. Сюда нужно выбрать нашу картинку-коллекцию (из общих картинок или из библиотеки).
  3. В свойствах конкретной колонки, где мы хотим видеть статус, установим свойство ПутьКДаннымКартинки, указав на нашу числовую колонку с индексом.
  4. Для самой колонки установим вид Поле картинки.

Если в ячейку с индексом передать значение -1, то платформа не будет отображать в этой строке никакую картинку.

Расчет индекса статуса в запросе

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

Допустим, наша коллекция содержит иконки в следующем порядке: индекс 6 — записан, индекс 7 — проведен, индекс 8 — помечен на удаление. Посмотрим на пример кода в запросе:


ВЫБОР 
    КОГДА Ссылка.Проведен ТОГДА 
        7 
    ИНАЧЕ 
        ВЫБОР 
            КОГДА Ссылка.ПометкаУдаления ТОГДА 8 
            ИНАЧЕ 6 
        КОНЕЦ 
КОНЕЦ КАК ИндексКартинки

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

Концепция «Триад» и смещение индексов

В типовых конфигурациях 1С (УТ 11, ERP, БП 3.0) принят стандарт использования триад. Это означает, что для каждого типа объекта в коллекции выделяется три последовательных позиции:

  1. N: Проведенный документ. После выполнения доработок или миграции данных полезно выполнить автоматическую сверку бухгалтерских и налоговых проводок для контроля корректности учёта.
  2. N + 1: Помечен на удаление. Для очистки базы от данных конкретного юридического лица можно применить обработку для выборочного удаления организаций, которая рекурсивно помечает связанные объекты.
  3. N + 2: Непроведенный (черновик).

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


// Сначала определяем базовое смещение для типа документа
ВЫБОР 
    КОГДА Тип = ТИП(Документ.ЗаказПокупателя) ТОГДА 0  // Иконки заказа в коллекции начинаются с 0
    КОГДА Тип = ТИП(Документ.РеализацияТоваровУслуг) ТОГДА 3 // Иконки реализации начинаются с 3
    ИНАЧЕ 6
КОНЕЦ
+
// Затем добавляем смещение статуса внутри триады
ВЫБОР 
    КОГДА ПометкаУдаления ТОГДА 1 
    КОГДА Проведен ТОГДА 0 
    ИНАЧЕ 2 
КОНЕЦ КАК ИндексКартинки

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

Использование системной библиотеки картинок

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

Рассмотрим полезные объекты из Библиотеки картинок:

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

Программное заполнение в Таблице Значений

Если вы работаете не с динамическим списком, а с обычной таблицей значений на форме, расчет можно выполнить в цикле при заполнении данных. Разберем небольшой пример кода на сервере:


&НаСервере
Процедура ЗаполнитьСтатусыНаСервере()
    Для Каждого СтрокаТЧ Из Объект.Товары Цикл
        // Допустим, в ТЧ есть колонка Ссылка на документ
        Если СтрокаТЧ.ДокументОснование.ПометкаУдаления Тогда
            СтрокаТЧ.ИндексСтатуса = 1;
        ИначеЕсли СтрокаТЧ.ДокументОснование.Проведен Тогда
            СтрокаТЧ.ИндексСтатуса = 0;
        Иначе
            СтрокаТЧ.ИндексСтатуса = 2;
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Альтернативный метод: Условное оформление

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

  1. Создайте колонку, связанную с любым реквизитом, и установите её вид как Поле картинки.
  2. В настройках условного оформления (на закладке «Условное оформление» формы или программно) добавьте новое правило.
  3. В условии укажите: Объект.Товары.Проведен Равно Истина.
  4. В оформлении выберите конкретную картинку (не индекс, а именно одиночную картинку) для свойства Картинка.

Важное замечание: Метод с индексами и свойством КартинкиСтрок работает значительно быстрее на больших объемах данных, так как платформе не нужно проверять правила оформления для каждой ячейки отдельно — она просто берет готовое число и отображает соответствующий фрагмент спрайта.

Таким образом, мы изучили универсальный механизм визуализации статусов. Используя расчет индексов в запросах и коллекции-спрайты, вы сможете создавать профессиональные и интуитивно понятные интерфейсы в своих решениях на платформе 1С.

← На главную