![]() |
![]() |
![]() |
|
Окраска строки табличного поля по условию | ☑ | ||
---|---|---|---|---|
0
lia171
17.11.12
✎
16:14
|
Добрый день! Есть задача,в УТ 10.3, в документе "Перемещение товаров" имеется два табличных поля на разных закладках и нужно сравнить позиции номенклатуры, т.е. если во второй ТЧ нет позиции а в первой есть то она окрашивается в красный цвет, а если совпадают позиции то цвет остается неизменным. Позиции сравниваются по наименованию. Попробовал накидать код, вот все что удалось сделать, но ни чего не получается . я новичек в программировании поэтому прошу помощи!
Процедура ТоварыПриПолученииДанных(Элемент, ОформленияСтрок) СтруктураДляПоиска1 = Новый Структура("Номенклатура", ЭлементыФормы.Товары.ТекущаяСтрока.Номенклатура); МассивСтрок1 = Товары.НайтиСтроки(СтруктураДляПоиска1); СтруктураДляПоиска2 = Новый Структура("Номенклатура", Прием.ТекущаяСтрока.Номенклатура); МассивСтрок2 = ПриемНаСклад.НайтиСтроки(СтруктураДляПоиска2); Для каждого СтрокаСписка Из МассивСтрок1 Цикл Если ???? тогда СтрокаСписка.ЦветФона = Новый Цвет(155, 155, 155); КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
GANR
17.11.12
✎
16:27
|
(0) Условное оформление никак не прикрутить?
|
|||
2
hhhh
17.11.12
✎
16:53
|
ОформленияСтрок же есть. Там и меняйте цвет.
|
|||
3
lia171
17.11.12
✎
16:59
|
с оформлением понятно, а как правильно сравнить строки табличных полей?
|
|||
4
EvgeniuXP
17.11.12
✎
23:53
|
(2) не всегда работает, если захочешь в одной строке сравнить между собой колонки и выдать цвет :)
|
|||
5
Азат
18.11.12
✎
00:00
|
(3) ну типа так:
Процедура ПриВыводеСТроки(бла-бла-бла) Если ТЧ2.Найти(ДанныеСтроки.Номенклатура, "Номенклатура") = Неопределено Тогда ОформлениеСтроки.ЦветФорма = Новый Цвет(255, 0, 0); Иначе Сообщить("А ВОТ НАШЛИ!!!"); КонецЕсли; КОнецПроцедуры |
|||
6
lia171
18.11.12
✎
10:27
|
а если нужно количество сравнить?
|
|||
7
Азат
19.11.12
✎
01:18
|
(6) я тебе уже все написал, чуток додумать мозгов не хватает? тогда 500 рублей на киви или яд
|
|||
8
vmv
19.11.12
✎
01:43
|
вот, для каждой сущности(справочник, отчет и т.д. у меня есль справочник, где наборы цветов сохранены в виде Красный,Зклкный,Синий, (например 255,255,255 - это белый)
но набор цветов можно без справочника создать программного в список, а не выбирать из справочника готовое собственно дальше код из общего модуля для прорисовки фонов, цветов текста и т.д. если есть необходимость, на любителя(предпоследний метод - задает список отбора и элементы условного оформелния, последний метод - инициализирует УО цветовой палитрой) //----------- Методы типа данных "Цвет" // // Add_ComM_ОтчетыКС.ПолучитьАбсолютныйЦвет(ИсходныйЦвет); // Функция ПолучитьАбсолютныйЦвет(ИсходныйЦвет) Экспорт Если ИсходныйЦвет.Вид = ВидЦвета.Абсолютный Тогда Возврат ИсходныйЦвет; КонецЕсли; ТабДок = Новый ТабличныйДокумент; ТабДок.Область("R1C1").ЦветФона = ИсходныйЦвет; ТабДок.Записать("ПреобразованиеЦвета.mxl", ТипФайлаТабличногоДокумента.MXL7); ТабДок.Прочитать("ПреобразованиеЦвета.mxl"); АЦвет = ТабДок.Область("R1C1").ЦветФона; Возврат АЦвет; КонецФункции // // Add_ComM_ОтчетыКС.ПолучитьСтроку10АбсолютногоЦвета(АЦвет); // Функция ПолучитьСтроку10АбсолютногоЦвета(АЦвет) Экспорт // Форматная строка составляющей цвета ФсСц = "ЧЦ=3; ЧН=; ЧВН=; ЧГ="; // Допустим, что АЦвет равен (0, 0, 0) или (24, 15, 255). Где составляющие цвета - это числа RGB10 = Формат(АЦвет.Красный, ФсСц) + "," + Формат(АЦвет.Зеленый, ФсСц) + "," + Формат(АЦвет.Синий , ФсСц); // Для примера выше получим строки "000,000,000" или "024,015,255", т.е. строго фиксированные строки. Возврат RGB10; КонецФункции // // Add_ComM_ОтчетыКС.ПолучитьАбсолютныйЦветИзСтроки10(RGB10); // // RGB10 = это строка в формате "ККК,ЗЗЗ,ССС" // Где ККК: десятичное число Красной составляющей цвета, строкой // Где ЗЗЗ: десятичное число Зеленой составляющей цвета, строкой // Где ССС: десятичное число Синей составляющей цвета, строкой // // Проверка правильного формата строки составляющих цвета в этом методе не производится, // т.к. задавать правильный формат нужно при сохранении этой строки в различных объектах // см. метод ПолучитьСтроку10АбсолютногоЦвета(АЦвет) // // Представление цвета в виде "ККК,ЗЗЗ,ССС" в отличие от шестнадцатеричного более наглядно отображается // в условном оформлении при программном формировании элементов оформления, например, // RGB10 = "255,255,255" // Функция ПолучитьАбсолютныйЦветИзСтроки10(Знач RGB10, КрПоУмолчанию = 255, ЗлПоУмолчанию = 255, СнПоУмолчанию = 255) Экспорт // Удалим пробелы на случай если RGB10 получен из реквизита-строки с НЕ фиксированной длиной строки. RGB10 = СокрЛП(RGB10); Если СтрДлина(RGB10) = 11 Тогда Красный = Мин(ОбщегоНазначения.ПреобразоватьВЧисло(Лев (RGB10, 3)) , 255); Зеленый = Мин(ОбщегоНазначения.ПреобразоватьВЧисло(Сред(RGB10, 5, 3)), 255); Синий = Мин(ОбщегоНазначения.ПреобразоватьВЧисло(Прав(RGB10, 3)) , 255); Иначе Красный = КрПоУмолчанию; Зеленый = ЗлПоУмолчанию; Синий = СнПоУмолчанию; КонецЕсли; Возврат Новый Цвет(Красный, Зеленый, Синий); КонецФункции //----------- Методы типа данных "УсловноеОформление" // // Add_ComM_ОтчетыКС.ПолучитьСписокЦветовУо(РодительЦветов, "RGB10", "Счет", Истина); // Функция ПолучитьСписокЦветовУо(Знач РодительЦветов = Неопределено, RGB10ПолеКдИмя, ПолеКдИмя = "", ПолеКдПроверкаЗаполнения = Истина) Экспорт СзЦвета = Add_ComM_ОтчетыС.ПолучитьСписокЦветов(РодительЦветов, Ложь); СзЦветаУо = Новый СписокЗначений; НомерПп = 0; Для каждого ЭлементСз Из СзЦвета Цикл СтвОтбора = Новый Соответствие; СтвЭлементаОтбора = Новый Соответствие; СтвЭлементаОтбора.Вставить("ЛевоеЗначение" , Новый ПолеКомпоновкиДанных(RGB10ПолеКдИмя)); СтвЭлементаОтбора.Вставить("ВидСравнения" , ВидСравненияКомпоновкиДанных.Равно); СтвЭлементаОтбора.Вставить("ПравоеЗначение", ЭлементСз.Представление); СтвОтбора.Вставить("СтвЭлементаОтбора1", СтвЭлементаОтбора); Если ЗначениеЗаполнено(ПолеКдИмя) И ПолеКдПроверкаЗаполнения Тогда СтвЭлементаОтбора = Новый Соответствие; СтвЭлементаОтбора.Вставить("ЛевоеЗначение" , Новый ПолеКомпоновкиДанных(ПолеКдИмя)); СтвЭлементаОтбора.Вставить("ВидСравнения" , ?(ЗначениеЗаполнено(ПолеКдИмя), ВидСравненияКомпоновкиДанных.Заполнено, ВидСравненияКомпоновкиДанных.НеЗаполнено)); СтвЭлементаОтбора.Вставить("ПравоеЗначение", Неопределено); СтвОтбора.Вставить("СтвЭлементаОтбора2", СтвЭлементаОтбора); КонецЕсли; СтвЗнчПараметров = Новый Соответствие; СтвЗнчПараметров.Вставить("ЦветФона", ЭлементСз.Значение); //... установка прочих значений параметров СтруктураЭлементаУо = Новый Структура; СтруктураЭлементаУо.Вставить("СтвЗнчПараметров", СтвЗнчПараметров); СтруктураЭлементаУо.Вставить("СтвОтбора" , СтвОтбора); НомерПп = НомерПп + 1; КодПп = Формат(НомерПп, "ЧЦ=5; ЧН=; ЧВН=; ЧГ="); СзЦветаУо.Добавить(СтруктураЭлементаУо, КодПп); КонецЦикла; СзЦветаУо.СортироватьПоПредставлению(); Возврат СзЦветаУо; КонецФункции // // Варианты вызова: // // Add_ComM_ОтчетыКС.УстановитьЦветаУо(Уо, РодительЦветов, "RGB10",, Ложь); // // Add_ComM_ОтчетыКС.УстановитьЦветаУо(Уо, РодительЦветов, "СтрокаБ.RGB10",, Ложь); // // Add_ComM_ОтчетыКС.УстановитьЦветаУо(Уо, РодительЦветов, "RGB10", "Счет", Истина); // Функция УстановитьЦветаУо(Уо, РодительЦветов = Неопределено, RGB10ПолеКдИмя, ПолеКдИмя = "", ПолеКдПроверкаЗаполнения = Истина, ПоляРесурсов = Ложь) Экспорт // Получим УИД текущего пользователя строкой и ключ поиска элемента в ПредставлениеПользовательскойНастройки УидПлзСтр = Add_ComM_ОтчетыС.ТекущийПользовательИд(Истина); Если ЗначениеЗаполнено(ПолеКдИмя) Тогда КлючВПредставлениеПлзНс = ПолеКдИмя + "/" + УидПлзСтр; ИначеЕсли ПоляРесурсов Тогда КлючВПредставлениеПлзНс = "ПоляРесурсов" + "/" + УидПлзСтр; Иначе КлючВПредставлениеПлзНс = УидПлзСтр; КонецЕсли; СзЦветаУо = ПолучитьСписокЦветовУо(РодительЦветов, RGB10ПолеКдИмя, ПолеКдИмя, ПолеКдПроверкаЗаполнения); ЭлементыУо = Уо.Элементы; // Получим в массив все добавленные ранее этим методом элементы условного оформления по УидПлзСтр и ПолеКдИмя мЭлементыУо = Новый Массив; Для каждого ЭлементУо Из ЭлементыУо Цикл Если Найти(ЭлементУо.ПредставлениеПользовательскойНастройки, КлючВПредставлениеПлзНс) Тогда мЭлементыУо.Добавить(ЭлементУо); КонецЕсли; Если Найти(ЭлементУо.ИдентификаторПользовательскойНастройки, КлючВПредставлениеПлзНс) Тогда мЭлементыУо.Добавить(ЭлементУо); КонецЕсли; КонецЦикла; // Удалим все добавленные ранее этим методом элементы условного оформления по ИдПн Для каждого ЭлементУо Из мЭлементыУо Цикл ЭлементыУо.Удалить(ЭлементУо); КонецЦикла; Для каждого СзЦветаУоЭлемент Из СзЦветаУо Цикл СтруктураЭлементаУо = СзЦветаУоЭлемент.Значение; // Соответствие значений парметров условного оформления текущего элемента условного оформления СтвЗнчПараметров = СтруктураЭлементаУо.СтвЗнчПараметров; СтвЗнчПараметровКво = СтвЗнчПараметров.Количество(); Если НЕ СтвЗнчПараметровКво Тогда Продолжить; КонецЕсли; // Соответствие отбора условного оформления текущего элемента условного оформления СтвОтбора = СтруктураЭлементаУо.СтвОтбора; СтвОтбораКво = СтвОтбора.Количество(); Если НЕ СтвОтбораКво Тогда Продолжить; КонецЕсли; // Инициализация текущего элемента условного оформления ЭлементУо = ЭлементыУо.Добавить(); ЭлементУо.Представление = СзЦветаУоЭлемент.Представление + "/" + RGB10ПолеКдИмя; ЭлементУо.ПредставлениеПользовательскойНастройки = ЭлементУо.Представление + "/" + КлючВПредставлениеПлзНс; Для каждого СтвЗнчПараметровЭлемент Из СтвЗнчПараметров Цикл ТекущийПараметрКД = Новый ПараметрКомпоновкиДанных(СтвЗнчПараметровЭлемент.Ключ); ЗнчПараметраНастроекКД = ЭлементУо.Оформление.НайтиЗначениеПараметра(ТекущийПараметрКД); Если ЗнчПараметраНастроекКД = Неопределено Тогда Продолжить; КонецЕсли; ЗнчПараметраНастроекКД.Использование = Истина; ЗнчПараметраНастроекКД.Значение = СтвЗнчПараметровЭлемент.Значение; КонецЦикла; // Инициализация отбора по текущему элементу условного оформления Если СтвОтбораКво = 1 Тогда // Если соответствие содержит один элемент, то это элемент Уо с простым отбором. СтвЭлементаОтбора = СтвОтбора.Получить("СтвЭлементаОтбора1"); ЭлементОтбора = ЭлементУо.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.Использование = Истина; ЭлементОтбора.ЛевоеЗначение = СтвЭлементаОтбора.Получить("ЛевоеЗначение"); ЭлементОтбора.ВидСравнения = СтвЭлементаОтбора.Получить("ВидСравнения"); ЭлементОтбора.ПравоеЗначение = СтвЭлементаОтбора.Получить("ПравоеЗначение"); ИначеЕсли СтвОтбораКво > 1 Тогда // Если соответствие содержит более чем один элемент, то это элемент Уо с групповым отбором. // Инициализируем группу элементов отбора по текущему элементу условного оформления ГруппаИОтбораУо = ЭлементУо.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаИОтбораУо.Использование = Истина; ГруппаИОтбораУо.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; Для каждого СтвЭлементаОтбораКЗ Из СтвОтбора Цикл Если СтвЭлементаОтбораКЗ.Ключ = "Цвет" Тогда Продолжить; КонецЕсли; ЭлементОтбора = ГруппаИОтбораУо.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.Использование = Истина; ЭлементОтбора.ЛевоеЗначение = СтвЭлементаОтбораКЗ.Значение.Получить("ЛевоеЗначение"); ЭлементОтбора.ВидСравнения = СтвЭлементаОтбораКЗ.Значение.Получить("ВидСравнения"); ЭлементОтбора.ПравоеЗначение = СтвЭлементаОтбораКЗ.Значение.Получить("ПравоеЗначение"); КонецЦикла; Иначе Продолжить; КонецЕсли; // Инициализация полей по текущему элементу условного оформления ЭлементУоПоляЭлементы = ЭлементУо.Поля.Элементы; Если ЗначениеЗаполнено(ПолеКдИмя) Тогда ПолеОформления = ЭлементУоПоляЭлементы.Добавить(); ПолеОформления.Использование = Истина; ПолеОформления.Поле = Новый ПолеКомпоновкиДанных(ПолеКдИмя); ИначеЕсли ПоляРесурсов Тогда Для каждого ДоступноеПолеКд Из Уо.ДоступныеПоляПолей.Элементы Цикл Если ДоступноеПолеКд.Ресурс И (НЕ ДоступноеПолеКд.Папка) И (НЕ ДоступноеПолеКд.Таблица) Тогда ПолеОформления = ЭлементУоПоляЭлементы.Добавить(); ПолеОформления.Использование = Истина; ПолеОформления.Поле = ДоступноеПолеКд.Поле; КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; Возврат Истина; КонецФункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |