|
Перехватить выход из поля ввода | ☑ | ||
---|---|---|---|---|
0
igel1969
26.03.17
✎
10:39
|
Здравствуйте!
1С 8.2, УТ 10.3 Я правильно понял, что если в Поле ввода ничего не изменялось, то перехватить событие покидания этого поля невозможно? События ПриИменении и ОкончаниеВводаТекста возникают только если что-то менялось. Опишу ситуацию: В поле ввода оператор вводит некую комбинацию чисел. Я отлавливаю событие ПриИзменении и проверяю введенную комбинацию на правильность. Если найдена ошибка, я выдаю сообщение об этом и возвращаю курсор обратно на поле ввода. Но если после всего этого оператор не исправил ошибку (ничего не изменял в поле ввода), то дальше 1С уже позволяет покинуть поле ввода, так как не происходит ни событие ПриИзменении, ни ОкончаниеВводаТекста (((( Как думаете - есть выход? Сталкивались с подобным? Заказчик программы четко указал, что проверка на правильность заполнения должна происходить в момент покиданияполя. В других языках программирования (не 1С) такая возможность предусмотрена. |
|||
1
Лефмихалыч
26.03.17
✎
10:44
|
в поле ввода ты это ни как не сделаешь. По этому корректность данных надо проверять еще раз отдельно в обработке проверки заполнения.
Обработка проверки заполнения - обеспечивает корректность данных, которые записываются в базу. Любые проверки в форме - помогают пользователю не накосячить. Перемешивать одно с другим - плохая идея. Хотя бы потому, что объекты могут создаваться и без формы, но корректность этого надо обеспечивать точно так же, как и при заполнении из формы. |
|||
2
igel1969
26.03.17
✎
10:46
|
(1) ну так и скажу заказчику. у меня есть окончательная проверка все шести однотипных полей ввода, так и было изначально сделано, но заказчик попросил чтобы проверка осуществлялась сразу при выходе из поля, чтобы оператор не переходил к заполнению следующего, пока не исправит текущее. ладно, скажу что одна проверка при выходе будет, а дальше уже на совести оператора - если не исправит, то это опкажет окончательная общая проверка.
Спасибо. |
|||
3
Лефмихалыч
26.03.17
✎
10:54
|
>чтобы оператор не переходил к заполнению следующего, пока не исправит текущее
такие вещи делаются мастером заполнения с кнопкой "Далее". Но это превращает интерфейс системы из просто недружественного в откровенно враждебный и человеконенавистнический. Не надо так делать. |
|||
4
igel1969
26.03.17
✎
10:55
|
Непонятно только в чем разница между событиями ПриИзменении и ОкончаниеВводаТекста. Они возникают в одной и той же ситуации. Бессмыслица.
|
|||
5
Лефмихалыч
26.03.17
✎
11:05
|
(4) для ссылочных данных - в разной. ПриИзменении стреляет после того, как ввод по строке подобрал значение из базы, а ОкончаниеВводаТекста - до.
Текстовые поля - частный случай, там оно одинаковое, да. Но это не бессмыслица. |
|||
6
igel1969
26.03.17
✎
11:10
|
Лефмихалыч, Вы, конечно, сочтете меня грубым извращенцем (хотя по моему твердому убеждению извращений существует лишь два: балет на льду и хоккей на траве, а все остальное, это виды удовольствия), но я нашел вот такой выход:
Shell = Новый COMОбъект("WScript.Shell"); Если НЕ ПроверитьСтрокуКомбинации(Комбинация1, ТекстОшибки) Тогда Предупреждение(ТекстОшибки); ЭтаФорма.ТекущийЭлемент = ЭлементыФормы.Комбинация1; Shell.SendKeys("{END}"); Shell.SendKeys(" "); Shell.SendKeys("{BACKSPACE}"); Возврат; КонецЕсли; |
|||
7
Лефмихалыч
26.03.17
✎
12:07
|
(6) убей себя :)
|
|||
8
Zhuravlik
26.03.17
✎
13:03
|
(0) Обычные формы, я правильно понял? В поле ввода можно маску задать. И это просто диалог на форме, или поле таблицы?
Есть у формы также метод, по-моему "ОбновлениеОтображения" - можно с его помощью выкрутиться. |
|||
9
Zhuravlik
26.03.17
✎
13:04
|
(8) *метод = событие
|
|||
10
Zhuravlik
26.03.17
✎
13:08
|
(6) нехорошо как-то... Человек мог просто банально ошибиться символом, а вы заставляете его все заново вводить
|
|||
11
igel1969
26.03.17
✎
13:17
|
(10) я заново вводить не заставляю, я же имитирую нажатие клавиж END (в конец строки), пробел (добавление символа пробела) и BACKSACE (стирание символа, т.е.введенного пробела, слева. таким образом, текст меняется (хотя остается прежним) и при выходе из поля срабатывает событие ПриИзменении.
Маска невозможна, потому что там комбинация чисел, неповторяющихся, в определенном диапазоне, и количество цичел тоже может быть разным, разделенных пробелом и т.д. Короче, сложная комбинация, маской не получится. |
|||
12
h-sp
26.03.17
✎
13:28
|
(11) что-то вы дерьмо какое-то придумали. Получается пользователь ничего не менял, а форма модифицированная получается. При выходе из формы будет вопрос "Сохранить", а он тут совершенно не нужен.
|
|||
13
igel1969
26.03.17
✎
13:32
|
(12) что-то вы читать не умеете. Какой вопрос, какая форма? чушь написали с умным видом. осуществляется выход из Поля ввода. Мне надо, чтобы при выходе обязательно осуществлялась проверка на правильность заполнения. при выходе событие происходит только если в поле ввода были изменения. я эти фиктивные изменения делаю.
|
|||
14
Лефмихалыч
26.03.17
✎
13:58
|
(13) Это не чушь, это ты дальше носа не смотришь.
Если пользователь откроет существующий объект, в котором значение поля не корректное, и тыкнет в поле ввода, то единственный способ закрыть форму объекта для его - это срубить процесс 1cv8. |
|||
15
Злопчинский
26.03.17
✎
14:06
|
(14) а некорректное поменять на корректное
|
|||
16
igel1969
26.03.17
✎
14:07
|
(14) откуда там возьмется некорректное значение? Ему там взяться в принципе неоткуда. Его может ввести только пользователь. Если же пользователь введет некорректное значение (для чего вся проверка то и затеяна), то ему на ошибку указывается и предлагается либо исправить ее, либо стереть все поле целиком. Задача выполнена.
А h-sp вообще какой-то бред написал. Какое сообщение сохранить? У вас в каждом поле ввода после изменения спрашивается сохранить ли введенное значение? Ну, мне жаль ваших пользователей. Какая форма модифицированная, если речь идет только о данном конкретном поле ввода? Мальчик в MSAccess пересидел в детстве слишком много, если не может абстрагироваться от того, что форма используется только для ввода какой-то записи Базы данных и при изменении данных внутри формы надо спрашивать о необходимости сохранить их в БД. Формы много для чего можно использовать. И да, Лефмихалыч, я старше вас раза в два (просто в 1С недавно), но не считаю трудным обращаться вежливо. |
|||
17
Лефмихалыч
26.03.17
✎
14:12
|
(16) какая разница - откуда? С обменом придет. Со временем изменятся требования, код проверки ты доработаешь и 10% существующих объектов станут некорректными. При твоем подходе, если ты забудешь исправить данные или не успеешь, то у пользователей будет отказ сервиса - открыть можно, а закрыть нет.
>И да, Лефмихалыч, я старше вас раза в два ну, давай длиной заодно померимся... календарный возраст в данном случае не имеет ни какого значения. Значение имеет опыт, который, если бы был, ветки бы не было. И вот это "Формы много для чего можно использовать" - смешная сентенция. Когда формы используются для чего-то, кроме UI, стоимость развития продукта растет экспоненциально с каждым обновлением и в конечном итоге становится проще сделать новый продукт, чем в этом что-то изменить. |
|||
18
h-sp
26.03.17
✎
14:14
|
(16) но потом этот документ все смотреть будут. Открывать, закрывать. Откроет человек документ, просто посмотреть, а ему тут ваши бэкспейсы как снег на голову.
|
|||
19
Лефмихалыч
26.03.17
✎
14:14
|
да и - далеко не в два. 13 лет всего. После 20ти это не разница ни какая.
|
|||
20
Лефмихалыч
26.03.17
✎
14:14
|
ну,ладно, - после 30
|
|||
21
igel1969
26.03.17
✎
14:23
|
(18) ЭТО НЕ ДОКУМЕНТ! Это форма для того, чтобы оператор мог принять у клиента ставку СпортЛото.
Шесть полей. В каждом поле можно заполнить (а можно только в одном или в нескольких) комбинации. Комбинация состоит из нескольких чисел. Количество чисел может быть разным, он зависит от игры. Допустим, если игра 5 из 36, то чисел не может быть меньше 5, логично? И верхний предел количества чисел тоже есть (не 36, меньше). Сами числа должны быть в диапазоне от 1 до 36 и неповторяющимися. никакого документа нет. Клиент протягивает оператору заполненный бланк ставки. оператор заполняет те из 6 полей, которые заполнены клиентом в ПУСТЫХ полях. При заполнении каждого поля, ЗАКАЗЧИК ПРОГРАММЫ хочет проверку на вышеизложенные требования (ну я их очень коротко изложил, там еще есть автоматические ставки и другие требования, лень их тут описывать). Если все правильно заполненно, программа посылает HTTP-запрос с комбинацией на сервер ГосЛото и получает сперва сумму стоимости ставки, а затем второй запрос на регистрацию ставки. Все, никакой документ, который мог бы вызываться в будущем для редактирования, при этом не создается, создаются только оправдательные документы для 1С - РеализацияТоваровУслуг (с заполненной Услугой) и ПКО, но это к сделанной ставке имеет только касательное отношение. Значения заполненных полей стираются и НИКОГДА больше не понадобятся, а если понадобятся, то только для распечатки квитанции, только если ставка зарегистрирована. Это уже другая история, откуда брать данные для печати (квитанцию формирует сам сервер ГосЛото), и никакие проверки уже не проходятся - ставка принята. |
|||
22
igel1969
26.03.17
✎
14:30
|
и да - если Вы живете не в Казани, если у вашей фирмы большая (сотни) сеть мелких торговых точек, если Вы захотите стать распространителем лотерей ГосЛото (СпортЛото, Русское Лото, ГЛЖ и т.д.) и у вас 1С 8.2 УТ 10.3, то обращайтесь, договоримся. у меня программа почти готова, доделываю мелкие замечания ))))
Когда я тут писал - ЗАКАЗЧИК, я имел в виду не свою фирму, в которой я тружусь, а ГосЛото. Потому что они предоставляют только формат HTTP-обмена с их сервером, но также и предъявляют определенные требования к интерфейсной части. И пока ОНИ (ГосЛото) не примут мою программу, наша торговая фирма не получит доступ к распространению лотерей. Уже два просмотра прошли, почти все готово, осталось исправить мелкие замечания. |
|||
23
Лефмихалыч
26.03.17
✎
14:31
|
(21) не давать выйти из поля - это фашизм. Причем не нужный совершенно, раз полей всего 6. Эи все проверки нужны на первое время, пока пользователь обучается, в дальнейшем операторы будут, не глядя, лупить правильные значения.
Лучше сосредоточить на порядке обхода и всяких хоткеях, чтобы пользователю не нужна была мышь. А еще лучше - придумать решение, чтобы клиент сам на каком-то тачскрине набирал свои данные. Гораздо лучше. Тачскрину зарплата, отпуск, больничный и декрет не нужны. |
|||
24
igel1969
26.03.17
✎
14:35
|
(23) насчет тачскрина - интересная идея. до сих пор, другие фирмы использовали специальный сканер для заполненных бланков, но я связывался с коллегами из других городов - они категорически против этих сканеров, сильно ругаются на качество их работы. А тачскрин - об этом речи не было.
Но оператор все-равно никуда не денется, он же должен ставку зарегистрировать только после того, кк клиент деньги отдаст. А ставки могут быть очень крупными. Например, игра 5 из 36. Это не значит, что клиент обязан поставить только на 5 чисел. Он может сделать ставку и на 19 чисел, вероятность выигрыша при этом возрастет, но и стоимость ставки будет исчисляться несколькими миллионами. |
|||
25
igel1969
26.03.17
✎
14:36
|
(23) Фашизм как просьба ЗАКАЗЧИКА. Мы только собираемся распространять лотереи, а сама фирма ГосЛото сделала это во многих фирмах и во многих городах. Им виднее, я считаю
|
|||
26
Лефмихалыч
26.03.17
✎
14:40
|
(25) то, что заказчик говорит и то, что он реально хочет - это чаще всего две большие разницы. Здесь он, скорее всего, хочет, чтобы данные были корректными, а выражает это в форме технического решения "сделайте, чтобы выйти из поля ввода было нельзя".
Делать то и только то, что заказчик говорит - себе дороже. Потеряешь или время, или репутацию, а то даже - то и это одновременно. Но, ты же вдвое меня старше, так что я этого всего объяснять, пожалуй, не буду. |
|||
27
z80a
26.03.17
✎
14:43
|
Анализ ЭтаФорма.ТекущийЭлемент в обработке ожидания
|
|||
30
Лефмихалыч
модератор
26.03.17
✎
14:50
|
Отклоняться от темы не нужно.
|
|||
31
igel1969
26.03.17
✎
14:55
|
(26) да тема уже исчерпала себя. решение я нашел, оно меня устраивает. А насчет ЗАКАЗЧИКА - еще раз поясняю двоякость ситуации. На программе будут работать МОИ операторы, я лучше знаю их самих и их интеллектуальный уровень. и я лучше знаю какая программа будет им удобнее. И в первом варианте программы проверка осуществлялась общая, одной кнопкой. Но доступ к системе лотерей дает фирма СтоЛото (ГосЛото). И они же выдвигают требования к интерфейсной части программы. В их глазах я могу потерять репутацию только не выполнив их требования. А если полученная система будет неудобной девочкам-операторам, мне уже никто не запретит изменить интерфейс как сочту нужным, надеюсь. Мне бы ля начала "сать проект", получить доступ, а работать потом все-равно мне и моим сотрудникам.
|
|||
32
igel1969
26.03.17
✎
14:55
|
(31) Сдать проект, а не "сать" )))))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |