Оформление строк табличной части в 8.2
Стандартом в 1с является, когда все строки табличной части имеют одинаковый шрифт, цвет шрифта и цвет фона строки. Но иногда нужно, чтобы строки выделялись по некоторому признаку. Иногда нужно что-либо оформлять на уровне конфигуратора. В 8.1 это делалось через процедуры ПриВыводеСтроки и ПриПолученииДанных. В управляемом приложении 8.2 их нет, там сделано условное оформление. Привожу пример, как можно работать с условным оформлением программно, как форма оформляется кодом в 8.2.
В качестве примера будем использовать, что в документе реализации строки выделялись в зависимости от склада, с которого отгружается номенклатура.
- Описание
- Подробнее
Описание
1. Для справочник «Склады» необходимо добавить реквизиты: ЦветФонаСтроки, ЦветШрифтаСтроки, ШрифтСтроки, тип — ХранилищеЗначения.

2. Для управляемой формы элемента добавить реквизиты с идентичными названиями, у первых 2 тип «Цвет», у 3 — «Шрифт» и вынести эти реквизиты на управляемую форму.

3. В модуль формы вставить следующий код:
(Системные процедуры не копируются отсюда, а создаются в модуле и там добавляется код, иначе 1с не поймет, что они системные)
&НаСервере
Процедура ЗаполнитьРеквизитыОформленияСтрокНаФорме()
ЭтоНовый = Объект.Ссылка.Пустая();
ОбъектДанные = ДанныеФормыВЗначение(Объект,Тип(«СправочникОбъект.Склады»));
ЦветФонаСтрокиХранимый = ОбъектДанные.ЦветФонаСтроки.Получить();
ОформлениеСодержится = ТипЗнч(ЦветФонаСтрокиХранимый) = Тип(«Цвет»);
Если ЭтоНовый или Не ОформлениеСодержится Тогда
ЦветФонаСтроки = ЦветаСтиля.ЦветФонаПоля;
ЦветШрифтаСтроки = ЦветаСтиля.ЦветТекстаФормы;
ШрифтСтроки = WindowsШрифты.ШрифтДиалоговИМеню;
Иначе
ЦветФонаСтроки = ЦветФонаСтрокиХранимый;
ЦветШрифтаСтроки = ОбъектДанные.ЦветШрифтаСтроки.Получить();
ШрифтСтроки = ОбъектДанные.ШрифтСтроки.Получить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗаполнитьРеквизитыОформленияСтрокНаФорме();
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.ЦветФонаСтроки = Новый ХранилищеЗначения(ЦветФонаСтроки);
ТекущийОбъект.ЦветШрифтаСтроки = Новый ХранилищеЗначения(ЦветШрифтаСтроки);
ТекущийОбъект.ШрифтСтроки = Новый ХранилищеЗначения(ШрифтСтроки);
КонецПроцедуры
4. В общий модуль, выполняемый на сервере, к примеру ОбщегоНазначенияСервер вставляемся процедура ОформитьСтрокиТЧ:
&НаСервере
Процедура ОформитьСтрокиТЧ(Объект,УсловноеОформление,ТипОбъектаПодробный,ИмяТЧ,ИмяОбъектаСОформлением) Экспорт
ТипОбъектаСтр = СтрЗаменить(ТипОбъектаПодробный,«.»,Символы.ПС);
ТипОбъектаКраткий = СтрПолучитьСтроку(ТипОбъектаСтр,1);
ИмяОформляемогоМетаданного = СтрПолучитьСтроку(ТипОбъектаСтр,2);
Если ТипОбъектаКраткий = «ДокументОбъект» Тогда
ТипОбъектаКраткий = «Документы»;
ИначеЕсли ТипОбъектаКраткий = «СправочникОбъект» Тогда
ТипОбъектаКраткий = «Справочники»;
КонецЕсли;
ОбъектДанные = ДанныеФормыВЗначение(Объект,Тип(ТипОбъектаПодробный));
Для каждого СтрТЧ Из ОбъектДанные[ИмяТЧ] Цикл
ОбъектСОформлением = СтрТЧ[ИмяОбъектаСОформлением];
ЦветФонаСтроки = ОбъектСОформлением.ЦветФонаСтроки.Получить();
ЦветШрифтаСтроки = ОбъектСОформлением.ЦветШрифтаСтроки.Получить();
ШрифтСтроки = ОбъектСОформлением.ШрифтСтроки.Получить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Использование = Истина;
ОформлениеУО = ЭлементУсловногоОформления.Оформление;
ОтборУО = ЭлементУсловногоОформления.Отбор;
ОформляемыеПоляУО = ЭлементУсловногоОформления.Поля;
ОформлениеУО.УстановитьЗначениеПараметра(«ЦветФона», ЦветФонаСтроки);
ОформлениеУО.УстановитьЗначениеПараметра(«ЦветТекста», ЦветШрифтаСтроки);
ОформлениеУО.УстановитьЗначениеПараметра(«Шрифт», ШрифтСтроки);
ЭлементОтбора = ОтборУО.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Объект.» + ИмяТЧ + «.» + ИмяОбъектаСОформлением);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ОбъектСОформлением;
ЭлементОтбора.Использование = Истина;
Для каждого РеквизитТЧ Из Метаданные[ТипОбъектаКраткий][ИмяОформляемогоМетаданного].ТабличныеЧасти[ИмяТЧ].Реквизиты Цикл
НазваниеРеквизита = РеквизитТЧ.Имя;
ОформляемоеПоле = ОформляемыеПоляУО.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяТЧ + НазваниеРеквизита);
КонецЦикла;
ОформляемоеПоле = ОформляемыеПоляУО.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяТЧ + «НомерСтроки»);
КонецЦикла;
КонецПроцедуры
5. В модуль формы элемента документа «Реализация товаров и услуг» вставить процедуру ОформитьСтрокиТЧСервер и вызов ее в процедурах ТоварыСкладПриИзменении и ПриСозданииНаСервере
&НаКлиенте
Процедура ТоварыСкладПриИзменении(Элемент)
ОформитьСтрокиТЧСервер();
КонецПроцедуры
&НаСервере
Процедура ОформитьСтрокиТЧСервер()
ОбщегоНазначенияСервер.ОформитьСтрокиТЧ(Объект,УсловноеОформление,«ДокументОбъект.РеализацияТоваровУслуг»,«Товары»,«Склад»);
КонецПроцедуры
Результат:

Оформление строк табличной части в 8.2
Стандартом в 1с является, когда все строки табличной части имеют одинаковый шрифт, цвет шрифта и цвет фона строки. Но иногда нужно, чтобы строки выделялись по некоторому признаку. В качестве примера будет использовать, что в документе реализации строки выделялись в зависимости от склада, с которого отгружается номенклатура.
- Описание
- Подробнее
Описание
1. Для справочник «Склады» необходимо добавить реквизиты: ЦветФонаСтроки, ЦветШрифтаСтроки, ШрифтСтроки, тип — ХранилищеЗначения.

2. Для управляемой формы элемента добавить реквизиты с идентичными названиями, у первых 2 тип «Цвет», у 3 — «Шрифт» и вынести эти реквизиты на управляемую форму.

3. В модуль формы вставить следующий код:
(Системные процедуры не копируются отсюда, а создаются в модуле и там добавляется код, иначе 1с не поймет, что они системные)
&НаСервере
Процедура ЗаполнитьРеквизитыОформленияСтрокНаФорме()
ЭтоНовый = Объект.Ссылка.Пустая();
ОбъектДанные = ДанныеФормыВЗначение(Объект,Тип(«СправочникОбъект.Склады»));
ЦветФонаСтрокиХранимый = ОбъектДанные.ЦветФонаСтроки.Получить();
ОформлениеСодержится = ТипЗнч(ЦветФонаСтрокиХранимый) = Тип(«Цвет»);
Если ЭтоНовый или Не ОформлениеСодержится Тогда
ЦветФонаСтроки = ЦветаСтиля.ЦветФонаПоля;
ЦветШрифтаСтроки = ЦветаСтиля.ЦветТекстаФормы;
ШрифтСтроки = WindowsШрифты.ШрифтДиалоговИМеню;
Иначе
ЦветФонаСтроки = ЦветФонаСтрокиХранимый;
ЦветШрифтаСтроки = ОбъектДанные.ЦветШрифтаСтроки.Получить();
ШрифтСтроки = ОбъектДанные.ШрифтСтроки.Получить();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗаполнитьРеквизитыОформленияСтрокНаФорме();
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ТекущийОбъект.ЦветФонаСтроки = Новый ХранилищеЗначения(ЦветФонаСтроки);
ТекущийОбъект.ЦветШрифтаСтроки = Новый ХранилищеЗначения(ЦветШрифтаСтроки);
ТекущийОбъект.ШрифтСтроки = Новый ХранилищеЗначения(ШрифтСтроки);
КонецПроцедуры
4. В общий модуль, выполняемый на сервере, к примеру ОбщегоНазначенияСервер вставляемся процедура ОформитьСтрокиТЧ:
&НаСервере
Процедура ОформитьСтрокиТЧ(Объект,УсловноеОформление,ТипОбъектаПодробный,ИмяТЧ,ИмяОбъектаСОформлением) Экспорт
ТипОбъектаСтр = СтрЗаменить(ТипОбъектаПодробный,«.»,Символы.ПС);
ТипОбъектаКраткий = СтрПолучитьСтроку(ТипОбъектаСтр,1);
ИмяОформляемогоМетаданного = СтрПолучитьСтроку(ТипОбъектаСтр,2);
Если ТипОбъектаКраткий = «ДокументОбъект» Тогда
ТипОбъектаКраткий = «Документы»;
ИначеЕсли ТипОбъектаКраткий = «СправочникОбъект» Тогда
ТипОбъектаКраткий = «Справочники»;
КонецЕсли;
ОбъектДанные = ДанныеФормыВЗначение(Объект,Тип(ТипОбъектаПодробный));
Для каждого СтрТЧ Из ОбъектДанные[ИмяТЧ] Цикл
ОбъектСОформлением = СтрТЧ[ИмяОбъектаСОформлением];
ЦветФонаСтроки = ОбъектСОформлением.ЦветФонаСтроки.Получить();
ЦветШрифтаСтроки = ОбъектСОформлением.ЦветШрифтаСтроки.Получить();
ШрифтСтроки = ОбъектСОформлением.ШрифтСтроки.Получить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ЭлементУсловногоОформления.Использование = Истина;
ОформлениеУО = ЭлементУсловногоОформления.Оформление;
ОтборУО = ЭлементУсловногоОформления.Отбор;
ОформляемыеПоляУО = ЭлементУсловногоОформления.Поля;
ОформлениеУО.УстановитьЗначениеПараметра(«ЦветФона», ЦветФонаСтроки);
ОформлениеУО.УстановитьЗначениеПараметра(«ЦветТекста», ЦветШрифтаСтроки);
ОформлениеУО.УстановитьЗначениеПараметра(«Шрифт», ШрифтСтроки);
ЭлементОтбора = ОтборУО.Элементы.Добавить(Тип(«ЭлементОтбораКомпоновкиДанных»));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(«Объект.» + ИмяТЧ + «.» + ИмяОбъектаСОформлением);
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = ОбъектСОформлением;
ЭлементОтбора.Использование = Истина;
Для каждого РеквизитТЧ Из Метаданные[ТипОбъектаКраткий][ИмяОформляемогоМетаданного].ТабличныеЧасти[ИмяТЧ].Реквизиты Цикл
НазваниеРеквизита = РеквизитТЧ.Имя;
ОформляемоеПоле = ОформляемыеПоляУО.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяТЧ + НазваниеРеквизита);
КонецЦикла;
ОформляемоеПоле = ОформляемыеПоляУО.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяТЧ + «НомерСтроки»);
КонецЦикла;
КонецПроцедуры
5. В модуль формы элемента документа «Реализация товаров и услуг» вставить процедуру ОформитьСтрокиТЧСервер и вызов ее в процедурах ТоварыСкладПриИзменении и ПриСозданииНаСервере
&НаКлиенте
Процедура ТоварыСкладПриИзменении(Элемент)
ОформитьСтрокиТЧСервер();
КонецПроцедуры
&НаСервере
Процедура ОформитьСтрокиТЧСервер()
ОбщегоНазначенияСервер.ОформитьСтрокиТЧ(Объект,УсловноеОформление,«ДокументОбъект.РеализацияТоваровУслуг»,«Товары»,«Склад»);
КонецПроцедуры
Результат:

