Имя: Пароль:
1C
1С v8
Условное Оформление ТЧ документа - по реквизиту другого документа
0 hardsign
 
21.03.13
14:43
В табличной части документа есть поле типа "ДокументСсылка.РасходныйОрдер". Мне надо проверять - если соответствующий расходный ордер проведен, менять цвет текста строки.

Для условного оформления доступны только условия полей, присутствующих в документе. Поле "проведен" из Расходного ордера нет в табличной части - соответственно УО недоступно.

Пробовал добавить поле с типом булево в ТЧ, создать ссылку на расходныйордер.проведен. В ТЧ поле норм заполняется, но УО не отрабатывает - значение (к примеру ИСТИНА для проведенного документа) - недоступно в объектной модели, точнее в объекте незаполненное значение - ЛОЖЬ.

Как побороть? Присваивать значение реквизитаТЧ=расходныйордер.проведен в приоткрытии() не вариант.
1 hardsign
 
21.03.13
14:47
Да, забыл написать - УФ, 8.2
2 Defender aka LINN
 
21.03.13
14:49
(0) "Присваивать значение реквизитаТЧ=расходныйордер.проведен в приоткрытии() не вариант." - религиозные мотивы?
3 hardsign
 
21.03.13
14:52
(2) пишется история изменения всех реквизитов, будет много мусора - необходимо будет его отсеивать. Да и вообще некрасиво - если вариантов других нет конечно так и сделаю, но хотелось бы изящнее.
4 Defender aka LINN
 
21.03.13
14:57
(3) Какая история изменения, какой мусор? Или ты еще не в курсе, что в ТЧ можно добавить реквизит ФОРМЫ?
5 hardsign
 
21.03.13
15:01
(4) Я добавил реквизит формы. Он не считывается УО, УО видит только данные Объекта.
6 hardsign
 
21.03.13
15:05
Может понятнее так. Добавил реквизит формы ПроведенОрдер (булево). Заполняю его значением из ВыдачаТаблица.ПриходныйОрдер.Проведен. При открытии формы - в ПроведенОрдер заполняются верные значения. Но УО не отрабатывает.

ЭлементУО = ЭтаФорма.УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУО.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ВыдачаТаблицаОтделение");
ЭлементОтбора = ЭлементУО.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВыдачаТаблица.ПроведенОрдер");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементУО.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Зеленый);
7 Defender aka LINN
 
21.03.13
15:34
(6) Руками добавь оформление
8 hardsign
 
21.03.13
15:39
(7) Через перебор строк ТЧ? - Оно слишком медленно работает:) И глючит при копировании строк.
9 Defender aka LINN
 
21.03.13
15:42
(8) Вот как связано условное оформление и отбор строк? Можешь рассказать логическую цепочку, а то я столько веществ не переживу, чтобы самому связать.
Возьми, ля, мышь, ля, в руку, ля, и натыкай (6) в конфигураторе.
10 Defender aka LINN
 
21.03.13
15:42
(9) *перебор строк
11 hardsign
 
21.03.13
15:52
(9) Натыкал (6) в конфигураторе. Не работает. Задаю услвоие по любому другому полю, которое есть в ТЧ (в Объекте) - работает. Если делаю ссылку из поля ТЧ на реквизит другого документа - не видит УО значение этого реквизита, и не отрабатывает.
12 hardsign
 
21.03.13
16:01
Да, еще, при оформлении руками: реквизиты формы (т.е. реквизиты, которые добавлены ТОЛЬКО в форме и не добавлены у Объекта) - НЕДОСТУПНЫ к выбору в условиях отбора условного оформления.
13 hardsign
 
21.03.13
16:09
Точнее поля формы недоступны. Реквизиты формы доступны - но значение из этого поля УО не видит, и не отрабатывает. К этому и был мой вопрос - как передать в УО значение из реквизита выбранного документа?
14 Defender aka LINN
 
21.03.13
16:16
(12) Зачем ви т'гавите? Только что проверил - все работает как часы.
15 hardsign
 
21.03.13
16:35
(14) Перепроверил еще раз - не работает. У Вас сработало УО по условию - проверка значения реквизита документа, выбранного в ТЧ?
16 hardsign
 
21.03.13
16:36
8.2.17.153.
17 Defender aka LINN
 
21.03.13
16:38
(15) Перечитай мои посты еще раз
18 hardsign
 
21.03.13
16:55
Перечитал. Перепроверил. не работает.

Что делаю:

1. Есть документ "Заявка".
2. В документе ТЧ - "ВыдачаТаблица".
3. В ТЧ есть поле типа "ДокументСсылка.РасходныйОрдер".
4. У Расходного ордера есть поле - "Проведен", тип Булево.

Добавляю реквизит формы, поле в ТЧ, имя "ПроведенОрдер". Тип Булево. Указываю ПутьКДанным - ВыдачаТаблица.РасходныйОрдер.Проведен.

После этого заполняю УО формы:
1) оформление - текст зеленым
2) условие - Объект.ВыдачаТаблица.ПроведенОрдер Равно Истина
3) оформляемые поля - указываю все колонки таблицы

Оформление не происходит. Через отладчик отлавливал - после открытия формы значение Объект.ВыдачаТаблица.ПроведенОрдер - пустое.

Соответственно, либо надо его заполнять присваиванием значений (в цикле присвоить Объект.ВыдачаТаблица.ПроведенОрдер значению из документа), либо проверять в условии не значение Объект.ВыдачаТаблица.ПроведенОрдер, а что то другое (типа Элементы.ВыдачаТаблица.ПроведенОрдер - но это тоже не проходит).
19 Defender aka LINN
 
21.03.13
16:56
(18) "Указываю ПутьКДанным" - дальше не читал
20 hardsign
 
21.03.13
17:13
(19) Ок, а какие варианты? Указывать значение поля Булево, и перебирать в цикле в процедуре ПриОткрытии() все строки документа, присваивая полю значение из ВыдачаТаблица.РасходныйОрдер.Проведен?
21 Defender aka LINN
 
21.03.13
17:15
(20) За такое в ПриОткрытии я тебе лично явлюсь в кошмарном сне и горло перегрызу. В ПриЧтенииНаСервере() / ПриСозданииНаСервере()
22 hardsign
 
21.03.13
17:16
(21) В ПриСозданииНаСервере() - долго. Если предположить 200-300 строк в ТЧ.
23 Defender aka LINN
 
21.03.13
17:18
(22) 1. Скерали долго?
2. Вам шашечки, или ехать?
24 hardsign
 
21.03.13
17:19
(21) И, возвращаясь к записываемой истории изменений реквизитов, все эти присваивания будут записаны в регистр!

+ пользователь открыв докмент, ничего не поменяв в нем - нажимая "отмена" получит сообщение о изменении документа и предложении сохранить:)
25 Defender aka LINN
 
21.03.13
17:20
(24) Иди протрезвей, а?
26 hardsign
 
21.03.13
17:22
Но ведь это криво! Зачем записывать в документ дополнительно значения поля из расходногоОрдера, если ссылка на проверяемый объект уже присутствует в ТЧ! Таким образом - дублируются данные в базе. Плюс без открытия документа они еще и будут не совпадать!
27 Defender aka LINN
 
21.03.13
17:23
(26) Еще раз: иди протрезвей
28 hardsign
 
21.03.13
17:25
(25) А грубить то зачем? Если не можете помочь советом - троллите в другом месте.
29 Defender aka LINN
 
21.03.13
17:27
(28) Та потому что ты явно упорот чем-то. Уже, вон, что-то в базу писать собрался...
30 DexterMorgan
 
21.03.13
17:37
(28) Ну как бы реквизит формы к данным базы отношения не имеет, ну максимум если ты поставишь сохраняемое значение для пользователя он запишется в хранилище настроек
31 drcrasher
 
21.03.13
17:39
к (9) всё тоже самое натыкать в режиме предприятия.
32 hardsign
 
21.03.13
19:45
Сделал с присваиванием значения полю при создании на сервере, через цикл и элементы.поле=документ.поле.

Работает.

Считаю это кривым бредом - заполнять по сути колонку виртуальной таблицы, когда в реальной таблице на сервере уже есть необходимые значения - просто к ним невозможно обратиться из необходимой функции.
33 Defender aka LINN
 
22.03.13
08:08
(32) "когда в реальной таблице на сервере уже есть необходимые значения": ничего, что необходимые значения - в несколько более иначе другой таблице? В табличной части у тебя только ссылка - ГУИД документа, т.е. число. Никаких пометок удаления, флагов и прочих реквизитов у числа не бывает.
34 Defender aka LINN
 
22.03.13
08:09
З.Ы. Теперь осталось только научить тебя реквизиты запросом вытягивать
35 hardsign
 
22.03.13
11:10
(34) Так я про это и говорю - можно было бы сделать обычный join и потянуть из таблицы приходных ордеров нужные данные. Это можно сделать отчетом, обработкой и т.д. Но из условного оформления это недоступно, и надо придумывать костыль!
Основная теорема систематики: Новые системы плодят новые проблемы.