Имя: Пароль:
1C
1C 7.7
v7: Ввод Email адреса в любой раскладке и регистре.
0 BalBess
 
06.03.17
08:52
Всем здрасте!
Встала задача (в связи с 54-ФЗ) ввода email адреса клиента.
Проблема заключается, чтобы кассир вводил адрес в любой раскладке: англ, русской. И в любом регистре. Т.е. при нажатии например Й (русс, большая) в поле вводилось q (анг, маленькое). Все недопустимые символы - игнорировались.
Может кто делал подобное.. поделитесь мыслями
1 BalBess
 
06.03.17
08:52
есс-но без внешних компонент (кроме FormEx'а)
2 FIXXXL
 
06.03.17
08:53
(0) прогони итоговую строку через замену русских букв на латинские
3 пипец
 
06.03.17
08:54
4 BalBess
 
06.03.17
08:54
(2) не, нужно чтобы кассир забивал адрес, и сразу видел англ буквы. Да и как сделать эту замену?
5 FIXXXL
 
06.03.17
08:56
(4) при начале редактирования раскладку смени
6 BalBess
 
06.03.17
08:57
(3) да, грубо говоря нужен пунтосвичер для 77 (программный и принудительный) - т.е. всегда переводить в англ
7 BalBess
 
06.03.17
08:59
(5) - дельный совет, но хотелось-бы чтобы кассир не заморачивался раскладкой, а сразу вводил адрес. И заодно отсеивать ненужные символы
8 Это_mike
 
06.03.17
09:00
ну так формексом и меняй
9 Это_mike
 
06.03.17
09:00
точнее, формексом лови, и если надо - меняй
10 BalBess
 
06.03.17
09:05
(9) это я задним умом понимаю, вопрос как менять? Тупо перебором? нарыл таблицы замены
Lat = "~@#$^&QWERTYUIOP{}ASDFGHJKL:"|ZXCVBNM<>?`qwertyuiop[]asdfghjkl;"\zxcvbnm,./";
Cyr = "Ё"№;:?ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭ/ЯЧСМИТЬБЮ,ёйцукенгшщзхъфывапролджэ\ячсмитьбю.";

тока не знаю что с этим "счастьем" делать..
11 Это_mike
 
06.03.17
09:07
(10) ну тогда в среднюю общеобразовательную...

Сред(***,найти(**),1)
12 FIXXXL
 
06.03.17
09:08
(7) я семерку не знаю от слова совсем
определить НачалоРедактирования нужно поля можешь? проверить в этот момент раскладку может Формекс? сменить раскладку может?
13 FIXXXL
 
06.03.17
09:08
*нужного
14 FIXXXL
 
06.03.17
09:10
(12) если поля не можешь, сделай форму ввода адреса, в которой при открытии всё и задавай
15 aka AMIGO
 
06.03.17
09:31
Можно намекнуть кассиру изредка посматривать на то, что он вводит.

ЗЫ. Автора можно понять.. © кассир - женщина, у них 3 заботы: ККК
В ЗиК дама заменила первую букву фамилии, на лат.раскладке напечатала "A"
Всердцах звонит мне: "У вас тут не работает (это нет поиска по фио в списке справочника). Исправьте, чтоб тут работало!"
Спрашиваю: ввели на лат.раскладке?
Отвечает: А какая разница?
Объясняю разницу, в ответ скептическая физиономия, и комментарий: "Напридумывают черт-те что.."
16 Это_mike
 
06.03.17
09:33
(15) ну, а если вводят пол "по соглашению сторон", а потом орут, что не работает? :-)
волосы-то перекрасить можно, но если дура - то это навсегда...
17 BalBess
 
06.03.17
11:03
Оказалось формексу без разницы какая сейчас раскладка и какой регистр. Он передает код клавиши одинаковый в любой раскладке.
В общем сделал так (может кому пригодиться), пропускаем только нужные символы

Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши, прм_Alt, прм_Shift, прм_Ctrl, прм_Символ, прм_ФСО)
    Если прм_ФСО = 0 тогда Возврат; КонецЕсли;//легкий антидубль - формекс иногда подглючивает

    прм_ФСО=0;
    
    Если КодКлавиши = 13 Тогда // Enter
        Форма.Закрыть(0);
        Возврат;
    КонецЕсли;    

    Если (КодКлавиши = 27) Тогда //Escape
        Форма.Закрыть(0);
        Возврат;
    КонецЕсли;

    Если КодКлавиши = 8 Тогда // Backspace
        длин = стрДлина(Email);
        Если длин <=0 Тогда
            Возврат;
        КонецЕсли;
        Email = Лев(Email, длин - 1);
        ПоказEmail();
        Возврат;
    КонецЕсли;
    
    Если КодКлавиши = 46 Тогда // Delete
        Email = "";
        ПоказEmail();
        Возврат;
    КонецЕсли;
    
    Если стрДлина(Email) > 50  Тогда
        Возврат;
    КонецЕсли;
    

    // собака
    Если (КодКлавиши = 50) И (прм_Shift = 1)  Тогда // @ - собака (50)
        Email = "" + Email + "@";
        ПоказEmail();
        Возврат;
    КонецЕсли;

    // буквы
    Если (КодКлавиши > 64) и (КодКлавиши < 91) Тогда
        Email = "" + Email + Симв(КодКлавиши + 32);
        ПоказEmail();
        Возврат;
    КонецЕсли;
    
    // цифры
    Если (КодКлавиши > 47) И (КодКлавиши < 58)  Тогда
        Email = "" + Email + Симв(КодКлавиши);
        ПоказEmail();
        Возврат;
    КонецЕсли;

    // цифры NumPad
    Если (КодКлавиши > 95) И (КодКлавиши < 106)  Тогда
        Email = "" + Email + Симв(КодКлавиши - 48);
        ПоказEmail();
        Возврат;
    КонецЕсли;


    // точка
    Если (КодКлавиши = 110) ИЛИ (КодКлавиши = 190) ИЛИ (КодКлавиши = 191) Тогда
        Email = "" + Email + ".";
        ПоказEmail();
        Возврат;
    КонецЕсли;
    
    // нижнее подчеркивание
    Если (КодКлавиши = 189) И (прм_Shift = 1) Тогда
        Email = "" + Email + "_";
        ПоказEmail();
        Возврат;
    КонецЕсли;

    // тире
    Если (КодКлавиши = 109) ИЛИ (КодКлавиши = 189) Тогда
        Email = "" + Email + "-";
        ПоказEmail();
        Возврат;
    КонецЕсли;
    

КонецПроцедуры
//***************************************************************
18 BalBess
 
06.03.17
11:07
Да, критика, ошибки приветствуются )
Закон Брукера: Даже маленькая практика стоит большой теории.