Имя: Пароль:
1C
 
УО формы списка документа в зависимости от реквизита ТЧ
↓ (Волшебник 08.11.2024 11:09)
0 Буковка
 
08.11.24
10:49
Добрый день!
Нужно раскрасить список документов в зависимости от того, есть ли в ТЧ документа реквизит. Условие отрабатывает только в случае, если нужный реквизит первой строкой в ТЧ. Что я делаю не так?

    СписокНомерОдин = Новый СписокЗначений;
    СписокНомерОдин.Добавить(ЗначениеОдин);  
    
    СписокНомерДва = Новый СписокЗначений;
    СписокНомерДва.Добавить(ЗначениеДва);
    
    УО = ЭтотОбъект.Список.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление.Элементы;
    ЭлементыОформления= УО.Добавить();
    ЭлементыОформления.Использование = Истина;
    
    ГруппаОтбора = ЭлементыОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
        
    ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТЧ.РеквизитТЧ.Данные");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НЕВСписке;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = СписокНомерОдин;    
    
    Оформление = ЭлементыОформления.Оформление;
    Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.СветлоЖелтый);
    
    УО = ЭтотОбъект.Список.КомпоновщикНастроек.ФиксированныеНастройки.УсловноеОформление.Элементы;
    ЭлементыОформления= УО.Добавить();
    ЭлементыОформления.Использование = Истина;
    
    ГруппаОтбора = ЭлементыОформления.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
    ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
    
    ЭлементОтбора = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТЧ.РеквизитТЧ.Данные");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
    ЭлементОтбора.Использование = Истина;
    ЭлементОтбора.ПравоеЗначение = СписокНомерДва;  
    
    Оформление = ЭлементыОформления.Оформление;
    Оформление.УстановитьЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ЦветФона"), WebЦвета.СветлоРозовый);
1 Волшебник
 
08.11.24
10:52
опять какая-то абстрактная херня
2 Буковка
 
08.11.24
10:54
(1) Для упрощения восприятия переименовала
3 shuhard
 
08.11.24
10:56
(0) заведи реквизит в шапке документа и заполняй его перед записью
4 Буковка
 
08.11.24
10:57
(3) хотелось бы обойтись без этого
5 Волшебник
 
08.11.24
11:09
(2) А вот не надо было!
6 Волшебник
 
08.11.24
11:10
Покажите настоящий программный код.
Как называется реквизит?
7 Мультук
 
08.11.24
11:25
(0)

1) Допустим есть некий дин.список документов.
2) Априори известно, что реквизит "Буковка" может быть (или не быть) в таб.части "Товары":

ЗаказКлиента Истина
ЗаказНаПеремещение Ложь
ВозвратТоваровОтПокупателя Ложь
и так далее.

3) Добавляем в дин.запрос поле

ВЫБОР КОГДА ТИПЗНАЧЕНИЯ(т1.ссылка) = ТИП(Документ.ЗаказКлиента) ТОГДА ИСТИНА
КОГДА ТИПЗНАЧЕНИЯ(т1.ссылка) = ТИП(Документ.ЗаказНаПеремещение ) ТОГДА ЛОЖЬ
КОГДА ТИПЗНАЧЕНИЯ(т1.ссылка) = ТИП(Документ.ВозвратТоваровОтПокупателя) ТОГДА ЛОЖЬ
ИНАЧЕ 
   ЛОЖЬ
КОНЕЦ КАК ЕстьРеквизит



4) Тривиально настраиваем оформление.

5) Потом включаем в себе программиста и делаем так, чтобы пункт 3 формировался по метаданным нужных документов
Каждый раз или {тут куча вариантов}

Вроде ничего сложного
8 Буковка
 
08.11.24
11:46
(7) спасибо большое!
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший