Как реализовать вывод пиктограмм в журнале документов 1С:Предприятие 7.7

Программист 1С v7.7
← На главную

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

Шаг 1. Подготовка графического ресурса

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

Выясним основные технические параметры такого файла:

Шаг 2. Размещение картинки на форме журнала

Разберем важный нюанс, на котором часто спотыкаются разработчики. Чтобы колонка журнала «увидела» библиотеку картинок, этот ресурс должен быть физически размещен на форме списка или журнала.

Выполним следующие действия:

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

Шаг 3. Настройка колонки журнала

Теперь перейдем к настройке визуального ряда в самой таблице. Добавим в журнал новую текстовую колонку.

Рассмотрим параметры настройки колонки:

Шаг 4. Программная логика выбора иконки

Посмотрим на пример того, как система определяет, какую именно иконку из ленты показать. Индексация в 1С 7.7 начинается с 1. Если формула возвращает 0, в ячейке не будет отображаться ничего.

Проанализируем простейший случай: если реквизит документа ФлагОплаты имеет значение «Истина» (в 7.7 это число 1), нужно показать первую картинку, иначе — ничего. В поле «Формула» колонки можно написать:

ТекущийДокумент.ФлагОплаты

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

?(ТекущийДокумент.Статус = 1, 1, ?(ТекущийДокумент.Статус = 2, 2, 0))

В этом примере, если статус равен 1, отобразится первая иконка из ленты; если 2 — вторая; во всех остальных случаях колонка останется пустой.

Оптимизация производительности

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

Рассмотрим рекомендации по оптимизации:

  1. Избегайте сложных вычислений и запросов внутри формулы или функции, вызываемой из колонки.
  2. Если для определения иконки требуется анализировать данные из других справочников или регистров, лучше создать в самом документе числовой реквизит (например, ИндексИконки).
  3. Заполняйте этот реквизит при записи документа. Тогда в формуле колонки вы просто укажете: ТекущийДокумент.ИндексИконки. Это обеспечит максимальную скорость прокрутки журнала даже на больших объемах данных.

Использование пользовательской функции

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


Функция ПолучитьНомерИконки()
    Перем Рез;
    // Анализируем текущую строку журнала
    Если ТекущийДокумент.Проведен() = 1 Тогда
        Рез = 1; // Первая картинка — "Проведено"
    ИначеЕсли ТекущийДокумент.ПометкаУдаления() = 1 Тогда
        Рез = 2; // Вторая картинка — "Удалено"
    Иначе
        Рез = 0; // Ничего не выводим
    КонецЕсли;
    Возврат Рез;
КонецФункции

В свойствах колонки в поле «Формула» в таком случае нужно просто написать имя функции со скобками: ПолучитьНомерИконки().

Резюмируем: Для успешного вывода пиктограмм нам необходима корректная BMP-лента, объект «Картинка» на форме с уникальным идентификатором и формула, возвращающая порядковый номер иконки (начиная с единицы). Соблюдение этих условий позволит вам создавать профессиональные и наглядные журналы в системе 1С 7.7.

← На главную