|
определить нажатие CapsLock | ☑ | ||
---|---|---|---|---|
0
igel1969
22.05.20
✎
16:41
|
Здравствуйте!
Так и не нашлось нормального способа определить нажатие CapsLock? Здесь уже была ветка, но мне результат оттуда не подходит - на сервере терминала никто не будет устанавливать MS Office только для того, чтобы определить CapsLock. |
|||
1
igel1969
22.05.20
✎
16:41
|
(0) 1с 8.2
|
|||
2
igel1969
22.05.20
✎
16:52
|
Я пытался сделать так:
КЛ = ЭлементыФормы.Добавить(Тип("ПолеВвода"), "КапсЛок", Истина, ); КЛ.Видимость = Истина; КЛ.Доступность = Истина; КЛ.Ширина = 100; КЛ.Высота = 10; КЛ.Лево = 10; КЛ.Верх = 10; ЭтаФорма.ТекущийЭлемент = КЛ; Shell = Новый ComОбъект("WScript.Shell"); Shell.SendKeys("к"); Сообщить(КЛ.Значение); Но оно не успевает присвоить значение. Т.е. Shell.SendKeys отрабатывает позднее, чем в процедуре доходит до следующего оператора. Делать паузу в секунду? я считаю это маразм ((((( |
|||
3
Волшебник
22.05.20
✎
16:53
|
зачем всё это?
|
|||
4
igel1969
22.05.20
✎
16:54
|
я даже вот так попытался, но оно зависло:
КЛ = ЭлементыФормы.Добавить(Тип("ПолеВвода"), "КапсЛок", Истина, ); КЛ.Видимость = Истина; КЛ.Доступность = Истина; КЛ.Ширина = 100; КЛ.Высота = 10; КЛ.Лево = 10; КЛ.Верх = 10; ЭтаФорма.ТекущийЭлемент = КЛ; Shell = Новый ComОбъект("WScript.Shell"); Shell.SendKeys("к"); Пока СтрДлина(КЛ.Значение) < 1 Цикл КонецЦикла; Сообщить(КЛ.Значение); |
|||
5
igel1969
22.05.20
✎
16:54
|
(3) затем что сканер QR-кодов подключен как клавиатура. Устанавливать на каждую из 120 торговых точек сканер через драйвер 1С не советовать - не хочу.
|
|||
6
Волшебник
22.05.20
✎
16:55
|
метод IsKeyLocked(Keys.Capital) для CapsLock, Keys.Numlock для NumLock.
|
|||
7
igel1969
22.05.20
✎
16:56
|
отъеду на два часа, в больницу надо. извините кому не ответил
|
|||
8
igel1969
22.05.20
✎
16:57
|
(6) где такой метод?
|
|||
9
Волшебник
22.05.20
✎
16:58
|
(8) System.Windows.Forms.Control
|
|||
10
Волшебник
22.05.20
✎
17:02
|
||||
11
mistеr
22.05.20
✎
18:53
|
(5) А не проще поискать ШК в двух регистрах?
|
|||
12
Ненавижу 1С
гуру
22.05.20
✎
18:55
|
(7) ну еще не забудьте, не только КапсЛок, но и разные раскладки клавиатуры
|
|||
13
Garykom
гуру
22.05.20
✎
19:11
|
(0) ВК
|
|||
14
igel1969
22.05.20
✎
22:18
|
(12) знаете, разные раскладки проще. QR-код очень большой и вероятность что он будет состоять только из букв и спецсимволов очень мала, я не беру в учет эту вероятногсть. Я просто анализирую его на наличие русских букв - если хоть одна есть - то действую исходя из принципа что раскладка русская.
|
|||
15
igel1969
22.05.20
✎
22:20
|
(11) не ШК, а QR-код. Мне надо его передавать в Честный знак, а не для поиска в свой базе данных. И передавать надо его правильно. Так что перевод всей строки в большой или малый регистр, как в случае поиска, не подойдет. Нужно чтобы большие буквы были большими, а маленькие маленькими, а не наоборот, как если бы был включен CapsLock
|
|||
16
igel1969
22.05.20
✎
22:20
|
(10) Спасибо, завтра посмотрю.
|
|||
17
igel1969
22.05.20
✎
22:21
|
(13) а почему не ПЖ?
|
|||
18
NorthWind
23.05.20
✎
11:07
|
(17) В 1С нет штатных методов работы с клавиатурой на низком уровне. Поэтому задача достаточно непростая. Вам нужна внешняя компонента (ВК), которая будет написана на другом языке и будет это делать. Либо, если не хотите компоненту, то есть два типа костылей. Первый это VBS и тогда разбираться, почему у вас не пошло (4). Второй это применение .Net-классов в 1С, тогда искать статьи участника с ником Serginio1 и далее присобачивать то, что написано в (9) и (10).
|
|||
19
m1_1976
23.05.20
✎
11:21
|
(14) ну если проверка на русские буквы так - то и делайте проверку на КАПС также.
Есть в строке есть и маленькие и большие буквы! - то все ок. Если все буквы большие (или АНТИ КАПС ЛУК - все буквы маленькие /почти шутка/) - принимаем, что "Вероятность такой марки" = 0. И шлем всех юсеров переключать режим. |
|||
20
Волшебник
23.05.20
✎
11:28
|
(18) А может поставить драйвер и включить сканер нормально, через COM-порт?
|
|||
21
m1_1976
23.05.20
✎
11:34
|
(20) в (5) написано 120 точек - и "НЕ ХОЧУ"
|
|||
22
trdm
23.05.20
✎
11:36
|
Библиотека dynwrap.dll и вызов функций Win 32 API
................ Определение состояния NumLock Функция GetKeyState (библиотека user32) получает состояние заданной виртуальной клавиши на момент получения от неё последнего сообщения о вводе. GetKeyState (ByVal nVirtKey As Long) As Integer Возвращаемое значение: бит 0 равен 1 для клавиш-переключателей (CapsLock, NumLock и ScrollLock), если клавиша находится во включённом состоянии. Бит 15 равен 1, если клавиша нажата, и 0, если клавиша отпущена. Приведённый ниже скрипт включает NumLock, если он выключен. Если пользователь удерживает клавишу в момент запуска скрипта, скрипт не производит никаких действий. Const VK_NUMLOCK = &H90 Set Wrap = CreateObject("DynamicWrapper") Wrap.Register "USER32.DLL", "GetKeyState", "i=l", "f=s", "r=l" res = Wrap.GetKeyState(VK_NUMLOCK) If res = 0 Then Set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys "{NUMLOCK}" End If |
|||
23
Волшебник
23.05.20
✎
11:43
|
(21) да он лодырь...
|
|||
24
Garykom
гуру
23.05.20
✎
11:50
|
(22) Мне осень интересно как это взлетит в последних виндах
Судя по https://script-coding.com/dynwrap.html |
|||
25
Garykom
гуру
23.05.20
✎
11:51
|
(24)+ А мона http://catalog.mista.ru/public/267819/
|
|||
26
m1_1976
23.05.20
✎
12:03
|
(23) Не... у меня, например, 28 точек. Если надо все объехать. Вдруг. (бывает такое). Это по 2-3 часа на точку. Это 3-4 точки в день. Это 7 - 8 дней.
Для меня всегда это жуть - жуткая :) Понятно, что эта задача делается подключением к магазину по удаленке. Но даже тут если на каждый магазин по 30 минут. Это 60 часов. Это те же самые 7-8 дней!!! |
|||
27
Волшебник
23.05.20
✎
12:05
|
(26) Значит надо сначала автоматизировать админку, например, изучить политики.
|
|||
28
vde69
23.05.20
✎
12:17
|
(27) это-же работать надо, представляешь 28 точек и в каждой админка, вспотеть можно :)
|
|||
29
NorthWind
23.05.20
✎
12:19
|
(20) это разумнее всего. Но их бин не хочут.
|
|||
30
NorthWind
23.05.20
✎
12:33
|
(28) так бывает, когда принято изначально неверное решение... Есть такая русская поговорка - сама себя раба бьет, когда хреново жнет.
|
|||
31
Вафель
23.05.20
✎
17:16
|
храни значение в верхнем регистре
и при поиске к верхнему приводи |
|||
32
NorthWind
23.05.20
✎
17:19
|
(31) та ему не надо ничего никуда приводить. Ему это надо отдавать на чужой сервис, и важно чтобы последовательность ушла так, как она забита в коде. Иначе тот же криптохвост отвалится, не пройдет проверку.
|
|||
33
Вафель
23.05.20
✎
17:21
|
так вроде у марок регистр не имеет значения
|
|||
34
NorthWind
23.05.20
✎
21:32
|
(33) черт его знает, там законодательство быстрое как понос, но вот тут https://sbis.ru/help/data_exchange/marking/info/kod_mark описан пример для обуви
0104610028400094↔21HZkP7pqit46Yax1D↔91ffd0↔ Криптохвост содержит и строчные, и прописные буквы, и судя по его виду, приводить к прописным явно не стоит. |
|||
35
NorthWind
23.05.20
✎
21:35
|
человек вроде в (15) пишет про Честный знак, а не про ЕГАИС, поэтоу если имеются в виду акцизные марки, то это не вполне в тему.
|
|||
36
Garykom
гуру
23.05.20
✎
21:37
|
(34) Проблема что внутри DM маркировки нету идентификатора по которому можно было бы понято в какой раскладке и с каким регистром прилетело и переконвертить на 1С.
Было бы в начале нечто вроде "MD" тогда если прилетело "ьв" понятно что кириллица с капсом |
|||
37
Ёпрст
23.05.20
✎
21:51
|
(0)
Будь проще, по аналогии с акцизной маркой в алкашке, переводи все символы шк сам в верхний регистр и все символы в англ. расскладку, тип того:
|
|||
38
NorthWind
23.05.20
✎
22:02
|
(36) блин, я, может, ошибаюсь конечно, но смотря на то что в (34) мне кажется что там в этом хвосте юзаются полноценные 7 бит. Поэтому ни о каком приведении к регистру не может быть и речи. Их и так заставили сократить длину хвоста, значит, будут юзать биты по максимуму.
|
|||
39
Garykom
гуру
23.05.20
✎
22:02
|
(37) "3. Серийный номер
Байты [9:21] (13 байт) - Serial Serial содержит в себе цифры, заглавные и строчные буквы латинского алфавита. " Нельзя терять регистр символов он важен. Serial "AAAaaa.." <> "AAAAAA..." |
|||
40
NorthWind
23.05.20
✎
22:04
|
мне пока еще маркировка не очень нужна, но вы заставляете меня все это читать и изучать. Может, пригодится потом. Спасибо.
|
|||
41
Ёпрст
23.05.20
✎
22:06
|
(39) Да ? ну хотя бы расскладку переведёт :)
А так, тогда только активикс на форму и там что угодно ловить в нём |
|||
42
NorthWind
23.05.20
✎
22:12
|
(41) эмуляция COM-порта полностью спасет отца русской демократии. С этого надо ему было и начинать.
|
|||
43
Garykom
гуру
23.05.20
✎
22:13
|
(41) И раскладку не переведет потому что в DM по ECC 200 расширенная таблица ASCII
https://www.gs1.org/docs/barcodes/GS1_DataMatrix_Guideline.pdf Короче внутри нет кодовой страницы да можно символы 128-255 использовать для кириллицы или иной национальной кодировки. Только хз как система это трансформирует. Короче в DM корректно использовать только латиницу заглавные/строчные и некоторые дополнительные символы и все. |
|||
44
Garykom
гуру
23.05.20
✎
22:13
|
(42) Угу
|
|||
45
Ёпрст
23.05.20
✎
22:14
|
Не .. 8-ка еще сыровата.
То ли дело клюшки, там GetKeyState реализовано в 1cpp. :)) |
|||
46
Garykom
гуру
23.05.20
✎
22:14
|
(43)+ Ну или http://www.gostrf.com/normadata/1/4293829/4293829814.pdf читать
|
|||
47
Garykom
гуру
23.05.20
✎
22:16
|
(45) Идиоты те кто решил маркировку делать на DataMatrix вместо QR кодов.
Наравне с дебилами которые до этого разные PDF417 и Aztec Code для ЕГАИС и прочего внедряли. |
|||
48
Garykom
гуру
23.05.20
✎
22:17
|
(47)+ Имхо QR коды двухмерные лучше всего.
Достаточно было прописать нормальный стандарт кодирования и версионировать его с признаком. |
|||
49
Garykom
гуру
23.05.20
✎
22:18
|
(48)+ Типа если внутри начинается "MC01.." - маркировка версия 1 и т.д.
|
|||
50
Ёпрст
23.05.20
✎
22:18
|
(47) это точно, PDF417 это полный ПЭ
|
|||
51
Garykom
гуру
23.05.20
✎
22:18
|
(49)+ Хотя можно просто JSON внутрь писать кстати
|
|||
52
Ёпрст
23.05.20
✎
22:24
|
Раньше тоже все сканёры в ком пихал, последнее время, в топку, только в разрыв клавы. Умаешься объяснять товарищам на складе, почему сканер васи не работает если его просто воткнуть куда то еще.. Хотя, в некоторых местах без эмуляции ком не обойтись :( Там тупо сканер чуть ли не скотчем примотан, чтоб не выдрали :)
|
|||
53
spectre1978
23.05.20
✎
22:28
|
(52) эмуляция клавы в нулевых вылезла в основном из-за того что интенсивно юзался rdp, а там штатно просрочка компотов работала плохо. А так-то понятно, что компот лучше по всем параметрам...
|
|||
54
spectre1978
23.05.20
✎
22:29
|
* проброска
|
|||
55
Сияющий в темноте
24.05.20
✎
01:12
|
правильный сканер умеет понимать,что включен capslock и передавать символы корректно.
что касается rdp,то там проблема в том,что на клиенте и на сервере могут быть разные положения capslock,и вот как раз серверное положение сканер не знает. однако,сканер шлет правильные нажатия клавиш,которые можно получить через чтение потока сырого ввода. |
|||
56
Salimbek
24.05.20
✎
07:57
|
(0) Если самый простой способ - то:
1) У тебя где-то в базе хранятся номера марок (считаем, что по ППР - без криптохвоста) 2) Считываешь очередной ДМ - вырезаешь это самое начало без криптохвоста и ищешь в базе. Как нашел - то сравниваешь - есть ли нажатие Капс-а или нет. 3) Если понимаешь, что марка некорректна, то сбрасываешь Капс, очищаешь поле и говоришь пользователю прочитать марку заново. Минусы в том, что начальная часть может быть только из заглавных символов и тогда опознать нажатие строго не получится. Но если код сформирован по принципу (34), т.е. в коде есть 91ffd0 или что-то похожее строго в нижнем регистре, то можно ловить эту часть ДМ и по ней определять и раскладку и нажатие Капс |
|||
57
NorthWind
24.05.20
✎
09:08
|
(47) вообще-то DM является стандартом GS1 для таких целей. Поэтому марка получилась международная, насколько я понимаю, при чтении этого DM юнискановским приложением вроде iGepir вы получите информацию о производителе и прочих AI, которые там в нем присутствуют. Если бы вместо этого сделали QR-код, то это была бы местечковая марка, которая читалась бы только специально написанным для этого приложением, как, собственно, и имеет место с акцизками.
|
|||
58
Garykom
гуру
24.05.20
✎
10:22
|
(57) Уй там. GS1 да, но внутри свой формат со своими разделителями и данными - ниуя iGepir без доработки под местечковые придумки РФ не покажет.
Точно так же можно допилить iGepir под QR с придумками местечковыми. |
|||
59
NorthWind
24.05.20
✎
10:44
|
(58) хм... наши такие кривые? Я тут не поленился и нашел свою старую тему, вот: Маркировка лекарств по-турецки. Там есть то же самое, но турецкое, и фотку достаточно четкую я тогда сделал. Так проверил сейчас айгепиром - и все отлично читается...
|
|||
60
NorthWind
24.05.20
✎
10:47
|
AI21 у них тоже есть, но он существенно проще и состоит из одних цифр. Интересно, там эти штуки тоже за бабло выдаются или все-таки нет?
|
|||
61
igel1969
24.05.20
✎
22:36
|
Спасибо всем, дававшим советы. Основываясь на них я сделал следующее:
скачал и зарегистрировал на терминальном сервере компоненту dynwrap.dll Качал отсюда: https://www.script-coding.com/dynwrap.html версию для NT. Поскольку у меня 64-система, то пришлось ее (dll-ку) копировать в папку C:\Windows\SysWOW64, а в папке system32 она регистрироваться не хотела. ну, запустил командную строку от имени администратора, набрал regsvr32 C:\Windows\SysWOW64\dynwrap.dll Это я так подробно даю инструкцию, чтобы другим не мучаться. Процедура ОтключитьКапсЛок() Врап = Новый COMОбъект("DynamicWrapper"); Врап.Register("USER32.DLL", "GetKeyState", "i=l", "f=s", "r=l"); res = Врап.GetKeyState(20); Если res = 1 тогда WshShell = Новый COMОбъект("WScript.Shell"); WshShell.SendKeys("{CAPSLOCK}"); КонецЕсли; КонецПроцедуры Обратите внимание, что код клавишы КапсЛок равен 20, это я нагуглил сам. А если бы речь шла о НумЛоке, то код был бы 144. |
|||
62
Сияющий в темноте
24.05.20
✎
22:46
|
еще полезно не забыть,что в терминале встречается западание shift,что дает похожий на CapsLock эффект,но простым способом не обнаруживается.
|
|||
63
igel1969
24.05.20
✎
22:47
|
Теперь по поводу того что я лентяй:
Во-первых, действительно, лень везде ставить драйвера, настраивать их правильно. 120 точек - это же не просто 120 раз поставить, а не забывать ставить каждый раз пир открытии новой точки, а это почти каждую неделю (я не говорю что количество точек стремительно растет, какие-то и закрываются). Вот как это происходит с кассой - надо поставить драйвер на локальный компьютер, настроить драйвер на RDP под данным пользователем, настроить драйвер в 1С для данного пользователя. Видите - три кутерьмы для одной точки? Теперь - точка работает по RDP через мобильный (флешечный) интернет. Как только у точки прерывается связь (а причин для обрыва связи тыщща - от вины мобильного оператора, до того что продавщица пузом флешку сковырнула), так сразу связь с кассой через все эти драйвера теряется. Ладно, я написал процедурку и повесил ее на горячей клавише для воссоединения связи с кассой. Ладно - касса вещь супернужная и когда она не печатает чек - то продавцу сразу понятно, что что-то неисправно и первое что она сделает (если есть мозги, а это процентов у 20 из всех продавщиц) это попытается восстановить связь с помощью моей горячей клавиши. А теперь представим что связь потерялась со сканером. Это мне ще еодни гемморой, в два раза больше звонков? А некоторые продавщицы просто забьют на сканирование, а потом через неделю скажут на голубом глазу: "а что, сканер же не работает" В общем, мне эти танцы с драйверами в 1С нафиг не нужны. Я уж лучше через разрыв клавиатуры все запрограммирую. Поверьте - так удобнее. Тут большинство программеров в вакууме сидит, в своих программистских фирмочках коды кропаете, а жизни реальной не знаете. Каждый раз когда на заре внедрения 1С (6 лет назад) пыталсь таких 1С-ников приглашать из всяких контор типа 1СРарус и им подобных - ни бе, ни ме, как бараны, ничего не знают как торговля устроена, никакого толка от них не было ни разу. |
|||
64
igel1969
24.05.20
✎
22:48
|
(62) не сталкивался с подобным
|
|||
65
spectre1978
25.05.20
✎
05:53
|
(63) сейчас вам скажут что полный онлайн для магазинов дрянь дело и надо было делать автономные армы кассиров и обмен.
|
|||
66
Комрад1
25.05.20
✎
06:49
|
(65) Сам поймет, когда ещё сотня новых магазинов откроется.
|
|||
67
igel1969
25.05.20
✎
07:22
|
(65) (66) Да, да, 120 обменов и следить чтобы все вовремя обменялись. Это я уже проходил в другой фирме 7 лет назад с 28 магазинами - пришлось брать специального человека на обмены, чтобы следил и помогал продавцам. сами они даже комп выключить неспособны зачастую. не то что продавцы, даже кураторы торговых точек (а они по сути должны быть толковыми) - когда торговая точка закрывается, возвращают оборудование, а там как правило всегда незакрытая кассовая смена. и хоть кол о башку теши им. также и обмениваться будут - через раз, только когда им это надо (товар пришел). а уж вечером то точно - все домой спешать, не дожидаются когда компьютер сам завершит работу, сразу из розетки выдергивают. так что автоматический обмен тоже не катит. я 17 лет в торговле, знаю о чем говорю. каждое утро (и сегодня не исключение) кто-нибудь из продавщиц звонит мне и возмущается - почему не открывается кассовая смена, ведь она вчера сняла отчет. и всегда оказывается что это был только Х-отчет. Цифры же есть, а больше ей и не надо.
|
|||
68
igel1969
25.05.20
✎
07:25
|
(65) и в конце-концов это требование руководства. когда я 7 лет назад пришел в эту фирму - было всего 12 точек (большей частью оптовых) и начальство привыкло иметь информацию о продажах ежесекундно, в режиме онлайн. И не может заставить себя отказаться от этого, хотя сейчас розничных точек больше, чем оптовых, а схема в 1С остается оптовая - реализация товаров и услуг, ПКО.
|
|||
69
NorthWind
25.05.20
✎
07:42
|
(67) кол тесать не надо, надо чтобы был регламент, где прописано что закрытие смены - обязанность продавца, незакрытая смена - определенный минус из премиальной части ЗП. Оговаривается при приеме на работу, предупреждается. Весь подобный геморрой - он всегда из-за того, что непонятно, кто должен выполнять ту или иную работу. Начальство доплачивать не хочет, поэтому норовит "вы как-нибудь так"... В такой ситуации надо смело обострять, писать пояснения, повышать голос, требовать, чтобы была определенность.
Бывает, конечно, и так, что руководство и сотрудники ИТшников вообще не слышат... если это ваш случай, тогда жаль что вы себя так поставили. Можно посоветовать только уволиться. |
|||
70
Комрад1
25.05.20
✎
08:32
|
(67) :)) Ты просто не понимаешь, что подходы, которые работают на 100 точках, на 300+ точках работать уже не будут.
|
|||
71
igel1969
25.05.20
✎
08:36
|
(24) Windows Server 2008 R2 x 64 - полет нормальный. Разумеется, скачивал версию для NT и копировал ее в папку C:\Windows\SysWOW64,
а не в папку system32 |
|||
72
Garykom
гуру
25.05.20
✎
08:43
|
(67) Обмены делать принудительно однократно при включении, и так же принудительно однократно закрывать смену утром если она не была закрыта вечером.
С обменами нет особой проблемы, да RDP удобней для админа но сейчас есть тонкие клиенты которые даже лучше. |
|||
73
Garykom
гуру
25.05.20
✎
08:45
|
(72)+ И кстати всю установку требуемых дров можно делать из 1С, с проверкой перед этим стоят ли.
В силент моде даже обычно можно. |
|||
74
Ёпрст
25.05.20
✎
08:52
|
(61) GetKeyState("CapsLock") не работает ? Или другая текстовая константа.. всё лучше, чем 20
|
|||
75
igel1969
25.05.20
✎
09:13
|
(74) GetKeyState("{CapsLock}") попробовал - не работает, а без фигурных скобок не пробовал.
там же в примере из (22) видно, что цифровое значение. |
|||
76
NorthWind
25.05.20
✎
09:46
|
(74)
Перем CapsLockCode; ... CapsLockCode = 20; ... GetKeyState (CapsLock); Все же WinAPI это не 1С, где можно на голубом глазу написать что-нибудь типа "Да+Нет" в качестве параметра. И то это скорее относится к семерке, в восьмерке тоже начали делать по-человечески. |
|||
77
NorthWind
25.05.20
✎
09:46
|
* GetKeyState (CapsLockCode);
|
|||
78
dezss
25.05.20
✎
09:58
|
(69) +100
|
|||
79
m1_1976
25.05.20
✎
11:37
|
(75) посмотри мое в (19)... топором по яйцам, но в 100% случаев работать будет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |