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

Тема в разделе "1C и всё что с ней связано", создана пользователем olga13, 10 окт 2012.

  1. olga13

    olga13 Well-Known Member

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

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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    АктивизироватьСтроку(<НомСтроки>)

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

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Процедура-то рекурсивная)
     
  5. olga13

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Процедура вызывается "горячей" клавишей. Можем вводить строки в документ вручную, а можем сканировать штрих-коды. Тогда товар добавляется автоматически.

    Добавлено:
    Задумка такая: пользователь решил вводить товар не вручную, а с помощью сканера. Тиснет "горячую" клавишу, появляется диалоговое окно. Чтобы не нажимать эту клавишу для каждого товара, значение штрих кода запрашивается до тех пор, пока пользователь не нажмет "Отмена". Так вот, пока не нажмешь эту самую "Отмену", новые строки в документе не видны.
     
  6. Гость

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

    Дайнеко Well-Known Member
    1C Team

    Регистрация:
    19 ноя 2009
    Сообщения:
    951
    Симпатии:
    0
    Ну, глазастый!
    Апалдеть! Это ж какое воспаленное сознание воткнуло сюда рекурсию? Что будет со стеком вызова после сотен сканирований? Простой цикл вполне к месту.

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


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

    olga13 Well-Known Member

    Регистрация:
    10 окт 2008
    Сообщения:
    208
    Симпатии:
    0
    Не совсем поняла, чем в данном случае рекурсия хуже простого цикла. Ни о какой сотне сканирований речь не идет. Процедура крутится до тех пор, пока пользователь не нажмет кнопку "Отмена" в диалогов окне для ввода штрих-кода. На мой взгляд, это то же самое, что Пока ВвестиСтроку(,,,) = 1 Цикл.
    Дельный совет, все получилось. Спасибо большое.
     
  9. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Я тоже не понял) Стек вызовов, мне кажется, не лопнет))
    Хотя она тут усложняет восприятие. Кажется, кому-то просто хотелось "побаловаться рекурсией" :)
     
  10. Дайнеко

    Дайнеко Well-Known Member
    1C Team

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

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

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

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Пугает Мастер, никаких минусов он не навешает. Но ведь прав он по сути - слушайте Мегагуру, и да прибудет вам счастье :)
     
Загрузка...

Поделиться этой страницей