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

Условное оформление формы в 1с 8 служит для управления видимостью, доступностью, цветом элементов таблиц управляемой формы (а также оно используется в СКД и динамических списках). Удобство его использования заключается в том, что вы один раз задаете условие по которому должно меняться оформление вашей формы. После этого при работе пользователя с формой, при срабатывании условия оформление будет меняться автоматически. Не нужно использовать события формы и писать лишний код.

Следует заменить, что условное оформление форм работает только в конфигурациях использующих управляемое приложение (Бухгалтерия 3.0, ЗУП 3.0/3.1, Управление торговлей 11 и т.п.)

Условное оформление 1с. Интерактивная настройка

Еще один плюс условного оформления — его можно настроить не написав ни строчки кода. Для этого в форме необходимо:

  • Открыть свойства формы -> вкладка оформление -> УсловноеОформление Открыть;

Открыть условное оформление формы

  • Откроется таблица Настройка условного оформления;
  • В первом столбце необходимо выбрать оформление (или сразу несколько);
  • Во втором столбце задать условие, по которому будет срабатывать выбранное оформление;
  • С третьем столбце необходимо выбрать элементы формы на которые будет действовать выбранное оформление.

Настройка условного оформления

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

Условное оформление формы. Пример интерактивной настройки

Для примера мной была написана простейшая обработка, на формы которой добавлен реквизит с типом ТаблицаЗначений, с тремя колонками. А также три реквизита с типом булево. Скачать обработку можно Здесь.

Форма обработки выглядит так:

Настроим следующее условное оформление данной формы: при установке реквизита СкрытьКолонку1 в значение Истина, в таблице форме скрывать реквизит Колонка1.

  • Откроем настройку условного оформления формы;
  • Добавим в таблицу новую строку;
  • В колонке Оформление нажмем на кнопку с тремя точками и выберем параметр Видимость, значение Нет;

  • В колонке Условие нажмем на кнопку с тремя точками, в открывшемся окне добавим новый отбор. Пропишем туда следующие значения: Левое значение — СкрытьКолонку1, Вид сравнения — Равно, Правое значение — Да;

  • В колонке Оформляемые поля нажмем на кнопку с тремя точками, в открывшемся окне добавим новый элемент, и выберем значение ТаблицаФормыКолонка1;
  • В итоге у нас должна получиться настройка условного оформления, такая же как на следующем рисунке;

  • Нажмем кнопку Ок, сохраним нашу обработку и запустим ее в режиме 1С Предприятие;
  • При установке флажка Скрыть колонку 1, будут происходить следующие изменения в оформлении формы.

  

Условное оформление 8.3. Пример программной настройки

Используя ту же внешнюю обработку, что и в предыдущем пункте, приведем пример программной настройки условного оформления. Необходимо сделать следующее: при установке реквизита ПоменятьЦветКолонки2 в значение Истина, в таблице формы раскрашивать фон Колонки 2, при установке реквизита СделатьНедоступнойКолонку3 в значение Истина, в таблице формы делать недоступным реквизит Колонка3.

В модуле формы создадим серверную процедуру, назовем ее УстановитьУсловноеОформление и сразу же допишем ее вызов в процедуре ПриСозданииНаСервере.

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

&НаСервере
Процедура УстановитьУсловноеОформление()

КонецПроцедуры

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

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

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

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

ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаФормыКолонка2.Имя);

ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПоменятьЦветКолонки2");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;

Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 0, 0));

Таким образом мы создали оформление для второй колонки таблицы. Для третьей колонки оно делается аналогичным образом, поэтому не будем на нем подробно останавливаться. Итоговый код процедуры УстановитьУсловноеОформление будет выглядеть следующим образом:

&НаСервере
Процедура УстановитьУсловноеОформление()

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

    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаФормыКолонка2.Имя);

    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПоменятьЦветКолонки2");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Истина;

    Элемент.Оформление.УстановитьЗначениеПараметра("ЦветФона", Новый Цвет(255, 0, 0));
	
    Элемент = УсловноеОформление.Элементы.Добавить();

    ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
    ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаФормыКолонка3.Имя);

    ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СделатьНедоступнойКолонку3");
    ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ОтборЭлемента.ПравоеЗначение = Истина;

    Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь);

КонецПроцедуры

Напомню, что скачать обработку написанную на основе разобранных примеров можно Здесь.


Все статьи

  • 1С Hard Skills

  • 23.02.2020

Эту и другие технические статьи написали наши программисты 1С и получили за них премии. Если вы тоже работаете с 1С и любите делиться опытом, приходите разработчиком в Neti

Рассмотрим пример программного добавления элементов условного оформления на форму документа. Сделаем так, чтобы возможность редактирования строки таблицы грУсловияОплатыТаблица зависела от реквизита формы АктивныйСчет (тип Булево) и от реквизита таблицы Редактирование (тип Булево) (рис. 1):

УФ: Программное добавление элементов условного оформления формы в 1С

Рис. 1. Реквизиты формы, от которых будет зависеть возможность редактирования строки таблицы

Если АктивныйСчет = Истина и Объект.грУсловияОплатыТаблица.Редактирование = Ложь, тогда редактирование строки таблицы будет недоступно: установим свойство ТолькоПросмотр = Истина. Можно добавить аналогичный код для случая, когда АктивныйСчет = Истина, Объект.грУсловияОплатыТаблица.Редактирование = Истина, и включить возможность редактирования строки: установить свойство ТолькоПросмотр = Ложь.

Эти условия можно задать в свойстве формы УсловноеОформление (рис. 2 и рис. 3):

УФ: Программное добавление элементов условного оформления формы в 1С

Рис. 2. Свойство формы УсловноеОформление

УФ: Программное добавление элементов условного оформления формы в 1С

Рис. 3. Настройка условного оформления

Иногда в коде очищают свойство формы УсловноеОформление и все заданные настройки (рис. 2 и рис. 3) пропадают. В таких случаях можно программно задать нужное условное оформление.

Описание текста процедуры модуля формы для программного добавления элементов условного оформления

  1.  Название процедуры может быть любым; ее вызов может быть, например, из обработчика события формы ПриСозданииНаСервере.
  2.  Очищаем условное оформление формы (для примера, не обязательно).
  3.  Добавляем новый элемент условного оформления ЭлементОформления.
  4.  Устанавливаем свойство оформления ТолькоПросмотр = Истина.
  5.  Добавляем условия (отборы), при выполнении которых будет действовать настройка.
  6.  В примере это два условия И, поэтому добавляем группу элементов отбора ГруппаЭлементовОтбора с типом группы ГруппаИ, и два элемента отбора ЭлементОтбора (для АктивныйСчет = Истина и Объект.грУсловияОплатыТаблица.Редактирование = Ложь).
  7.  Указываем поля, для которых будет действовать настройка.

В нашем примере это будет вся строка таблицы грУсловияОплатыТаблица, поэтому добавляем одно поле ПолеОформления с названием таблицы грУсловияОплатыТаблица.

&НаСервере
Процедура УстановитьУсловноеОформление()         
                УсловноеОформление.Элементы.Очистить();
               
                ЭлементОформления = УсловноеОформление.Элементы.Добавить();


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


ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();       
               ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("грУсловияОплатыТаблица");
               ПолеОформления.Использование = Истина;
КонецПроцедуры

Эту статью хорошо дополняют

Раздел конфигурирования
Прикладные объекты

Условное оформление управляемых форм.

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

Но вот с условным оформлением управляемых формы мы встречаемся реже. Хотя это не менее мощный, функциональный и нужный механизм.
Что же он из себя представляет. А все то же самое. По какому-либо условию мы можем настроить представления или свойства полей табличных элементов формы и они будут изменяться прямо налету.

Я говорю о полях динамических списков и табличных полей. Здесь из кода мы можем обратиться к отдельной колонке и установить свойства сразу для всей колонки, а вот установить свойства отдельного поля не можем.

ЦитироватьВажно!!! Многие с этим сталкиваются и тратят впустую время. Условное оформление не работает для обычных полей формы (не табличных).

Где это может быть использовано помимо раскраски полей. Ну классический пример это представление видов субконто в табличной части. Для бухгалтерии стандартно их может быть три. И обычно они выстраиваются в одном поле одно под другим. Поскольку в каждой строке может быть свой счет, то и состав аналитик может отличаться. И вообще если в каждой строке выводить по 3 аналитики, то это занимает очень много места. А зачем это делать если нам допустим где-то достаточно одного субконто, где-то двух.

Настройка свойствами формы

Рассмотрим на примере нами созданной табличной части в обработке.

Создадим обработку, куда добавим табличную часть с тремя реквизитами Субконто, а так же добавим реквизит КоличествоСубконто, которое будет указывать на количество субконто в строке.

Настройка условного оформления формы находится в свойствах формы на закладке Оформление.

Теперь наша задача указать программе, что при значении в строке поля КоличествоСубконто 1 должно отображаться только Субконто1, при значении 2: Субконото1 и Субконто2, при значении 3: Субконто1, Субконто2, Субконто3.

Для этого служит форма настройки условного оформления.

В колонке Оформляемые поля укажем поля Субконто1, Субконто2, Субконто3. Поскольку для каждого поля будет разное оформление, то заведем 3 строки.

Укажем, что оформлять будем свойство видимость.

А так же настроим условие при котором видимость будет выключаться.

Смотрим что получилось в предприятии. Добавим при этом строки в табличную часть и расставив значения количество субконто.

Как видно в разных строках отображается разное количество полей.

Настройка кодом

Помимо настройки с помощью свойств данную настройку можно произвести с помощью программного кода.
Если вы используете конфигурацию, построенную на БСП, выглядеть это будет так (это относится ко всем типовым конфигурациям):

ЭлементУО = УсловноеОформление.Элементы.Добавить();
КомпоновкаДанныхКлиентСервер.ДобавитьОформляемоеПоле(ЭлементУО.Поля, "ТабличнаяЧастьСубконто2");

ОбщегоНазначенияКлиентСервер.ДобавитьЭлементКомпоновки(ЭлементУО.Отбор,
"ТабличнаяЧастьКоличествоСубконто", ВидСравненияКомпоновкиДанных.Меньше, 2);

ЭлементУО.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

В случае, если БСП не используется код будет немного длиннее. Просто приведу типовые процедуры из того же БСП.

Функция ДобавитьОформляемоеПоле(КоллекцияОформляемыхПолей, ИмяПоля) Экспорт

ПолеЭлемента = КоллекцияОформляемыхПолей.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(ИмяПоля);

Возврат ПолеЭлемента;

КонецФункции

Функция ДобавитьЭлементКомпоновки(ОбластьДобавления,
Знач ИмяПоля,
Знач ВидСравнения,
Знач ПравоеЗначение = Неопределено,
Знач Представление  = Неопределено,
Знач Использование  = Неопределено,
знач РежимОтображения = Неопределено,
знач ИдентификаторПользовательскойНастройки = Неопределено) Экспорт

Элемент = ОбластьДобавления.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяПоля);
Элемент.ВидСравнения = ВидСравнения;

Если РежимОтображения = Неопределено Тогда
Элемент.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный;
Иначе
Элемент.РежимОтображения = РежимОтображения;
КонецЕсли;

Если ПравоеЗначение <> Неопределено Тогда
Элемент.ПравоеЗначение = ПравоеЗначение;
КонецЕсли;

Если Представление <> Неопределено Тогда
Элемент.Представление = Представление;
КонецЕсли;

Если Использование <> Неопределено Тогда
Элемент.Использование = Использование;
КонецЕсли;

// Важно: установка идентификатора должна выполняться
// в конце настройки элемента, иначе он будет скопирован
// в пользовательские настройки частично заполненным.
Если ИдентификаторПользовательскойНастройки <> Неопределено Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИдентификаторПользовательскойНастройки;
ИначеЕсли Элемент.РежимОтображения <> РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный Тогда
Элемент.ИдентификаторПользовательскойНастройки = ИмяПоля;
КонецЕсли;

Возврат Элемент;

КонецФункции

Условное оформление табличной части документа есть ли способ реализовать?

Я
   Novartis

08.05.13 — 21:08

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

Имеем документ с табличной частью, в таблице представлен список сотрудников, в первой колонке находится полное ФИО сотрудника

Например: Иванов Иван Иванович — но пользователь должен видеть: Иванов И.И. и только при редактировании поля появляется полное ФИО.

Ранее задача решалась так по событию ПриВыводеСтроки:

ОформлениеСтроки.Ячейки.ФИО.УстановитьТекст(СокращенноеФИО(ОформлениеСтроки.Ячейки.ФИО.Значение));

Пример условный, но отражает суть проблемы.

Возможно ли реализовать данный функционал на управляемых формах через условное форматирование, если можно подскажите как это сделать?

  

Партнерская программа EFSOL Oblako

   bazvan

1 — 08.05.13 — 21:11

(0) за решение при выводе строки нужно отрубать руки и ноги сразу

   Novartis

2 — 08.05.13 — 21:15

(1) Зачем же так сразу, бывают разные ситуации.

Вы и раскрашивание строк по условию не приемлете?

Какие ваши доказательства?

   bazvan

3 — 08.05.13 — 21:16

(2) А ты замер производительности включи и погляди на документ ХОТЯБЫ в 100 строк

   Novartis

4 — 08.05.13 — 21:21

Ну если опасность в этом, то здесь такого количества не будет. И 10 уже много.

Интересует скорее возможность такой реализации, чем размышления надо ли это.

   jsmith82

5 — 08.05.13 — 21:22

Автор, такой возможности в УФ нет

   jsmith82

6 — 08.05.13 — 21:23

(1) можно сначала по голове настучать. зачем же сразу отрубать. эдак инвалидами пол страны сделаешь

   jsmith82

7 — 08.05.13 — 21:24

общая стратегия УФ в отказе от всяких при выводах и прочих перделках

   jsmith82

8 — 08.05.13 — 21:24

есть сущность — есть прямое отображение

нужна Приблуда — значит, формализация неправильная

   Novartis

9 — 08.05.13 — 21:28

(8) Иногда приблуда нужна при стыковке разных концепций. Например дополнение к типовой, когда большой универсальности не требуется, но наглядность нужна.

Хорошо, получается исходя из примера, нужно иметь отдельное поле в таблице — ПредставлениеФИО которое и показывать пользователю, а реальное только для хранения использовать?

   KAO111

10 — 08.05.13 — 22:13

(9) Колонку в таблице можно добавить только в реквизит формы, в типовой бухе 3.0 в реализации так в товары, например, добавляется СчетДоходовВедетсяУчетПоНоменклатурнымГруппам

   ProProg

11 — 08.05.13 — 22:14

Возможность есть

   ProProg

12 — 08.05.13 — 22:15

(7) не кизди. есть там все.

Программная установка условного оформления

   ProProg

13 — 08.05.13 — 22:16

Все отлично работает. Я условным оформлениям (программным с любыми условиями) могу любую таблицу разрисовать.

   ProProg

14 — 08.05.13 — 22:19

Кури документ установка цен номенклатуры в УТ11. там яркий пример управление условными оформлениями через программную установку.

   ProProg

15 — 08.05.13 — 22:19

с помощью программных установок можно творить чудеса.

   sttt

16 — 08.05.13 — 22:21

можно и мышкой pics.rsh.ru/img/uf_hxpwhp51.png

   Reaper_1c

17 — 08.05.13 — 22:24

(0) Каноническая задача. К табличной части нужно добавить реквизит формы, который будет заполняться при чтении на сервере и в обработке выбора/изменения поля формы, в которое падает значение.

   bazvan

18 — 08.05.13 — 22:27

(14) УТ 11 полное УГ там 35 реквизитов у справочника номенкалтуры. только тепилы отличные он клоуна могут такое в типовую написать

   ProProg

19 — 08.05.13 — 22:32

(17) не гони беса. никаких реквизитов. В типовых доках везде например при ведении характеристик если не выбрана прямо в поле с характеристикой написано — характеристика не выбрана

   ProProg

20 — 08.05.13 — 22:35

Нужно при изменении строк сделать процедуру обновления

и прописать  программное создание условного оформления.

Правда придется это делать у тебя в цикле для каждой строки.

Ну по сути один фиг да — циклом бегать. Но при этом будет одно поле в котором просто будет нужный текст.

   ProProg

21 — 08.05.13 — 22:37

Вот тебе процедура с помощью которой ты можешь все сделать

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

В строке УстановитьЗначениеПараметра — прописать свою замену

&НаСервере

Процедура УстановитьУсловноеОформлениеТаблицы()

   
   
   УсловныеОформления = Новый Массив();

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

       Если Оформление.Представление = «СозданоПрограммно» Тогда

           УсловныеОформления.Добавить(Оформление);

       КонецЕсли;

   КонецЦикла;

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

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

   КонецЦикла;    

   
   ИндексТекущейСтраницы = Элементы.ПанельЛистов.ПодчиненныеЭлементы.Индекс(Элементы.ПанельЛистов.ТекущаяСтраница);        

   ИмяТаблицыИмпорта = «ТаблицаЛист»+(ИндексТекущейСтраницы-1);    

   
   // Условное оформление — Номер первой строки

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

   НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = ИмяТаблицыИмпорта;

   НовыйЭлементУсловногоОформления.Представление = «СозданоПрограммно»;

   НовыйЭлементУсловногоОформления.Использование = Истина;

   
   ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

   ЭлементОтбора.Использование = Истина;

   ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыИмпорта+».НомерСтроки»);

   ЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.Равно;

   ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(«Объект.ТаблицаЛистовФайла.НомерПервойСтроки»);

   
   НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();

   НовоеПоле.Использование = Истина;

   НовоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяТаблицыИмпорта);

   
   НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«Шрифт», Новый Шрифт(,,Истина));

   НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.Роса);

   
   РеквизитДеревоНастроек = РеквизитФормыВЗначение(«ДеревоПолейЗагрузки»);

   
   ПараметрыОтбора = Новый Структура;

   ПараметрыОтбора.Вставить(«Поле», Истина);

   ЗагружаемыеПоля = РеквизитДеревоНастроек.Строки.НайтиСтроки(ПараметрыОтбора,Истина);

   Для Каждого Стр Из ЗагружаемыеПоля Цикл        

       Если Стр.НомерКолонки = 0 Тогда

           Продолжить;

       КонецЕсли;        

       
       // Условное оформление — Номер первой строки

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

       НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = «»+ИмяТаблицыИмпорта+»K_»+Стр.НомерКолонки;

       НовыйЭлементУсловногоОформления.Представление = «СозданоПрограммно»;

       НовыйЭлементУсловногоОформления.Использование = Истина;

       
       ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

       ЭлементОтбора.Использование = Истина;

       
       ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыИмпорта+».НомерСтроки»);

       ЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;

       ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(«Объект.ТаблицаЛистовФайла.НомерПервойСтроки»);

       
       НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();

       НовоеПоле.Использование = Истина;

       НовоеПоле.Поле = Новый ПолеКомпоновкиДанных(«»+ИмяТаблицыИмпорта+»K_»+Стр.НомерКолонки);

       
       //НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«Шрифт», Новый Шрифт(,,Истина));

       НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«ЦветФона», WebЦвета.АкварельноСиний);

       
   КонецЦикла;        

   
КонецПроцедуры

   Reaper_1c

22 — 08.05.13 — 22:39

Маня, тебе не предлагали еще на курсы сходить? Думаю где-нить в детском саду найдется воспитатель, которая научит тебя читать…

   bazvan

23 — 08.05.13 — 22:39

афуеть клоуны стали внимательно смотреть типовые.

радует

   ProProg

24 — 08.05.13 — 22:40

Это моя процедура

   ProProg

25 — 08.05.13 — 22:41

(22) не надо проявлять сарказм.

   ProProg

26 — 08.05.13 — 22:42

Я в курсе что хочет автор — вы предлагаете сложный путь. КОгда все намного проще.

   sttt

27 — 08.05.13 — 22:47

(26) похоже автору такая портянка не подойдет))

   Reaper_1c

28 — 08.05.13 — 22:47

(23) Оказывается изучение типовых дает +3 к харизме -8 к интеллекту…

   ProProg

29 — 08.05.13 — 22:54

Я челу дал пример из типовой где моно найти программное управление.

Потом дал свой пример

(28) повторюсь — засунь свой сарказм в одно место. Или общайся на нормальном уровне в темитических ветках.

   sttt

30 — 08.05.13 — 22:59

(29) ему вообще условное оформление ненужно

   Reaper_1c

31 — 08.05.13 — 23:01

(29) В первой строке табличной части указан «Иванов Иван Иванович», во второй «Петров Петр Петрович». Уважаемый Евгений, будьте любезны объяснить, какие настройки условного оформления нужно сделать, чтобы на экране в первой строке увидеть «Иванов И.И.», а во второй — «Петров. П.П». Дополнительно прошу объяснить, каким образом система сформирует для новой строки документа с «Сидоровым Семеном Сергеевичем» представление «Сидоров С.С»?

   bazvan

32 — 08.05.13 — 23:12

(31) да легко в при выводе строки отуячить 2 глобальних процедуры преобразования и преформатировать строку.

Делов то 5 минут на прогон трафика. Уйня

   bazvan

33 — 08.05.13 — 23:13

Кстати нужно решерие на счет ивановых и петроввх? Могу на выходных подумать, а то скучно

   Novartis

34 — 08.05.13 — 23:20

Жаль что все вылилось в идейную перепалку.

По идее мне кажется решение возможно.

(32) неужели условное форматирование так сильно влияет на трафик. Вроде 1С не клеймит данный метод как неэффективное решение и использует в типовых.

(33) Если вы предложите решение задачи, думаю вам будут признательны многие и в будущем кто найдет этот пост.

   ProProg

35 — 08.05.13 — 23:21

(31) вот тут как  раз вам и надо извилины включать.

Я пример дал. очень просто.

   ProProg

36 — 08.05.13 — 23:24

Типа этого

Для Каждого Стр Из ТабличнаяЧасть Цикл            

       // Условное оформление — Номер первой строки

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

       НовыйЭлементУсловногоОформления.ИдентификаторПользовательскойНастройки = «»Стр.НомерСтроки;

       НовыйЭлементУсловногоОформления.Представление = «СозданоПрограммно»;

       НовыйЭлементУсловногоОформления.Использование = Истина;

       
       ЭлементОтбора = НовыйЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));

       ЭлементОтбора.Использование = Истина;

       
       ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяТаблицыИмпорта+».Сотрудник»);

       ЭлементОтбора.ВидСравнения  = ВидСравненияКомпоновкиДанных.БольшеИлиРавно;

       ЭлементОтбора.ПравоеЗначение = Новый ПолеКомпоновкиДанных(Стр.Сотрудник);

       
       НовоеПоле = НовыйЭлементУсловногоОформления.Поля.Элементы.Добавить();

       НовоеПоле.Использование = Истина;

       НовоеПоле.Поле = Новый ПолеКомпоновкиДанных(«ТабличнаяЧастьСОтрудник»);

       НовыйЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра(«Текст», ТрядядядяНАША_ФУНКЦИЯ_Преобразовать(Стр.Сотрудник));

       
   КонецЦикла;

   ProProg

37 — 08.05.13 — 23:25

БольшеИлиРавно на Равно

Ну и там подкорректировать.

   ProProg

38 — 08.05.13 — 23:28

А в 83 вообще будет встроенная возможность в свойствах выставлять вывод.

   bazvan

39 — 08.05.13 — 23:29

(34) к сожелентю есть такой момент. Нужно думать, но пока не оплачено, ммеркантильность, такие дела

   ProProg

40 — 08.05.13 — 23:30

(34) представь себе таблицу в сто тысяч строк в которой подкрашиваются колонки я ичейки. условными оформлениями — и ничо нигде не тормозит.

   bazvan

41 — 08.05.13 — 23:34

(40) :):):):)мань тебе такую передать? За деньги файловый вариант 9 гигов? Готов? Вот иж тиси взялось, без проблем, ты готов?

   Novartis

43 — 08.05.13 — 23:36

А как текст сообщения вставить код с оформлением?

   Reaper_1c

47 — 08.05.13 — 23:49

(34) Условное оформление влияет не на трафик, а на ресурсы клиента. Особенно web. Фактически условное оформление отрабатывает при выводе информации на экран, т.е., допуская некоторые упрощения, можем сказать, что при любой прокрутке списка система начнет проверят условия для всех отображаемых строк. В web-клиенте этим будет заниматься вообще браузер. Таким образом классический пример того, как делать не надо из (36) по мере работы с табличным полем будет тем сильнее потреблять ресурсы, чем обильнее список вариантов оформления. Задача ваша рассматривается в учебнике http://v8.1c.ru/metod/books/book.jsp?id=231 и на курсах по работе с управляемым интерфейсом. Методика решения изложена в (10) и (17). Ее использование предполагает однократное считывание, расчет и кеширование представления средствами севера приложений и последующую демонстрацию результата без дополнительных проверок и потребления ресурсов. А еще этот вариант тупо короче и понятнее.

   jsmith82

48 — 09.05.13 — 00:15

сделать реквизит в справочнике «Представление» и не париться

   jsmith82

49 — 09.05.13 — 00:16

либо добавить колонку в данные формы коллекцию и заполнить при создании на сервере или при изменении сотрудника

нахрен сюда УО приплетать

   Novartis

51 — 09.05.13 — 08:05

Вот пример реализации, добрый человек на официальном форуме дал. Спасибо ему. http://yadi.sk/d/eRBFysKo4fdmI

(47) Реализовано как вы и пишете через дополнительную колонку в форме в таблице. Создается на сервере, модифицируется при редактировании. Но для того чтобы подменять основную колонку этим текстом требуется условное оформление. Т.е. в условном оформлении используется реквизит текст со ссылкой на виртуальную колонку.

Скажите а на какой странице здесь http://v8.1c.ru/metod/books/book.jsp?id=231  рассматривается этот пример или как называется?

  

Худой

52 — 10.05.13 — 04:45

Ощущение, что с каждой новой версией 1С, в кодировании все больше маразма появляется.

Всякие там

&НаКлиенте

&НаСервере

&НаКлиентеНаСервереБезКонтекста

и прочее.

Пример этой ветки тоже тому подтверждение.

Практически приходится заниматься тем, что смотришь где ты находишься в данный момент кода. Это убивает до 80 процентов времени. Все свалили на программиста. Выкручивайся, как можешь, чтобы реализовать ту или иную идею.

На ассемблере скоро будет проще писать, чем на 1С

Часто возникает необходимость сделать раскраску таблицы в определенные цвета, например

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

В управляемом интерфейсе (УФ), для этого предназначен универсальный механизм «условного оформления». Настройку раскраски можно выполнить в двух вариантах. Первый, в конфигураторе мыщью в форме задать необходимые настройки, второй задать эти же настройки «кодом». Рассмотрим эти варианты.

  1. Задать мышью условное оформление в форме.
    1. Открыть в конфигураторе свойства формы (выделить самый корень слева в окне отображения реквизитов)
    2. Кликнуть в свойства формы в пункт «УсловноеОформление» — «Открыть»
    3. Далее через кнопку «+» добавить необходимое оформление для строк. В первой колонке задается как именно оформлять строку, во второй колонке при каких условиях сработает эта строка оформления, в третьей колонке что именно будет оформлено (если выбрать просто название таблицы, то целиком строка, если выбрать одну из колонок, то соответственно эта колонка).
    4. Результат оформления:
  2. Рассмотрим пример программного оформления строкячеек табличного поля.
    1. Например у нас есть таблица, с несколькими однотипными колонками. В каждой колонке есть число, надо выделить ячейку с наименьшим значением.
    2. Оформлять будем сразу после перезаполнения таблицы обработки.
    3. После нажатия кнопки типа «заполнить таблицу», вызываем дополнительную процедуру раскраски:
      &НаСервере
      Процедура РаскраситьТаблицу()
      	
      	//очищаем ранее назначенные элементы оформления
      	УсловноеОформление.Элементы.Очистить();
      	
      	КолонкиИмена = Новый Массив();
      	КолонкиИменаНеУчаствуют = Новый Массив();
      	
      	Для каждого Колонка Из ТаблицаТовары.Выгрузить(Новый Массив(),).Колонки Цикл
      		Если СтрНайти(Колонка.Имя, "ЦенаРасчетная_") > 0 Тогда
      			КолонкиИмена.Добавить(Колонка.Имя);
      		ИначеЕсли СтрНайти(Колонка.Имя, "ЦенаИнформативная_") > 0
      			КолонкиИменаНеУчаствуют.Добавить(Колонка.Имя);
      		КонецЕсли;		
      	КонецЦикла;
      
      	
      	Для каждого Колонка Из КолонкиИмена Цикл			
      		//добавляем новый элемент условного оформления
      		ЭлементУО = УсловноеОформление.Элементы.Добавить();
      		//устанавливаем само оформление
      		ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоЗеленый);
      		//добавляем условие
      		ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
      		//что сравниваем()
      		ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары."+Колонка);
      		//как сравниваем
      		ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
      		//с чем сравниваем
      		ЭлементУсловия.ПравоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары.ЛучшаяЦена");
      		
      		ЭлементУсловия = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
      		//что сравниваем()
      		ЭлементУсловия.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТаблицаТовары."+Колонка);
      		//как сравниваем
      		ЭлементУсловия.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
      		//с чем сравниваем
      		ЭлементУсловия.ПравоеЗначение = 0;
      		
      		//оформляемые поля
      		ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
      		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаТовары"+Колонка); 	
      	КонецЦикла;
      	
      	//оформление серым цветом колонок "ЦенаИнформативная_.."
      	Для каждого Колонка Из КолонкиИменаНеУчаствуют Цикл
      		ЭлементУО = УсловноеОформление.Элементы.Добавить();				
      		ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.СветлоСерый);
      		ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
      		ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТаблицаТовары"+Колонка)
      	КонецЦикла;
      КонецПроцедуры​
    4. Данная процедура производит раскраску в строке только той ячейки, которая по своему значению равна значению в другой колонке «ЛучшаяЦена».
    5. Также внизу процедуры есть код, по которому все колонки имена которых начинаются с «ЦенаИнформативная_» закрашиваются в серый цвет.
    6. Результат оформления:

You have no rights to post comments

Как создать на форме таблицу и сделать для неё подсветку содержимого колонки в строке по условию?

Итак для начала нам надо добавить реквизиты в форму. Для этого у нас есть метод: ИзменитьРеквизиты(). Перед тем как его использовать мы сформируем массив добавляемых реквизитов, который будет называться МассивДобавляемыхРеквизитов.

Код 1C v 8.2 УП

 МассивДобавляемыхРеквизитов = Новый Массив; 
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("План", Новый ОписаниеТипов("ТаблицаЗначений")));

Обратите внимание, что элементы массива у нас типа РеквизитФормы. Дальше помимо таблицы значений, нам надо добавить колонки таблицы, например будем добавлять три колонки:

Код 1C v 8.2 УП

 МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"),"План" ,"Номенклатура")); 
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Регион", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,2)),"План" , "Регион"));
МассивДобавляемыхРеквизитов.Добавить(Новый РеквизитФормы("Разница", Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(10,2)),"План" , "Осталось распределить"));

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

Код 1C v 8.2 УП

 ИзменитьРеквизиты(МассивДобавляемыхРеквизитов);    

После изменения реквизитов у нас уже есть нужный нам реквизит формы «План» типа ТаблицаЗначений с тремя колонками. Если вам надо будет обратиться к значению реквизита, то вы можете это сделать используя ЭтаФорма[«План»]. Можно приступать к созданию элементов формы, для отображения данных. Сначала создадим элемент формы типа ТаблицаФормы.

Код 1C v 8.2 УП

 ТаблицаФормы = Элементы.Добавить("План", Тип("ТаблицаФормы"));
ТаблицаФормы.ПутьКДанным = "План";
ТаблицаФормы.ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиЭлементаФормы.Нет;
ТаблицаФормы.ФиксацияСлева = 3;
ТаблицаФормы.УстановитьДействие("ПередУдалением", "ПланПередУдалением");
ТаблицаФормы.УстановитьДействие("ПередНачаломДобавления", "ПланПередНачаломДобавления");

Как вы видите из приведенного когда, во время создания элемента мы тут же определяем действия на события. После создания элемента План типа ТаблицаФормы создадим подчиненные ему элементы типа ПолеФормы, которые будут отвечать у нас за вывод данных в колонки таблицы. Для этого в цикле перебора колонок таблицы необходимо выполнить следующий код (на примере одной из итераций цикла):

Код 1C v 8.2 УП

 НоваяКолонка = Элементы.Добавить("ПланНоменклатура", Тип("ПолеФормы"), Элементы.План); 
НоваяКолонка.Заголовок = "Номенклатура";
НоваяКолонка.ПутьКДанным = "План.Номенклатура";
НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
НоваяКолонка.РежимРедактирования = РежимРедактированияКолонки.ВходПриВводе;

Обратите внимание, что во время добавления элемента мы указываем родителя Элементы.План. Так же путь к данным у нас состоит из наименования реквизита типа ТаблицаЗначений и имени колонки, разделенные точкой. После того, как вы в цикле создадите все элементы для колонок форма будет готова к выводу и вводу данных в таблицу.

Теперь можно перейти ко второй части задачи про подсветку цветом колонки Номенклатура. Например условие у нас будет накладываться на колонку Разница и когда она будет равно 100 строку надо будет подсвечивать колонку Номенклатуры серым цветом.

Для реализации этой части задачи мы будем использовать объект УсловноеОформление, который доступен на стороне сервера. Сначала в элементы условного оформления необходимо добавить новый элемент. Затем мы добавляем оформляемые поля. Если надо подсвечивать всю строку, то можно обойти в цикле колонки и добавить все их поля ввода в оформляемые. Так же необходимо потом добавить отбор. В левом значении отбора указываем поле, по которому будет идти сравнение. Поле указывает с точкой, как путь к данным во время добавления колонки.

Код 1C v 8.2 УП

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

Внешняя обработка, демонстрирующая создание таблицы значений программно — Скачивать файлы может только зарегистрированный пользователь!
Андрей Данилюк

Пример программного создания условного оформления управляемой формы

24 Jul

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

Понравилась статья? Поделить с друзьями:

Другие крутые статьи на нашем сайте:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии