7.7 Обновление Формы

olga13

Well-known member
10.10.2008
208
0
#1
Добрый день! Есть процедура подбора товара в документ с помощью штрих-сканера:
Код:
Процедура ШтрихСканер()
Перем ШК;
Спр = СоздатьОбъект("Справочник.НоменклатураК");
Если ВвестиСтроку(ШК, "Отсканируйте штрих-код", 13, 0, 15) = 1 Тогда
Если Спр.НайтиПоРеквизиту("ШтрихКод", ШК, 1) = 1 Тогда
НоваяСтрока();
Товар = Спр.ТекущийЭлемент();
Кол_во = 1;
ПересчетСтроки(1, "Товар");
//ФормаРасш.Обновить();
Форма.Обновить(1);
Иначе										 
Предупреждение("Товар не найден!");
КонецЕсли;
ШтрихСканер();
КонецЕсли;
КонецПроцедуры
Проблема в том, что пока открыто диалоговое окно ввода строки, в табличной части новые строки не отображаются. Я пробовала обновлять форму и штатными средствами, и через FormEx - ничего не получается. Что не так?
 
G

Guest

#2
А как вызывается эта процедура и диалоговое окно? Что происходит в режиме отладки?
 

Дайнеко

Well-known member
19.11.2009
951
0
#3
АктивизироватьСтроку(<НомСтроки>)

Правда я проблемы не понял.
* На экране появилось сообщение "Введите.."
* Человек ввел
* Сообщение пропадает и фокус возвращается к документу. Все строки видны. Даже Форма.Обновить(1); не нужно.
 

olga13

Well-known member
10.10.2008
208
0
#5
А как вызывается эта процедура и диалоговое окно? Что происходит в режиме отладки?
Процедура вызывается "горячей" клавишей. Можем вводить строки в документ вручную, а можем сканировать штрих-коды. Тогда товар добавляется автоматически.

Добавлено:
АктивизироватьСтроку(<НомСтроки>)

Правда я проблемы не понял.
* На экране появилось сообщение "Введите.."
* Человек ввел
* Сообщение пропадает и фокус возвращается к документу. Все строки видны. Даже Форма.Обновить(1); не нужно.
Задумка такая: пользователь решил вводить товар не вручную, а с помощью сканера. Тиснет "горячую" клавишу, появляется диалоговое окно. Чтобы не нажимать эту клавишу для каждого товара, значение штрих кода запрашивается до тех пор, пока пользователь не нажмет "Отмена". Так вот, пока не нажмешь эту самую "Отмену", новые строки в документе не видны.
 
G

Guest

#6
Ни какой логической ошибки я не вижу. Попробуйте отказаться от рекурсии и организовать цикл каким-то другим способом.
 

Дайнеко

Well-known member
19.11.2009
951
0
#7
Ну, глазастый!
Апалдеть! Это ж какое воспаленное сознание воткнуло сюда рекурсию? Что будет со стеком вызова после сотен сканирований? Простой цикл вполне к месту.

Но раз из процедуры не осуществляется выход, то фокус на форму не возвращается. Значит ничего и не отрисуется. Выход надо поискать в "ОткрытьПодбор()".


Добавлено: Есть, однако, еще один замысловатый прием.
- после добавления товара - Форма.Закрыть() и выйти из проц-ры.
- ПриЗакрытии() анализирует, что закрытие ложное и отказывается, затем вызывает повторный скан.
Соль в том, что в промежутке до закрытия, форма получает управление и отрисовывается.
 

olga13

Well-known member
10.10.2008
208
0
#8
Ну, глазастый!
Апалдеть! Это ж какое воспаленное сознание воткнуло сюда рекурсию? Что будет со стеком вызова после сотен сканирований? Простой цикл вполне к месту.
Не совсем поняла, чем в данном случае рекурсия хуже простого цикла. Ни о какой сотне сканирований речь не идет. Процедура крутится до тех пор, пока пользователь не нажмет кнопку "Отмена" в диалогов окне для ввода штрих-кода. На мой взгляд, это то же самое, что Пока ВвестиСтроку(,,,) = 1 Цикл.
Добавлено: Есть, однако, еще один замысловатый прием.
- после добавления товара - Форма.Закрыть() и выйти из проц-ры.
- ПриЗакрытии() анализирует, что закрытие ложное и отказывается, затем вызывает повторный скан.
Соль в том, что в промежутке до закрытия, форма получает управление и отрисовывается.
Дельный совет, все получилось. Спасибо большое.
 

unknown181538

НеГуру
28.12.2008
1 417
0
#9
Не совсем поняла, чем в данном случае рекурсия хуже простого цикла
Я тоже не понял) Стек вызовов, мне кажется, не лопнет))
Хотя она тут усложняет восприятие. Кажется, кому-то просто хотелось "побаловаться рекурсией" :)
 

Дайнеко

Well-known member
19.11.2009
951
0
#10
Ну, парни, я возмущен всей своей тонкой натурой! Рекурсия нужна в редких случаях:
- обусловленных самой природой анализируемого объекта.
- обязательным условием является конечность вложенных циклов (именно иделогическая)

А когда человек "циклически" кликает по сканеру, то не хрен ее сюда за уши притягивать. И не надо ныть: "ну подумаешь, рука когда-то устанет", "и так ведь работает..." и в таком стиле. А надо думать и писать красиво.

Сейчас посмотрю предудущие посты, всем минусов навешаю со злости!
 

vbs

Well-known member
18.02.2007
1 708
1
#11
Пугает Мастер, никаких минусов он не навешает. Но ведь прав он по сути - слушайте Мегагуру, и да прибудет вам счастье :)