Условное оформление тч документа. Как обратиться к доп реквизиту?

1. baracuda 2 26.01.16 10:58 Сейчас в теме
Пробую оформить ТЧ для документа. Условием является признак наличия для номенклатуры значения ДопРеквизита = Истина.

Сам код такой.

    ЭтаФорма.УсловноеОформление.Элементы.Очистить(); 
    ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
    ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
    ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
    ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый  ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.Делимое");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    ЭлементОтбора.ПравоеЗначение = Истина;
    ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
Показать


Если проверяю просто номенклатуру на заполненность то строки разукрашиваются.

    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
    ЭлементОтбора.ПравоеЗначение = Истина;



Отсюда вывод ошибка тут.
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.Делимое");
Но как правильно будет в отбор доп реквизит ума не приложу.
+
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dj_serega 391 26.01.16 11:13 Сейчас в теме
А если настроить УО через свойства формы работает?
Если нет, тогда только через: создать реквизит ТЧ, и заполнять его при открытии формы (не реквизит ТЧ объекта, а реквизит ТЧ формы)
sur0g; baracuda; +2
4. baracuda 2 26.01.16 11:20 Сейчас в теме
(2) dj_serega, Да работает. Но через свойства формы максимум для чего я могу добраться это Объект.Товары.Номенклатура.
(3) alljoke, Да Делимое это допреквизит номенклатуры с Типом Булево. Прошлый раз на этом и обжегся, перепутал доп сведение и доп реквизит
+
5. dj_serega 391 26.01.16 11:22 Сейчас в теме
(4) baracuda,
Да работает. Но через свойства формы максимум для чего я могу добраться это Объект.Товары.Номенклатура.

Имхо, в программной настройке УО можно повторить только те действия, которые получаться в результате ручной настройки.
+
3. alljoke 26.01.16 11:16 Сейчас в теме
Номенклатура.Делимое - это точно Булевное значение?
+
6. alljoke 26.01.16 11:23 Сейчас в теме
Секунду, речь идет о ДОП.Реквизитах.
А Делимое - это просто реквизит товара в конфиге, так?
+
7. baracuda 2 26.01.16 11:27 Сейчас в теме
(6) alljoke, Нет. Это доп реквизит который я добавил в общих настройках

(5) dj_serega, да ладно)) Не поверю что нельзя изощриться.
+
9. alljoke 26.01.16 11:29 Сейчас в теме
(7) baracuda, значит ты неправильно к нему обращаешься.
+
11. dj_serega 391 26.01.16 11:34 Сейчас в теме
(7) baracuda,
да ладно)) Не поверю что нельзя изощриться.

Ну тогда ждем решения :)
+
14. baracuda 2 26.01.16 11:48 Сейчас в теме
(11) dj_serega, как насчет того, чтоб раскрасить не через УО, а просто перебором ТЧ в цикле? Прокатит?
+
16. alljoke 26.01.16 12:05 Сейчас в теме
(14) baracuda, (14) baracuda, как вариант.
+
17. dj_serega 391 26.01.16 12:15 Сейчас в теме
(14) baracuda, в УФ разукраска только через УО.
(15) alljoke, Что я в 2 и написал ;)
+
19. baracuda 2 26.01.16 12:35 Сейчас в теме
(17) dj_serega, то есть без снятие конфы с поддержки не обойтись...
+
20. dj_serega 391 26.01.16 13:17 Сейчас в теме
(19) baracuda, я думаю нет :(
+
21. baracuda 2 26.01.16 14:14 Сейчас в теме
(20) dj_serega,
попробовал ПриОткрытии перебрать тч

	ТабЧасть = ЭтаФорма.Элементы.Товары.ТекущиеДанные;
	Для Каждого Строка ИЗ ТабЧасть Цикл
		Сообщить("1");	
	КонецЦикла;

Получаю ошибку Итератор для значения не определен, то есть у меня в текущих данных формы ничего нет.
О Господи, какого фига придумали УФ.
Прикрепленные файлы:
+
23. mymyka 26.01.16 15:42 Сейчас в теме
(21)ТекущиеДанные это данные текущей строки табличного поля. Что вы там перебирать собрались?)
Чтобы не калечить форму, можно ПриСозданииНаСервере() добавить колонку таблицы формы с флагом ИспользоватьВсегда, заполнить в существующих строках значение, привязать к полю номенклатура событие ПриИзменении и описать обработчик в модуле формы.
Тогда и раскраска будет работать без лишних видимых колонок в документе, и обновляться получится без проблем(изменен будет только модуль формы, что не критично).
то есть без снятие конфы с поддержки не обойтись...

снятие с поддержки и редактирование с сохранением поддержки это сильно разные вещи.
+
24. baracuda 2 26.01.16 16:28 Сейчас в теме
(23) mymyka, спасибо за наводку. Сейчас еще попробую внешнюю обработку слепить. чтоб конфу на подержке сохранить.

снятие с поддержки и редактирование с сохранением поддержки это сильно разные вещи.

Все с такими мыслями снимали значок), что в итоге случалось мы знаем.
+
25. mymyka 26.01.16 16:43 Сейчас в теме
(24)
Все с такими мыслями снимали значок), что в итоге случалось мы знаем.

Обновляю ЕРП с сохранением поддержки, где одна только конфа весит 650мб + апдейты по 200мб, в которой куча доработок. Обновление занимает от силы 1-2 дня.
Если не калечить формы и использовать переопределяемые модули БСП, никаких проблем с обновлением нет.
Можно еще посмотреть в направлении Расширения конфигурации. Сам пока не копал этот механизм, но в целом отзывы крайне положительные.
+
26. baracuda 2 26.01.16 16:54 Сейчас в теме
(25) mymyka, в ут11.2 расширений нет.

Напишу лучше внешнюю обработку заполнения ТЧ. Только буду не заполнять, а подсвечивать необходимые строки. Должно получиться в теории.
+
27. mymyka 26.01.16 17:15 Сейчас в теме
(26)Хозяин - барин. Только не понятно, как вы собираетесь подсвечивать строки через внешнюю обработку, если в уф нет ОформленияСтрок, а для УсловногоОформления формы нет данных.
+
29. mymyka 27.01.16 11:00 Сейчас в теме
(26)
в ут11.2 расширений нет

Расширения это возможности платформы, а не конфигурации
(28)
Как бы побороть

Да никак. Есть элемент типа Поле таблицы, не существует элемента типа Строка таблицы. Для этого и есть УсловноеОформление.
+
30. baracuda 2 27.01.16 12:55 Сейчас в теме
(29) mymyka, если очень захотеть то можно)) нашел таки решение, костыль конечно тот еще но зато работает.

&НаСервере
Процедура ОформлениеТЧ()
	ДанныеФормы = ЭтаФорма.Объект.Товары;
	ЦветВыделения = Новый Цвет(190, 134, 100);
	Для Каждого Строка ИЗ ДанныеФормы Цикл
		ДелимостьПризнак = ПроверкаНаПризнакДелимости(Строка.Номенклатура);
		Если ДелимостьПризнак > 0 Тогда
			ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
			ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
			ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
			ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
			ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
			ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
			ЭлементОтбора.ПравоеЗначение = Строка.Номенклатура;
			ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
		КонецЕсли;	
	КонецЦикла;	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОформлениеТЧ();
КонецПроцедуры
Показать
+
31. mymyka 27.01.16 13:03 Сейчас в теме
(30)Шикарный вариант, особенно при количество строк в ТЧ под 100. Открываться документ будет секунд 15. И при добавлении новой строки, как я понимаю, разукраска работать не будет? Если уж вносите изменения в документ, не проще было программно добавить колонку формы?
Кстати, все это дело можно было бы вызвать ПриСозданииНаСервере(), не дергая сервер лишний раз ПриОткрытии().
+
32. baracuda 2 27.01.16 13:16 Сейчас в теме
(31) mymyka, количество строк в ТЧ 200, открывается за 1-2 сек.
кроме того посоветовали сделать
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
            ЭлементОтбора.ПравоеЗначение = МассивНоменклатур;

Так производительнее будет. насчет процедуры ПриСозданииНаСервере() так и сделаю.

Я так не собираюсь кстати делать, это был чисто спортивный интерес. Буду через внешнюю в любом случае.
+
33. dj_serega 391 27.01.16 13:22 Сейчас в теме
(32) baracuda, А если документ открыт а изменилось значение реквизита "делимого"?

В смысле форма обновится или нужно переоткрыть?
+
34. baracuda 2 27.01.16 13:31 Сейчас в теме
(33) dj_serega, да. Но это редкий случай. Список делимых уже сформирован и пополняется крайне редко.
+
35. mymyka 27.01.16 13:37 Сейчас в теме
(32)Это на файловой базе? И с повторяющейся номенклатурой? Вы на скульной попробуйте. И ПризнакДелимости попробуйте определить не по количеству строк в доп.реквизитах, а по значению конкретного доп.реквизита (а то костыльно получается, добавят еще 1 доп.реквизит и все раскрасится), и замерьте скорость тогда.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//добавим реквизит
	ДобавляемыеРеквизиты = Новый Массив; 
    Реквизит = Новый РеквизитФормы("ТабличнаяЧасть1НовРек",Новый ОписаниеТипов("Булево"),"Объект.ТабличнаяЧасть1","НовРек"); 
    ДобавляемыеРеквизиты.Добавить(Реквизит); 
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	//заполним новый реквизит, тут любой свой алгоритм заполнения
	Объект.ТабличнаяЧасть1[0].ТабличнаяЧасть1НовРек = Истина;
	//добавим элемент условного оформление
	ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
	ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
	ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
	ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.ТабличнаяЧасть1НовРек");
	ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
	ЭлементОтбора.ПравоеЗначение = Истина;
	ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);	
КонецПроцедуры
Показать

вот код
в аттаче результат.
З.Ы. так или иначе, модуль формы придется менять, или раскраска не будет работать для добавленных строк.
Прикрепленные файлы:
+
36. baracuda 2 27.01.16 13:52 Сейчас в теме
(35) mymyka, база серверная.
Список реквизитов не смог найти. Неверный номер колонки выдается.
Для вновь добавленных работать не будет согласен, но у нас док создается из файла, а не вручную. В общем да костыль тот еще, но мало ли может кому пригодиться. Да и при желании все можно грамотно оформить, чтоб не было проблем с производительностью.
+
8. alljoke 26.01.16 11:29 Сейчас в теме
http://screencast.com/t/gjeIKVh8w
похоже надо указывать свойство Доп.Реквизита, а потом его значение.
+
10. baracuda 2 26.01.16 11:33 Сейчас в теме
(8) alljoke, в списке номенклатуры и у меня работает.

Речь идет о ТЧ Товары документа Поступление Товаров и Услуг
+
12. alljoke 26.01.16 11:38 Сейчас в теме
(10) baracuda, какая конфигурация?
+
13. baracuda 2 26.01.16 11:38 Сейчас в теме
15. alljoke 26.01.16 12:03 Сейчас в теме
А если доп реквизит вывести в ТабЧасть, но сделать невидимым?
+
18. baracuda 2 26.01.16 12:16 Сейчас в теме
(15) alljoke, Через конфигуратор?
+
22. antz 26.01.16 15:36 Сейчас в теме
Элементы.Товары.ТекущиеДанные = это текущая строка элемента формы "Товары". Перебирай Объект.Товары.
+
28. baracuda 2 27.01.16 10:47 Сейчас в теме
Если через конфигуратор то попробовал так.
&НаСервере
Функция ПроверкаНаПризнакДелимости(НоменклатураНаименование)
	НомСсылка = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураНаименование);
	Количество =  НомСсылка.ДополнительныеРеквизиты.Количество();
	Возврат Количество;	
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ТабЧасть = ЭтаФорма.Элементы.Товары.ТекущиеДанные;
	ДанныеФормы = ЭтаФорма.Объект.Товары;
	
	ЦветВыделения = Новый Цвет(190, 134, 100);
	
	Для Каждого Строка ИЗ ДанныеФормы Цикл
		ДелимостьПризнак = ПроверкаНаПризнакДелимости(Строка.Номенклатура);
		Если ДелимостьПризнак > 0 Тогда
			Элементы.ТоварыНоменклатура.ЦветФона = ЦветВыделения;
		КонецЕсли;	
	КонецЦикла;
КонецПроцедуры		
Показать


Все ничего да вот только Элементы.ТоварыНоменклатура.ЦветФона = ЦветВыделения; раскрашивает всю ТЧ а не только текущую строку. Как бы побороть.
+
37. baracuda 2 28.01.16 15:17 Сейчас в теме
Оформил все во внешней обработке. Всем спасибо огромное за помощь.
https://yadi.sk/d/PSp4D7p5nsXaJ
+
38. mymyka 28.01.16 15:47 Сейчас в теме
(37)А где разукраска? Нашел только изменение Количества и Цены. Интересно просто с академической точки зрения.
+
39. baracuda 2 28.01.16 16:06 Сейчас в теме
(38) mymyka, черз внешнюю обработку ее не получилось сделать. Изощрялся как мог, но не смог передать оформление на форму.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот