Управляемые формы. Конфигурация самописная. Есть поле для ввода штрих-кода, для поиска бонусных карт. Необходимо сделать ввод только через сканирование карты , без возможности ввести штрих-код вручную. Заранее большое спасибо.
1. Поле ввода штрих-кода нужно сделать недоступным для пользователя. 2. Вам нужна сканеры USB или RS-232 (в COM-порт), но не в разъем клавиатуры (иначе данные не будут вводиться в поле ввода штрихкода). 3. Дальше копайте в следующем направлении: а) Процедура ВнешнееСобытие(Источник, Событие, Данные); б) внешние компоненты для работы со сканером, что-то типа scanopos.dll. Вкратце как-то так, если память не изменяет.
Alex78 @ Сегодня, 11:57 необходимо зарегистрироваться для просмотра ссылки
,
Сканер в USB порт в разрыв клавиатуры...
Цитата(Gazulo @ 20.12.17, 12:58) необходимо зарегистрироваться для просмотра ссылки
Сканер в USB порт в разрыв клавиатуры...
в смысле?
Alex78 @ Сегодня, 13:00 необходимо зарегистрироваться для просмотра ссылки
,
у меня сканер на USB порт подключаю в разрыв клавиатуры. Что можно сделать?
перевести в режим эмуляции СОМ порта + драйвер нужен.
Что значит "у меня сканер на USB порт подключаю в разрыв клавиатуры". Если не ошибаюсь, сканеры бывают либо в USB, либо в разрыв клавиатуры. Или есть гибридные варианты?
Alex78 @ Сегодня, 13:10 необходимо зарегистрироваться для просмотра ссылки
,
сканер USB, в настройках указано клавиатура...
Alex78 @ Сегодня, 13:10 необходимо зарегистрироваться для просмотра ссылки
,
в параметрах подключения Порт - Клавиатура
Не знаю, не работал с такими. Но могу сказать, что сканер должен общаться с компьютером через USB порт, если он будет посылать данные в клавиатуру, то, во-первых, смысла в этом нет, во-вторых, данные влетят в активное поле формы, а там какой-нибудь поиск по строке может начаться.
Перепрограммировать сканер.
То есть сканер нужно настроить так, чтобы: открыли, к примеру, текстовый документ, просканировали сканером штрихкод, а в документе ничего не появилось, иначе такая работа сканера будет аналогом ввода цифирек пользователем.
Alex78 @ Сегодня, 13:21
необходимо зарегистрироваться для просмотра ссылки
,
! |
| необходимо зарегистрироваться для просмотра ссылки: 8
|
Gazulo @ Сегодня, 13:35 необходимо зарегистрироваться для просмотра ссылки
,
С настройками сканера разбирайтесь сами, тут ничего не могу подсказать.
Gazulo @ Сегодня, 13:35 необходимо зарегистрироваться для просмотра ссылки
,
Втулите префикс, который не просто набрать с клавиатуры.
Либо в АвтоПодбор проверяйте длину введенной строки, если не соответствует длине штрихкода, очищайте (не спасет от копипасты).
sava1 @ Сегодня, 15:48 необходимо зарегистрироваться для просмотра ссылки
,
Сканера разные(Motorola,Metrologic.... и т.д.)
И у тех, и у других есть штрихкоды для перепрограммирования. Ищем штрихкод Эмуляция СОМ, считываем, качаем их-же драйверы ЮСБ-СОМ, - видим в диспетчере СОМ порты с названием сканеров, а в НИД устройствах - пропадают.
sava1 @ Вчера, 16:18 необходимо зарегистрироваться для просмотра ссылки
,
а в самой 1С никак, без дополнительных настроек сканера?
1Gazulo @ Сегодня, 9:29 необходимо зарегистрироваться для просмотра ссылки
,
это логика работы оборудования
Или через префиксы (14), но тут другой подход.
Если штрихкод вводится с помощью сканера, то, можно предположить, что он заполняется в текстовом поле за 1-2 секунды.
Если штрихкод вводится кем-то руками, то можно предположить, что это будет 2 и более секунды.
Если это принимается, то можно сделать следующим образом. В событии ПриИзменении поля с штрихкодом подключать обработчик ожидания, который вызовется через 2 секунды один раз, в котором проверять количество символов в этом поле. Если количество символов меньше, чем в реальном штрихкоде (13, если это EAN13), то с вероятностью 95% это человек вводит руками. В таком случае можно очищать поле, возможно, выдавая сообщение о том, что руками вводить нельзя. При этом надо учесть, что если обработчик ожидания уже подключен (взводить какой-то флаг), то подключать повторно его не надо. Так же нужно не забыть этот флаг обнулить по окончании этого обработчика.
Решение не идеальное, такой себе костыль, и возможны "осечки" (теоретически, если чел будет очень быстро набивать штрихкод) но при этом не надо играться с настройками сканера. Но по хорошему, конечно, правильное решение то, о чем пишут выше.
Vofka @ Сегодня, 9:48 необходимо зарегистрироваться для просмотра ссылки
,
а может сделать поле ввода недоступным, а курсор сфокусировать на этом поле приоткрытии формы...
Gazulo @ Сегодня, 9:56
необходимо зарегистрироваться для просмотра ссылки
,
мне кажется, если поле недоступно, то установить туда курсор не получится.
Если курсор устанавливается и если вас такой сценарий устраивает, то почему бы и нет. Вам решать
Никогда не было проблем со сканерами.
Ставите SCANOPOS (или АТОЛ последние бесплатные) и работаете как с внешним событием. Во всех типовых реализовано.
А если конфа самописная так вообще подключайте библиотеку торгового оборудования и закроете вопрос не только со сканерами.
Batchir @ Сегодня, 12:38 необходимо зарегистрироваться для просмотра ссылки
,
у меня не проблема в подключении сканера, почитайте выше в чем проблема и чем ваш комментарий здесь мне поможет?
Alex78 @ Вчера, 11:57 необходимо зарегистрироваться для просмотра ссылки
,
а как быть если не сканер, а считыватель магнитных карт??
Цитата(Gazulo @ 21.12.17, 14:30) необходимо зарегистрироваться для просмотра ссылки
у меня не проблема в подключении сканера, почитайте выше в чем проблема и чем ваш комментарий здесь мне поможет?
Цитата(Gazulo @ 21.12.17, 15:47) необходимо зарегистрироваться для просмотра ссылки
а как быть если не сканер, а считыватель магнитных карт??
Вам ведь нужно что бы при сканировании (считывании) карты система распознавала штрихкод и обрабатывала по своему алгоритму?
Для того что бы это сделать не нужны никакие курсоры и поля. Нужно заставить сканирование выполняться как внешнее событие.
Как это сделать? читать
необходимо зарегистрироваться для просмотра ссылки.
Batchir @ Сегодня, 15:56 необходимо зарегистрироваться для просмотра ссылки
,
Да можно пробывать и так, на для этого надо на каждом рабочем месте ставить драйвера SCANOPOS ?
Batchir @ Сегодня, 15:56
необходимо зарегистрироваться для просмотра ссылки
,
Написал обработку
Вот код
&НаКлиенте
Перем ОбъектДрайвера;
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить(Источник);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОшибки = "";
Попытка
ProgID = "AddIn.Scanner";
ПодключитьВнешнююКомпоненту(ProgID);
ОбъектДрайвера = Новый (ProgID);
Исключение
ОписаниеОшибки = "Невозможно подключить внешнюю компоненту";
КонецПопытки;
Если ОписаниеОшибки <> "" Тогда
Сообщить(ОписаниеОшибки);
КонецЕсли;
КонецПроцедуры
Но не срабатывает процедура ВнешнееСобытие
Gazulo @ Сегодня, 21:22
необходимо зарегистрироваться для просмотра ссылки
,
Получилось так:
ProgID = "AddIn.Scaner45";
ПодключитьВнешнююКомпоненту(ProgID);
ОбъектДрайвера = Новый (ProgID);
ОбъектДрайвера.DataEventEnabled=1;
ОбъектДрайвера.стараяВерсия=1;
ОбъектДрайвера.autoDisable=0;
ОбъектДрайвера.УстройствоВключеноПриCтарте = 1;
ОбъектДрайвера.УстройствоВключено = 1;
Но немного тормозит...
Gazulo @ Сегодня, 21:59
необходимо зарегистрироваться для просмотра ссылки
,
при создании драйвера где то 10 секунд и после того как просканировно карточку 10 секунд примерно..
Цитата(Gazulo @ 21.12.17, 22:20) необходимо зарегистрироваться для просмотра ссылки
при создании драйвера где то 10 секунд и после того как просканировно карточку 10 секунд примерно..
Потому что вы каждый раз подключаете внешнюю компоненту. Сделайте это один раз при запуске сеанса, и храните объект драйвера в какой-то глобально переменной на клиенте.
Цитата(Gazulo @ 21.12.17, 17:14) необходимо зарегистрироваться для просмотра ссылки
Да можно пробывать и так, на для этого надо на каждом рабочем месте ставить драйвера SCANOPOS ?
Так же как на каждом рабочем месте нужно поставить 1С. А если к компу подключен принтер, то нужно и драйвера на него поставить.
Вроде всё логично. Для нормальной работы девайса нужно поставить необходимое ПО.
Я бы всё таки скачал "1С:Библиотека подключаемого оборудования" нужной редакции и подсадил бы её в самописную конфу.
Там всё уже реализовано. Сиди только формочки настраивай на работу с ней.
Batchir @ Сегодня, 9:01 необходимо зарегистрироваться для просмотра ссылки
,
да но все сейчас работает и без драйверов SCANOPOS , а теперь значит мне на каждый комп его надо поставить, а это порядка 20-30 машин))). Я думал как то без этого справиться, хотел только доработать саму конфигурацию..
Цитата(Gazulo @ 22.12.17, 9:25) необходимо зарегистрироваться для просмотра ссылки
да но все сейчас работает и без драйверов SCANOPOS
Это работает через одно место, просто как ввод руками в любое поле формы.
С моей точки зрения это работает не корректно. Ведь не зря существуют все эти драйверы торгового оборудования и целая библиотека работы с ними?
20-30 машин это ж не проблема. Зайти удаленно и настроить.
Можно бесконечно долго встраивать различного рода костыли для того что бы как-то работало.
Потом появятся весы в магазинах - опять костыли? Появятся разные фискальные регистраторы - опять костыли?
Можно ведь подойти к вопросу с другой стороны и сделать всё по уму сразу. Решать в конечном счете Вам. Как бы я сделал - уже озвучил.
Batchir @ Сегодня, 11:04 необходимо зарегистрироваться для просмотра ссылки
,
Спасибо.
Я сам не программер, но была ситуация 1-в-1, плюс все сидят на RemoteApp. Перечитал кучу всего, говорил с тучей специалистов.
Заказал реализацию у человека, который сразу понял и начал предлагать тоокоые варианты. Вот что получилось.
&НаКлиенте
Процедура ТекстКАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
// Вставить содержимое обработчика.
СтандартнаяОбработка = ложь;
WSHShell = Новый COMОбъект("WScript.Shell");
WSHShell.SendKeys("{ENTER}");
КонецПроцедуры
&НаКлиенте
Процедура ТекстКОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
// Вставить содержимое обработчика.
Текст = СтрЗаменить(Текст,Символы.НПП,"");
htmlfile = Новый COMОбъект("htmlfile");
Буф = htmlfile.ParentWindow.ClipboardData.GetData("Text");
Если Текст = Буф Тогда
Текст="";
htmlfile.ParentWindow.ClipboardData.SetData("Text","");
КонецЕсли;
СтандартнаяОбработка = ложь;
//Сообщить("Окончание"+Текст+ "*Буф*"+Буф);
Если Не ЕстьСканКасса() Тогда
Закрыть(Истина);
КонецЕсли;
Если Не ПустаяСтрока(Текст) И КодКартыКлиента = Текст Тогда
Закрыть(Истина);
Иначе
Закрыть(Ложь);
КонецЕсли;
КонецПроцедуры
Плюс контроль на наличие сканера в кассе
&НаСервере
//БезКонтекста
Функция ЕстьСканКасса()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодерНаТочке.КассаККМ
|ИЗ
| РегистрСведений.ШтрихкодерНаТочке КАК ШтрихкодерНаТочке
|ГДЕ
| ШтрихкодерНаТочке.КассаККМ = &КассаККМ";
Запрос.УстановитьПараметр("КассаККМ", КассаККМ);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат(Истина)
КонецЕсли;
Возврат(Ложь);
КонецФункции
Все работает чудесно. Понятно, что ушлые всегда найдутся обойти, но пока на этом остановился.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.