Как программно изменить фон ячейки в макете 1С и вывести результат на форму

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

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

Обращение к области табличного документа

Для того чтобы изменить любое свойство ячейки (цвет фона, шрифт, текст), нам необходимо получить объект типа ОбластьЯчеекТабличногоДокумента. Это делается с помощью метода Область(). Мы можем обращаться к конкретной ячейке или к диапазону ячеек, указывая координаты: номер первой строки, номер первой колонки, номер последней строки и номер последней колонки.

Разберем базовый синтаксис изменения цвета фона:


// Получаем область (одна ячейка на пересечении 1-й строки и 5-й колонки)
Область = ТабДок.Область(1, 5, 1, 5);
// Устанавливаем черный цвет фона
Область.ЦветФона = WebЦвета.Черный;

Если нам нужно закрасить целую полосу (например, для имитации штриха), мы можем указать диапазон строк. Проанализируем пример, где мы закрашиваем вертикальную линию в первой колонке с 1-й по 10-ю строку:


ОбластьШтриха = ТабДок.Область(1, 1, 10, 1);
ОбластьШтриха.ЦветФона = Новый Цвет(0, 0, 0); // Черный цвет через RGB

Алгоритм генерации графического штрихкода

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

  1. Создаем новый объект ТабличныйДокумент.
  2. Организуем цикл по длине строки двоичного кода.
  3. Внутри цикла определяем цвет в зависимости от текущего символа.
  4. Устанавливаем минимальную ширину колонки, чтобы штрихкод был узким.

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


ТабДок = Новый ТабличныйДокумент;
ДвоичныйКод = "101100101"; // Пример данных

Для Поз = 1 По СтрДлина(ДвоичныйКод) Цикл
    Символ = Сред(ДвоичныйКод, Поз, 1);
    
    // Выделяем ячейку в первой строке и текущей колонке
    ТекущаяЯчейка = ТабДок.Область(1, Поз, 1, Поз);
    
    // Устанавливаем ширину колонки (0.5 - очень узкая)
    ТекущаяЯчейка.ШиринаКолонки = 0.5;
    
    Если Символ = "1" Тогда
        ТекущаяЯчейка.ЦветФона = WebЦвета.Черный;
    Иначе
        ТекущаяЯчейка.ЦветФона = WebЦвета.Белый;
    КонецЕсли;
КонецЦикла;

Визуализация результата на управляемой форме

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

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


// На сервере
Объект.РезультатПечати = ТабДок; 

Способ 2: Метод Показать().
Если результат нужно вывести в отдельном модальном или стандартном окне просмотра (как перед печатью на принтер), используем метод Показать().

ТабДок.Показать("Сформированный штрихкод");

Оптимизация и тонкие настройки

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

1. Отключение сетки. По умолчанию в табличном документе видны серые линии сетки. Для штрихкода они лишние. Отключим их командой: ТабДок.ОтображатьСетку = Ложь;.

2. Управление границами. Иногда между закрашенными ячейками могут проскакивать белые пиксели из-за установленных границ. Чтобы этого избежать, убедитесь, что у ячеек нет обрамления:


Область.ГраницаСлева = Новый Линия(ТипЛинииРисункаТабличногоДокумента.Нет);
Область.ГраницаСправа = Новый Линия(ТипЛинииРисункаТабличногоДокумента.Нет);

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

4. Использование цветов. Рекомендуется использовать системное перечисление WebЦвета. Это гарантирует, что цвета будут отображаться одинаково как в толстом клиенте, так и в веб-клиенте через браузер.

Альтернативный подход: Рисунки вместо ячеек

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


// Добавление прямоугольника (штриха)
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Прямоугольник);
Рисунок.Расположить(ТабДок.Область("R1C1:R10C1")); // Размещаем в определенных координатах
Рисунок.ЦветФона = WebЦвета.Черный;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.Нет);

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

← На главную