Имя: Пароль:
1C
 
ПриАктивизацииСтроки в УФ.
0 simol
 
25.05.11
18:33
8.2.13.202

На управляемой форме обработки 2 ТЧ.
При активации строки в первой вызывается серверная процедура заполняющая вторую ТЧ.

Непонятно почему Вызов обработчика происходит неоднократно, в чем может быть прикол?


&НаКлиенте
Процедура ПредоставлениеКредитаПриАктивизацииСтроки(Элемент)
   
   УстановитьНастройкиКнопокКредиты();
   
   ТекущиеДанные = Элементы.ПредоставлениеКредита.ТекущиеДанные;
   Если ТекущиеДанные = Неопределено Тогда
       ЗаполнитьПредоставленныеОтсрочкиНаСервере(Неопределено);
   Иначе    
       ЗаполнитьПредоставленныеОтсрочкиНаСервере(ТекущиеДанные.ДоговорКонтрагента);
       а);
   КонецЕсли;    
   
КонецПроцедуры



&НаСервере
Процедура ЗаполнитьПредоставленныеОтсрочкиНаСервере(ДоговорКонтрагента)
   
   Объект.ПредоставленныеОтсрочки.Очистить();
   
   Если Не ЗначениеЗаполнено(ДоговорКонтрагента) Тогда
       Возврат;
   КонецЕсли;
   
   Запрос = Новый Запрос;
   Запрос.Текст =    "...........";
   Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);                
   Запрос.УстановитьПараметр("НачалоТекущегоДня", НачалоДня(ТекущаяДата()));                
   Объект.ПредоставленныеОтсрочки.Загрузить(Запрос.Выполнить().Выгрузить());
   
КонецПроцедуры
1 simol
 
25.05.11
18:33
+(0) "  а);" не читать
2 simol
 
25.05.11
18:47

&НаКлиенте
Процедура УстановитьНастройкиКнопокКредиты()

   ТекущиеДанные = Элементы.ПредоставлениеКредита.ТекущиеДанные;
   
   Если ТекущиеДанные = Неопределено Тогда
       Элементы.ПредоставлениеКредитаПодготовить.Видимость = Ложь;
       Элементы.ПредоставлениеКредитаВернутьСПодготовленного.Видимость = Ложь;
       Элементы.ПредоставлениеКредитаУтвердить.Видимость = Ложь;
       Элементы.ПредоставлениеКредитаОтклонить.Видимость = Ложь;
       Возврат;
   КонецЕсли;    
   
   Если ТекущиеДанные.МожноПодготавливать
       И ТекущиеДанные.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияОбъектов.Утвержден")
       И ТекущиеДанные.Состояние <> ПредопределенноеЗначение("Перечисление.СостоянияОбъектов.Подготовлен") Тогда
       Элементы.ПредоставлениеКредитаПодготовить.Видимость = Истина;
   Иначе    
       Элементы.ПредоставлениеКредитаПодготовить.Видимость = Ложь;
   КонецЕсли;    
   
   Если ТекущиеДанные.МожноПодготавливать И ТекущиеДанные.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияОбъектов.Подготовлен") Тогда
       Элементы.ПредоставлениеКредитаВернутьСПодготовленного.Видимость = Истина;
   Иначе    
       Элементы.ПредоставлениеКредитаВернутьСПодготовленного.Видимость = Ложь;
   КонецЕсли;    
   
   Если ТекущиеДанные.МожноУтверждать И
       (ТекущиеДанные.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияОбъектов.Подготовлен")
       ИЛИ ТекущиеДанные.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияОбъектов.Отклонен")) Тогда
       
       Элементы.ПредоставлениеКредитаУтвердить.Видимость = Истина;
       Элементы.ПредоставлениеКредитаОтклонить.Видимость = Истина;
   ИначеЕсли  ТекущиеДанные.МожноУтверждать И ТекущиеДанные.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияОбъектов.Утвержден") Тогда    
       Элементы.ПредоставлениеКредитаУтвердить.Видимость = Ложь;
       Элементы.ПредоставлениеКредитаОтклонить.Видимость = Истина;
   Иначе    
       Элементы.ПредоставлениеКредитаУтвердить.Видимость = Ложь;
       Элементы.ПредоставлениеКредитаОтклонить.Видимость = Ложь;
   КонецЕсли;    
   
КонецПроцедуры
3 simol
 
25.05.11
18:49
Причем зацикливается и 1С вываливается
4 simol
 
25.05.11
18:50
Одинаково себя ведет в файловой и в MSSQL
5 simol
 
25.05.11
18:51
Вываливается после 278 раза
6 simol
 
25.05.11
19:01
Ошибку вываливания устранил, кривой текст запроса был. Хотя причем тут неоднократный вызов активации не понятно.

Остался вопрос:

Почему второй раз вызывается активация, если в ней заполнить ТЧ и как это можно избежать? Как определить что это второй раз и еще раз не заполнять вторую ТЧ?
7 LaDaMa
 
25.05.11
19:02
"Отладка" - "Стек вызовов"
8 simol
 
26.05.11
10:40
(7)Стек пустой
9 simol
 
26.05.11
11:06
Повторный Вызов обработчика происходит, если в нем изменять видимость кнопок
10 simol
 
26.05.11
11:13
Вот так программа вывалится http://upload.com.ua/get/902623234/Неоднократный вызов обработчика.epf
11 simol
 
26.05.11
11:14
12 simol
 
26.05.11
11:18
(11)У кого ИТС активна, отправьте пожалуйста в 1С
13 Nallama
 
26.05.11
11:45
Подпишусь. Сталкивалась с подобной проблемой, так ничего и не придумала.
Задействованы были три динамических списка:
При активизации строки в первом происходит заполнение второго и меняется видимость кнопки, в зависимости от условий - все прекрасно работает.

Активизация строки в третьем, не связанном с первыми двумя, также должна управлять видимостью уже другой кнопки, но 1С уходит в бесконечный цикл, переключаясь с одного обработчика активизации на другой.
14 simol
 
26.05.11
18:20
1С принял проблему для расследования
15 acsent
 
26.05.11
18:24
При изменении данных формы идет ее перерисовка и снова вызывается отработчики ПриАктивизации
16 simol
 
26.05.11
18:25
(15)повторный вызов происходит при изменении видимости кнопки, а не при изменении данных формы.
Попробуй обработку из (11)
17 acsent
 
26.05.11
18:33
(16) Не веришь?
18 acsent
 
26.05.11
18:33
Не трогай дидимость
19 simol
 
26.05.11
18:38
(17)Не верю чему? Скачай обработку, там нет изменения данных.
(18)Что в этом неправильного?
20 acsent
 
26.05.11
18:42
(19) Напиши письмо в 1С тогда
21 acsent
 
26.05.11
18:42
попробуй 14 релиз
22 simol
 
26.05.11
18:44
(20)Так я написал, о чем сообщил в (14)
23 acsent
 
26.05.11
18:45
(0) Читал

ТаблицаФормы.ПриАктивизацииСтроки (FormTable.OnActivateRow)
ТаблицаФормы (FormTable)
ПриАктивизацииСтроки (OnActivateRow)
Синтаксис:
ПриАктивизацииСтроки()

Описание:
Вызывается при активизации строки таблицы.

Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере.
24 simol
 
26.05.11
18:47
(23)Нет не читал, но мне нужно заполнять ТЧ, потому другого варианта нет.
Причем они вызываются и нареканий к их отработке нет.
Нужно победить только повторный вызов при изменении видимости кнопок
25 acsent
 
26.05.11
18:51
Можно один раз получить все данные для второй таблицы, а потом играться видимостью с помощью условного оформления
26 simol
 
26.05.11
18:51
(21)На 1С:Предприятие 8.2 (8.2.14.439) таже ерунда. Причем:

&НаКлиенте
Процедура ТЧ1ПриАктивизацииСтроки(Элемент)
   
   Элементы.ТЧ1Кнопка1.Видимость = Не Элементы.ТЧ1Кнопка1.Видимость;
   
КонецПроцедуры

Вызывает сервер
27 IamAlexy
 
26.05.11
18:51
сделать реквизит формы
туда класть активное значение
обработчик вызывать только при несоответствии текущего значения строки и уже заполненного реквизита...

и будет вам щастье
28 simol
 
26.05.11
18:54
(25)Подготовка таблицы на все случаи жизни занимает много времени. А по одно строке мизер.
(27)В реальной конфигурации вызывается 2 раза, потому не сильно актуально ,чтоб переделывать, но если 1С исправит, то будет приятно. Спасибо за совет
Закон Брукера: Даже маленькая практика стоит большой теории.