Как вывести пиктограммы статусов документов в Таблице Значений в 1С 7.7?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

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

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

Шаг 1. Подготовка и технические требования к файлу пиктограмм

Прежде чем приступать к конфигурированию, необходимо подготовить графический файл, который будет содержать набор иконок. Платформа 1С 7.7 предъявляет к нему жесткие технические требования:

  1. Формат файла: Картинка должна быть строго в формате Windows Bitmap (.bmp). Современные форматы (.png, .jpg, .gif) встроенными средствами платформы не поддерживаются.
  2. Структура файла: Все иконки должны быть объединены в одну горизонтальную ленту (библиотеку картинок). Платформа будет автоматически «нарезать» эту ленту на отдельные фрагменты.
  3. Размеры: Размер каждой отдельной пиктограммы в ленте должен составлять ровно 16 пикселей в ширину и 15 пикселей в высоту. Общий размер файла по высоте всегда равен 15 пикселям, а по ширине кратен 16 (например, для 5 иконок ширина файла составит 80 пикселей).
  4. Редактирование: Для создания и редактирования таких лент удобно использовать стандартную утилиту 1CV7IE.EXE (Редактор пиктограмм 1С), которая находится в каталоге установленной платформы рядом с исполняемым файлом 1cv7.exe. Она позволяет выравнивать иконки по сетке и упорядочивать их структуру.

Шаг 2. Настройка свойств Таблицы Значений в Конфигураторе

Для того чтобы связать подготовленный файл картинок с конкретной таблицей значений на форме, выполним следующие действия:

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

Шаг 3. Использование метода ВыводитьПиктограммы и математика сдвига

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

ТЗ.ВыводитьПиктограммы(<Колонка>, <Пиктограмма>);

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

ИндексКартинки = ЗначениеВЯчейке + НачальныйНомер - 1

Разберем, как это работает на практических примерах, если в нашей ленте загружены 3 пиктограммы (1-я — серый кружок, 2-я — зеленая галочка, 3-я — красный крестик):

Вариант А. Начальный номер равен 1 (по умолчанию):
Код инициализации: ТЗ.ВыводитьПиктограммы("СтатусЧисло", 1);

Вариант Б. Начальный номер равен 2 (сдвиг):
Код инициализации: ТЗ.ВыводитьПиктограммы("СтатусЧисло", 2);

Использование сдвига (параметр равен 2) крайне удобно, когда по умолчанию (при значении 0) в ячейке обязательно должна отображаться первая картинка из ленты, чтобы избежать появления пустых мест в таблице.

Шаг 4. Программное заполнение Таблицы Значений данными

Проанализируем пример кода, в котором мы создаем таблицу значений, настраиваем колонки, связываем пиктограммы и заполняем таблицу документами с установкой соответствующих статусов:


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

// Указываем колонку для вывода пиктограмм со сдвигом 1 (по умолчанию)
ТЗ.ВыводитьПиктограммы("СтатусКартинка", 1);

// Выборка документов для демонстрации наполнения ТЗ
Выборка = СоздатьОбъект("Документ.Реализация");
Выборка.ВыбратьДокументы(НачДата, КонДата);

Пока Выборка.ПолучитьДокумент() = 1 Цикл
    ТЗ.НоваяСтрока();
    ТЗ.Документ = Выборка.ТекущийДокумент();
    ТЗ.НомерДок = Выборка.НомерДок;
    
    // Определяем статус и записываем соответствующее число в ТЗ:
    // 1 - проведен (первая пиктограмма в ленте)
    // 2 - не проведен (вторая пиктограмма)
    // 3 - помечен на удаление (третья пиктограмма)
    Если Выборка.ПометкаУдаления() = 1 Тогда
        ТЗ.СтатусКартинка = 3;
    ИначеЕсли Выборка.Проведен() = 1 Тогда
        ТЗ.СтатусКартинка = 1;
    Иначе
        ТЗ.СтатусКартинка = 2;
    КонецЕсли;
КонецЦикла;

Шаг 5. Реализация интерактивного переключения статусов по клику

Поскольку стандартный элемент диалога «ТаблицаЗначений» на форме 1С 7.7 не предоставляет разработчику прямого предопределенного события «ПриКликеНаЯчейку», мы можем легко обойти это ограничение через механизм формулы элемента.

Разберем этот алгоритм по шагам:

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

Посмотрим на пример реализации интерактивной "галочки", которая меняет свое состояние при клике на колонку с пиктограммой:


Процедура ПриВыбореСтрокиТЗ()
    Перем ИмяКолонки;
    НомСтроки = ТЗ.ТекущаяСтрока();
    
    // Если кликнули по пустой области ТЗ
    Если НомСтроки = 0 Тогда
        Возврат;
    КонецЕсли;
    
    // Получаем имя колонки, на которую пришелся клик
    ТЗ.ТекущаяКолонка(ИмяКолонки);
    
    // Если пользователь кликнул по интерактивной колонке статуса
    Если ИмяКолонки = "СтатусКартинка" Тогда
        ТекущийСтатус = ТЗ.ПолучитьЗначение(НомСтроки, "СтатусКартинка");
        
        // Меняем значение (например, переключаем галочку: с 1 на 2 и наоборот)
        Если ТекущийСтатус = 1 Тогда
            НовыйСтатус = 2;
        Иначе
            НовыйСтатус = 1;
        КонецЕсли;
        
        ТЗ.УстановитьЗначение(НомСтроки, "СтатусКартинка", НовыйСтатус);
        
        // Принудительно обновляем отображение формы
        Форма.Обновить(0);
    КонецЕсли;
КонецПроцедуры

Шаг 6. Отличие вывода пиктограмм в ТЗ от Табличной Части (ТЧ) документа

Часто разработчики путают механизмы вывода картинок в Таблице Значений и в Табличной Части (многострочной части) документа. Выясним принципиальную разницу:

Шаг 7. Обход ограничений интерфейса с помощью внешних компонент

Стандартный механизм вывода пиктограмм в 1С 7.7 имеет ряд ограничений: нельзя гибко изменять высоту строк (из-за чего иконки размером 16x15 пикселей могут выглядеть мелко), отсутствуют встроенные механизмы раскраски строк и ячеек. Если перед вами стоит задача создать современный и функциональный интерфейс, рекомендуем обратить внимание на популярные внешние компоненты:

← На главную