Имя: Пароль:
1C
1С v8
Проблема с окраской ячейки табличного поля
0 razbiralshik
 
05.02.13
12:12
Нажимаем на кнопку, происходит следующее:
               ЭлементыФормы.ТаблицаЗагрузки.ДобавитьСтроку();
               СтрТабл                        = ЭлементыФормы.ТаблицаЗагрузки.ТекущаяСтрока;
               СтрТабл.НомерЗаказа            = НомерЗаказа;

Соответственно идет вызов события табличного поля "ПриВыводеСтроки":

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


Но закраска как только появляется на ячейке, тут-же пропадает. Не пойму в чем проблема. Подскажите пожалуйста.
1 razbiralshik
 
06.02.13
11:51
Никто не знает?
2 Reset
 
06.02.13
11:53
(1) Изза
НомерЗаказаИзменен                     = Ложь;
ДопОборудованиеАвтомобиляИзменен       = Ложь;
3 DrShad
 
06.02.13
11:53
НомерЗаказаИзменен                     = Ложь;
ДопОборудованиеАвтомобиляИзменен       = Ложь;
4 razbiralshik
 
06.02.13
11:56
(2)(3) Убираю если, то вся колонка становится зеленая, а не только определенные ячейки
5 Reset
 
06.02.13
11:57
(4) Это логично
6 Reset
 
06.02.13
11:57
Переменная - то одна у тебя на все поле
7 Reset
 
06.02.13
11:59
Тебе при оформлении нужно или "НомерЗаказа" сравнивать с образцом на предмет измнен/не изменен, либо хранить булево для каждой строки.
8 salvator
 
06.02.13
12:00
(4) ОформлениеСтроки.Ячейки.НомерЗаказа.ЦветФона = ...
9 Reset
 
06.02.13
12:00
(8) У него так и есть, только через опу
10 razbiralshik
 
06.02.13
12:01
(7) скорее булево хранить для каждой ячейка что необходимо подкрашивать...
11 hhhh
 
06.02.13
12:10
(10) ПриВыводеСтроки может несколько раз вызываться при обновлениях экрана. У тебя сначала красит, а на втором проходе стирает. Потому что (3)
12 razbiralshik
 
06.02.13
12:14
(11) Ты прав. Как избежать это?
13 hhhh
 
06.02.13
12:17
(12) не надо устанавливать в ЛОЖЬ, подкрашивать всегда.
14 razbiralshik
 
06.02.13
12:27
(13) Тут идет заполнение циклом табличного поля, например может заполнится 10 строк где ячейка Опции не подкрашена, а как только попадается ячейка которую надо подкрасить, то в случае что ты предложил, 1С окрасит весь столбец...
15 DrShad
 
06.02.13
12:34
(14) тебе же сказали что из-за того что у тебя переменная одна на все строки
16 razbiralshik
 
06.02.13
12:35
(15) на каждую ячейку своя переменная у меня
17 DrShad
 
06.02.13
12:36
(16) врешь
18 razbiralshik
 
06.02.13
12:36
появляется строка, происходит анализ, и для каждого столбца строки формируется своя переменная
19 DrShad
 
06.02.13
12:36
на строки одна
20 razbiralshik
 
06.02.13
12:38
(17) не вру, могу алогоритм кинуть полный, только сперва сокращу его, а то огромный
21 razbiralshik
 
06.02.13
12:43
Процедура ОсновныеДействияФормыОсновныеДействияФормыВыполнить(Кнопка)
   
   ТаблицаЗагрузки.Очистить();
   ДопОборудованиеАвтомобиляИзменен = Ложь;

   Для Строка = 2 По ФайлСтрок Цикл
       ДопОборудование1 = СокрЛП(Excel.Cells(Строка, 16).Value);
       Результат  = Запрос.Выполнить().Выгрузить();
       СтрРезульт = Результат[0]
       Если НЕ СокрЛП(СтрРезульт.ДопОборудование) = СокрЛП(ДопОборудованиеАвтомобиля) Тогда
           ДопОборудованиеАвтомобиляИзменен = Истина;
       Иначе
           ДопОборудованиеАвтомобиляИзменен = Ложь;
       КонецЕсли;
       ЭлементыФормы.ТаблицаЗагрузки.ДобавитьСтроку();
       СтрТабл = ЭлементыФормы.ТаблицаЗагрузки.ТекущаяСтрока;
   КонецЦикла;

КонецПроцедуры

Процедура ТаблицаЗагрузкиПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
   Если ДопОборудованиеАвтомобиляИзменен Тогда
       ОформлениеСтроки.Ячейки.Опции.ЦветФона = WebЦвета.ТусклоОливковый;
   КонецЕсли;
КонецПроцедуры
22 razbiralshik
 
06.02.13
12:44
(21) Так сперва ячейка закрашивается, потом закраска пропадает.

А если сделать так:

       Если НЕ СокрЛП(СтрРезульт.ДопОборудование) = СокрЛП(ДопОборудованиеАвтомобиля) Тогда
           ДопОборудованиеАвтомобиляИзменен = Истина;
       КонецЕсли;

То вся колонка закрашивается.


Вот что не так?
23 hhhh
 
06.02.13
12:58
(22) ДопОборудованиеАвтомобиляИзменен - эта переменная у тебя одна на все ячейки. Тебе уже талдычим целое утро.

Если на экран выводится несколько ячеек подряд, они все у тебя покрасятся в один цвет, потому что все смотрят в ДопОборудованиеАвтомобиляИзменен
24 hhhh
 
06.02.13
13:03
(21) и вот эту бредятину выбрось

       ЭлементыФормы.ТаблицаЗагрузки.ДобавитьСтроку();
       СтрТабл = ЭлементыФормы.ТаблицаЗагрузки.ТекущаяСтрока;

напиши

      СтрТабл = ТаблицаЗагрузки.Добавить();
25 razbiralshik
 
06.02.13
13:12
(23) ладно, покопаюсь, спасибо.
(24) ну так если сделаю, то ТП заполнится разом в конце загрузки, а мне надо чтобы "они" видели добавление строк...
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn