Подключение сканера штрих-кодов в 1С:Бухгалтерии 3.0

Подключение сканера штрих-кодов в Бухгалтерии ред. 3.

Нам потребуется:
1. Бухгалтерия 3.0 (3.0.25.7)
2. Управление торговлей ред. 11 (11.1.2.9)
3. Установленный драйвер сканера.

Будем вносить изменения таким образом, чтобы работали все 3 типа сканеров, которые есть в УТ.
Можно конечно обойтись простым подключением через создание COM-объекта, но мы лёгких путей не ищем и будем делать всё как и принято в 1С, т.е. через жопу с задействованием внутренних универсальных механизмов.

Итак, чтобы подключить сканер нужно:
1. В общем модуле МенеджерОборудованияКлиентСерверПереопределяемый поправить функцию ПолучитьДоступныеТипыОборудования():

Функция ПолучитьДоступныеТипыОборудования() Экспорт

СписокОборудования = Новый Массив;
// Фискальные регистраторы
СписокОборудования.Добавить(ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.ФискальныйРегистратор"));
// Конец Фискальные регистраторы
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VladC# 01.10.2013
СписокОборудования.Добавить(ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.СканерШтрихкода"));
Возврат СписокОборудования;

КонецФункции

2. В том же модуле поправить функциюПолучитьОбработчикаДрайвера, т.е. нужно добавить строки относящиеся к санеру:

Функция ПолучитьОбработчикаДрайвера(ОбработчикДрайвера) Экспорт

Результат = Неопределено;
// Вызов метода выполнения команды у обработчика
Если ОбработчикДрайвера <> Неопределено Тогда

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VladC# 29.09.2013
// Сканеры штрихкода
Если ОбработчикДрайвера = ПредопределенноеЗначение("Перечисление.ОбработчикиДрайверовПодключаемогоОборудования.Обработчик1ССканерыШтрихкода") Тогда
Результат = ПодключаемоеОборудование1ССканерыШтрихкодаКлиент;
ИначеЕсли ОбработчикДрайвера = ПредопределенноеЗначение("Перечисление.ОбработчикиДрайверовПодключаемогоОборудования.ОбработчикСканкодСканерыШтрихкода") Тогда
Результат = ПодключаемоеОборудованиеСканкодСканерыШтрихкодаКлиент;
ИначеЕсли ОбработчикДрайвера = ПредопределенноеЗначение("Перечисление.ОбработчикиДрайверовПодключаемогоОборудования.ОбработчикАтолСканерыШтрихкода") Тогда
Результат = ПодключаемоеОборудованиеАтолСканерыШтрихкодаКлиент;
КонецЕсли;

...

3. Из конфигурации УТ ред. 11 скопировать три общих модуля прямо из дерева конфигурации:
— ПодключаемоеОборудованиеАтолСканерыШтрихкодаКлиент
— ПодключаемоеОборудование1ССканерыШтрихкодаКлиент
— ПодключаемоеОборудованиеСканкодСканерыШтрихкодаКлиент

4. Из конфигурации УТ ред. 11 скопировать три общих формы настроек, тоже прямо из дерева конфигурации:
— ФормаНастройкиАтолСканерыШтрихкода
— ФормаНастройки1ССканерыШтрихкода
— ФормаНастройкиСканкодСканерыШтрихкода

5. Из конфигурации УТ ред. 11 скопировать иконку для отображения на форме настроек торгового оборудования (находится в общих картинках):
— ПодключаемоеОборудованиеСканерШтрихкода32

6. Создадим общий модуль, я назвал влОбщийМодуль (использование только на клиенте управляемого приложения), рекомендую сделать имя пока именно такое, потом сможете изменить.
В этом общем модуле нужно добавить процедуру:

Процедура ПодключитьСканер() Экспорт
Массив=МенеджерОборудованияСервер.ПолучитьСписокОборудования(,,МенеджерОборудованияСервер.ПолучитьРабочееМестоКлиента());
Для Каждого Стр из Массив Цикл
Если Стр.ТипОборудования=ПредопределенноеЗначение("Перечисление.ТипыПодключаемогоОборудования.СканерШтрихкода") Тогда
Идентификатор = Стр.Ссылка;

ПараметрыУстройства = МенеджерОборудованияКлиентПовтИсп.ПолучитьПараметрыУстройства(Идентификатор);

МенеджерОборудованияКлиент.ВыполнитьДополнительнуюКоманду("ПолучитьВерсиюДрайвера",,,Идентификатор,ПараметрыУстройства);
КонецЕсли;
КонецЦикла;

КонецПроцедуры

7. В модуле управляемого приложения, в процедуре ПриНачалеРаботыСистемы() добавить вызов ранее созданной процедуры:

Процедура ПриНачалеРаботыСистемы()

// СтандартныеПодсистемы
СтандартныеПодсистемыКлиент.ДействияПриНачалеРаботыСистемы();
// Конец СтандартныеПодсистемы

//РаботаСВнешнимОборудованием
МенеджерОборудованияКлиент.ПриНачалеРаботыСистемы();
//Конец РаботаСВнешнимОборудованием
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ VladC# 02.10.2013
влОбщийМодуль.ПодключитьСканер();

КонецПроцедуры

8. Все новые объекты конфигурации добавить в подсистему ПодключаемоеОборудование.

9. Для проверки, в справочнике номенклатуры например, создайте обработчик события формы элемента ВнешнееСобытие:

&НаКлиенте
Процедура ВнешнееСобытие(Источник, Событие, Данные)
Если Источник="BarCodeScaner" и Событие="BarCodeValue" Тогда
Сообщить(Данные);
КонецЕсли;
КонецПроцедуры

10. Сохраняемся, запускаем Бухгалтерию в пользовательском режиме. Идём в Администрирование -> Подключаемое оборудование.

11. Если рабочее место не выбрано, то выберите, затем слева щёлкните Сканеры штрихкода.

12. Добавьте сканер «АТОЛ: Сканеры штрихкода» (я отлаживал именно этот тип сканеров, можете выбрать свой) и установите в
нём галочку «Устройство используется».

13. Нажмите «Записать и закрыть», а потом нажмите «Настроить» и введите там необходимые настройки, порт, суффикс и т.д.,
настройки у всех разные, поэтому свои здесь приводить не буду, дабы не вводить в заблуждение.

14. Перейдите в справочник Номенклатуры, откройте форму элемента и сосканируйте любой штрихкод, должно появиться сообщение с
этим штрихкодом.

Ну вроде всё, ничего не забыл, надеюсь кому-нибудь поможет.

60 Comments

  1. lihomanov

    Добрый день!

    Очень полезная инструкция!

    Все пункты выполнил в тесте драйвера штрих-код сканирует, но в справочнике номенклатуре нет, что сделал не правильно?

    Reply
  2. VladC#

    Спасибо, а настройки сканера в 1С такие же как в тесте драйвера? Подозреваю что у вас суффиксы не установлены.

    Reply
  3. lihomanov

    Можно немного по подробнее, опыта с штрих-кодами нет!

    при сканировании штрих-код появляется в тесте оборудование

    Reply
  4. VladC#

    Покажите скриншот с отображенным штрихкодом в тесте драйвера.

    Reply
  5. VladC#

    в суффикс нужно добавить (10), т.е. там должно быть (13) CR, (10) LF

    Reply
  6. lihomanov

    Добрый день!

    Подскажите где добавить суффикс ?

    Reply
  7. lihomanov

    Вот у меня параметры!

    Reply
  8. VladC#

    вот именно из этого списка, вы правильно открыли, когда выберете (10) LF, он у вас добавится к существующему и получится строка «(13) CR, (10) LF»

    Reply
  9. lihomanov

    Добрый день! Не работает! хотел спросить если штрих-код сканировать в блокноте он должен сканировать?

    *Сканер Voyager 1250g USB

    *Windows 7 Home

    *Настройки сканера

    Если подключить через USB то сканер работает как клавиатура, считывает в блокнот

    Если подключен через USB настроен эмулятор COM работает как сканер, но в блокнот не считывает

    *Тестирование

    Тестировал на УТ 10.3 все работает ок.

    Reply
  10. VladC#

    (10) lihomanov, в блокноте сканер будет считывать только если подключен как клавиатура, через COM не будет. Сравните свои настройки сканера в УТ с настройками в бухгалтерии.

    Reply
  11. lihomanov

    Пробовал

    1. Разные драйвера

    2. Настройки заново

    Мне кажется Процедура ВнешнееСобытие() не срабатывает!, что еще можно проверить!

    Reply
  12. lihomanov

    Конфа: Бухгалтерия предприятия, редакция 3.0 (3.0.24.12)

    Платформа: 1С:Предприятие 8.3 (8.3.3.721)

    Reply
  13. VladC#

    Про 8.3 не знаю, не пробовал, да и сейчас уже нет возможности т.к. сканер отдал, может стоит пока попробовать на 8.2, я на 8.2 отлаживал? Как была создана процедура ВнешнееСобытие(), это точно обработчик события формы «ВнешнееСобытие», а не просто вручную созданная процедура?

    Reply
  14. lihomanov

    Попробовал на:

    Платформа: 1С:Предприятие 8.2 (8.2.19.68)

    Конфа: Бухгалтерия предприятия, редакция 3.0 (3.0.27.7)

    Reply
  15. lihomanov

    хотел уточнить, а какой драйвер надо было ставить?

    Reply
  16. VladC#

    (16) lihomanov, я на атоловском отлаживал.

    Reply
  17. lihomanov

    Добрый день! Попробовал на Атоловском драйвере, не чего не выходит!

    Менял режим запуска: Тонкий клиент, Толстый клиент

    Пробовал разные платформы, релизы, драйвера, компьютеры, но событие не срабатывает!!!

    Reply
  18. VladC#

    вот на этот вопрос ответьте: «Как была создана процедура ВнешнееСобытие(), это точно обработчик события формы «ВнешнееСобытие», а не просто вручную созданная процедура?»

    Reply
  19. lihomanov

    уже описывал выше, файл прикрепляю

    Reply
  20. VladC#

    посмотрел, сделано всё верно, проблема явно в настройках сканера в 1С, можно получить скриншот окна атоловского теста драйвера сканера с работающими настркойами и скриншот с настройками из 1с?

    Reply
  21. lihomanov

    Добрый день! Вот данные!

    Reply
  22. lihomanov

    Попробовал другую версию драйвера Атол

    Reply
  23. lihomanov

    Еще

    Reply
  24. VladC#

    Похоже что настройки в порядке, НО я увидел у вас ещё 2 других сканера, удалите их, на одном порту может сидеть только одно устройство, несколько сканеров в программе могут сидеть только в разных портах, либо они должны быть клавиатурные, так что лучше удалите, оставьте только атоловский.

    Reply
  25. lihomanov

    не помогло, удалил сканеры,оставил один

    Reply
  26. lihomanov

    у меня сканер штрих-кодов Voyager 1250g USB в режиме эмуляции COM-порта (USB Serial), настроен управляющий штрих-код «USB Serial» (TERMID130)

    Reply
  27. lihomanov

    На УТ 10.3 работает замечательно!

    Reply
  28. VladC#

    сделайте скриншот настроек, которые у вас находятся в меню Сервис->Параметры, вкладка Драйвер устройств ввода

    Reply
  29. lihomanov

    не понял, можно поточнее?

    Reply
  30. VladC#

    меню Сервис -> Параметры

    Reply
  31. VladC#

    вот

    Reply
  32. lihomanov

    открываю, ошибка

    Reply
  33. VladC#

    у меня платформа 1С:Предприятие 8.2 (8.2.19.68)

    драйвер сканера 6.5.2.399

    Может стоит платформу переустановить или драйвер другой взять, ещё может помочь копирование Scaner1C.dll из каталога атол в каталог bin платформы 1С.

    Reply
  34. lihomanov

    Добрый день! Не могу исправить данную ошибку

    Reply
  35. VladC#

    версия драйвера и платформы как у меня?

    Reply
  36. ToJIuK

    А как же быть потом с обновлениями? при каждом обновлении придется такое проделывать? Или можно по хитрому обновиться?

    Reply
  37. VladC#

    (37) ToJIuK, изменения, в основном, вносятся в те места конфигурации, которые меняются достаточно редко, поэтому их можно просто исключать из обновления и всё. Исключением будут только модули форм документов, да и то там изменений то совсем немного, лично мне это никак не мешает, обновляю регулярно и всё в порядке.

    Reply
  38. ToJIuK

    А вот сам Штрих код лучше добавить через добавление реквизита в номенклатуру или задействовать регистр ?

    Reply
  39. VladC#

    (39) ToJIuK, однозначно регистр

    Reply
  40. ToJIuK

    Тут недавно набрался смелости и начал делать все по плану.

    взял Бух 3.0.29.8 (Знаю что отличается от описанной, но сказали что «изменения, в основном, вносятся в те места конфигурации, которые меняются достаточно редко, поэтому их можно просто исключать из обновления и всё»)

    Ут 11.1.2.9

    Но сразу же столкнулся с проблемами:

    1)пункт В общем модуле МенеджерОборудованияКлиентСерверПереопределяемый поправить функцию ПолучитьДоступныеТипыОборудования()

    В ред.3.0.29.8 нет такого общего модуля, есть 2 разных МенеджерОборудованияВызовСервераПереопределяемый и МенеджерОборудованияКлиентПереопределяемый. При помощи поиска на названию функций нашел куда добавить 1 и 2 пункт. вроде все добавил запустилось . в меню Сервис-Параметр появилась вкладка . там все настроено как положено.

    2) В обработку формы Элемента добавил как написано , но при сканировании она не отрабатывает. А просто набирает символы как при вводе с клавиатуры.

    Что не так ?

    Reply
  41. ToJIuK

    Кое как добился чтобы срабатывала Процедура «Внешнее событие» , но даже она отрабатывает не корректно , Вместо Цифр штрихкода , в данные попадает номер сканирования (т.е если отсканировал ШК в первый раз то выходит «1», если 2-й ,то «2» и тд). Драйвер менял , что то ничего не помогает . Не могу ни как разобраться. Ни кто с таким не сталкивался?

    Reply
  42. VladC#

    (42) ToJIuK, в тесте драйвера всё работает?

    Reply
  43. ToJIuK

    (43) Да в тесте драйвера все нормально. Результата такой какой надо.

    И ещё посмотрел как обрабатывается работа со сканером УТ 11! Там нет Процедуры «внешнееСобытие». Все делается через другую процедуру.

    Reply
  44. ToJIuK

    Единственное что получилось Это примерно вот так

    В модуле обычного приложения

    Перем Scaner Экспорт;  //
    
    …
    
    Процедура ПриЗавершенииРаботыСистемы()
    
    // Показ финальной дополнительной информации
    Форма = Обработки.ДополнительнаяИнформация.Создать();
    Форма.ВыполнитьДействие();
    //
    
    Scaner = 0; //
    
    КонецПроцедуры
    
    …
    
    Процедура ПриНачалеРаботыСистемы()
    …
    //
    Попытка
    ЗагрузитьВнешнююКомпоненту(«Scaner1C.DLL»);
    //Сообщить(«Внешняя компонента сканера штрих-кода успешно загружена»);
    Попытка
    Scaner = Новый(«AddIn.Scaner45»);
    Scaner.OldVersion = 0;
    Scaner.AutoDisable = 1;
    Scaner.DataEventEnabled = 1;
    Исключение
    Сообщить(«Объект не найден»);
    КонецПопытки;
    Исключение
    Сообщить(«Внешняя компонента сканера штрих-кода — Scaner1C.DLL не найдена»);
    КонецПопытки;
    //
    КонецПроцедуры // ПриНачалеРаботыСистемы()
    …
    
    Функция ОбработкаДанныхСканера(Источник,Событие,Данные) Экспорт
    Результат = «»;
    Если Scaner.OldVersion <> 0 Тогда
    Результат = Данные;
    Иначе
    Результат = Scaner.ScanData;
    КонецЕсли;
    Scaner.DataEventEnabled = 1;
    Возврат СокрЛП(Результат);
    КонецФункции
    //
    

    Показать

    В документе (Справочнике)

    Процедура ВнешнееСобытие(Источник, Событие, Данные)
    
    Если Источник = «BarCodeScaner» Тогда
    ШК = ОбработкаДанныхСканера(Источник,Событие,Данные);
    НайденаНоменклатура = Справочники.Номенклатура.НайтиПоРеквизиту(«ХА_ШтрихКод»,ШК);
    Если НайденаНоменклатура.Пустая() Тогда
    Возврат;
    КонецЕсли;
    ЭлементыФормы.Продукция.ДобавитьСтроку();
    ЭлементыФормы.Продукция.ТекущиеДанные.Номенклатура = НайденаНоменклатура;
    ЭлементыФормы.Продукция.ТекущиеДанные.Количество = 1;
    ПродукцияПродукцияПриИзменении(«»);
    КонецЕсли;
    
    КонецПроцедуры // ВнешнееСобытие()
    

    Показать

    Но такое работает только в Обычном приложении . В управляемых формах почему то не работает, хотя я их и в модуль управляемого приложения засунул. но процедура «ВнешнееСобытие» не отрабатывает.

    Reply
  45. ducks01

    (45) ToJIuK, попробуйте добавить реквизиты формы:

    • ИспользоватьПодключаемоеОборудование — булево
    • ПоддерживаемыеТипыПодключаемогоОборудования — строка

    а также следующие процедуры в модуль формы:

    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ИспользоватьПодключаемоеОборудование = Истина;
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ПриОткрытии(Отказ)
    МенеджерОборудованияКлиент.ПодключитьОборудованиеПриОткрытииФормы(ЭтаФорма, «СканерШтрихкода»);
    КонецПроцедуры
    

    Показать

    Тогда сработает внешнее событие:

    &НаКлиенте
    Процедура ВнешнееСобытие(Источник, Событие, Данные)
    Если Источник=»СканерШтрихкода» и Событие=»ПолученШтрихкод» Тогда
    Сообщить(Данные);
    КонецЕсли;
    КонецПроцедуры
    

    Правда я использовал драйвер ScanOPOS

    Спасибо автору за эту статью!

    Reply
  46. piton66

    Ребята . кто пользовался дешевыми китайскими USB сканерами? Как они в работе и подключении к 1С? Проблем с ними нет?

    Reply
  47. ToJIuK

    (47) piton66, Если подключать их в режиме эмуляции клавиатуры с Атоловским драйвером(Старым) проблем не должно быть. Так как там все одинаково. А вот если пробовать подключить в режиме эмуляции COM порта то могут быть проблемы с драйверами на USB-COM.

    Reply
  48. Wall30

    (46) ducks01, да еще добавить Картинки «ПодключаемоеОборудованиеСканерШтрихкода32″(16)

    Reply
  49. Гость

    Добрый день БП 3.0.36.15

    Нифига не пойму, сделал все по описанию (с учетом уже текущей конфигурации). Но!

    Подключаю сканер, но реквизит «Драйвер оборудования» пустой и не дает выбрать!

    Установил под правами админа драйвер 1С и атоловский драйвер. Перенес драйверы и в папку Bin 1С, все равно пусто.

    Reply
  50. imispb

    На самом деле, можно сделать всё намного проще. У компании 1С есть Библиотека Подключаемого Оборудования(БПО). Заходим в бухгалтерию, смотрим в общем модуле МенеджерОборудованияВызовСервера в функции ВерсияБиблиотеки() версию БПО. Качаем с сайта 1С, где качаем обновления, такую же версию БПО или более новую. Берем её и просто объединяем с нашей конфигурацией по прилагаемой инструкции. В конце надо не забыть, запустить процедуру ОбновитьПоставляемыеДрайвера(), в инструкции это есть. Таким образом, я очень быстро прописал сканер в бухг. 3.0.

    Reply
  51. imispb

    (50) Гость,

    реквизит «Драйвер оборудования» пустой и не дает выбрать!

    Надо запустить процедуру МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьПоставляемыеДрайвера(), я это сделал из внешней обработки, 1с рекомендует добавить данную строчку в процедуру запускаемую один раз при старте системы.

    Reply
  52. piton66

    Короче в режиме подключение в разрыв клавиатуры самый простой метод. Нужно только сам сканер настроить. ну чтобы нужную последовательность нажатий клавиш выдавал.

    Reply
  53. olbu

    (42) ToJIuK, Решили почему выводятся цифры 1,2,3…? Если — да, то может подскажете как это победить?

    Reply
  54. Galym77

    Распечатав ШК на этикетке через принтер печати шк сканер считывает не все штрих-кода при этом использую три вида сканера Линейнный Ханевел1250, Имидживый Моторола DS2208 и 2D сканер который считывает даже с экранов. Принтер модель ZEBRA 420. При этом сформированные и распечатанные эти шк из под УТ, Розницы эти сканера считывают на УРА. Куда копать подскажите

    Reply
  55. wmonref1

    Помогите пожалуйста:

    Установил атоловские драйвера, платформа 8.3.13.1513, обычные формы.

    В Сервис — Параметры отсутствует вкладка Драйвер. Как жить дальше?

    Reply
  56. VladC#

    (56) На обычных формах настройка драйверов торгового оборудования обычно осуществляется в меню Сервис -> Торговое оборудование -> Подключение и настройка торгового оборудования.

    Reply
  57. wmonref1

    (57) Дело в том что при загрузке Scaner1C.dll в меню Сервис — Параметры должна появится дополнительная вкладка для настройки ТО. Я думаю что дело в платформе, так как на других платформах (пр. 8.3.8) эта вкладка есть…

    Reply
  58. VladC#

    (58) Разрядность платформы и драйвера совпадает?

    Reply
  59. VladC#

    (58) просто установки драйвера недостаточно для появления вкладки, нужно чтобы он в 1с был подключен.

    Reply
  60. wmonref1

    (59)Платформа х64… Может в этом и проблема???

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *