Имя: Пароль:
1C
 
Программные изменения табличной части документа
0 mzelensky
 
27.10.10
12:12
Доброго времени суток!
Собственно задача звучит довольно просто, но самому найти решение пока не удалось. Собственно имеется табличная часть долкумента с большим количеством колонок. Необходимо программно изменять цвет фона шапки и цвет фона ячейки таб.части. Сделать это в конфигураторе элементарно, а вот как обратиться к этим свойствам программно, не могу найти. Подскажите плиз!
1 mzelensky
 
27.10.10
12:15
(0) + изменять цвет нужно для определенных колонок.
2 mzelensky
 
27.10.10
12:17
кажется уже нашел!
3 mzelensky
 
29.10.10
09:02
ПРОДОЛЖЕНИЕ ТЕМЫ!!!!!! ВОПРОС НЕМНОГО ДРУГОЙ, НО СОПУТСТВУЮЩИЙ!!!

Собственно изменить цвет фона всей колонки в табличной части мне удалось. Теперь нужно сделать изменение цвета фона определенной ячейки табличной части. Подскажите или наведите на верное решение!?!?!?
4 Рэйв
 
29.10.10
09:06
ОформлениеЯчейки (CellAppearance)
Свойства:
АвтоВысотаЯчейки (AutoCellHeight)
Видимость (Visible)
Выравнивание (Align)
ВысотаЯчейки (CellHeight)
ГиперСсылка (HyperLink)
Значение (Value)
ЗначениеКартинки (PictureValue)
ЗначениеФлажка (CheckValue)
Имя (Name)
ИндексКартинки (PictureIndex)
Картинка (Picture)
ОтметкаНезаполненного (MarkIncomplete)
ОтображатьКартинку (ShowPicture)
ОтображатьТекст (ShowText)
ОтображатьФлажок (ShowCheckBox)
Текст (Text)
ТолькоПросмотр (ReadOnly)
Флажок (Check)
ЦветТекста (TextColor)
ЦветФона (BackColor)
Шрифт (Font)

Методы:
УстановитьКартинку (SetPicture)
УстановитьТекст (SetText)
УстановитьФлажок (SetCheck)

Описание:
Определяет оформление ячейки табличного поля. Используется для определения свойства Ячейки объекта ОформлениеСтроки.
Недоступен на сервере 1С:Предприятие. Не используется в модуле внешнего соединения.
Пример:
// Пример 1. Назначение цвета ячеек
Для каждого ОформлениеЯчейки из ОформлениеСтроки.Ячейки Цикл
   ОформлениеЯчейки.ЦветФона = Новый Цвет(5, 12, 120);
КонецЦикла;

// Пример 2. Вывод картинки с ячейку табличного поля
// для колонки (Важность) при конфигурировании назначена библиотека картинок,
// состоящая из двух картинок, выбираемых по значению
// отображаемых данных (ДанныеСтроки)
ОформлениеСтроки.Ячейки.Важность.ОтображатьТекст = Ложь;
ОформлениеСтроки.Ячейки.Важность.ОтображатьФлажок = Ложь;
ОформлениеСтроки.Ячейки.Важность.ОтображатьКартинку = Истина;
Если ДанныеСтроки.Важность = Перечисления.Важность.Высокая Тогда
ОформлениеСтроки.Ячейки.Важность.ИндексКартинки = 0;
ИначеЕсли ДанныеСтроки.Важность = Перечисления.Важность.Низкая Тогда
ОформлениеСтроки.Ячейки.Важность.ИндексКартинки = 1;
Иначе
// не выводить (вывод пустой) картинку
ОформлениеСтроки.Ячейки.Важность.Картинка = Новый Картинка;
КонецЕсли;

// Пример 3. Заполнение колонки табличного поля при отображении таблицы значений
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Перем Стр;
ТЗ.Колонки.Добавить("Картинка");
// Заполнение таблицы значений
Для Сч = 0 по 10 Цикл
Стр = ТЗ.Добавить();
Если Сч % 2 = 0 Тогда
Стр.Картинка = БиблиотекаКартинок.Справка;
Иначе
Стр.Картинка = БиблиотекаКартинок.Важно;
КонецЕсли;
КонецЦикла;
ЭлементыФормы.ТабличноеПоле1.Колонки.Колонка1.ДанныеКартинки = "Картинка";
КонецПроцедуры
См. также:
ОформлениеСтроки, свойство Ячейки
ОформлениеЯчейки, свойство Картинка
5 mzelensky
 
29.10.10
09:11
Еще с проблемой такой столкнулся - формирую "раскраску" ТЧ программно, заполняю саму ТЧ, записываю документ, закрываю/открываю - вся красота с "разрисовкой" пропадает. ПОЧЕМУ? и можно ли исправить?
6 Рэйв
 
29.10.10
09:11
(5)Значит не в том месте раскрашиваешь
7 mzelensky
 
29.10.10
09:14
(4) а как до этого метода добраться??? ну т.е. осуществляю я обход табличной части в цикле...и как вызвать это самое "ОформлениеЯчейки"?
8 mzelensky
 
29.10.10
09:15
(6) я вот так раскрашиваю:

Элементыформы.ТабличнаяЧасть1.Колонки["ДП"+Строка(День(ДатаВ))].ЦветФонаШапки= Новый Цвет(255, 173, 150);;
9 Рэйв
 
29.10.10
09:17
(7)"В цикле" - неправильно. У таб. поля есть процедура обработки события: ПриВыводСтроки()

советую помедитировать над ней.
10 Mitriy
 
29.10.10
09:19
(9)+ я предпочитаю ПриПолученииДанных...
11 Рэйв
 
29.10.10
09:20
(10) "И туда тоже можно."(С) Служебный роман
12 mzelensky
 
29.10.10
09:21
(9) так мне ее нужно обрабатывать при изменении в ячейки табличноо поля.
13 Mitriy
 
29.10.10
09:22
(12) он все поймет, он все увидит сам...
14 mzelensky
 
29.10.10
09:26
(12) какой "он" оказывается УМНЫЙ :)
15 mzelensky
 
09.11.10
13:50
ПРОДОЛЖАЮ БИТЬСЯ НАД ТАБЛИЧНОЙ ЧАСТЬЮ!!!

все вышеописанное конечно ОЧЕНЬ хорошо, НО...все это приводит к "выделению" всей колонки табличной части...и добиться чтобы выделялась именно ОПРЕДЕЛЕННАЯ ЯЧЕЙКА в ОПРЕДЕЛЕННОЙ СТРОКЕ...я не могу :(

прошу помощи!!!
16 mzelensky
 
09.11.10
13:59
все выше и выше!!!
17 mzelensky
 
09.11.10
14:06
До бесконечности и дальше!!!! :)
18 ptiz
 
09.11.10
14:07
Кури ОформлениеСтроки.Ячейка.ТвояЯчейка.ЦветФона
19 mzelensky
 
09.11.10
14:12
(18) я так и делал

Если (СтрокаТЧ["ДП"+Строка(День(ДатаВ))] > ВремяНач ) или (СтрокаТЧ["ДП"+Строка(День(ДатаВ))]=Дата('00010101000000')) тогда
   //                //пришел поздно - красный
   //                ОформлениеСтроки.ячейки[Элемент.ТекущаяКолонка.имя].ЦветФона=  Новый Цвет(255, 135, 140);
   //            КонецЕсли;    
   //            
   //            Если (СтрокаТЧ["ДУ"+Строка(День(ДатаВ))] < ВремяКон) или (СтрокаТЧ["ДУ"+Строка(День(ДатаВ))]=Дата('00010101000000')) тогда
   //                //ушел рано - зеленый
   //                ОформлениеСтроки.ячейки[Элемент.ТекущаяКолонка.имя].ЦветФона=  Новый Цвет(135, 255, 165);
   //            КонецЕсли;


но в результате у меня выделяется не ячейка, а вся колонка!
20 73
 
09.11.10
14:14
21 mzelensky
 
09.11.10
14:18
(20) и что я пишу "не такого", как там ?
22 mzelensky
 
09.11.10
14:19
При изменении ячейки в ТЧ срабатывает процедура:

Процедура ТабличнаяЧасть1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)


но почему-то она срабатывает несколько раз....перебирая все строки ТЧ. с чем это связано?
23 mooo
 
09.11.10
14:20
(22) вчитайся в слова "ПриВыводеСтроки"  )
24 Mitriy
 
09.11.10
14:21
(22) только избранные посвящаются в эту великую тайну...
25 73
 
09.11.10
14:21
(21) А где видно, что ты это пишешь в ПриВыводеСтроки/ПриПолученииДанных?
И как ты определяешь СтрокаТЧ?
И вообще, раскрашивается не ТЧ, а ТП.

(22) Не все, а отображаемые на экране. Ну, так и задумано.
26 vasilii85
 
09.11.10
14:24
Вместо того что бы биться, лучше документацию почитать, как тебе и советуют.
27 CoolCat
 
09.11.10
14:24
(15) не повышай на нас шрифт

ЭлементыФормы.ТЧ.Колонки.ИмяКолонки.ЦветФонаПоля  = Новый Цвет(255, 173, 150);

Пихаешь ПриВыводеСтроки
28 mzelensky
 
09.11.10
14:36
(26) так я нормальной документации найти не могу. есть некоторые примеры, но чет туго с ними идет :( так как надо не работает!
29 CoolCat
 
09.11.10
14:37
(28) неработает (27)????
30 mzelensky
 
09.11.10
14:37
(27) так закрасится 1 ячейка (т.е. пересечение измененной строки и колонки) или вся колонка ???
31 73
 
09.11.10
14:37
(28) Тогда показывай не куски. Показывай процедуру ПриВыводеСтроки.
32 CoolCat
 
09.11.10
14:38
(30) это как уж вам заблагорассудиться и как вы того пожелаете мой юный друг
33 Mitriy
 
09.11.10
14:40
(27) афигеть...
34 mzelensky
 
09.11.10
14:46
+ ведь перерисовка происходит каждый раз при скажем прокрутке...соответственно все эти действия по несколько раз нужно производить...а если учитывать что мне нужно для каждой строки обработать по 30 колонок...это ж сколько ресурсов тратиться...

другого варианта нет???
35 mzelensky
 
09.11.10
14:47
Типа вот такого, только для конкретной ячейки:

Элементыформы.ТабличнаяЧасть1.Колонки["ДП"+Строка(День(ДатаВ))].ЦветФонаШапки= Новый Цвет(255, 173, 150);;
36 mzelensky
 
09.11.10
14:48
Элементыформы.ТабличнаяЧасть1.Колонки["ДП"+Строка(День(ДатаВ))].ЦветФонаПоля= Новый Цвет(255, 173, 150);;
37 mzelensky
 
09.11.10
14:51
апппп
38 73
 
09.11.10
14:54
ОформлениеСтроки.ячейки["ДП"+Строка(День(ДатаВ))].ЦветФона=
39 mzelensky
 
09.11.10
14:56
так а как строку нужную отловить, если они в эту процедуру попадают ВСЕ "видимые"?!
40 73
 
09.11.10
14:56
(39) А ДанныеСтроки там для мебели, что ли?
41 73
 
09.11.10
14:59
(40)+
Вот это видел в (20)?:

Процедура ТЗПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
Если ДанныеСтроки.Проведен Тогда
 ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=0;
ИначеЕсли НЕ ДанныеСтроки.Проведен Тогда
 ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=2;
ИначеЕсли ДанныеСтроки.ПометкаУдаления Тогда
 ОформлениеСтроки.Ячейки.Картинка.ИндексКартинки=1;
КонецЕсли;

Только вместо картинок цвета проставить...
42 mzelensky
 
09.11.10
15:05
таким образом получается ,что "помечанные" ячейки ДО ЭТОГО теряют "пометку" цветом...получается что нужно каждый раз все ТЧ пересчитывать :(
43 mzelensky
 
09.11.10
15:08
я типа такого напсал:

ТД=Элементыформы.ТабличнаяЧасть1.ТекущиеДанные;
   
   
   
   Если ОформлениеСтроки.данныестроки = ТД тогда
       сообщить("ДА");
       ОформлениеСтроки.ячейки[Элемент.ТекущаяКолонка.имя].ЦветФона=  Новый Цвет(255, 135, 140);
   КонецЕСЛИ;
44 Ненавижу 1С
 
гуру
09.11.10
15:09
(43) зачем?
45 hhhh
 
09.11.10
15:12
(43) приколист. Ты, наверно, не глядя фигачишь символы клавиатуры, какой попадется.
46 mzelensky
 
09.11.10
15:13
(44) для проверки строки!

Вообще у меня в ТЧ порядка 20 строк...в каждой строке по 30 колонок...т.е. матрица в 600 ячеек. Раскрашивать мне нужно определенные ячейки из всего этого набора, причем какие именно раскрашивать нужно определять программно путем расчетов...

В результате получается что при каждой перерисовки мне нужно прогонять все 600 ячеек????
47 hhhh
 
09.11.10
15:16
(46) ПриПолученииДанных() и ПриВыводеСтроки() дают тебе именно те строки, которые перерисовываются.
48 mzelensky
 
09.11.10
15:18
не удобно :(
49 hhhh
 
09.11.10
15:20
(48) значит обрабатывать каждый раз по 600 ячеек тебе удобно, а по 60 неудобно? Если их нет на экране, на хрена тебе понадобилось их раскращивать? Для прикола?
50 mzelensky
 
09.11.10
15:22
(49) да нет ,я за другое....не удобно что вообще при каждой перерисовке их обрабатывать нужно...плохо что нельзя один раз назначить и все...пусть сама бы хранила значения.
51 73
 
09.11.10
15:25
(50) Табличное поле ничего не хранит.
52 mzelensky
 
09.11.10
15:32
ясно...спасибо всем - до меня, дурака, наконец-то дошло :(
53 ptiz
 
09.11.10
15:36
(52) Наконец до тебя дошло, что результат расчета можно где-нибудь сохранить и не считать каждый раз :)
Ошибка? Это не ошибка, это системная функция.