При разработке интерфейса в 1С часто возникает задача визуального выделения определенных строк или ячеек в списках. Например, нам нужно, чтобы карточка банковской карты окрашивалась в зеленый цвет, если она «Активна», и в красный, если она «Пассивна». Давайте разберем, как реализовать это в обычных формах 1С 8.1.
Для управления оформлением строк и ячеек в табличном поле используется событие ПриПолученииДанных. Это событие возникает при выводе каждой строки на экран, что позволяет нам «на лету» менять свойства оформления (цвет фона, цвет текста, шрифт).
Рассмотрим по шагам, как написать этот код:
ПриПолученииДанных.В самой процедуре мы будем перебирать коллекцию ОформленияСтрок, которая передается в событие, и для каждой строки проверять статус карты. Важно помнить, что если нам нужно изменить цвет не всей строки, а только конкретной ячейки, мы обращаемся к коллекции Ячейки.
Процедура СправочникСписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для каждого ОформлениеСтроки Из ОформленияСтрок Цикл
// Проверяем значение реквизита в строке
Если ОформлениеСтроки.ДанныеСтроки.СтатусКарты = Перечисления.СтатусКарты.Активная Тогда
// Указываем ячейку по имени колонки, например, Статус
ОформлениеСтроки.Ячейки.Статус.ЦветФона = WebЦвета.Зеленый;
ОформлениеСтроки.Ячейки.Статус.ЦветТекста = WebЦвета.Черный;
ИначеЕсли ОформлениеСтроки.ДанныеСтроки.СтатусКарты = Перечисления.СтатусКарты.НеАктивная Тогда
ОформлениеСтроки.Ячейки.Статус.ЦветФона = WebЦвета.Красный;
ОформлениеСтроки.Ячейки.Статус.ЦветТекста = WebЦвета.Черный;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Важное примечание: при обращении к ячейке указывайте именно имя элемента управления, которое вы задали для этой колонки в свойствах формы, а не имя самого реквизита объекта.
Помимо раскраски списков, часто возникает вопрос хранения графических файлов. Существует два основных способа: хранение внутри базы данных (в типе ХранилищеЗначения) и хранение во внешней папке на диске.
Этот метод считается наиболее простым в администрировании. Когда вы сохраняете фото непосредственно в объекте 1С, вам не нужно беспокоиться о сетевых путях и доступе к папкам — все картинки «живут» внутри файла базы данных или SQL-сервера.
// При сохранении фото:
Данные = Новый ДвоичныеДанные(ИмяФайла);
Объект.Фото = Новый ХранилищеЗначения(Данные, Новый СжатиеДанных(9));
Минус этого метода в том, что размер базы данных будет расти пропорционально количеству и качеству загружаемых изображений. Это может усложнить создание резервных копий и обслуживание базы.
Если вы хотите, чтобы база оставалась компактной, вы можете хранить только Строку с путем к файлу на диске. В этом случае в 1С вы храните путь вида C:\Images\Product123.jpg.
Разберем основные принципы этого подхода:
\\Server\Share\Images\), чтобы все пользователи могли получить доступ к картинке независимо от того, на каком компьютере они работают.Выбор между этими двумя способами зависит от ваших приоритетов: удобство бэкапа и простота (хранилище) или компактность базы данных и высокая скорость работы с файловой системой (внешние файлы).
Экспериментируйте, пробуйте оба метода на тестовых данных, и вы быстро поймете, какой вариант лучше подходит для вашей архитектуры системы!