Условное оформление таблицы управляемой формы

17.05.13

Разработка - Работа с интерфейсом

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
УниверсальныйОтбор
.epf 20,21Kb
78
78 Скачать (1 SM) Купить за 1 850 руб.

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

Идея следующая – берем условное оформление из настроек компоновщика настроек и копируем в объект «Условное оформление» нашей формы.

Для этого в модуле формы необходимо добавить следующий код:

 

// Процедуры для работы с условным оформлением

&НаСервере
Процедура ПерезаполнитьУФФормы()

   
УсловноеОформление.Элементы.Очистить();

   
УсловноеОформлениеКомпоновщика = КомпоновщикНастроек.Настройки.УсловноеОформление;

    Для каждого
ЭлементУФ Из УсловноеОформлениеКомпоновщика.Элементы Цикл

       
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
       
ЭлементУсловногоОформления.Использование = ЭлементУФ.Использование;

       
// Заполняем поля к которым будет применятся условное оформление
       
СкопироватьПоляУсловногоОформления(ЭлементУсловногоОформления, ЭлементУФ);

       
// Заполняем отбор для условного офрмления
       
СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементУФ.Отбор);

       
// Заполняем элементы условного офрмления
       
СкопироватьЭлементОформления(ЭлементУсловногоОформления, ЭлементУФ);

    КонецЦикла;

КонецПроцедуры
// ПерезаполнитьУФФормы()

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


&НаСервере
Процедура СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика)

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

КонецПроцедуры
// СкопироватьОтборУсловногоОформления()

&НаСервере
Процедура СкопироватьЭлементОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика)

   
ЭлементыОформления = ЭлементКомпоновщика.Оформление.Элементы;

    Для каждого
ЭлементОформления Из ЭлементыОформления Цикл
        Если
ЭлементОформления.Использование Тогда
           
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(ЭлементОформления.Параметр, ЭлементОформления.Значение);
        КонецЕсли;
    КонецЦикла;

КонецПроцедуры
// СкопироватьЭлементОформления()

Как видно из кода, мы просто выполняем перенос настроек условного оформления из компоновщика настроек в условное оформление формы.

Процедуру ПерезаполнитьУФФормы() необходимо вызывать каждый раз, когда пользователь изменяет условное оформление программы (в обработке это процедура-обработчик кнопки Процедура ОтборИСортировка(Команда)).

 

Приведем скриншоты настроек.

Основная таблица настроек

Основная таблица настроек

 

Отбор по одному условию

Отбор по одному условию

 

Отбор с иерархией

Отбор с иерархией

 

Результат или как выглядит таблица формы

Как выглядит таблица формы

 

Недостатком метода является необходимость программного создания дополнительных условных оформлений, поскольку созданные с помощью конфигуратора будут затираться.

 

Обработку можно запускать на конфигурациях «Управление торговлей, редакция 11.1» и «Управление торговлей для Украины, редакция 3.0»

статья написана по материалам сайта avtomat.biz

См. также

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Богатый редактор картинок 1С предназначен для обработки изображений в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62986    44    59    

82

Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 1С:ERP Управление предприятием 2 Платные (руб)

Обработка предназначена для создания и управления дашбордами.

2400 руб.

29.06.2020    18855    26    6    

41

Работа с интерфейсом Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Редактор графов в 1С - внешний отчет, который формирует графы на основе таблицы значений, используя рисунки табличного документа. Есть возможность добавления, редактирования объектов графа и выгрузки результата в таблицу значений.

1500 руб.

06.10.2020    10227    7    7    

10

Работа с интерфейсом Программист Стажер Платформа 1С v8.3 Бесплатно (free)

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

20.08.2024    16813    mrXoxot    43    

121

Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

Пример простого и симпатичного прогресс-бара в динамическом списке, без картинок, используя редактирование запроса.

27.05.2024    7359    smielka    37    

100

Работа с интерфейсом Платформа 1С v8.3 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x 1С:Управление нашей фирмой 3.0 Бесплатно (free)

Добавьте новогоднего настроения! Расширение создает декорацию в виде гирлянды на некоторых формах объектов.

27.12.2023    14790    913    elcoan    47    

117

Инструментарий разработчика Работа с интерфейсом Программист Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

2 стартмани

10.04.2023    11915    162    acces969    31    

124
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dimk@a 10.07.13 10:54 Сейчас в теме
Спасибо, очень помогло. Отказались от использования динамических списков на форме, переделал все на таблицы формы... и какой же был ступор когда оказалось что у них нет условного оформления. Странная конечно концепция делать одно общее условное оформление на всю форму, но хоть так.
2. akomar 458 10.07.13 12:20 Сейчас в теме
Всегда пожалуйста. Я тоже сталкивался с проблемой УФ в таблицах значений и не совсем понимаю, почему 1С не сделает стандартный функционал, ведь порой динамический список не всегда подходит по производительности.
3. dimk@a 15.07.13 09:30 Сейчас в теме
Обнаружил ошибку - некорректно копируются группы в отборах. Надо так:

        // Заполняем отбор для условного офрмления
        СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления.Отбор, ЭлементУФ.Отбор);

&НаСервере
Процедура СкопироватьОтборУсловногоОформления(ЭлементУсловногоОформления, ЭлементКомпоновщика)

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

КонецПроцедуры // СкопироватьОтборУсловногоОформления()
Показать
4. GusevNA 361 24.11.13 13:18 Сейчас в теме
Автору респект - очень помогло! А уже начинал лопатить документацию :-)
5. bacila 15.06.15 17:56 Сейчас в теме
Оставьте свое сообщение