Условное оформление тч документа. Как обратиться к доп реквизиту?
Пробую оформить ТЧ для документа. Условием является признак наличия для номенклатуры значения ДопРеквизита = Истина.
Сам код такой.
Если проверяю просто номенклатуру на заполненность то строки разукрашиваются.
Отсюда вывод ошибка тут.
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.Делимое");
Но как правильно будет в отбор доп реквизит ума не приложу.
Сам код такой.
ЭтаФорма.УсловноеОформление.Элементы.Очистить();
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.Делимое");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
ПоказатьЕсли проверяю просто номенклатуру на заполненность то строки разукрашиваются.
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ЭлементОтбора.ПравоеЗначение = Истина;
Отсюда вывод ошибка тут.
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура.Делимое");
Но как правильно будет в отбор доп реквизит ума не приложу.
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(20) dj_serega,
попробовал ПриОткрытии перебрать тч
Получаю ошибку Итератор для значения не определен, то есть у меня в текущих данных формы ничего нет.
О Господи, какого фига придумали УФ.
попробовал ПриОткрытии перебрать тч
ТабЧасть = ЭтаФорма.Элементы.Товары.ТекущиеДанные;
Для Каждого Строка ИЗ ТабЧасть Цикл
Сообщить("1");
КонецЦикла;
Получаю ошибку Итератор для значения не определен, то есть у меня в текущих данных формы ничего нет.
О Господи, какого фига придумали УФ.
Прикрепленные файлы:
![](/upload/forum/3ee/3eec8948976f4c9f7c62e3d408dc764b.png)
(21)ТекущиеДанные это данные текущей строки табличного поля. Что вы там перебирать собрались?)
Чтобы не калечить форму, можно ПриСозданииНаСервере() добавить колонку таблицы формы с флагом ИспользоватьВсегда, заполнить в существующих строках значение, привязать к полю номенклатура событие ПриИзменении и описать обработчик в модуле формы.
Тогда и раскраска будет работать без лишних видимых колонок в документе, и обновляться получится без проблем(изменен будет только модуль формы, что не критично).
снятие с поддержки и редактирование с сохранением поддержки это сильно разные вещи.
Чтобы не калечить форму, можно ПриСозданииНаСервере() добавить колонку таблицы формы с флагом ИспользоватьВсегда, заполнить в существующих строках значение, привязать к полю номенклатура событие ПриИзменении и описать обработчик в модуле формы.
Тогда и раскраска будет работать без лишних видимых колонок в документе, и обновляться получится без проблем(изменен будет только модуль формы, что не критично).
то есть без снятие конфы с поддержки не обойтись...
снятие с поддержки и редактирование с сохранением поддержки это сильно разные вещи.
(23) mymyka, спасибо за наводку. Сейчас еще попробую внешнюю обработку слепить. чтоб конфу на подержке сохранить.
Все с такими мыслями снимали значок), что в итоге случалось мы знаем.
снятие с поддержки и редактирование с сохранением поддержки это сильно разные вещи.
Все с такими мыслями снимали значок), что в итоге случалось мы знаем.
(24)
Обновляю ЕРП с сохранением поддержки, где одна только конфа весит 650мб + апдейты по 200мб, в которой куча доработок. Обновление занимает от силы 1-2 дня.
Если не калечить формы и использовать переопределяемые модули БСП, никаких проблем с обновлением нет.
Можно еще посмотреть в направлении Расширения конфигурации. Сам пока не копал этот механизм, но в целом отзывы крайне положительные.
Все с такими мыслями снимали значок), что в итоге случалось мы знаем.
Обновляю ЕРП с сохранением поддержки, где одна только конфа весит 650мб + апдейты по 200мб, в которой куча доработок. Обновление занимает от силы 1-2 дня.
Если не калечить формы и использовать переопределяемые модули БСП, никаких проблем с обновлением нет.
Можно еще посмотреть в направлении Расширения конфигурации. Сам пока не копал этот механизм, но в целом отзывы крайне положительные.
(29) mymyka, если очень захотеть то можно)) нашел таки решение, костыль конечно тот еще но зато работает.
&НаСервере
Процедура ОформлениеТЧ()
ДанныеФормы = ЭтаФорма.Объект.Товары;
ЦветВыделения = Новый Цвет(190, 134, 100);
Для Каждого Строка ИЗ ДанныеФормы Цикл
ДелимостьПризнак = ПроверкаНаПризнакДелимости(Строка.Номенклатура);
Если ДелимостьПризнак > 0 Тогда
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("Товары");
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Строка.Номенклатура;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОформлениеТЧ();
КонецПроцедуры
Показать
(30)Шикарный вариант, особенно при количество строк в ТЧ под 100. Открываться документ будет секунд 15. И при добавлении новой строки, как я понимаю, разукраска работать не будет? Если уж вносите изменения в документ, не проще было программно добавить колонку формы?
Кстати, все это дело можно было бы вызвать ПриСозданииНаСервере(), не дергая сервер лишний раз ПриОткрытии().
Кстати, все это дело можно было бы вызвать ПриСозданииНаСервере(), не дергая сервер лишний раз ПриОткрытии().
(31) mymyka, количество строк в ТЧ 200, открывается за 1-2 сек.
кроме того посоветовали сделать
Так производительнее будет. насчет процедуры ПриСозданииНаСервере() так и сделаю.
Я так не собираюсь кстати делать, это был чисто спортивный интерес. Буду через внешнюю в любом случае.
кроме того посоветовали сделать
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = МассивНоменклатур;
Так производительнее будет. насчет процедуры ПриСозданииНаСервере() так и сделаю.
Я так не собираюсь кстати делать, это был чисто спортивный интерес. Буду через внешнюю в любом случае.
(32)Это на файловой базе? И с повторяющейся номенклатурой? Вы на скульной попробуйте. И ПризнакДелимости попробуйте определить не по количеству строк в доп.реквизитах, а по значению конкретного доп.реквизита (а то костыльно получается, добавят еще 1 доп.реквизит и все раскрасится), и замерьте скорость тогда.
вот код
в аттаче результат.
З.Ы. так или иначе, модуль формы придется менять, или раскраска не будет работать для добавленных строк.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//добавим реквизит
ДобавляемыеРеквизиты = Новый Массив;
Реквизит = Новый РеквизитФормы("ТабличнаяЧасть1НовРек",Новый ОписаниеТипов("Булево"),"Объект.ТабличнаяЧасть1","НовРек");
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//заполним новый реквизит, тут любой свой алгоритм заполнения
Объект.ТабличнаяЧасть1[0].ТабличнаяЧасть1НовРек = Истина;
//добавим элемент условного оформление
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных("ТабличнаяЧасть1");
ЭлементОтбора = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ТабличнаяЧасть1.ТабличнаяЧасть1НовРек");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);
КонецПроцедуры
Показатьвот код
в аттаче результат.
З.Ы. так или иначе, модуль формы придется менять, или раскраска не будет работать для добавленных строк.
Прикрепленные файлы:
![](/upload/forum/upload/b75/b75400ac4b5928da84cef24f25b543c5.png)
(35) mymyka, база серверная.
Список реквизитов не смог найти. Неверный номер колонки выдается.
Для вновь добавленных работать не будет согласен, но у нас док создается из файла, а не вручную. В общем да костыль тот еще, но мало ли может кому пригодиться. Да и при желании все можно грамотно оформить, чтоб не было проблем с производительностью.
Список реквизитов не смог найти. Неверный номер колонки выдается.
Для вновь добавленных работать не будет согласен, но у нас док создается из файла, а не вручную. В общем да костыль тот еще, но мало ли может кому пригодиться. Да и при желании все можно грамотно оформить, чтоб не было проблем с производительностью.
похоже надо указывать свойство Доп.Реквизита, а потом его значение.
Если через конфигуратор то попробовал так.
Все ничего да вот только Элементы.ТоварыНоменклатура.ЦветФона = ЦветВыделения; раскрашивает всю ТЧ а не только текущую строку. Как бы побороть.
&НаСервере
Функция ПроверкаНаПризнакДелимости(НоменклатураНаименование)
НомСсылка = Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураНаименование);
Количество = НомСсылка.ДополнительныеРеквизиты.Количество();
Возврат Количество;
КонецФункции
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ТабЧасть = ЭтаФорма.Элементы.Товары.ТекущиеДанные;
ДанныеФормы = ЭтаФорма.Объект.Товары;
ЦветВыделения = Новый Цвет(190, 134, 100);
Для Каждого Строка ИЗ ДанныеФормы Цикл
ДелимостьПризнак = ПроверкаНаПризнакДелимости(Строка.Номенклатура);
Если ДелимостьПризнак > 0 Тогда
Элементы.ТоварыНоменклатура.ЦветФона = ЦветВыделения;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьВсе ничего да вот только Элементы.ТоварыНоменклатура.ЦветФона = ЦветВыделения; раскрашивает всю ТЧ а не только текущую строку. Как бы побороть.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот