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

01.12.19

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

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

Скачать файлы

Наименование Файл Версия Размер
[Взрыв шаблона!] Новый способ программной настройки условного оформления
.epf 13,31Kb
78
.epf 13,31Kb 78 Скачать

 

В "Файлах публикации" находится обработка, в которой есть весь необходимый код и примеры, рассматриваемые ниже. Обработка универсальная и не зависит от используемой конфигурации. Протестирована на платформе 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 Платные (руб)

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

6000 руб.

16.01.2015    61810    43    59    

80

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

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

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54409    16    21    

42

Управление дашбордами

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

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

2400 руб.

29.06.2020    16702    21    4    

35

Новогоднее оформление для 1С

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

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

27.12.2023    10749    750    elcoan    45    

106

Конструктор HTML, CSS и javascript

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

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

2 стартмани

10.04.2023    9628    151    acces969    31    

118

Модель состояния для MVC

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

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

1 стартмани

05.07.2022    3671    kalyaka    2    

27

Табло очереди заказов на экран телевизора

WEB-интеграция Работа с интерфейсом Платформа 1С v8.3 1С:Розница 2 Платные (руб)

Связка из веб-приложения и расширения для 1С: Розница 2.3.

3600 руб.

29.04.2022    12086    1    5    

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

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

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

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

Код действительно смотрится намного аккуратнее. Внутри обработки тоже несколько простых и аккуратно оформленных методов, которые можно использовать и развивать. Спасибо!
zqzq; cleaner_it; work.sable; +3 Ответить
4. brr 182 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 404 23.12.19 13:06 Сейчас в теме
Крутой функционал!
А у меня есть обработка, которая полностью генерирует код создания условного оформления на основе настроенного в конфигураторе:
https://infostart.ru/public/1171297/
Теперь вот думаю, может дописать сразу генерацию кода в вашем формате))
6. Igor030370 211 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 323 10.02.20 18:43 Сейчас в теме
(8) В конце публикации есть описание "Как это использовать у себя"
10. ILM 240 16.02.20 13:28 Сейчас в теме
Ну это же так "важно" для бизнеса? Настройки оформления, как бизнес жил без этого и жить дальше будет? (это был сарказм).
11. user976948 17.02.20 14:33 Сейчас в теме
Здесь последовательность вызовов смотрится органично
12. mszsuz 323 21.09.20 12:42 Сейчас в теме
А если немного доработать, то и условие сравнения можно писать сокращенно, н-р:
ОбъектНастройки = Обработки.НастройкаУсловногоОформления.Создать().Настроить(ЭтотОбъект.УсловноеОформление)
	
.Элемент("ТоварыСчетУчетаНДС")
	.ГруппаИЛИ()
		.Отбор("РассчитыватьСуммаВРознице",		"=", Истина)
		.ГруппаИ()
			.Отбор("Объект.НДСВключенВСтоимость",	"=", Истина)
			.Отбор("УчетАгентскогоНДС",		"=", Ложь)
		.КонецГруппы()	
		.Отбор("ЭтоКомиссия",				"=", Истина)
		.Отбор("Объект.ВидОперации",			"=", Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ВПереработку)
	.КонецГруппы()	
	.Оформление("Видимость", Ложь)
		
.Элемент("ТоварыЦенаВРознице")
	.ГруппаИЛИ()
		.ГруппаИ()
			.Отбор("РассчитыватьСуммаВРознице",	"=", Истина)
			.Отбор("ТоварыСвернуты",		"=", Истина)
			.Отбор("НТТ",				"=", Истина)
		.КонецГруппы()
		.Отбор("НТТ",					"=", Ложь)
		.Отбор("РассчитыватьСуммаВРознице",		"=", Ложь)
	.КонецГруппы()
	.Оформление("Видимость", Ложь)
	
.Элемент("ТоварыСтавкаНДСВРознице")	
	.ГруппаИЛИ()
		.Отбор("РазделениеПоСтавкамВРознице",		"=", Ложь)
		.Отбор("НТТ",					"=", Ложь)
		.Отбор("РассчитыватьСуммаВРознице",		"=", Ложь)
	.КонецГруппы()
	.Оформление("Видимость", Ложь)
		
.Элемент("ТоварыСуммаВРознице")	
	.ГруппаИЛИ()
		.Отбор("РассчитыватьСуммаВРознице",		"=", Ложь)			
		.Отбор("НТТ",					"=", Ложь)
	.КонецГруппы()
	.Оформление("Видимость", Ложь)
			
.Элемент("ТоварыСтавкаНДС, 
	 |ТоварыСуммаНДС, 
	 |ТоварыВсего, 
	 |ТоварыНомерГТД, 
	 |ТоварыСтранаПроисхождения, 
	 |ТоварыСпособУчетаНДС")	
	.Отбор("Объект.ВидОперации",				"=", Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ВПереработку)			
	.Оформление("Видимость", Ложь)
Показать
13. Sirruf 192 14.12.21 00:39 Сейчас в теме
А никому не приходило в голову сделать настройку УО форм из режима предприятия? Ищу и не нахожу ничего подобного....
14. ZergKRSK 129 24.10.23 09:45 Сейчас в теме
Метод объекта не обнаружен (Настроить)
15. mszsuz 323 24.10.23 09:50 Сейчас в теме
16. user1953699 12.11.23 09:04 Сейчас в теме
Круто, спасибо за труды.
Оставьте свое сообщение