|
Текущая строка | ☑ | ||
---|---|---|---|---|
0
mrParadox
26.11.12
✎
11:33
|
Хочу установить текущую строку тебличного поля.
НужнаяСтрока = ТаблицаЗаявок.Найти(НомерЗаявки,"NomerZayavki"); ЭлементыФормы.ТаблицаЗаявок.Текущаястрока = НужнаяСтрока; НужнаяСтрока в отладке устанавливается. При установки текущей строки возникает ошибка: ---------------- {Форма.Форма.Форма(101)}: Ошибка при установке значения атрибута контекста (ТекущаяСтрока) ЭлементыФормы.ТаблицаЗаявок.Текущаястрока = НужнаяСтрока; по причине: Невозможно изменить текущую строку ---------------- Что я делаю не так? |
|||
1
mrParadox
26.11.12
✎
11:38
|
1С:Предприятие 8.2 (8.2.15.310)
|
|||
2
Шапокляк
26.11.12
✎
11:40
|
Ищи строку сразу в ЭлементеФормы и активизируй ее
|
|||
3
mrParadox
26.11.12
✎
11:42
|
Это как?
|
|||
4
palpetrovich
26.11.12
✎
11:44
|
проверь на всякий случай:
Если НужнаяСтрока = Неопределено Тогда ну и так получается? ЭлементыФормы.ТаблицаЗаявок.Текущаястрока = ТаблицаЗаявок[0] |
|||
5
Шапокляк
26.11.12
✎
11:45
|
Это так
НужнаяСтрока = ЭлементыФормы.ТаблицаЗаявок.Найти(НомерЗаявки,"NomerZayavki"); Если НужнаяСтрока<>Неопределено Тогда ЭлементыФормы.ТаблицаЗаявок.Текущаястрока = НужнаяСтрока; КонецЕсли; |
|||
6
mrParadox
26.11.12
✎
11:46
|
Нужная строка точно не равна неопределено - в отладчике смотрю
|
|||
7
mrParadox
26.11.12
✎
11:47
|
ЭлементыФормы.ТаблицаЗаявок.Текущаястрока = ТаблицаЗаявок[0]
Ошибка та же |
|||
8
Шапокляк
26.11.12
✎
11:47
|
(7) см 5
|
|||
9
mrParadox
26.11.12
✎
11:48
|
(5)
{Форма.Форма.Форма(100)}: Метод объекта не обнаружен (Найти) НужнаяСтрока = ЭлементыФормы.ТаблицаЗаявок.Найти(НомерЗаявки,"NomerZayavki"); |
|||
10
Reset
26.11.12
✎
11:48
|
(5) Ээээ? эээ
|
|||
11
Галахад
гуру
26.11.12
✎
11:49
|
А вообще в каком месте (0) вызывается?
|
|||
12
НЕА123
26.11.12
✎
11:49
|
может отбор какой...
|
|||
13
НЕА123
26.11.12
✎
11:49
|
кстати, да
(11)+1 |
|||
14
mrParadox
26.11.12
✎
11:51
|
(11)
В модуле формы. Процедура ТаблицаЗаявокПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ) После редактирования я перезаполняю заново таблицу (из СКЛ) и хочу сделать актичной строку на которую редактировал |
|||
15
palpetrovich
26.11.12
✎
11:51
|
(0) давай колись, что это вообще и где эта процедура :)
|
|||
16
mrParadox
26.11.12
✎
11:51
|
Процедура ТаблицаЗаявокПередОкончаниемРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования, Отказ)
Если НоваяСтрока Тогда ДобавитьЗаявкуВ_СКЛ(Элемент.ТекущиеДанные, ОтменаРедактирования); Иначе ИзменитьЗаявкуВ_СКЛ(Элемент.ТекущиеДанные, ОтменаРедактирования); КонецЕсли; НомерЗаявки=Элемент.ТекущиеДанные.NomerZayavki; ОбновитьТаблицу(); НужнаяСтрока =ТаблицаЗаявок.Найти(НомерЗаявки,"NomerZayavki"); ЭлементыФормы.ТаблицаЗаявок.Текущаястрока = НужнаяСтрока; КонецПроцедуры |
|||
17
mrParadox
26.11.12
✎
11:52
|
Я помню, что точно так раньше делал много раз, все работало
|
|||
18
palpetrovich
26.11.12
✎
11:53
|
(14) наверное тут собака и порылась :)
"ПередОкончаниемРедактирования" и "я перезаполняю заново таблицу" |
|||
19
Reset
26.11.12
✎
11:53
|
Оно и должно работать вроде
|
|||
20
mrParadox
26.11.12
✎
11:53
|
(14) Что не так?
|
|||
21
mrParadox
26.11.12
✎
11:54
|
(20) к (18)
|
|||
22
Шапокляк
26.11.12
✎
11:55
|
(10) Извиняюсь, затупила.
|
|||
23
НЕА123
26.11.12
✎
11:55
|
надо ПРИ а не ПЕРЕД
|
|||
24
mrParadox
26.11.12
✎
11:55
|
ОбновитьТаблицу() - загрузка таблицы из СКЛ после внесения в СКЛ изменений.
|
|||
25
Rovan
гуру
26.11.12
✎
11:56
|
(16) ПередОкончаниемРедактирования курсор находится в строке
и сменить ее не может ! |
|||
26
Reset
26.11.12
✎
11:56
|
(25) Вот похоже на правду)
|
|||
27
Aprobator
26.11.12
✎
11:59
|
надо же было так найти место для перезаполнения то. Уметь надо.
|
|||
28
Reset
26.11.12
✎
11:59
|
да и подменять источник данных в момент их редактирования нехорошо
|
|||
29
mrParadox
26.11.12
✎
11:59
|
(23) Сделал, ошибка пропала, но Текущая строка все равно не присваевается
|
|||
30
Reset
26.11.12
✎
12:00
|
Навреное, надо ПОСЛЕ :)
|
|||
31
Reset
26.11.12
✎
12:01
|
Вообще логику пересмотреть имхо
|
|||
32
mrParadox
26.11.12
✎
12:01
|
(30) После нет
|
|||
33
Aprobator
26.11.12
✎
12:02
|
При , Перед - и там и там работать не будет. В событиях при работе со строкой в целом, форма такого безобразия особо не потерпит. Вот ПриПолученииДанных - другое дело. Но, имхо, надо сам процесс пересматриваться.
|
|||
34
Aprobator
26.11.12
✎
12:06
|
впрочем по поводу ПриПолученииДанных тоже могу ошибаться. Какой смысл всего этого безобразия по умолчанию то?
|
|||
35
Aprobator
26.11.12
✎
12:07
|
Работаешь с конкретной заявкой, так влепи отбор. Ну или сортировку там у таблицы то и вводи данные как тебе удобно.
|
|||
36
sadden
26.11.12
✎
12:07
|
(0) для чего тебе устанавливать тек строку (что хочешь дать пользователю)? тогда можно подумать как реализовать
|
|||
37
Reset
26.11.12
✎
12:11
|
(32) А нужно именно после. Не может сойти с текущего, пока редактирование не завершится. Решай как.
Или "обновляй" таблицу так, чтобы текущая строка осталась в таблице - тогда и менять не нужно будет |
|||
38
Aprobator
26.11.12
✎
12:12
|
(37) события После нет для этого безобразия.
|
|||
39
mrParadox
26.11.12
✎
12:13
|
(35)(36)
Данная таблица - отображение таблицы в МС СКЛ сервере с возможностью её редактирования. Если пользователь изменяет/добавляет новую строку в данную таблицу, то после этого таблица очищается и полностью перезаполняется. Соответственно курсор соскакивает с редактируемой строки и её приходится искать вручную. При болльших объемах возникает путаница и морока. |
|||
40
Reset
26.11.12
✎
12:13
|
(38) Я не говорю что есть событие. Я о хроно-точке во временном пространстве
|
|||
41
Reset
26.11.12
✎
12:14
|
(39) А зачем при изменении одной строчки очищать всю таблицу?
|
|||
42
sadden
26.11.12
✎
12:14
|
(39) воо - тут ключевое слово очищается
|
|||
43
Aprobator
26.11.12
✎
12:14
|
(40) а - понятно, я как то более приземленно мыслю.
(39) из за добавления одной записи надо перезаполнять всю таблицу заново??? Что то явно не так в датском королевстве. |
|||
44
mrParadox
26.11.12
✎
12:15
|
(34) ПриПолученииданных не проканало, 1С стала вести себя неадекватно, по несколько раз вызывать одно и то же событие "ПередОкончаниемРедактирования" /"ПриОкончанииРедактирвоания"
|
|||
45
sadden
26.11.12
✎
12:15
|
кнешно у тебя не установит тек строку - строки то уже очистились и заполнились новыми
|
|||
46
mrParadox
26.11.12
✎
12:16
|
(41) Чтобы наверняка быть уверенным, что те действия, которые осущестлялись, реально осуществились с базой СКЛ
|
|||
47
Reset
26.11.12
✎
12:16
|
(44) В свете алгоритма решения, кто ведет себя адекватно - тот еще вопрос :)
|
|||
48
mrParadox
26.11.12
✎
12:16
|
(45) Так я ищу нужную строку среди новых по коду и её пытаюсь сделать активной
|
|||
49
Aprobator
26.11.12
✎
12:17
|
(47) +100500. Странное какое то добавление новой строки данных.
|
|||
50
Reset
26.11.12
✎
12:18
|
(46) Ерунда какая-то. Записал строку в БД - проверяешь, записалась ли, чтоли? При этом чтением всей таблицы.
|
|||
51
sadden
26.11.12
✎
12:20
|
(0) я не понял до конца зачем всё так, но могу предложить следующий механизм: после редактирования строки записываешь в глобал номер заявки, далее делаешь свои хитрые манипуляции с таблицей, в событии ПриПолученииДанных по глобалу находишь нужную строку и устанавливаешь её с очисткой глобала
|
|||
52
mrParadox
26.11.12
✎
12:21
|
(50) Вполне сносный алгоритм. таблица СКЛ маленькая, чтение происходит мгновенно. Если бы не сложности с окончанием редактирования
|
|||
53
mrParadox
26.11.12
✎
12:21
|
(51) Пробовал , см. (44)
|
|||
54
sadden
26.11.12
✎
12:22
|
(53) у меня всё получилось
|
|||
55
mrParadox
26.11.12
✎
12:23
|
(54) Ок, после обеда еще раз попробую :)
|
|||
56
Reset
26.11.12
✎
12:23
|
(48) Ищи, не ищи, как совершенно верно заметили в (25), НЕВОЗМОЖНО сменить текущу строку.
Когда ты суп ложкой ешь, ты НЕ МОЖЕШЬ взять другую ложку, пока из рта ее не вытащищь, хоть двадцать раз ты ее найди глазами или руками или чем там ты раьоту работаешь |
|||
57
Aprobator
26.11.12
✎
12:23
|
(52) ну если только от слова снести. Вообще с помощью 1С напрямую редактировать СКЛ таблицу - вставляет.
|
|||
58
mrParadox
26.11.12
✎
12:23
|
Код кинь, может я чё не так делаю?
|
|||
59
mrParadox
26.11.12
✎
12:24
|
(58) к (54)
|
|||
60
НЕА123
26.11.12
✎
12:26
|
ПриОкончанииРедактирования (OnEditEnd)
Синтаксис: ПриОкончанииРедактирования(<НоваяСтрока>, <ОтменаРедактирования>) Параметры: <НоваяСтрока> Тип: Булево. Признак редактирования новой строки. Имеет значение Истина, если строка была добавлена или скопирована. <ОтменаРедактирования> Тип: Булево. Истина, если произошла отмена редактирования. Значение по умолчанию: Ложь Описание: Возникает ++++++++++++++++++ПОСЛЕ++++++++++++++++++ окончания редактирования строки табличного поля. Примечание: Возникает, если редактирование производится непосредственно в табличном поле. См. также: ТабличноеПоле, событие ПриНачалеРедактирования |
|||
61
НЕА123
26.11.12
✎
12:28
|
(60)
гм... грязновятенько получится. |
|||
62
НЕА123
26.11.12
✎
12:30
|
(61)
хз. когда новая строка, то ее, скорее может и не быть. |
|||
63
Reset
26.11.12
✎
12:41
|
(60) Я попробовал. Если в этом событии переустанавливать, ошибки не возникает, но текущая не меняется. Видимо, несмотря на то, что возникает "после", состояние редактирования еще остается "активным"
|
|||
64
Reset
26.11.12
✎
12:44
|
+(63) при ОтменаРедактирования=Истина, однако, работает (смена текущей)
|
|||
65
sadden
26.11.12
✎
12:52
|
(64) он таблицу очищает, не сработает так
|
|||
66
sadden
26.11.12
✎
13:10
|
(0) сделай так:
|
|||
67
sadden
26.11.12
✎
13:11
|
(66) работает, проверял
|
|||
68
mrParadox
26.11.12
✎
13:37
|
(66) а процедура ОбновлениеОтображения() откуда вызывается?
|
|||
69
Reset
26.11.12
✎
13:38
|
(68) Это событие
|
|||
70
sadden
26.11.12
✎
13:39
|
(68) это стандартное событие формы, глянь в свойствах твоей формы
|
|||
71
Rovan
гуру
26.11.12
✎
13:39
|
(63) делай через ОбработкуОжидания с интервалом 0.1 сек
|
|||
72
sadden
26.11.12
✎
13:40
|
(71) - зачем? только систему нагрузит
|
|||
73
mrParadox
26.11.12
✎
13:40
|
(70) Точняк, работает. Спасобо большое.
(71) Думал над этим вариантом, но попробовать не успел. |
|||
74
mrParadox
26.11.12
✎
13:41
|
(72) Можно сделать чтобы единовременно запускался, без повторов.
|
|||
75
sadden
26.11.12
✎
13:41
|
(71) потом не факт, что перезаполнение таблицы уложится в 0.1 сек
|
|||
76
mrParadox
26.11.12
✎
13:42
|
я имел ввиду, что в "ПриОкончанииРедактирования" ставить обработчик ожидания для единоразового запуска
|
|||
77
sadden
26.11.12
✎
13:43
|
(76) можно так, но тоже, ты же не знаешь момент времени, когда событие ПриОкончанииРедактирования отработает
|
|||
78
sadden
26.11.12
✎
13:44
|
(76) а ОбновлениеОтоброжение аккурат сработает после ОкончанияРедактирования
|
|||
79
Reset
26.11.12
✎
13:44
|
(71) Спасибо, мне оно не нужно ;)
А будет нужно, разберусь :) |
|||
80
mrParadox
26.11.12
✎
13:45
|
не сталкивался с таким событием. Век живи век учись.
|
|||
81
mrParadox
26.11.12
✎
13:45
|
(79) я не тебе конкретно
|
|||
82
mrParadox
26.11.12
✎
13:46
|
Короче путаница пошла :)
|
|||
83
Reset
26.11.12
✎
13:46
|
(81) Я тоже не тебе ;)
|
|||
84
Reset
26.11.12
✎
13:49
|
(77) Это пофиг кстати, когда отработает.
Но из двух зол через событие обновления - зло меньшее |
|||
85
sadden
26.11.12
✎
13:55
|
(84) как уж пофиг когда отработает событие ОкончаниеРедактирования, попробуй сделать через Оповестить(), не сработает
|
|||
86
sadden
26.11.12
✎
13:56
|
(84) или задержку сделать в ОкончаниеРедактирования так чтобы Обработчик раньше сработал
|
|||
87
Reset
26.11.12
✎
13:57
|
(85)(86)
Я говорю что пофиг сколько он будет отрабатывать и все заполнения, выполняемые в нем - обработчик ожидания все равно запустится после этого |
|||
88
sadden
26.11.12
✎
13:58
|
(87) пробовал - не получилось
|
|||
89
Reset
26.11.12
✎
13:59
|
(88) Чего не получилось? :-\ Яснее
|
|||
90
sadden
26.11.12
✎
13:59
|
(87) нужно дождаться окончания события ОкончаниеРедактирования
|
|||
91
Reset
26.11.12
✎
13:59
|
(90) Я в курсе, елки палки
|
|||
92
Reset
26.11.12
✎
14:00
|
(91) и этого можно добиться, поставив одноразывый обработчик ожидания либо в событии обновления отображения.
КЭП |
|||
93
sadden
26.11.12
✎
14:00
|
в примере моём (66) вместо ОбновленияОтображения после перезаполнения таблицы в ОкончаниеРедактирования делал Оповестить()
|
|||
94
sadden
26.11.12
✎
14:03
|
(92) на какое время ставить ОбработчикОжидания от куда ты можешь узнать?
|
|||
95
Reset
26.11.12
✎
14:04
|
(94) Пофиг на какое
|
|||
96
Reset
26.11.12
✎
14:05
|
+(95) Все равно выполниться после всех действий, сколько бы они не длились
|
|||
97
sadden
26.11.12
✎
14:06
|
(96) может быть (нужно проверить) тогда почему через оповестить не получилось?
|
|||
98
sadden
26.11.12
✎
14:09
|
+(97)
|
|||
99
Reset
26.11.12
✎
14:18
|
(97)(98) Попробовал - обработчик оповещения отрабатывает еще до завершения обработчика ПриОкончанииРедактирования, т.е. цель (`выполниться после`) не достигается
|
|||
100
Reset
26.11.12
✎
14:18
|
(100)
|
|||
101
sadden
26.11.12
✎
14:19
|
(99) о том и речь, счего ты взял что ОбработчикОжидания не сработает до?
|
|||
102
Reset
26.11.12
✎
14:20
|
(101) Потому что это ТАК.
|
|||
103
Reset
26.11.12
✎
14:21
|
Вот цитата из СП
Процедура будет вызываться в период ожидания системы каждый раз по истечению указанного интервала времени. Ключевое - "в период ожидания системы" |
|||
104
sadden
26.11.12
✎
14:23
|
проверил с задержкой ОкончанияРедактирования, точно в любом случае отрабатывает после. Тем не менее визуально через ОбработчикОжидания притормаживает установка тек строки, видно сначала устанавливает первую строку, потом перепрыгивает на нужную, чего нет через ОбновлениеОтображения
|
|||
105
Reset
26.11.12
✎
14:23
|
(104) я про два зла сказал (84) :)
|
|||
106
sadden
26.11.12
✎
14:23
|
(104) к (102)
|
|||
107
sadden
26.11.12
✎
14:24
|
(105) ок - но проверить же нужно было :-)
|
|||
108
Reset
26.11.12
✎
14:25
|
:-)
|
|||
109
mrParadox
26.11.12
✎
14:28
|
(104) У меня через ОбновлениеОтображения тоже притормаживает, в смысле, сначала формируется таблица, активна 1-я сстрока, потом через маленькую паузу активируется нужная строка
|
|||
110
sadden
26.11.12
✎
14:32
|
(109) можешь код показать?
|
|||
111
mrParadox
26.11.12
✎
14:38
|
Перем ГлобНомерЗаявки;
Процедура ТаблицаЗаявокПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) Если НоваяСтрока Тогда ДобавитьЗаявкуВ_СКЛ(Элемент.ТекущиеДанные, ОтменаРедактирования); Иначе ИзменитьЗаявкуВ_СКЛ(Элемент.ТекущиеДанные, ОтменаРедактирования); КонецЕсли; ГлобНомерЗаявки=Элемент.ТекущиеДанные.NomerZayavki; ОбновитьТаблицу(); КонецПроцедуры Процедура ОбновлениеОтображения() Если ГлобНомерЗаявки <> Неопределено Тогда ТекСтрока = ТаблицаЗаявок.Найти(ГлобНомерЗаявки, "NomerZayavki"); Если ТекСтрока <> Неопределено Тогда ЭлементыФормы.ТаблицаЗаявок.ТекущаяСтрока = ТекСтрока; КонецЕсли; КонецЕсли; ГлобНомерЗаявки = Неопределено; КонецПроцедуры ГлобНомерЗаявки=Неопределено; |
|||
112
mrParadox
26.11.12
✎
14:39
|
Заметил на реальной базе это происходит быстро, а на тестовой притормаживает. Терпимо в общем.
|
|||
113
sadden
26.11.12
✎
14:48
|
ТекСтрока = ТаблицаЗаявок.Найти(ГлобНомерЗаявки, "NomerZayavki"); долго отрабатывает вообщем, но тут уже ничем не поможешь
|
|||
114
sadden
26.11.12
✎
14:49
|
(111) ОбновитьТаблицу() убери лучше
|
|||
115
mrParadox
26.11.12
✎
14:54
|
(114) Пофигу. Этот интерфейс предназначается администратору системы, т.е. мне лично. Я уж переживу полсекундное зависание :)
|
|||
116
sadden
26.11.12
✎
14:55
|
(115) просто это лишнее - зачем код портить?
|
|||
117
sadden
26.11.12
✎
14:56
|
(113) хотя можно в таблицу свою индексы добавить по коолонке поиска - быстрее буит отрабатывать (думаю так :-) )
|
|||
118
mrParadox
26.11.12
✎
15:01
|
Если убрать ОбновитьТаблицу, тогда данной проблемы не будет изначально :)
|
|||
119
sadden
26.11.12
✎
15:06
|
(118) проверил уже? :)
|
|||
120
mrParadox
26.11.12
✎
15:06
|
(118) Я знал изначально. Эта проблема и появляется из-за этой процедуры.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |