Подключение сканера штрих-кодов в 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 не будет опубликован. Обязательные поля помечены *