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