Имя: Пароль:
1C
1C 7.7
v7: Как проверить редактирование табличной части?
0 Ночной Эльф
 
06.05.13
08:54
Всем доброго времени суток.

Имеется 1с 7.7 необходимо проверять изменения табличной части в документе т.е. если табличная часть была изменена то выполнять одно действие если не было изменений то другое. Думал через флаг которому присваивать значение 1 в процедуре

Процедура ПриОкончанииРедактированияСтроки()

но выставляется 1 даже если и не было не каких изменений

Как тут лучше сделать?
1 zak555
 
06.05.13
08:55
>  проверять изменения табличной части в документе


пере записью документа ?
2 1Сергей
 
06.05.13
08:56
Навскидку два варианта:
1 сравнить с сохраненной копией документа
2 при изминении каждой колонки ТЧ взводить флаг
3 Ночной Эльф
 
06.05.13
08:56
Еще есть вариант при открытии документа выгружать табличную часть в таблицу значение а потом сравнивать ее с таблицой документа но как производить сравнение таблицы значения и табличной части документа нельзя же просто знаком равно =
4 Ночной Эльф
 
06.05.13
08:56
(1) нет не перед записью
5 zak555
 
06.05.13
08:57
(4) в какой момент ?
6 1Сергей
 
06.05.13
08:57
(3) построчно, пореквизитно
7 Ночной Эльф
 
06.05.13
08:59
(6) это через чур геморойно слишком много колонок разного типа, а нельзя сразу всю таблицу сравнивать?
8 zak555
 
06.05.13
08:59
(7) два цикла это долго ?
9 1Сергей
 
06.05.13
08:59
(7) ничего геморного. пишется в несколько строк кода.
10 Ночной Эльф
 
06.05.13
09:00
только как выгрузить табличную часть документа в таблицу значений? не пойму?
11 1Сергей
 
06.05.13
09:03
(10) о, это большое шаманство. Без СП не взлетит
12 Ночной Эльф
 
06.05.13
09:08
А можно как нибудь запоминать значение в процедуре

Процедура ПриНачалеРедактированияСтроки()

А потом сравнивать в процедуре

Процедура ПриОкончанииРедактированияСтроки()

Только вот как в первой процедуре получить значение данной колонки по выбранному столбцу не знаю
13 1Сергей
 
06.05.13
09:08
(10) кстати, при открытии ничего запоминать не надо. Можно взять ТЧ из сохраненной копии Документа в любой момент
14 kosts
 
06.05.13
09:10
Есть еще изменение ТЧ при удалении, добавлении и сортировке.
15 1Сергей
 
06.05.13
09:11
(12)
ПолучитьСтрокуПоНомеру(НомерСтроки);
ЗначениеРеквизита = ПолучитьАтрибут("ИмяКолонки");
16 Ковычки
 
06.05.13
09:13
Перем ТЧДо;
Процедура ПриОткрытии()
   ТЧДо=СоздатьОбъект("ТаблицаЗначений");
   ВыгрузитьТабличнуюЧасть(ТЧДо);
КонецПроцедуры


...
   Если Модифицированность()=1 Тогда
       ТЧПосле=СоздатьОбъект("ТаблицаЗначений");
       ВыгрузитьТабличнуюЧасть(ТЧПосле);
       Если Не ЗначениеВСтроку(ТЧДо)=ЗначениеВСтроку(ТЧПосле) Тогда
           Предупреждение("ТЧ изменено!");
       КонецЕсли;
   КонецЕсли;
17 Ночной Эльф
 
06.05.13
09:13
(15) так вот именно я не знаю какая именно колонка?

(13) это как ?
18 Ночной Эльф
 
06.05.13
09:14
(16) Вот точно я именно так и думал, просто не знал как это на языке реализовать спасибо
19 Ковычки
 
06.05.13
09:15
(17) 2-ой раз открыть форму
20 1Сергей
 
06.05.13
09:15
(17) Кури Метаданные
21 kosts
 
06.05.13
09:15
(17) Удалили строку - вот и изменение.
22 Ночной Эльф
 
06.05.13
09:15
а разве вот так нельзя

Если ЗначениеВСтроку(ТЧДо)<>ЗначениеВСтроку(ТЧПосле) Тогда

без НЕ ?
23 1Сергей
 
06.05.13
09:16
ТекущийДокумент().ВыгрузитьТабличнуюЧасть( - возьмёт из сохраненной копии
24 1Сергей
 
06.05.13
09:16
(22) можно, но не всегда при равных ТЧ вернёт ложь
25 Ночной Эльф
 
06.05.13
09:19
Всем большое спасибо. Только поясните пожалуйста про

ЗначениеВСтроку

Справку то я прочитал по ней а вот на деле что она делает просто берет каждый элемент табличной части и записывает поочередно в неограниченную строку?
26 Aleksey
 
06.05.13
09:41
(25)
{"VT","1",{"0",{{"","0","0","0","","2"},
{"НомерСтрокиДокумента","","1","0","0",{"N","6","0","0","0","0"},"","2",
{
{"N","6","0","0","0","0","      1"}
}
},
{"Номенклатура","Номенклатура","1","0","1",{"B","0","0","84","0","0"},"","0",
{
{"B","0","0","84","0","0","    153807   "}
}
},
{"Количество","Количество","1","0","2",{"N","10","3","0","1","0"},"","2",
{
{"N","10","3","0","1","0","      1.000"}
}
},
{"Единица","Единица","1","0","3",{"B","0","0","75","0","0"},"","0",
{
{"B","0","0","75","0","0","     72865   "}
}
},
{"Коэффициент","Коэффициент","1","0","4",{"N","6","2","0","0","0"},"","2",
{
{"N","6","2","0","0","0","   1.00"}
}
},
{"Цена","Цена","1","0","5",{"N","10","2","0","1","1"},"","2",
{
{"N","10","2","0","1","1","     433.00"}
}
},
{"Сумма","Сумма","1","0","6",{"N","12","2","0","1","1"},"","2",
{
{"N","12","2","0","1","1","       433.00"}
}
},
{"СтавкаНДС","СтавкаНДС","1","0","7",{"E","0","0","653","0","0"},"","0",
{
{"E","0","0","653","0","0","     27486   "}
}
},
{"СуммаНДС","СуммаНДС","1","0","8",{"N","12","3","0","1","1"},"","2",
{
{"N","12","3","0","1","1","        0.000"}
}
},
{"Партия","Партия","1","0","9",{"B","0","0","214","0","0"},"","0",
{
{"B","0","0","214","0","0","         0   "}
}
}}}}
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс