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

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

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

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


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

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



Отсюда вывод ошибка тут.
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.Делимое");
Но как правильно будет в отбор доп реквизит ума не приложу.
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. dj_serega 390 26.01.16 11:13 Сейчас в теме
А если настроить УО через свойства формы работает?
Если нет, тогда только через: создать реквизит ТЧ, и заполнять его при открытии формы (не реквизит ТЧ объекта, а реквизит ТЧ формы)
sur0g; baracuda; +2 Ответить
4. baracuda 2 26.01.16 11:20 Сейчас в теме
(2) dj_serega, Да работает. Но через свойства формы максимум для чего я могу добраться это Объект.Товары.Номенклатура.
(3) alljoke, Да Делимое это допреквизит номенклатуры с Типом Булево. Прошлый раз на этом и обжегся, перепутал доп сведение и доп реквизит
5. dj_serega 390 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 390 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 390 26.01.16 12:15 Сейчас в теме
(14) baracuda, в УФ разукраска только через УО.
(15) alljoke, Что я в 2 и написал ;)
19. baracuda 2 26.01.16 12:35 Сейчас в теме
(17) dj_serega, то есть без снятие конфы с поддержки не обойтись...
20. dj_serega 390 26.01.16 13:17 Сейчас в теме
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 390 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, черз внешнюю обработку ее не получилось сделать. Изощрялся как мог, но не смог передать оформление на форму.
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день