![]() |
![]() |
![]() |
|
Как отловить добавление строки в табличную часть в форме? | ☑ | ||
---|---|---|---|---|
0
Гений 1С
гуру
06.04.06
✎
15:55
|
Вот во всяких подборах любят добавлять строки в форму в табличную часть.
Как отловить программное добавление строки в форму? А заодно можно ли отловить изменение в конкретной ячейке? |
|||
1
Гений 1С
гуру
06.04.06
✎
15:55
|
В ячейке - программное изменение имеется ввиду...
|
|||
2
Vozhd
06.04.06
✎
16:08
|
(0) ПриИзмененииДанных() не работает?
|
|||
3
Гений 1С
гуру
06.04.06
✎
17:09
|
(2) неа, не работает - ни при программном, ни при интерактивном добавлении.
Я попробовал ПриПолученииДанных - она срабатывает для каждой строки, видимой в форме, но если строки добавляются за пределами видимости (слишком много строк), то естественно это событие не возникает. |
|||
4
dimoff
06.04.06
✎
17:10
|
через ПодключитьОбработчикИзмененияДанных
|
|||
5
Гений 1С
гуру
06.04.06
✎
17:16
|
(4) Тоже пробовал, замечательно работает для ручной правки:
ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит1", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит2", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные", "ИзменениеДанных", истина); Но на программное изменение не реагирует. |
|||
6
Гений 1С
гуру
06.04.06
✎
17:26
|
Вот еще вопрос возниг, коспода - в той же теме.
Мне нужно для каждой строки документа хранить вспомогательные данные типа структура, как это можно обеспечить? Завести вспом.таблицу и связываться по индексу строки не хочется - если строку удалить, все полетит нафиг. |
|||
7
dimoff
06.04.06
✎
17:38
|
При удалении строки удаляй элемент массива данных, тогда ничего не полетит
|
|||
8
Гений 1С
гуру
06.04.06
✎
17:39
|
(7) Надо еще следить за соответсвием, эх, а по грамотному низзя???
|
|||
9
dimoff
06.04.06
✎
17:45
|
Не вижу в этом ничего неграмотного и про соответствие не понял
|
|||
10
Гений 1С
гуру
06.04.06
✎
18:28
|
ну ты согласен, что мне надо отслеживать удаление? А это криво
|
|||
11
Гений 1С
гуру
06.04.06
✎
18:28
|
То бишь слишком сложно для задачи связывания двух таблиц по индексу
|
|||
12
dimoff
06.04.06
✎
18:32
|
(10) Согласен что надо отслеживать удаление, значение слова "криво" не понимаю.
|
|||
13
Гений 1С
гуру
06.04.06
✎
18:42
|
(12) Объяснил в 11
|
|||
14
dimoff
06.04.06
✎
18:44
|
Лучше б не объяснял
|
|||
15
Vozhd
06.04.06
✎
19:46
|
(5) А у меня работает. И при ручном изменении и при программном. Что я делаю не так?
|
|||
16
Гений 1С
гуру
07.04.06
✎
10:56
|
Погоняй этот код, у меня не пашет:
//На форму кинуть табличное поле с именем ТЧ и реквизитами Реквизит1, Реквизит2 типа строка. //Использовать стандартную пустую форму с кнопкой выполнить. Процедура КнопкаВыполнитьНажатие(Кнопка) // Вставить содержимое обработчика. Стр=ТЧ.Добавить(); Стр.Реквизит1="1"; ТЧ.Добавить(); КонецПроцедуры Процедура ПриОткрытии() // Вставить содержимое обработчика. ПодключитьОбработчикИзмененияДанных("ТЧ", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит1", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит2", "ИзменениеДанных", истина); //ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.НомерСтроки", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные", "ИзменениеДанных", истина); КонецПроцедуры Процедура ИзменениеДанных(Реквизит) Если Найти(Реквизит,".ТЧ.")<>Неопределено Тогда Сообщить(""+Реквизит+?(ЭлементыФормы.ТЧ.ТекущаяСтрока=Неопределено, "()","("+ЭлементыФормы.ТЧ.ТекущаяСтрока.НомерСтроки+")")); КонецЕсли; Сообщить(Реквизит); КонецПроцедуры Процедура ТЧПриПолученииДанных(Элемент, ОформленияСтрок) // Вставить содержимое обработчика. Для Каждого ОформлениеСтроки ИЗ ОформленияСтрок Цикл //Сообщить("ПолучениеДанных:" +ТекущаяДата()+" Номер строки"+ОформлениеСтроки.ДанныеСтроки.НомерСтроки); КонецЦикла КонецПроцедуры Процедура ТЧПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки) // Вставить содержимое обработчика. //Сообщить("При выводе строки:" +ТекущаяДата()+" Номер строки"+ДанныеСтроки.НомерСтроки); КонецПроцедуры |
|||
17
Гений 1С
гуру
07.04.06
✎
10:57
|
(16) при программном добавлении событие ИзменениеДанных не вызывается, при интерактивном - вызывается
|
|||
18
Vozhd
07.04.06
✎
11:10
|
(16) А почему этот код должен работать? Отслеживаются изменения не тех данных, вот и не работает...
|
|||
19
Гений 1С
гуру
07.04.06
✎
11:11
|
(18) Вождь, будь другом, подскажи тупому, что надо поправить
|
|||
20
Гений 1С
гуру
07.04.06
✎
11:11
|
ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные", "ИзменениеДанных", истина); - тоже не работает.
|
|||
21
х86
07.04.06
✎
11:17
|
"Завести вспом.таблицу и связываться по индексу строки не хочется - если строку удалить, все полетит нафиг."
а если использовать Структура или соответствие с ключом - СтрокаТЧ ? тогда при удалении не надо будет отрабатывать удаление из структуры. Хотя не факт что взлетит |
|||
22
Гений 1С
гуру
07.04.06
✎
11:25
|
(21) такая мысль была, но выборка по конкретному номеру быстрее, чем поиск по ключу. :) Пока что то, что вы предлагаете в (21) - самое оптимальное.
|
|||
23
Vozhd
07.04.06
✎
11:27
|
(19) ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ", "ИзменениеДанных", истина);
|
|||
24
Гений 1С
гуру
07.04.06
✎
11:34
|
(23) Вождь, ты просто гений, но ты знаешь, не взлетело!!! Не работает и такой вариант, я его проверял, кстати.
Вот все варианты, что я проверяю: |
|||
25
Гений 1С
гуру
07.04.06
✎
11:34
|
ПодключитьОбработчикИзмененияДанных("ТЧ", "ИзменениеДанных", истина);
ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит1", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит2", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ.ТекущиеДанные", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ТЧ", "ИзменениеДанных", истина); ПодключитьОбработчикИзмененияДанных("ЭлементыФормы.ТЧ", "ИзменениеДанных", истина); |
|||
26
Гений 1С
гуру
07.04.06
✎
11:34
|
(23) Что, Вождь, теория вошла в противоречие с практикой? Бывает...
|
|||
27
Vozhd
07.04.06
✎
11:46
|
(24) А у меня не только взлетает, но и не падает. Может это от того, что я не гений?
|
|||
28
Vozhd
07.04.06
✎
12:04
|
(27) Понял с чем связаны проблемы. Если у объекта нет свойств, то и изменения данных не зафиксировать. У табличных частей свойств нет, а у многих других источников данных для табличный полей свойства есть...
Так что придется Вам на время забыть о событиях... |
|||
29
Гений 1С
гуру
07.04.06
✎
12:15
|
(28) Что за свойства? Не очень понял, разжуйте плиз мне глупому...
|
|||
30
Гений 1С
гуру
07.04.06
✎
12:16
|
"табличных частей свойств нет, а у многих других источников данных для табличный полей" - распишите эту фразу правильно, непонятно
|
|||
31
Гений 1С
гуру
07.04.06
✎
12:18
|
(28) Кстати, при интерактивном изменении-то все работает... :(
|
|||
32
Гений 1С
гуру
07.04.06
✎
12:21
|
Попробовал добавить Реквизит3 типа Номенклатура - все то же самое.
|
|||
33
Vozhd
07.04.06
✎
12:34
|
(31) У табличной части нет свойств. Нет свойств, значит нет данных. Нет данных, значит нет и их изменения.
У табличного поля свойства есть. Например, ТекущаяСтрока. При интерактивном вводе новой строки, значение свойства ТекущаяСтрока изменяется, следовательно происходит изменение данных, а раз подключен обработчик, то он вызывается... |
|||
34
Vozhd
07.04.06
✎
12:35
|
(33) Например, у отборов свойства есть, а раз так, то изменение данных будет вызываться хоть при програмном, хоть при интерактивном изменении.
|
|||
35
Гений 1С
гуру
07.04.06
✎
12:49
|
Мда, логика платформы понятна, хоть и крива... :(
С мечтой о красивой обработке событий формы придется расстатца. :( |
|||
36
Гений 1С
гуру
07.04.06
✎
12:50
|
Я бы еще смирился с необработкой добавления новой строки, но вот если программно меняются ячейки ТЧ, это не отлавливаетца. Пичально.
|
|||
37
Vozhd
07.04.06
✎
12:53
|
(36) Напишите свои процедуры для работы с табличными частями (добавление строк, удаление строк, изменение ячейки и т.д.) и работайте через эти процедуры.
|
|||
38
Гений 1С
гуру
07.04.06
✎
12:57
|
(37) Вождь, как обойти, я знаю, но все способы - кривые. Вообще проблема касается того, что например в типовой в поступление добавляется строка подбором (программно) и мне еще нужно выискивать всевозможные способы программного изменения табличных частей
|
|||
39
Vozhd
07.04.06
✎
13:14
|
(38) А может не надо напролом лезть со своим пониманием логики в чужую программу? Может сначала изучить логику авторов?
|
|||
40
Гений 1С
гуру
07.04.06
✎
13:22
|
(39) Извиняйте - работа такая - тюнинг типовых. В моем случае надо реагировать на изменение номенклатуры любым способом.
|
|||
41
Vozhd
07.04.06
✎
13:24
|
(40) Ну что ж, вам, гениям, виднее...
|
|||
42
Гений 1С
гуру
07.04.06
✎
13:24
|
(41) Аминь, RIP
|
|||
43
Гений 1С
гуру
07.04.06
✎
14:38
|
(33)
Пардон, вопрос не исчерпан... В твоей логике есть небольшой изъян. При программном изменении не вызывается: ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит1 Зато при интерактивном вызывается: ЭлементыФормы.ТЧ.ТекущиеДанные.Реквизит1 По логике они должны или оба не вызываться, или вызываться всегда. Обоснуй! |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |