Управляемые формы. Конфигурация самописная. Есть поле для ввода штрих-кода, для поиска бонусных карт. Необходимо сделать ввод только через сканирование карты , без возможности ввести штрих-код вручную. Заранее большое спасибо.
1. Поле ввода штрих-кода нужно сделать недоступным для пользователя. 2. Вам нужна сканеры USB или RS-232 (в COM-порт), но не в разъем клавиатуры (иначе данные не будут вводиться в поле ввода штрихкода). 3. Дальше копайте в следующем направлении: а) Процедура ВнешнееСобытие(Источник, Событие, Данные); б) внешние компоненты для работы со сканером, что-то типа scanopos.dll. Вкратце как-то так, если память не изменяет.
Alex78 @ Сегодня, 13:00
,
у меня сканер на USB порт подключаю в разрыв клавиатуры. Что можно сделать?
перевести в режим эмуляции СОМ порта + драйвер нужен.
Что значит "у меня сканер на USB порт подключаю в разрыв клавиатуры". Если не ошибаюсь, сканеры бывают либо в USB, либо в разрыв клавиатуры. Или есть гибридные варианты?
Alex78 @ Сегодня, 13:10
,
сканер USB, в настройках указано клавиатура...
Alex78 @ Сегодня, 13:10
,
в параметрах подключения Порт - Клавиатура
Не знаю, не работал с такими. Но могу сказать, что сканер должен общаться с компьютером через USB порт, если он будет посылать данные в клавиатуру, то, во-первых, смысла в этом нет, во-вторых, данные влетят в активное поле формы, а там какой-нибудь поиск по строке может начаться.
Перепрограммировать сканер.
То есть сканер нужно настроить так, чтобы: открыли, к примеру, текстовый документ, просканировали сканером штрихкод, а в документе ничего не появилось, иначе такая работа сканера будет аналогом ввода цифирек пользователем.
! | http://pro1c.org.ua/index.php?act=announce&id=2: 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
,
а как быть если не сканер, а считыватель магнитных карт??
Batchir @ Сегодня, 15:56
,
Да можно пробывать и так, на для этого надо на каждом рабочем месте ставить драйвера SCANOPOS ?
Batchir @ Сегодня, 15:56
,
Написал обработку
Вот код
&НаКлиенте
Перем ОбъектДрайвера;
&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Сообщить(Источник);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ОписаниеОшибки = "";
Попытка
ProgID = "AddIn.Scanner";
ПодключитьВнешнююКомпоненту(ProgID);
ОбъектДрайвера = Новый (ProgID);
Исключение
ОписаниеОшибки = "Невозможно подключить внешнюю компоненту";
КонецПопытки;
Если ОписаниеОшибки <> "" Тогда
Сообщить(ОписаниеОшибки);
КонецЕсли;
КонецПроцедуры
ProgID = "AddIn.Scaner45";
ПодключитьВнешнююКомпоненту(ProgID);
ОбъектДрайвера = Новый (ProgID);
ОбъектДрайвера.DataEventEnabled=1;
ОбъектДрайвера.стараяВерсия=1;
ОбъектДрайвера.autoDisable=0;
ОбъектДрайвера.УстройствоВключеноПриCтарте = 1;
ОбъектДрайвера.УстройствоВключено = 1;
Batchir @ Сегодня, 9:01
,
да но все сейчас работает и без драйверов SCANOPOS , а теперь значит мне на каждый комп его надо поставить, а это порядка 20-30 машин))). Я думал как то без этого справиться, хотел только доработать саму конфигурацию..
Я сам не программер, но была ситуация 1-в-1, плюс все сидят на RemoteApp. Перечитал кучу всего, говорил с тучей специалистов.
Заказал реализацию у человека, который сразу понял и начал предлагать тоокоые варианты. Вот что получилось.
&НаКлиенте
Процедура ТекстКАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
// Вставить содержимое обработчика.
СтандартнаяОбработка = ложь;
WSHShell = Новый COMОбъект("WScript.Shell");
WSHShell.SendKeys("{ENTER}");
КонецПроцедуры
&НаКлиенте
Процедура ТекстКОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
// Вставить содержимое обработчика.
Текст = СтрЗаменить(Текст,Символы.НПП,"");
htmlfile = Новый COMОбъект("htmlfile");
Буф = htmlfile.ParentWindow.ClipboardData.GetData("Text");
Если Текст = Буф Тогда
Текст="";
htmlfile.ParentWindow.ClipboardData.SetData("Text","");
КонецЕсли;
СтандартнаяОбработка = ложь;
//Сообщить("Окончание"+Текст+ "*Буф*"+Буф);
Если Не ЕстьСканКасса() Тогда
Закрыть(Истина);
КонецЕсли;
Если Не ПустаяСтрока(Текст) И КодКартыКлиента = Текст Тогда
Закрыть(Истина);
Иначе
Закрыть(Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
//БезКонтекста
Функция ЕстьСканКасса()
//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ШтрихкодерНаТочке.КассаККМ
|ИЗ
| РегистрСведений.ШтрихкодерНаТочке КАК ШтрихкодерНаТочке
|ГДЕ
| ШтрихкодерНаТочке.КассаККМ = &КассаККМ";
Запрос.УстановитьПараметр("КассаККМ", КассаККМ);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат(Истина)
КонецЕсли;
Возврат(Ложь);
КонецФункции
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua