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

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

При разработке интерфейсов на управляемых формах часто возникает задача визуализировать статус документа с помощью иконок — для этого подойдёт отображение иконки скрепки при наличии файлов. Например, нужно показать, отгружен ли товар, оплачен ли счет или создан ли на основании реализации какой-либо другой документ. В этой статье мы подробно разберем, как реализовать вывод произвольных картинок в динамический список, не нарушая работу стандартных иконок проведения и удаления.

Метод 1: Использование вычисляемого индекса в запросе и коллекции картинок

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

Шаг 1. Подготовка коллекции картинок

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

Шаг 2. Настройка запроса динамического списка

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


ВЫБРАТЬ
    ДокументРеализация.Ссылка КАК Ссылка,
    ДокументРеализация.Номер КАК Номер,
    ДокументРеализация.Дата КАК Дата,
    ВЫБОР
        КОГДА ПередачаТовара.Ссылка ЕСТЬ НЕ NULL
            ТОГДА 1 // Индекс картинки "Отгружено" в коллекции
        ИНАЧЕ 2 // Индекс картинки "Не отгружено" в коллекции
    КОНЕЦ КАК ИндексСтатусаОтгрузки
ИЗ
    Документ.РеализацияТоваровУслуг КАК ДокументРеализация
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПередачаТовараКлиенту КАК ПередачаТовара
        ПО ПередачаТовара.ДокументОснование = ДокументРеализация.Ссылка

Важный нюанс: Если документов-оснований может быть несколько, используйте ВЫБРАТЬ РАЗЛИЧНЫЕ или сгруппируйте запрос по ссылке реализации, чтобы избежать дублирования строк в списке.

Шаг 3. Настройка элемента формы

После изменения запроса в списке полей появится наше поле ИндексСтатусаОтгрузки. Вытащим его на форму и настроим свойства колонки:

  1. Установим свойство Вид в значение Поле картинки.
  2. В свойство КартинкиЗначений выберем нашу созданную общую картинку (коллекцию).
  3. Убедимся, что путь к данным колонки указывает на наше поле ИндексСтатусаОтгрузки.

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

Метод 2: Использование условного оформления

Рассмотрим альтернативный способ, который удобен, если иконки уже есть в типовой библиотеке картинок или вы не хотите создавать специальные коллекции. Условное оформление позволяет «подменять» картинку в колонке на лету (удобно через конструктор интерфейсов и динамических списков 1С).

Посмотрим на алгоритм действий:

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

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

Метод 3: Программная установка в событии ПриПолученииДанныхНаСервере

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

Рассмотрим пример реализации:


&НаСервереБезКонтекста
Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки)
    Для Каждого СтрокаСписка Из Строки Цикл
        // Допустим, у нас есть сложная функция проверки
        Статус = ПроверитьСложныйСтатус(СтрокаСписка.Значение.Ссылка);
        
        Если Статус = "Проблема" Тогда
            СтрокаСписка.Оформление["КолонкаСтатус"].УстановитьЗначениеПараметра("Картинка", БиблиотекаКартинок.Ошибка);
        Иначе
            СтрокаСписка.Оформление["КолонкаСтатус"].УстановитьЗначениеПараметра("Картинка", БиблиотекаКартинок.Готово);
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Внимание: Данный метод следует использовать с осторожностью. Он вызывается каждый раз при прокрутке списка или обновлении данных. Сложные вычисления внутри цикла «Для каждого» могут привести к «тормозам» интерфейса у пользователя.

Типичные ошибки и способы их решения

Разберем важные моменты, с которыми сталкиваются программисты:

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

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

← На главную