|
Неадекватное поведение управляемых форм. | ☑ | ||
---|---|---|---|---|
0
espanol
22.05.12
✎
16:28
|
&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент) Если НЕ Элементы.Список.ТекущиеДанные.ЭтоГруппа Тогда //ВыводОстатокИРозничныхЦен(Элементы.Список.ТекущиеДанные.Ссылка); ПолучениеОстатков(Элементы.Список.ТекущиеДанные.Ссылка); //ПоказатьКартинку(Элементы.Список.ТекущиеДанные.Ссылка); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПолучениеОстатков(Номенклатура) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровКомпанииОстатки.СкладКомпании КАК Склад, | СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) КАК ОстаткиНаСкладе, | СУММА(ОстаткиТоваровКомпанииОстатки.РезервОстаток) КАК ИзНихВРезерве, | СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток)-СУММА(ОстаткиТоваровКомпанииОстатки.РезервОстаток) КАК СвободныйОстаток, | ВЫБОР | КОГДА ОстаткиТоваровКомпанииОстатки.СкладКомпании.Розничный=ИСТИНА | ТОГДА СУММА(ОстаткиТоваровКомпанииОстатки.СуммаРознОстаток) | ИНАЧЕ 0 | КОНЕЦ КАК СуммаРозн, | ВЫБОР | КОГДА ОстаткиТоваровКомпанииОстатки.СкладКомпании.Розничный=ИСТИНА | ТОГДА | ВЫБОР | КОГДА (СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) ЕСТЬ NULL) ИЛИ СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток)=0 | ТОГДА 0 | ИНАЧЕ СУММА(ОстаткиТоваровКомпанииОстатки.СуммаРознОстаток)/СУММА(ОстаткиТоваровКомпанииОстатки.КоличествоОстаток) | КОНЕЦ | ИНАЧЕ 0 | КОНЕЦ КАК ЦенаРозничная |ИЗ | РегистрНакопления.ОстаткиТоваровКомпании.Остатки(, Номенклатура=&Номенклатура) КАК ОстаткиТоваровКомпанииОстатки |СГРУППИРОВАТЬ ПО ОстаткиТоваровКомпанииОстатки.СкладКомпании |УПОРЯДОЧИТЬ ПО | ОстаткиТоваровКомпанииОстатки.СкладКомпании"; Запрос.УстановитьПараметр("Номенклатура", Номенклатура); Остатки = Запрос.Выполнить().Выгрузить(); Не понимаю почему после выгрузки, сразу прыгает в Процедура СписокПриАктивизацииСтроки(Элемент)? и так зацикливается до бесконечности! |
|||
1
ptiz
22.05.12
✎
16:31
|
Например, ты остатки на форме обновляешь так, что выполняется перерисовка формы.
|
|||
2
Азат
22.05.12
✎
16:36
|
Батюшка, сие не есть новость... У Чистова было разъяснение на эту тему))
|
|||
3
ГАГАТУН
22.05.12
✎
16:36
|
все логично, ты при активизации строки вызываешь серверную процедуру.
При обращении к серверу форма обновляется и опять возникает событие активизации строки. |
|||
4
ГАГАТУН
22.05.12
✎
16:37
|
+(3) пиши все на клиенте без обращений к серверу
|
|||
5
ГАГАТУН
22.05.12
✎
16:39
|
+(4) хотя у меня есть вариант в котором это работает
&НаКлиенте Процедура ОбъектыНедвижимостиПриАктивизацииСтроки(Элемент) Если НЕ Элементы.ОбъектыНедвижимости.ТекущаяСтрока = Неопределено Тогда ПрочитатьОбщуюИнформациюПоОбъектуСделкиНаСервереШапка(); КонецЕсли; КонецПроцедуры |
|||
6
espanol
22.05.12
✎
16:40
|
(4) на клиенте запрос и множество другого не пашет
|
|||
7
ГАГАТУН
22.05.12
✎
16:41
|
&НаСервере
Процедура ПрочитатьОбщуюИнформациюПоОбъектуСделкиНаСервереШапка() АктивнаяСтрока = Объект.ОбъектыНедвижимости.НайтиПоИдентификатору(Элементы.ОбъектыНедвижимости.ТекущаяСтрока); СсылкаНаНедвижимость = АктивнаяСтрока.ОбъектНедвижимости; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", СсылкаНаНедвижимость); Запрос.Текст = "ВЫБРАТЬ | ПлощадиОбъектовНедвижимости.ОбщаяПлощадь, | ПлощадиОбъектовНедвижимости.ЖилаяПлощадь, | ПлощадиОбъектовНедвижимости.ПлощадьКухни, | ПлощадиОбъектовНедвижимости.КоличествоЖилыхКомнат, | ПлощадиОбъектовНедвижимости.ПлощадиЖилыхКомнат, | УсловияПродажиОбъектов.КоличествоКомнатДляПродажиАренды, | ПравообладателиОбъектов.Контрагент КАК КонтрагентПравообладатель |ИЗ | Справочник.УПН_ОбъектыНедвижимости КАК ОбъектыНедвижимости | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УПН_ПлощадиОбъектовНедвижимости.СрезПоследних(, ОбъектНедвижимости = &Ссылка) КАК ПлощадиОбъектовНедвижимости | ПО (ПлощадиОбъектовНедвижимости.ОбъектНедвижимости = ОбъектыНедвижимости.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УПН_УсловияПродажиОбъектов.СрезПоследних(, ОбъектНедвижимости = &Ссылка) КАК УсловияПродажиОбъектов | ПО ОбъектыНедвижимости.Ссылка = УсловияПродажиОбъектов.ОбъектНедвижимости | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УПН_ПравообладателиОбъектов.СрезПоследних(, ОбъектНедвижимости = &Ссылка) КАК ПравообладателиОбъектов | ПО ОбъектыНедвижимости.Ссылка = ПравообладателиОбъектов.ОбъектНедвижимости |ГДЕ | ОбъектыНедвижимости.Ссылка = &Ссылка"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Если Выборка.Следующий() Тогда ОбщаяПлощадь = Выборка.ОбщаяПлощадь; ЖилаяПлощадь = Выборка.ЖилаяПлощадь; ПлощадьКухни = Выборка.ПлощадьКухни; КоличествоЖилыхКомнат = Выборка.КоличествоЖилыхКомнат; ПлощадиЖилыхКомнат = Выборка.ПлощадиЖилыхКомнат; КонтрагентПравообладатель = Выборка.КонтрагентПравообладатель; КоличествоКомнатДляПродажиАренды = Выборка.КоличествоКомнатДляПродажиАренды; Иначе ОбщаяПлощадь = ""; ЖилаяПлощадь = ""; ПлощадьКухни = ""; КоличествоЖилыхКомнат = ""; ПлощадиЖилыхКомнат = ""; КонтрагентПравообладатель = ""; КоличествоКомнатДляПродажиАренды = ""; КонецЕсли; ЗаполнитьЗдание(); КонецПроцедуры |
|||
8
Ranger_83
22.05.12
✎
16:41
|
Маразм крепчал
|
|||
9
ГАГАТУН
22.05.12
✎
16:42
|
(6) вероятно, в серверной процедуре ты что-то меняешь в табличной части, в результате чего возникает обновление формы (синхронизация с сервером)
|
|||
10
espanol
22.05.12
✎
16:43
|
(9) понятно, я тока начинаю разбираться с этой клиент-серверной архитектурой, разберусь, таких вопросов не возникнет...
|
|||
11
DocWin
22.05.12
✎
16:44
|
НЕЛЬЗЯ использовать не сервере
ПриАктивизацииСтроки (OnActivateRow) Синтаксис: ПриАктивизацииСтроки() Описание: Вызывается при активизации строки таблицы. Примечание: В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере. |
|||
12
Ranger_83
22.05.12
✎
16:44
|
(10)"Разработка управляемого интерфейса" из серии проф.разработка тебе в помощь
|
|||
13
Ranger_83
22.05.12
✎
16:45
|
(11)А что там про безконтекстный вызов говорится?
|
|||
14
ГАГАТУН
22.05.12
✎
16:45
|
(11) я использую и никаких проблем. Пример (5) и (7)
|
|||
15
espanol
22.05.12
✎
16:53
|
(11) ну а как тогда реализовать механизм, если тыкаем на строчку, должен обрабатываться запрос, и на форме другая табличка должна меняться...
|
|||
16
ГАГАТУН
22.05.12
✎
16:57
|
(15) например, создай реквизит формы с типом "ТаблицаЗначений" и выгружай в него запрос, его на сервере не будет, соответственно, обновления формы возникать не будет.
|
|||
17
espanol
22.05.12
✎
17:01
|
(16) но веть это будет отрабатываться для каждой строки...
|
|||
18
ГАГАТУН
22.05.12
✎
17:03
|
(17) пофигу, реквизит формы с "объектом" не связан, соответственно, все будет путем.
|
|||
19
ГАГАТУН
22.05.12
✎
17:04
|
+(18) у меня в (7) заполняются именно реквизиты формы, не связанные с "объектом" - никаких проблем не возникает
|
|||
20
espanol
22.05.12
✎
17:05
|
(18) у меня Таблица Остатки это реквизит форма с типом Таблица значений....
|
|||
21
ГАГАТУН
22.05.12
✎
17:06
|
(20) тогда не знаю почему у меня работает, а у тебя нет.
полный текст процедуры выложи |
|||
22
ГАГАТУН
22.05.12
✎
17:07
|
+(21) а нафига тебе нужны остатки при активизации каждой строки?
|
|||
23
YAGolova
22.05.12
✎
17:09
|
Я бы сделал переменную в модуле формы на клиенте и менял ее значение при первом выполнение ПриАктивизацииСтроки, ну и соответственно не выполнял бы код, если переменная не нужного мне значения.......как то так
|
|||
24
ГАГАТУН
22.05.12
✎
17:10
|
(23) если нужен остаток, я бы добавил колонку, не связанную с данными в ту же таблицу и заполнял её цифирькой
|
|||
25
ГАГАТУН
22.05.12
✎
17:11
|
+(24) сделал бы еще кнопку "Обновить", чтобы обновлялось по требованию юзера, а не по активизации строки
|
|||
26
ГАГАТУН
22.05.12
✎
17:12
|
+(25) ибо нафига нужен тогда именно тонкий клиент, если он постоянно тыркается к серверу?
|
|||
27
espanol
22.05.12
✎
17:14
|
(24) складов тьма, и надо показать по каждому складу...
|
|||
28
YAGolova
22.05.12
✎
17:14
|
(23)Я не очень насто с УФ работаю, поэтому может че не понимаю, но форма ведь существует одновременно и на сервере и на клиенте, почему ты говоришь, что если реквизит не связан с объектом при вызове процедуры НаСервере не происходит синхронизация с сервером?
|
|||
29
ГАГАТУН
22.05.12
✎
17:15
|
(28) вообще не понимаю, почему у меня (5) и (7) тогда работает?
|
|||
30
YAGolova
22.05.12
✎
17:23
|
(29) Опять же точно вспомнить не могу, но помоему есть какое то свойсто у табличного поля, типо при изменениии патоматически активизировать первую строку, видать у тебя это свойство стоит в "НЕТ" и спасает от зацикиливания строка: Если НЕ Элементы.ОбъектыНедвижимости.ТекущаяСтрока = Неопределено Тогда
|
|||
31
ГАГАТУН
22.05.12
✎
17:43
|
(30) нет такого свойства. По ходу проблема автора в том, что он в таблицу на форме выводит, и из-за этого дергаются все таблицы.
А я в реквизит не табличного типа вывожу... |
|||
32
IamAlexy
22.05.12
✎
18:38
|
(0) http://partners.v8.1c.ru/forum/thread.jsp?id=751564#751564
а вообще, взрослые люди при активизации строки подключают обработчик ожидания с однократным выполнением.. и никакого зацикливания |
|||
33
Ranger_83
23.05.12
✎
07:46
|
(0)попробуй заполнять остатки в ТЗ не на сервере,а на клиенте заменив серверную процедуру функцией.И поменяй директиву компиляции на безконтекстную,накуя гонять данные формы на сервере,если ты впоследствии используешь только ссылку.
|
|||
34
toypaul
гуру
23.05.12
✎
07:53
|
вроде такая же проблема была. просто запоминал текущий элемент в переменной и второй раз не вызывал процедуру.
|
|||
35
dimm7310
23.05.12
✎
08:15
|
в конце прошлой недели обеими ногами наступил на эти грабли.
решил также как в (34) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |