[Взрыв шаблона!] Новый способ программной настройки условного оформления

01.12.19

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

Условное оформление форм и списков это великолепная возможность их настройки по заданным условиям. Но существенным недостатком является трудоемкость написания и сопровождения программного кода. В публикации предлагается новый способ программной настройки условного оформления.

Скачать файл

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

Наименование По подписке [?] Купить один файл
[Взрыв шаблона!] Новый способ программной настройки условного оформления
.epf 13,31Kb
84
84 Скачать (1 SM) Купить за 1 850 руб.

 

В "Файлах публикации" находится обработка, в которой есть весь необходимый код и примеры, рассматриваемые ниже. Обработка универсальная и не зависит от используемой конфигурации. Протестирована на платформе 1С:Предприятие 8.3 (8.3.13.1926).

 

Пример 1: Знакомство

Как нужно было делать раньше:

ЭлементОформления = ЭтотОбъект.УсловноеОформление.Элементы.Добавить();
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("А");
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Б");
ОтборОформления = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборОформления.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ХочуКрасненького");
ОтборОформления.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборОформления.ПравоеЗначение = Истина;
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Красный);
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Белый);

Как можно делать теперь:

ОбъектНастройки = РеквизитФормыВЗначение("Объект").Настроить(ЭтотОбъект.УсловноеОформление)
   .Элемент("А, Б")
      .Отбор("ХочуКрасненького", "Равно", Истина)
      .Оформление("ЦветФона", WebЦвета.Красный)
      .Оформление("ЦветТекста", WebЦвета.Белый)

 
Да! Этот код не только проходит проверку синтаксиса, но и работает)

 

Пример 2: Группы отборов

Разрешите мне не приводить типовой код, а сразу показать новый способ с группами отборов:

ОбъектНастройки = РеквизитФормыВЗначение("Объект").Настроить(ЭтотОбъект.УсловноеОформление)
	.Элемент("ТЗПримечание")
		.ГруппаИЛИ()
			.Отбор("ТЗ.К1", "Равно", 0)
			.Отбор("ТЗ.К2", "Равно", 0)
		.КонецГруппы()
		.Оформление("Текст", "К1 или К2 не заполнено");

// Какие-то доп.условия
Если ХочуКрасненького Тогда
	ОбъектНастройки
		.Оформление("ЦветТекста", WebЦвета.Красный);
КонецЕсли;

// Продолжение настройки   
ОбъектНастройки
	.Элемент("ТЗПримечание")
		.ГруппаИ()
			.Отбор("ТЗ.К1", "НеРавно", 0)
			.Отбор("ТЗ.К2", "НеРавно", 0)
			.Отбор("ТЗ.К1", "Меньше", Новый ПолеКомпоновкиДанных("ТЗ.К2"))
		.КонецГруппы()
      		.Оформление("Текст", "К1 < К2");
 
В конце описания каждой группы отборов добавляется КонецГруппы(). Эта конструкция позволяет избавиться от использования промежуточных переменных. Примеры с вложенными группами отборов смотрите ниже, в Примере 3.
 
Также, в этом примере видно, что код настройки не обязательно должен быть монолитным. ОбъектНастройки сохраняет в себе уже сделанные изменения и, при необходимости, позволяет продолжить настройку.
 

Пример 3: Сравнение типового (с использованием БСП) и нового способа

Под спойлером - код из типовой конфигурации.

 
Типовая настройка условного оформления с использованием БСП (код из БП 3.0)

 

Стена текста! Для того, чтобы написать свою программную настройку условного оформления нужно было найти пример в конфигурации, накопипастить оттуда нужные куски и исправить их под свои нужды.

А теперь то же самое новым способом:

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

Вывод

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

 

Как это использовать у себя

  • Скачайте обработку
  • Встройте в конфигурацию или расширение с именем "НастройкаУсловногоОформления"
  • При необходимости создания программной настройки условного оформления, пишите:
ОбъектНастройки = Обработки.НастройкаУсловногоОформления.Создать().Настроить(ЭтотОбъект.УсловноеОформление)
// и далее как в примерах
 

Смотрите также

Эта и многие другие возможности входят в состав [ЕХТ] Фреймворк для расширений.

Попробуйте, гарантирую - Вам понравится!

ЕХТ Условное оформление

См. также

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

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

2400 руб.

29.06.2020    18424    26    6    

40

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

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

20.08.2024    13964    mrXoxot    43    

114

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

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

27.05.2024    6393    smielka    37    

98

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

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

27.12.2023    13808    831    elcoan    47    

114

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

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

2 стартмани

10.04.2023    11381    161    acces969    31    

122

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

"MVC плохо применима в 1С" - познакомьтесь с моделью состояния и, возможно, ваше мнение поменяется! Представленное решение является эволюционным развитием идеи реализации MVC для 1С. В новой версии добавлены DSL для описания модели состояния, а также параметризация свойств параметров и элементов формы.

1 стартмани

05.07.2022    5159    kalyaka    6    

33

Работа с интерфейсом Программист Пользователь Платформа 1С v8.3 8.3.14 Конфигурации 1cv8 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Абонемент ($m)

Ещё с времен платформы 8.3.13 можно изменять цвет стилей интерфейса главного окна. Данное расширение позволит вам выбрать из подготовленных десятка стилей на свой вкус.

1 стартмани

01.07.2022    23449    380    rpgshnik    67    

94
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. kalyaka 1099 02.12.19 10:34 Сейчас в теме
Идея классная! Код действительно выглядит чище.

Что касается оформления полей формы, не связанных с таблицей, то есть ограничения платформы. По моему раньше, до какого-то релиза в платформе, вообще не было возможности влиять на оформление не табличных полей формы через УО. Теперь похоже можно, но не все настройки действуют, например следующее оформление не сработало:
ХочуКрасненького = Ложь;

ЭтотОбъект.УсловноеОформление.Элементы.Очистить();
ОбъектНастройки = РеквизитФормыВЗначение("Объект").Настроить(ЭтотОбъект.УсловноеОформление)
   .Элемент("А, Б")
      .Отбор("ХочуКрасненького", "Равно", Ложь)
      .Оформление("Видимость", Ложь)
3. mszsuz 332 02.12.19 11:48 Сейчас в теме
(1) Да, некоторые параметры оформления платформа просто игнорирует, причем молча.

(2) А может начнут и в типовых использовать - ну не враги же они сами себе, в конце концов? Пока примеры искал, видел даже кое-где #Область уже используют.
2. Vladimir Litvinenko 2894 02.12.19 11:22 Сейчас в теме
Бегло просматривая первые примеры показалось, что это описание штатных возможностей новой платформы. Даже обрадовался инженерной мысли разработчиков - не прошло и ста лет )) Потом вчитался.... увы нет. Не потому, что использовать нельзя, а потому, что в типовых конфигурациях такого подхода не увидим.

Код действительно смотрится намного аккуратнее. Внутри обработки тоже несколько простых и аккуратно оформленных методов, которые можно использовать и развивать. Спасибо!
zqzq; cleaner_it; work.sable; +3 Ответить
4. brr 184 02.12.19 13:55 Сейчас в теме
Текучий интерфейс рулит!
8. Andry.Boris 59 10.02.20 18:34 Сейчас в теме
Интересное решение.
Решил проверить.
платформе 1С:Предприятие 8.3 (8.3.14.1976)


{Обработка.Обработка1.Форма.Форма.Форма(4)}: Метод объекта не обнаружен (Настроить)
ОбъектНастройки = РеквизитФормыВЗначение("Объект").Настроить(ЭтотОбъект.УсловноеОформление)

Проверку проходит дормально, а вот исполнение хромает.
Подскажите, что делаю не так.
5. XilDen 408 23.12.19 13:06 Сейчас в теме
Крутой функционал!
А у меня есть обработка, которая полностью генерирует код создания условного оформления на основе настроенного в конфигураторе:
https://infostart.ru/public/1171297/
Теперь вот думаю, может дописать сразу генерацию кода в вашем формате))
6. Igor030370 212 10.02.20 09:05 Сейчас в теме
Вот что это напоминает.
Оператор With... End With (Visual Basic)

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

With objectExpression
[ statements ]
End With

Когда-то давно "пописывал" на VB)))
purgin; user764477; +2 Ответить
7. user764477 10.02.20 14:07 Сейчас в теме
(6)Тоже напомнило. и да, мне не хватало With в 1с
9. mszsuz 332 10.02.20 18:43 Сейчас в теме
(8) В конце публикации есть описание "Как это использовать у себя"
10. ILM 241 16.02.20 13:28 Сейчас в теме
Ну это же так "важно" для бизнеса? Настройки оформления, как бизнес жил без этого и жить дальше будет? (это был сарказм).
11. user976948 17.02.20 14:33 Сейчас в теме
Здесь последовательность вызовов смотрится органично
12. mszsuz 332 21.09.20 12:42 Сейчас в теме
А если немного доработать, то и условие сравнения можно писать сокращенно, н-р:
ОбъектНастройки = Обработки.НастройкаУсловногоОформления.Создать().Настроить(ЭтотОбъект.УсловноеОформление)
	
.Элемент("ТоварыСчетУчетаНДС")
	.ГруппаИЛИ()
		.Отбор("РассчитыватьСуммаВРознице",		"=", Истина)
		.ГруппаИ()
			.Отбор("Объект.НДСВключенВСтоимость",	"=", Истина)
			.Отбор("УчетАгентскогоНДС",		"=", Ложь)
		.КонецГруппы()	
		.Отбор("ЭтоКомиссия",				"=", Истина)
		.Отбор("Объект.ВидОперации",			"=", Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ВПереработку)
	.КонецГруппы()	
	.Оформление("Видимость", Ложь)
		
.Элемент("ТоварыЦенаВРознице")
	.ГруппаИЛИ()
		.ГруппаИ()
			.Отбор("РассчитыватьСуммаВРознице",	"=", Истина)
			.Отбор("ТоварыСвернуты",		"=", Истина)
			.Отбор("НТТ",				"=", Истина)
		.КонецГруппы()
		.Отбор("НТТ",					"=", Ложь)
		.Отбор("РассчитыватьСуммаВРознице",		"=", Ложь)
	.КонецГруппы()
	.Оформление("Видимость", Ложь)
	
.Элемент("ТоварыСтавкаНДСВРознице")	
	.ГруппаИЛИ()
		.Отбор("РазделениеПоСтавкамВРознице",		"=", Ложь)
		.Отбор("НТТ",					"=", Ложь)
		.Отбор("РассчитыватьСуммаВРознице",		"=", Ложь)
	.КонецГруппы()
	.Оформление("Видимость", Ложь)
		
.Элемент("ТоварыСуммаВРознице")	
	.ГруппаИЛИ()
		.Отбор("РассчитыватьСуммаВРознице",		"=", Ложь)			
		.Отбор("НТТ",					"=", Ложь)
	.КонецГруппы()
	.Оформление("Видимость", Ложь)
			
.Элемент("ТоварыСтавкаНДС, 
	 |ТоварыСуммаНДС, 
	 |ТоварыВсего, 
	 |ТоварыНомерГТД, 
	 |ТоварыСтранаПроисхождения, 
	 |ТоварыСпособУчетаНДС")	
	.Отбор("Объект.ВидОперации",				"=", Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ВПереработку)			
	.Оформление("Видимость", Ложь)
Показать
13. Sirruf 193 14.12.21 00:39 Сейчас в теме
А никому не приходило в голову сделать настройку УО форм из режима предприятия? Ищу и не нахожу ничего подобного....
14. ZergKRSK 130 24.10.23 09:45 Сейчас в теме
Метод объекта не обнаружен (Настроить)
15. mszsuz 332 24.10.23 09:50 Сейчас в теме
16. user1953699 12.11.23 09:04 Сейчас в теме
Круто, спасибо за труды.
Оставьте свое сообщение