Имя: Пароль:
1C
1С v8
программное оформление ячейки табличной части документа.
0 Shalun
 
23.08.22
14:00
Всем привет. Задача вроде не сложная, но что то не получается.
В ТЧ документа, после изменения значения ячейки (к примеру "Количество"), осуществляется проверка на соответствие введенного значения некоему условию. И если соответствие не установлено, то окрасить ячей в красный цвет.
Я делаю так:
&НаКлиенте
Процедура ТоварыНоменклатураКоличествоПриИзмененииПосле(Элемент)
    ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
    Если ТекущаяСтрока.Количество > 50 Тогда
         Элемент.ЦветТекста = WEBЦвета.Rhfcysq;
    Иначе
         Элемент.ЦветТекста = WEBЦвета.Черный;
    КонецЕсли;
КонецПроцедуры
  
В таком виде выделяется вся колонка, а нужно ВЫДЕЛИТЬ ЯЧЕЙКУ таб.части документа!!!
Через условное оформление то же не получится выделить, т.к. данный код пишется в расширении, и добавить реквизит в таб.часть не меняя основную конфу не получится.

Кто знает, подскажите как окрасить конкретную ячейку табличной части документа?
Заранее благодарствую.
1 Ryzeman
 
23.08.22
14:20
а не проще условное оформление? Само же напрашивается...
2 Ryzeman
 
23.08.22
14:21
А по теме - что у тебя в Элемент. Явно не ячейка
3 Shalun
 
23.08.22
14:49
(1) Процедура пишется в расширении, и вставить дополнительный реквизит в табличную часть не меняя основную конфу не получается. Я в примере написал 50, на самом деле там вычисляемое значение.
(2) Тип значения Элемент - "ПолеФормы".
4 6awkup_true
 
23.08.22
14:55
(3) так а зачем новый реквизит?
прыгаешь с клиента на сервер и программно добавляешь условное оформление. или вообще формируешь условное оформление программно при создании формы
5 6awkup_true
 
23.08.22
15:04
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ЭлементОформления = ЭтаФорма.условноеОформление.Элементы.Добавить();
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Товары.Количество");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
    
    ЭлементОтбора.ПравоеЗначение = 50;
    ЭлементОтбора.Использование = Истина;
    
    ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветФона", WebЦвета.Лосось);
    
    
    ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
    ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("ТоварыКоличество");
    ПолеОформления.Использование = Истина;
    
КонецПроцедуры
6 Shalun
 
23.08.22
15:34
Парни, согласен, не удачный пример привел. Давайте тогда поправим, и вместо Правого значения (50) введем некую функцию, и получим:
ТекущаяСтрока.Количество > ПолучитьЗначение(ТекущаяСтрока.Номенклатура)
Предположим что у нас есть регистр, в которм для каждой Номенклатуры хранится значение МаксимальногоКоличествакОтгрузке. Эта функция получает данные этого регистра, и затем мы сравниваем. Если количество в документе выше чем в регистре - то окрашиваем в цвет.
Т.О. значение для сравнения в каждой строке будет свое.
(5) Ввиду описанных выше уточнений, я так понимаю Метод ПриСозданииНаСервере Не подойдет?
7 6awkup_true
 
23.08.22
15:38
(6) не пойдет. но тот же код можно использовать и при изменении. прыгать на сервер, проверять, добавлять элементы УО. красить можно по номеру строки. перед этим оформление для этой строки нужно выпилить только
8 Shalun
 
23.08.22
16:07
(7) Так в том то и вопрос. Как окрасить конкретное поле табличной части, а не строку и не колонку целиком?
9 6awkup_true
 
23.08.22
16:15
(8) получил номер строки, которую нужно оформить. ее пишешь в условие. в оформляемые поля включаешь все, которые нужно оформить
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан