|
Вечный цикл на управляемой форме. | ☑ | ||
---|---|---|---|---|
0
SpellKeeper
16.02.18
✎
12:55
|
Добрый день.
На управляемой форме есть заполненное дерево значений. Мне нужно при активизации строки заполнить другую таблицу данными из базы. Вот три процедуры, которые используются. В скобочках указаны номера двух строк. Это важно. Читайте до конца. &НаКлиенте Процедура ГруппыДеталейВходПриАктивизацииСтроки(Элемент) (613) СтрокаГруппыВход = Элемент.ТекущиеДанные; Объект.СписокДеталей.Очистить(); Объект.ПараметрыДеталей.Очистить(); Объект.ПричиныВыбраковки.Очистить(); СформироватьОписаниеГруппы(СтрокаГруппыВход); КонецПроцедуры &НаКлиенте Процедура СформироватьОписаниеГруппы(ТекДанные) ОписаниеГруппы.Очистить(); Если ТекДанные = Неопределено Тогда Возврат; КонецЕсли; (753) СформироватьОписаниеГруппыНаСервере(Элементы.ГруппыДеталейВход.ТекущиеДанные.Владение, Элементы.ГруппыДеталейВход.ТекущиеДанные.ДокументПоступления, Элементы.ГруппыДеталейВход.ТекущиеДанные.ВагонПоступления); КонецПроцедуры &НаСервере Процедура СформироватьОписаниеГруппыНаСервере(Владение, ДокументПоступления, Вагон) //тГруппы = РеквизитФормыВЗначение("ГруппыДеталей"); тОписание = РеквизитФормыВЗначение("ОписаниеГруппы"); Если Владение = Перечисления.твмВладениеДеталей.Переподкатка Тогда Если ЗначениеЗаполнено(Вагон) Тогда НовСтр = тОписание.Строки.Добавить(); НовСтр.Параметр = "Вагон поступления"; НовСтр.Значение = Вагон; Иначе НовСтр = тОписание.Строки.Добавить(); НовСтр.Параметр = "Группа"; НовСтр.Значение = "Группа деталей поступивщих под вагонами"; КонецЕсли; ИначеЕсли Владение = "Установка на вагон" Тогда Если ЗначениеЗаполнено(Вагон) Тогда НовСтр = тОписание.Строки.Добавить(); НовСтр.Параметр = "Вагон установки"; НовСтр.Значение = Вагон; Иначе НовСтр = тОписание.Строки.Добавить(); НовСтр.Параметр = "Группа"; НовСтр.Значение = "Группа установки деталей на вагон"; КонецЕсли; ИначеЕсли ЗначениеЗаполнено(ДокументПоступления) Тогда НовСтр = тОписание.Строки.Добавить(); НовСтр.Параметр = "Группа"; НовСтр.Значение = "Группа деталей " + Владение + " " + Строка(ДокументПоступления); Иначе НовСтр = тОписание.Строки.Добавить(); НовСтр.Параметр = "Группа"; НовСтр.Значение = "Группа деталей " + Владение; КонецЕсли; ЗначениеВРеквизитФормы(тОписание, "ОписаниеГруппы"); КонецПроцедуры // ПолучитьПараметрыГруппы() И тут 1С выпадает в бесконечный цикл и зависает. Не получается выгрузить лог вызовов в текст, но суть в следующем: бесконечные вызовы строк 613 753 613 753 ...... Я решительно не понимаю что происходит. Может просветите? |
|||
1
SpellKeeper
16.02.18
✎
12:58
|
Уточнение
Процедура ГруппыДеталейВходПриАктивизацииСтроки - это описание события таблицы отличной от той, которая заполняется на сервере. |
|||
2
Dilgorp
16.02.18
✎
13:01
|
Никогда и ни в коем случае при активизации строки нельзя использовать контекстные вызовы сервера.
Когда сервер возвращает форму обратно и "восстанавливает" ее состояние, событие при активизации строки снова срабатывает и (и так пока ресурсы не кончатся). |
|||
3
SpellKeeper
16.02.18
✎
13:03
|
О! как.
Спасибо. Запомню. На стенке выштраблю. |
|||
4
Tateossian
16.02.18
✎
13:12
|
Это 1С по умолчанию борется с циклическими ссылками. Если вы включите контроль циклических ссылок - я вас уверяю - примерно через пять минут работы программы она упадет с грохотом:)
|
|||
5
Buster007
16.02.18
✎
13:19
|
(3) в СП об этом написано.
|
|||
6
SpellKeeper
16.02.18
✎
13:49
|
(5). Это хорошо, когда ты четко понимаешь в какой раздел лезть. Но такого уровня ты достигнешь, когда и так будешь знать большую часть из хелпа.
А когда ты даже не очень понимаешь как правильно вопрос задать, то перечитывать ВСЁ, в поиске ма-а-а-ленького вопроса, наверное, увлекательно, но слишком долго. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |