gifts2017

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

Опубликовал Владислав Лисовенко (VladC#) в раздел Оборудование - Сканер штрих-кода

Подключение сканера штрих-кодов в Бухгалтерии ред. 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. Перейдите в справочник Номенклатуры, откройте форму элемента и сосканируйте любой штрихкод, должно появиться сообщение с
этим штрихкодом.

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

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Лихоманов (lihomanov) 20.11.13 16:32
Добрый день!
Очень полезная инструкция!

Все пункты выполнил в тесте драйвера штрих-код сканирует, но в справочнике номенклатуре нет, что сделал не правильно?
2. Владислав Лисовенко (VladC#) 20.11.13 17:13
Спасибо, а настройки сканера в 1С такие же как в тесте драйвера? Подозреваю что у вас суффиксы не установлены.
3. Андрей Лихоманов (lihomanov) 20.11.13 17:31
Можно немного по подробнее, опыта с штрих-кодами нет!
при сканировании штрих-код появляется в тесте оборудование
Прикрепленные файлы:
4. Владислав Лисовенко (VladC#) 20.11.13 18:15
Покажите скриншот с отображенным штрихкодом в тесте драйвера.
5. Андрей Лихоманов (lihomanov) 21.11.13 05:23
Вот что получилось!
Прикрепленные файлы:
6. Владислав Лисовенко (VladC#) 21.11.13 10:13
в суффикс нужно добавить (10), т.е. там должно быть (13) CR, (10) LF
7. Андрей Лихоманов (lihomanov) 21.11.13 10:54
Добрый день!
Подскажите где добавить суффикс ?
8. Андрей Лихоманов (lihomanov) 21.11.13 11:15
Вот у меня параметры!
Прикрепленные файлы:
9. Владислав Лисовенко (VladC#) 21.11.13 11:28
вот именно из этого списка, вы правильно открыли, когда выберете (10) LF, он у вас добавится к существующему и получится строка "(13) CR, (10) LF"
10. Андрей Лихоманов (lihomanov) 22.11.13 06:38
Добрый день! Не работает! хотел спросить если штрих-код сканировать в блокноте он должен сканировать?
*Сканер Voyager 1250g USB
*Windows 7 Home
*Настройки сканера
Если подключить через USB то сканер работает как клавиатура, считывает в блокнот
Если подключен через USB настроен эмулятор COM работает как сканер, но в блокнот не считывает
*Тестирование
Тестировал на УТ 10.3 все работает ок.
11. Владислав Лисовенко (VladC#) 22.11.13 09:12
(10) lihomanov, в блокноте сканер будет считывать только если подключен как клавиатура, через COM не будет. Сравните свои настройки сканера в УТ с настройками в бухгалтерии.
12. Андрей Лихоманов (lihomanov) 22.11.13 14:32
Пробовал
1. Разные драйвера
2. Настройки заново
Мне кажется Процедура ВнешнееСобытие() не срабатывает!, что еще можно проверить!
13. Андрей Лихоманов (lihomanov) 22.11.13 14:34
Конфа: Бухгалтерия предприятия, редакция 3.0 (3.0.24.12)
Платформа: 1С:Предприятие 8.3 (8.3.3.721)
14. Владислав Лисовенко (VladC#) 22.11.13 16:22
Про 8.3 не знаю, не пробовал, да и сейчас уже нет возможности т.к. сканер отдал, может стоит пока попробовать на 8.2, я на 8.2 отлаживал? Как была создана процедура ВнешнееСобытие(), это точно обработчик события формы "ВнешнееСобытие", а не просто вручную созданная процедура?
15. Андрей Лихоманов (lihomanov) 22.11.13 17:51
Попробовал на:
Платформа: 1С:Предприятие 8.2 (8.2.19.68)
Конфа: Бухгалтерия предприятия, редакция 3.0 (3.0.27.7)
Прикрепленные файлы:
16. Андрей Лихоманов (lihomanov) 22.11.13 18:20
хотел уточнить, а какой драйвер надо было ставить?
17. Владислав Лисовенко (VladC#) 23.11.13 02:29
(16) lihomanov, я на атоловском отлаживал.
18. Андрей Лихоманов (lihomanov) 23.11.13 07:08
Добрый день! Попробовал на Атоловском драйвере, не чего не выходит!
Менял режим запуска: Тонкий клиент, Толстый клиент
Пробовал разные платформы, релизы, драйвера, компьютеры, но событие не срабатывает!!!
Прикрепленные файлы:
19. Владислав Лисовенко (VladC#) 23.11.13 10:29
вот на этот вопрос ответьте: "Как была создана процедура ВнешнееСобытие(), это точно обработчик события формы "ВнешнееСобытие", а не просто вручную созданная процедура?"
20. Андрей Лихоманов (lihomanov) 23.11.13 15:06
уже описывал выше, файл прикрепляю
Прикрепленные файлы:
21. Владислав Лисовенко (VladC#) 24.11.13 10:54
посмотрел, сделано всё верно, проблема явно в настройках сканера в 1С, можно получить скриншот окна атоловского теста драйвера сканера с работающими настркойами и скриншот с настройками из 1с?
22. Андрей Лихоманов (lihomanov) 25.11.13 07:57
Добрый день! Вот данные!
Прикрепленные файлы:
23. Андрей Лихоманов (lihomanov) 25.11.13 08:13
Попробовал другую версию драйвера Атол
Прикрепленные файлы:
24. Андрей Лихоманов (lihomanov) 25.11.13 08:14
Еще
Прикрепленные файлы:
25. Владислав Лисовенко (VladC#) 25.11.13 08:15
Похоже что настройки в порядке, НО я увидел у вас ещё 2 других сканера, удалите их, на одном порту может сидеть только одно устройство, несколько сканеров в программе могут сидеть только в разных портах, либо они должны быть клавиатурные, так что лучше удалите, оставьте только атоловский.
26. Андрей Лихоманов (lihomanov) 25.11.13 08:20
не помогло, удалил сканеры,оставил один
27. Андрей Лихоманов (lihomanov) 25.11.13 08:21
у меня сканер штрих-кодов Voyager 1250g USB в режиме эмуляции COM-порта (USB Serial), настроен управляющий штрих-код «USB Serial» (TERMID130)
28. Андрей Лихоманов (lihomanov) 25.11.13 08:27
На УТ 10.3 работает замечательно!
29. Владислав Лисовенко (VladC#) 25.11.13 08:35
сделайте скриншот настроек, которые у вас находятся в меню Сервис->Параметры, вкладка Драйвер устройств ввода
30. Андрей Лихоманов (lihomanov) 25.11.13 08:52
не понял, можно поточнее?
31. Владислав Лисовенко (VladC#) 25.11.13 09:38
меню Сервис -> Параметры
32. Владислав Лисовенко (VladC#) 25.11.13 09:40
вот
Прикрепленные файлы:
33. Андрей Лихоманов (lihomanov) 25.11.13 10:50
открываю, ошибка
Прикрепленные файлы:
34. Владислав Лисовенко (VladC#) 25.11.13 11:07
у меня платформа 1С:Предприятие 8.2 (8.2.19.68)
драйвер сканера 6.5.2.399

Может стоит платформу переустановить или драйвер другой взять, ещё может помочь копирование Scaner1C.dll из каталога атол в каталог bin платформы 1С.
35. Андрей Лихоманов (lihomanov) 26.11.13 07:15
Добрый день! Не могу исправить данную ошибку
Прикрепленные файлы:
36. Владислав Лисовенко (VladC#) 26.11.13 07:35
версия драйвера и платформы как у меня?
37. Григорьев Анатолий (ToJIuK) 17.02.14 19:14
А как же быть потом с обновлениями? при каждом обновлении придется такое проделывать? Или можно по хитрому обновиться?
38. Владислав Лисовенко (VladC#) 18.02.14 01:55
(37) ToJIuK, изменения, в основном, вносятся в те места конфигурации, которые меняются достаточно редко, поэтому их можно просто исключать из обновления и всё. Исключением будут только модули форм документов, да и то там изменений то совсем немного, лично мне это никак не мешает, обновляю регулярно и всё в порядке.
39. Григорьев Анатолий (ToJIuK) 23.02.14 09:59
А вот сам Штрих код лучше добавить через добавление реквизита в номенклатуру или задействовать регистр ?
40. Владислав Лисовенко (VladC#) 23.02.14 10:47
(39) ToJIuK, однозначно регистр
41. Григорьев Анатолий (ToJIuK) 25.02.14 19:06
Тут недавно набрался смелости и начал делать все по плану.
взял Бух 3.0.29.8 (Знаю что отличается от описанной, но сказали что "изменения, в основном, вносятся в те места конфигурации, которые меняются достаточно редко, поэтому их можно просто исключать из обновления и всё")
Ут 11.1.2.9

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

2) В обработку формы Элемента добавил как написано , но при сканировании она не отрабатывает. А просто набирает символы как при вводе с клавиатуры.
Что не так ?
Прикрепленные файлы:
42. Григорьев Анатолий (ToJIuK) 25.02.14 22:49
Кое как добился чтобы срабатывала Процедура "Внешнее событие" , но даже она отрабатывает не корректно , Вместо Цифр штрихкода , в данные попадает номер сканирования (т.е если отсканировал ШК в первый раз то выходит "1", если 2-й ,то "2" и тд). Драйвер менял , что то ничего не помогает . Не могу ни как разобраться. Ни кто с таким не сталкивался?
43. Владислав Лисовенко (VladC#) 26.02.14 03:31
(42) ToJIuK, в тесте драйвера всё работает?
44. Григорьев Анатолий (ToJIuK) 26.02.14 08:51
(43) VladC#, Да в тесте драйвера все нормально. Результата такой какой надо.
И ещё посмотрел как обрабатывается работа со сканером УТ 11! Там нет Процедуры "внешнееСобытие". Все делается через другую процедуру.
45. Григорьев Анатолий (ToJIuK) 28.02.14 07:11
Единственное что получилось Это примерно вот так

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

Перем 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;
		ПродукцияПродукцияПриИзменении("");
	КонецЕсли;
 
КонецПроцедуры // ВнешнееСобытие()
...Показать Скрыть



Но такое работает только в Обычном приложении . В управляемых формах почему то не работает, хотя я их и в модуль управляемого приложения засунул. но процедура "ВнешнееСобытие" не отрабатывает.
46. Дмитрий Кочетов (ducks01) 20.05.14 13:48
(45) ToJIuK, попробуйте добавить реквизиты формы:
  • ИспользоватьПодключаемоеОборудование - булево
  • ПоддерживаемыеТипыПодключаемогоОборудования - строка
а также следующие процедуры в модуль формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	ИспользоватьПодключаемоеОборудование = Истина;	
КонецПроцедуры

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

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

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

Спасибо автору за эту статью!
luch_09; Bukaska; +2 Ответить 1
47. piton66 (piton66) 09.06.14 15:34
Ребята . кто пользовался дешевыми китайскими USB сканерами? Как они в работе и подключении к 1С? Проблем с ними нет?
48. Григорьев Анатолий (ToJIuK) 22.07.14 08:20
(47) piton66, Если подключать их в режиме эмуляции клавиатуры с Атоловским драйвером(Старым) проблем не должно быть. Так как там все одинаково. А вот если пробовать подключить в режиме эмуляции COM порта то могут быть проблемы с драйверами на USB-COM.
49. Wall30 (Wall30) 14.10.14 09:35
(46) ducks01, да еще добавить Картинки "ПодключаемоеОборудованиеСканерШтрихкода32"(16)
50. Гость 27.10.14 08:51
Добрый день БП 3.0.36.15
Нифига не пойму, сделал все по описанию (с учетом уже текущей конфигурации). Но!
Подключаю сканер, но реквизит "Драйвер оборудования" пустой и не дает выбрать!
Установил под правами админа драйвер 1С и атоловский драйвер. Перенес драйверы и в папку Bin 1С, все равно пусто.
51. imispb imispb (imispb) 01.05.15 23:46
На самом деле, можно сделать всё намного проще. У компании 1С есть Библиотека Подключаемого Оборудования(БПО). Заходим в бухгалтерию, смотрим в общем модуле МенеджерОборудованияВызовСервера в функции ВерсияБиблиотеки() версию БПО. Качаем с сайта 1С, где качаем обновления, такую же версию БПО или более новую. Берем её и просто объединяем с нашей конфигурацией по прилагаемой инструкции. В конце надо не забыть, запустить процедуру ОбновитьПоставляемыеДрайвера(), в инструкции это есть. Таким образом, я очень быстро прописал сканер в бухг. 3.0.
52. imispb imispb (imispb) 02.05.15 14:06
(50) Гость,
реквизит "Драйвер оборудования" пустой и не дает выбрать!

Надо запустить процедуру МенеджерОборудованияВызовСервераПереопределяемый.ОбновитьПоставляемыеДрайвера(), я это сделал из внешней обработки, 1с рекомендует добавить данную строчку в процедуру запускаемую один раз при старте системы.
53. piton66 (piton66) 11.08.15 12:05
Короче в режиме подключение в разрыв клавиатуры самый простой метод. Нужно только сам сканер настроить. ну чтобы нужную последовательность нажатий клавиш выдавал.
54. Олег (olbu) 09.09.16 16:54
(42) ToJIuK, Решили почему выводятся цифры 1,2,3...? Если - да, то может подскажете как это победить?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа