Имя: Пароль:
1C
1С v8
v8: Обработка по загрузке данных из файла Эксель в регистр сведений.
0 razbiralshik
 
22.03.13
16:08
Обработка по загрузке данных из файла Эксель в регистр сведений.
Нажимаем загрузить, загружаются данные в табличное поле.
Причем, в табличное поле должны попасть только те строки Экселя, которые были изменены по сравнению с в предыдущей загрузкой (условный например, прошлый раз была строка номер 1 с данными: йцу, цук, уке, она загрузилась в РС, теперь в строке номер 1 данные такие: йцу, цук, 123. Это значит что эту строку необходимо загрузить в табличный документ).
Загрузку я сделал, но теперь необходимо сделать, чтобы подкрашивались те ячейки табличного поля, в которых произошло изменение, например в желтый цвет.

При загрузке стоит условие где сравниваются по ячейкам поля прошлой загрузки и текущей, если поле изменилось то переменная становится в истину:

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

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

идет переход в процедуру:

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


И тут возникает засада!
Когда добавляется первая строчка в ТП, все отрабатывает нормально, в цикле всего одно значение, он обходит его и получаем то что необходимо.
Когда добавляется вторая строчка в ТП, эта процедура не обращается к новой строчке, а начинает обход ТП с самого начала, получается что два раза и тут уже раскраска становится не та что мне нужна... не те поля закрашиваются.



Подскажите, как закрасить только необходимые ячейки?
1 mikecool
 
22.03.13
16:10
"Когда добавляется вторая строчка в ТП, эта процедура не обращается к новой строчке, а начинает обход ТП с самого начала" - не раскрашивать уже раскрашенные, ваш кеп
2 mikecool
 
22.03.13
16:10
вапчето ПриПолученииДанных вызывается один раз для отображаемого массива, заполни сразу все ТП и не парься
3 razbiralshik
 
22.03.13
16:12
(2) тогда придется для каждого поля создать поле значение для раскраски, число полей увеличится вдвое!
4 Фокусник
 
22.03.13
16:12
(0) Флаги ДопОборудованиеАвтомобиляИзменен  и НазваниеВторичногоСтатусаИзменен  должны быть реквизитами того того объекта (ТаблицаЗначений, ТабличнаяЧасть и т.д.), который отображается в ТабличномПоле, т.е. условие должно быть вида:


Если ОформлениеСтроки.ДанныеСтроки.ДопОборудованиеАвтомобиляИзменен = Истина Тогда
5 razbiralshik
 
22.03.13
16:13
(4) ну да, я знаю это вариант, видимо придется добавлять реквизиты ТЧ... коли других способов нет
6 Фокусник
 
22.03.13
16:20
(5) А как иначе? Любое "обновление данных" (их будет много, например при каждой прокрутке табличного поля) должно выполнять правильно раскраску, а не только "первое" :)
2 + 2 = 3.9999999999999999999999999999999...