Имя: Пароль:
1C
 
Раскрасить строки табличной части (ОФ).
0 AneJIbcuH
 
17.11.15
08:50
Добрый день!
Есть необходимость раскрашивать строки ТЧ в зависимости входит или нет номенклатура строки в периодический регистр сведений.
Суть заморочки, исключить запрос в цикле :)
Также сложность в том, чтобы при различных манипуляциях (открытии формы существующего документа, добавлении нового элемента в ТЧ, добавление нового элемента в ТЧ с помощью подбора и других видах заполнения) сразу строки раскрашивались .

Мог бы не заморачиваясь написать так:

Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок)

Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    пк_МинимальныйТорговыйЗапасСрезПоследних.Номенклатура,
    |    пк_МинимальныйТорговыйЗапасСрезПоследних.ХарактеристикаНоменклатуры
    |ИЗ
    |    РегистрСведений.пк_МинимальныйТорговыйЗапас.СрезПоследних(
    |            &ТекущаяДата,
    |            &ТекущаяДата МЕЖДУ НачалоПериода И КонецПериода
    |                И Номенклатура = &Номенклатура
    |                И ХарактеристикаНоменклатуры = &ХарактеристикаНоменклатуры) КАК пк_МинимальныйТорговыйЗапасСрезПоследних";
    
    Запрос.УстановитьПараметр("Номенклатура", Элемент.ТекущаяСтрока.Номенклатура);
    Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДата());
    Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", Элемент.ТекущаяСтрока.ХарактеристикаНоменклатуры);  
    Результат = Запрос.Выполнить();
    
    Если НЕ Результат.Пустой() Тогда
        Элемент.ЦветФона = WebЦвета.Серый;
    КонецЕсли;    
    
КонецПроцедуры

Хочется оптимальнее..
1 RomanYS
 
17.11.15
08:52
кэшируй регистр в соответствие, всего один запрос
2 AneJIbcuH
 
17.11.15
08:57
(1) Читал недавно где-то про соответствие и его преимущества, возможно ваше решение отличное! Не подскажите пример кода :)
3 Горогуля
 
17.11.15
09:00
Функция СтрокаВВидСравнения(стр)
    соо=Новый Соответствие;
    соо.Вставить("меньше", "<");
    соо.Вставить("меньше или равно", "<=");
    соо.Вставить("равно", "=");
    соо.Вставить("больше или равно", ">=");
    соо.Вставить("больше", ">");
    соо.Вставить("в списке", "В");
    соо.Вставить("в группе", "В ИЕРАРХИИ");
    
    Возврат соо[стр];
КонецФункции
4 AneJIbcuH
 
17.11.15
09:02
(3) Как создать соответствие мне известно. Как его использовать в моём примере?
5 Горогуля
 
17.11.15
09:04
если входит[ТекОформление.ДанныеСтроки.Номенклатура]
6 aleks_default
 
17.11.15
09:09
Если я правильно помню, в событии ПриПолученииДанных из оформления строк можно получить не одну текущую номенклатуру а список всех выводимых на экран (давно в ОФ не работаю, не помню синтаксис). Вот и делай запрос не по одной позиции, а по списку.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший