Имя: Пароль:
1C
1C 7.7
v7: Попрыгать по строкам документа - не работает АктивизироватьСтроку()
0 match
 
08.10.17
06:25
Всем привет!
В какой момент этот метод должен отработать? Пытаюсь неоднократно (рекурсивно) вызывать его из процедуры Модуля Формы документа. Срабатывает только после выхода из процедуры ((

Тестовый код:

Процедура тест()
    номстр = "";
    Если ВвестиЧисло(номстр,"ввод номера строки",,0,5) = 1 Тогда // 5 секунд на ввод, иначе выход
        АктивизироватьСтроку(номстр);
        тест();
    КонецЕсли;
КонецПроцедуры
1 vadim777
 
08.10.17
07:04
(0) После вызова АктивизироватьСтроку(номстр) добавь Форма.Обновить(1).
2 match
 
08.10.17
07:23
(1) Пробовал, не работает. То есть обновление формы происходит, а по строкам не прыгает. Только после выхода из процедуры на последнюю введенную строку позиционируется.
3 match
 
08.10.17
07:47
Попробовал еще так, результат тот же.

Процедура ПозиционироватьСтр(НомСтр)
        АктивизироватьСтроку(НомСтр);
        Форма.Обновить();
КонецПроцедуры

Процедура тест()
    номстр = "";
    Если ВвестиЧисло(номстр,"ввод номера строки",,0,5) = 1 Тогда // 5 секунд на ввод, иначе выход
        ПозиционироватьСтр(номстр);
        тест();
    КонецЕсли;
КонецПроцедуры
4 vadim777
 
08.10.17
08:07
(2) Может, дать 1С время на отработку события. Типа WScript.Sleep(5), только в терминах 1С.
5 youalex
 
08.10.17
08:21
ОбработкаОжидания - не вариант?
6 vcv
 
08.10.17
09:17
А какой смысл этого действа? Показать модальное окно, закрывающее часть экрана. Если пользователь успел на пять секунд ввести число, моргнуть окном и перепрыгнуть на указанную строку, опять закрыв модальным окном центральную, самую ценную, часть экрана.
Это такой хитрый метод гонок с пользователем наперегонки по кругу?
Может лучше взять какой-нибудь FormEx и организовать нормальный инкрементальный поиск по номеру строки?
7 Мимохожий Однако
 
08.10.17
09:57
(3) Во фрагменте:
ПозиционироватьСтр(номстр);
        тест();
зачем еще раз вызываешь процедуру?
8 vcv
 
08.10.17
10:11
(7) Похоже такой метод просмотра табличной части. Пользователь вводит в мигающем окошке номера строк и они активируются в табличной части. Когда нужно закончить этот странный эротический процесс, пользователь ничего не вводит или жмёт "Отмена". :)
9 match
 
08.10.17
10:12
Тема уходит в сторону... хотел этого избежать, ну да ладно: в реальной конфигурации "вводить число" должен сканер ШК (и это не номер строки, конечно), отрабатываться действия, и ожидать следующего сканирования. Прежде чем переходить к внешним компонентам, хотелось бы разобраться со штатными средствами.
))
10 match
 
08.10.17
10:15
Результат сканирования есть желание видеть в документе до нажатия "Отмена" ))
11 FN
 
08.10.17
11:40
Добавь Ложное закрытие формы
12 match
 
08.10.17
12:35
(11) Попробовал, результат тот же, что не так?:

Перем НомСтрПриЗакр;

Процедура ПозиционироватьСтр(НомСтр)
    НомСтрПриЗакр  = НомСтр;
    Форма.Закрыть(0);
КонецПроцедуры

Процедура тест()
    номстр = "";
    Если ВвестиЧисло(номстр,"ввод номера строки",,0,) = 1 Тогда
        ПозиционироватьСтр(НомСтр);
        тест();
    КонецЕсли;
КонецПроцедуры

Процедура ПриЗакрытии()
   Если НомСтрПриЗакр > 0 Тогда
        АктивизироватьСтроку(НомСтрПриЗакр);
        Форма.Обновить();
        НомСтрПриЗакр = 0;
        СтатусВозврата(0);
   КонецЕсли;
КонецПроцедуры
13 youalex
 
08.10.17
14:23
(9) Попробуй все же с обработкой ожидания. Но в 77, в отличие от 8 - процедура ожидания  должна быть экспортной в гл. модуле.
В своей форме - запускаешь обработчик:
ОбработкаОжидания("глОбработчик", 1);

в процедуре обработчика просто открываешь свою форму:
ОткрытьФорму("Справочник.Номенклатура.ФормаСписка"); //к примеру

В этой же форме - прописываешь обработчик события
ПриПовторномОткрытии() - там свою логику + отключение обработчика(если ничего не введено:
ОбработкаОжидания("глОбработчик", 0);
14 Мимохожий Однако
 
08.10.17
14:37
(12) Ответь на (7). Я измучился ждать ))
15 Злопчинский
 
08.10.17
15:29
(13) неверно
Обработка ожидания вполне себе работает локально в форме
16 Злопчинский
 
08.10.17
15:32
(9) все это делается нормально обычным образом безивсяких извращений.
Не пиши код здесь.
Изложи алгоритм чуть более подробно.
Ключ: нефиг заранее делать какие-то эмуляции интеракт вных действий если ответ от пользователя будет тол ко после окончания цикла
17 Злопчинский
 
08.10.17
15:33
В (12) бессмысленный бред нарокомана
18 youalex
 
08.10.17
15:48
(15) Еще лучше, если так) В СП написано только про глобальный.
19 youalex
 
08.10.17
15:55
(16) >нефиг заранее делать какие-то эмуляции интеракт вных действий если

Я так понял смысл сего - сэмулировать постоянный вызов со сканера ШК, то есть практического смысла не имеет.

Если это так, то можно порекомендовать задействовать реальный эмулятор (Яндекс первой строкой поиска "эмулятор сканера ШК" выдает ссыль на нужную статью дружественного ресурса)
20 HawkEye
 
08.10.17
16:33
(0)
все работает:
Процедура ПоКнопке()
    НужнаяСтрока = 1;
    ВвестиЧисло(НужнаяСтрока,"",2,0,0);
    АктивизироватьСтроку(НужнаяСтрока);
КонецПроцедуры
21 match
 
08.10.17
17:04
ОК, если прямого ответа на вопрос, почему не работает код из (0) ни у кого нет, задача такая: изучить и опробовать возможность использовать сканер штрих-кода для заполнения документа количеством товара (конфигурация не типовая). Сканер пока подключен просто как "устройство ввода USB", вместе с каждым считанным кодом передает суффикс CR. Пока пользователь не закончит ввод товара ("отмена"), или не произойдет нештатка какая-то (другой товар, неизвестный штрих-код) работает только сканер - ни клавиатуру, ни мышь трогать не надо. Но надо видеть, как, в какой строке сканирование изменяет количество в МЧ документа.
22 match
 
08.10.17
17:07
(20) Если после АктивизироватьСтроку(НужнаяСтрока); опять рекурсивно вызвать ПоКнопке(); ?
23 match
 
08.10.17
17:20
(21) я может несвязно объяснил: сканирование штрихкода + поиск строки с отсканированным товаром == вводу номера строки + ОК в тестовом коде (0), дальше нужно перейти на эту строку (обновить количество) и вывести новое окно ожидания ввода, не прибегая к клавиатурt/мыши
24 Злопчинский
 
08.10.17
17:37
(21) у вас тараканы в голове
Разберитесь с сущностями, ...ть!
Сканер работает как клавиатура или генерит внешнее событие?
Впрочем, ни в том, ни в другом случае разницы нет, все работает как надо.
25 Злопчинский
 
08.10.17
17:39
(21) если у тебя нет доступа к мч документа пика висит диалог ввода - на хрена тебе вообще мч?
26 Злопчинский
 
08.10.17
17:40
(23) если строка с отсканированным товаром не найдена - что делаем?
27 Злопчинский
 
08.10.17
17:41
(21) если все идёт нормально - нахрена за этим следить? Имитация бурной деятельности?
28 match
 
08.10.17
18:00
(24) (25) (26) (27) Уважаемый, эти комментарии настолько же бесполезны, насколько и неудивительны и ожидаемы. И вот дабы этого избежать я попытался абстрагироваться от частностей вроде сканеров и тараканов  и попросил помощи у знающих людей, таких как Вы: почему не работает должным образом код (0) ?
29 match
 
08.10.17
18:04
youalex, если можно - чуть подробней про ОбработкаОжидания - для чего она нужна и где, чего, зачем нужно ожидать?
30 Злопчинский
 
08.10.17
18:05
(28) цена вопроса дрессировки ваших тараканов?
31 Злопчинский
 
08.10.17
18:09
(28) ответ вообще-то прозвучал выше - сначала отрабатывает код, потом управление передается в родительский контекст, отрабатывает родительский контекст. таким образом: прекращается выполнение кода - управление передается в контекст формы, форма обновляется. все.
32 youalex
 
08.10.17
18:24
(29) Обработка ожидания - цитата из СП:

Инициирует периодический вызов процедуры глобального модуля с заданным интервалом времени.

То есть, используя обработку ожидания - вы получите регенерируемое событие.  В отличие от вашего решения (рекурсии) - оно будет выполняться не в одном потоке, а создавать поток каждый раз, т.е. - будет  возвращать фокус форме (теоретически)

Мне кажется, это именно то, что вам нужно.

Ну и на реальный эмулятор - стоит внимание обратить. Я пользовал в свое время - эта связка (там две проги - одна эмулирует ком-порт, вторая его дергает) реально пашет как надо.
33 Злопчинский
 
08.10.17
18:28
(32) и без обработки ожидания все работает
выше все написали, как сделать.
например, через ложное закрытие
34 Злопчинский
 
08.10.17
18:33
35 match
 
08.10.17
18:35
(32) Спасибо. Буду пытаться вкурить обработку ожидания (видимо уже не сегодня), а до эмуляторов не дорос пока.
(33) Про ложное закрытие - поправьте пожалуйста (12), что я не так понимаю? Есть рабочий код?
36 match
 
08.10.17
18:41
(34) Спасибо. Завтра обязательно попробую, сейчас убегаю
37 youalex
 
08.10.17
19:32
(33) что за ложное закрытие? Какое-то очередное извращение?
38 Злопчинский
 
09.10.17
15:42
(37) атож! клюшечники отличаются богатой фантазией
39 Злопчинский
 
09.10.17
15:43
(36) ну шо? "завтра" близится к финишу...
40 Злопчинский
 
09.10.17
15:43
(37) см.(34)
41 youalex
 
09.10.17
16:45
(40) Прикольно, спс)
42 Ёпрст
 
09.10.17
16:53
(34) Чебур, заремь это, срочно во всех доках:
НомерТекущейФормы = глУстановкаКнопкиПечать..

Форма будет раз в 20 быстрее открываться
43 Ёпрст
 
09.10.17
16:54
этот код нужно выполнять один раз, при нажатии на саму кнопку печать, а не приОткрытии
44 Злопчинский
 
09.10.17
19:20
(43) я знаю, ты уже ранее давал такой совет, но мне влом, бо по скорости нормально
45 match
 
10.10.17
11:18
Всем привет!
После разгона тараканов прыжки по строкам заработали. И через (34) ложное закрытие, и через (13) ОбработкаОжидания().  При реализации через обработку ожидания есть нюанс - во вновь созданном документе не работает, так как в обработчике используется открытие формы существующего документа. А чтобы документ стал "существующим" его сначала надо записать, как я понимаю.

Для оценки удобства/неудобства использования сканера ШК вроде достаточно. Если будет решение внедрять штрих-кодирование - тогда, конечно, нужно будет что-то посерьезней.

Спасибо всем участвовавшим и сочувствовавшим!

https://www.youtube.com/watch?v=O1K4qigrnUg
46 Злопчинский
 
10.10.17
13:54
(45) тут, конечно, занятно узнать что вы понимаете под "внедрять штрихкодирование"...?
47 match
 
10.10.17
14:22
(46) Как минимум купить принтер этикеток )) Сканер достался на халяву.
Ввести новые правила и процедуры приема, учета, отгрузки. Алгоритмы разрешения коллизий. Ну и 1ску допилить.
48 Злопчинский
 
10.10.17
20:43
(47) а, понятно.. если что - по складу запилить - стучись
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.