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

22.11.18

Учетные задачи - Оптовая торговля

Возникла потребность обеспечить идентификацию номенклатуры по штрихкоду. На складе уже было рабочее место с Бухгалтерией 3.0. Поиск по ключевой фразе «сканер ШК БП 3.0» выдал не так много результатов. На ИС была обнаружена статья от 2013 года, которая сейчас несколько устарела. В 2018 году процесс подключения сканера штрихкода стал существенно проще.

Ссылка на статью //infostart.ru/public/203591/ (сейчас она несколько устарела).

В 2018 году процесс подключения сканера штрихкода стал существенно проще.

В разделе «Администрирование» есть пункт «Подключаемое оборудование» и в ней есть закладка «Сканеры штрихкода». Тут все просто. Нажимаем «Создать», выбираем тип оборудования «Сканеры штрихкоды» и драйвер. Например, «1С:Сканеры штрихкода (NativeApi)». Если драйвер еще не установлен будет выдано предложение сделать это сейчас и база сама зарегистрирует нужную компоненту.

Для проверки нажимаем (в этой же форме) «Настроить» и «Тест устройства». Сканер я предварительно перевел в режим virtual COM и установил драйвер виртуального COM порта. В окне теста сразу видно, что доступен порт COM3. После считывания штрихкода данные отображаются в окне. Значит, 1С получает событие от сканера.

Следующий шаг — описать, как база должна реагировать на событие сканирования штрихкода.

Коротко напомню как все устроено в типовых конфигурациях.

У форм документов нет обработчика события «Внешнее событие». Все реализовано через событие управляемого приложения.

Его обработчик получает все события, определяет от какого оборудования они пришли.

Передача управления обработчикам формы выполняется через механизм оповещения.

Реакция системы на штрихкод описывается уже в модуле формы в обработчике события ОбработкаОповещения.

Поиск по конфигурации не порадовал. «Из коробки» штрих код работает только в трех видах документов.

Поскольку конфигурация на поддержке изменения будем вносить через расширение.

Реализуем 2 сценария — привязка штрихкода к карточке номенклатуры и обработка считывания штрихкода для длокумента «Перемещение товаров».

Начнем с номенклатуры.

Чтобы форма элемента получала оповещения от драйвера подключаемого оборудования необходимо добавить обработчики событий ПриОткрытии и ПриЗакрытии (оба с вызовом После).

&НаКлиенте
Процедура Расш1_ПриОткрытииПосле(Отказ)
	
	ТипыПО = Новый Массив();
	ТипыПО.Добавить("СканерШтрихкода");
	
	ОповещениеПриПодключении = Новый ОписаниеОповещения("ПодключениеОборудованияЗавершено", ЭтотОбъект);
	
	МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПоТипу(ОповещениеПриПодключении, УникальныйИдентификатор, ТипыПО);
	
КонецПроцедуры

&НаКлиенте
Процедура ПодключениеОборудованияЗавершено(РезультатВыполнения, Параметры) Экспорт
	
	Если Не РезультатВыполнения.Результат Тогда
		ТекстСообщения = НСтр( "ru = 'При подключении оборудования произошла ошибка:""%ОписаниеОшибки%"".'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОписаниеОшибки%" , РезультатВыполнения.ОписаниеОшибки);
		Сообщить(ТекстСообщения);
	Иначе
		ТекстСообщения = НСтр("ru = 'Оборудование подключено.'" );
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура Расш1_ПриЗакрытииПосле(ЗавершениеРаботы)
	
	ТипыПО = Новый Массив();
	ТипыПО.Добавить("СканерШтрихкода");
	
	ОповещениеПриОтключении = Новый ОписаниеОповещения("ОтключениеОборудованияЗавершено", ЭтотОбъект);
	
	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПоТипу(ОповещениеПриОтключении, УникальныйИдентификатор, ТипыПО);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтключениеОборудованияЗавершено(РезультатВыполнения, Параметры) Экспорт

	Если Не РезультатВыполнения.Результат Тогда
		ТекстСообщения = НСтр( "ru = 'При отключении оборудования произошла ошибка:""%ОписаниеОшибки%"".'");
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%ОписаниеОшибки%" , РезультатВыполнения.ОписаниеОшибки);
		Сообщить(ТекстСообщения);
	Иначе
		ТекстСообщения = НСтр("ru = 'Оборудование подключено.'" );
	КонецЕсли;

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

Если код вызывает вопросы — напишите в комментарии — отвечу.

Далее создадим обработчик события ОбработкаОповещения (вызов также После).

&НаКлиенте
Процедура Расш1_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник)
	
	Если Источник = "ПодключаемоеОборудование" Тогда
		
		Если ИмяСобытия = "ScanData" Тогда
			
			Если Параметр[1] = Неопределено Тогда
				ТекущийКод = Параметр[0];
			Иначе
				ТекущийКод = Параметр[1][1];
			КонецЕсли;
			
			Номенклатура = "";
			Если ЕстьНоменклатураПоШтрихкоду(ТекущийКод, Номенклатура) Тогда
				ТекстСообщения = НСтр("ru = 'Штрихкоду %Штрихкод% уже сопоставлена номенклатура %Номенклатура%'" );
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Штрихкод%" , ТекущийКод);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номенклатура%" , Номенклатура);
				СообщениеПользователю = Новый СообщениеПользователю;
				СообщениеПользователю.Текст = ТекстСообщения;
				СообщениеПользователю.Сообщить();
			Иначе
				ВопросСоздатьНоменклатуруЗавершение = Новый ОписаниеОповещения("ПривязатьШтрихкодКНоменклатуреПослеВопроса", ЭтаФорма, ТекущийКод);
				ТекстСообщения = НСтр("ru = 'Привязать штрихкод %Штрихкод% к номенклатуре %Номенклатура%?'" );
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Штрихкод%" , ТекущийКод);
				ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Номенклатура%" , Объект.Наименование);
				ПоказатьВопрос(ВопросСоздатьНоменклатуруЗавершение, ТекстСообщения, РежимДиалогаВопрос.ДаНет, 30, КодВозвратаДиалога.Нет);
			КонецЕсли;
			
		КонецЕсли;
			
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ЕстьНоменклатураПоШтрихкоду(Штрихкод, Номенклатура)
	
	Рез = Ложь;
	
	ТаблицаНоменклатурыПоШтрихкоду = РегистрыСведений.ШтрихкодыНоменклатуры.НоменклатураПоШтрихкоду(Штрихкод);
	
	Если ТаблицаНоменклатурыПоШтрихкоду.Количество() > 0 Тогда
		Номенклатура = ТаблицаНоменклатурыПоШтрихкоду[0].Номенклатура;
		Рез = Истина;
	КонецЕсли;
	
	Возврат Рез;
	
КонецФункции

&НаКлиенте
Процедура ПривязатьШтрихкодКНоменклатуреПослеВопроса(Результат, Параметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		ПривязатьШтрихкодКНоменклатуре(Параметры);
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Процедура ПривязатьШтрихкодКНоменклатуре(Штрихкод) Экспорт
	
	НовыйШК = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
	НовыйШК.Штрихкод = Штрихкод;
	НовыйШК.Номенклатура = Объект.Ссылка;
	НовыйШК.Записать();
	
КонецПроцедуры

Обработчик проверяет, что пришло событие именно со сканера штрихкода. Далее выполняется поиск номенклатуры по штрихкоду. Если номенклатура найдена выдается сообщение пользователю, что штрихкод уже сопоставлен с другой номенклатурой. В противном случае создается запись в регистре сведений ШтрихкодыНоменклатуры (после уточняющего вопроса пользователю).

Со справочником на этом все.

Переходим к документу.

Аналогично добавляем код для событий ПриОткрытии и ПриЗакрытии для подключения (и отключения) подписки на получение событий от подключаемого оборудования.

В обработчике ОбработкаОповещения размещаем код

&НаКлиенте
Процедура Расш1_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник)
	
	Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
		Если ИмяСобытия = "ScanData" Тогда
			Если Параметр[1] = Неопределено Тогда
				ТекущийКод = Параметр[0];
			Иначе
				ТекущийКод = Параметр[1][1];
			КонецЕсли;
			ДобавитьПоШтрихкодуНаСервере(ТекущийКод);
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Процедура ДобавитьПоШтрихкодуНаСервере выполняет поиск номенклатуры сопоставленной с штрихкодов. Если номенклатура не найдена выдает сообщение пользователю. Иначе — добавляет строку в документ. Добавление строки реализовано по аналогии с документом ПоступлениеТоваровУслуг.

&НаСервере
Функция ДобавитьПоШтрихкодуНаСервере(Штрихкод)
	ТаблицаНоменклатурыПоШтрихкоду = РегистрыСведений.ШтрихкодыНоменклатуры.НоменклатураПоШтрихкоду(Штрихкод);
	
	Если ТаблицаНоменклатурыПоШтрихкоду.Количество() = 1 Тогда
		ДобавитьНоменклатуруНаСервере(ТаблицаНоменклатурыПоШтрихкоду[0].Номенклатура);
	Иначе
		ТекстСообщения = НСтр("ru = 'Штрихкоду %Штрихкод% не сопоставлена ни одна номенклатура'" );
		ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Штрихкод%" , Штрихкод);
		СообщениеПользователю = Новый СообщениеПользователю;
		СообщениеПользователю.Текст = ТекстСообщения;
		СообщениеПользователю.Сообщить();
	КонецЕсли;
	
КонецФункции

&НаСервере
Процедура ДобавитьНоменклатуруНаСервере(Номенклатура)
	
	ПараметрыОтбора = Новый Структура("Номенклатура", Номенклатура);
	
	мСтрок = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
	Если мСтрок.Количество() = 0 Тогда
	
		ТаблицаТовары = Новый ТаблицаЗначений;
		ТаблицаТовары.Колонки.Добавить("Номенклатура");
		ТаблицаТовары.Колонки.Добавить("Количество");
		ТаблицаТовары.Колонки.Добавить("Цена");
		
		
		СтрокаТаблицаТовары = ТаблицаТовары.Добавить();
		
		СтрокаТаблицаТовары.Номенклатура = Номенклатура;
		СтрокаТаблицаТовары.Количество = 1;
		СтрокаТаблицаТовары.Цена = 0;
		
		Значение = Новый Структура("АдресПодобраннойНоменклатурыВХранилище, КоличествоДобавленныхСтрок", ПоместитьВоВременноеХранилище(ТаблицаТовары, УникальныйИдентификатор));
		
		ОбработкаВыбораПодборВставкаИзБуфераНаСервере(Значение, "Товары");
		
	Иначе
		
		СтрокаТовары = мСтрок[0];
		СтрокаТовары.Количество = СтрокаТовары.Количество + 1;
		
	КонецЕсли;

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

На этом всё.

Взаимодействие сканера с другими документами выполняется аналогичным образом.

БП 3.0 Бухгалтерия 3.0 сканер шк штрихкод

См. также

Оптовая торговля Розничная торговля Обмен с ГосИС Бухгалтер Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Бухгалтерский учет Управленческий учет Акцизы Платные (руб)

Автоматизация учета ЕГАИС в 1С для оптовой торговли, производства и импорта. Получение и отправка ТТН, отправка акта о постановке на баланс и акта о списании. Получение остатков. Загрузка и сопоставление номенклатуры и контрагентов. Оправка в ЕГАИС отчетов о производстве и импорте.

828 руб.

15.12.2015    172128    858    369    

404

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    196631    157    244    

287

SALE! 20%

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 1C:Бухгалтерия 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Универсальная обработка для загрузки документов из Excel в 1С. Забудьте о ручном вводе: загружайте документы из Excel в 1С за секунды! Не требует указания параметров (номера колонок, номер первой строки таблицы и т.д.) и предварительной настройки. Просто выбираете файл Excel, документ 1С и нажимаете кнопку "Загрузить". Обработка сама находит таблицу в файле Excel, необходимые для загрузки данные в ней (номенклатура, количество, НДС, цена, сумма) и загружает ее в 1С.

6000 5100 руб.

09.11.2016    240088    1100    906    

1031

Оптовая торговля Розничная торговля Пользователь Платформа 1С v8.3 Оперативный учет Управляемые формы 1С:Управление торговлей 10 1С:Розница 2 Россия Управленческий учет Платные (руб)

Подсистема призвана упростить и автоматизировать процесс расчета и начисления бонусов покупателей. Бонусная система работает с конфигурациями 1С:УТ 10.3, 1С:Розница. Механизм реализован в начале 2013г. и работает до сих пор с постоянными совершенствованиями.

30000 руб.

02.11.2015    113358    102    88    

186

Логистика, склад и ТМЦ Бухгалтер Пользователь Платформа 1С v8.3 Сельское хозяйство и рыболовство Строительство Горнодобывающая промышленность Розничная и сетевая торговля (FMCG) Транспорт, автопарки, такси Оптовая торговля, дистрибуция, логистика Лесное и деревообрабатывающее хозяйство Управленческий учет Платные (руб)

Позволяет автоматизировать процесс взвешивания ТМЦ в организациях, осуществляющих приемку и отгрузку различным транспортом, для ведения складского учета и контроля остатков на складах. Конфигурация позволяет фиксировать вес вручную, напрямую с весов, а также управлять дополнительным оборудованием и контролировать движение транспорта.

35000 руб.

24.03.2015    127162    308    114    

136
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. muskul 23.11.18 05:08 Сейчас в теме
Разве по умолчанию ШК в БП 3.0 не работает во всех местах в которых должен по логике?
2. Dem1urg 394 23.11.18 07:15 Сейчас в теме
(1) Я же специально сделал скриншот с результатом поиска текста ScanData.
Работает в двух местах - поступление и розничная продажа.
Можете сами проверить.
3. muskul 23.11.18 08:54 Сейчас в теме
(2)Проверил, действительно, логика и 1с теперь редко пересекаются.
4. k0pai22 23.11.18 18:02 Сейчас в теме
(3) Нельзя просто взять и оптимизировать БП для всех видов торговли. Может кануть в лету немалая часть продаж УТ. Сам когда писал ШК для реализации в БП 3.0 был в недоумении, потом понял.
5. kembrik 10 23.11.18 18:47 Сейчас в теме
Ничто так не печалит меня, как штрихкод в Измерениях
6. Dem1urg 394 23.11.18 19:25 Сейчас в теме
(5) Почему? Это ж по сути вспомогательный регистр.
7. kembrik 10 24.11.18 14:13 Сейчас в теме
(6) Потому что мы не можем хранить в таком случае одинаковый штрихкод у разной номенклатуры. А это сплошь и рядом. У производителя иной раз сменилась упаковка, состав и комплектация изделия, а штрихкод там один и тот же. И без самостоятельной принудительной маркировки это потом не разгрести. Речь понятно не только про бухгалтерию, скорее про УТ. Вот и приходится хранить в допреквизите и перепиливать процедуру поиска.
8. RustIG 1836 27.11.18 18:48 Сейчас в теме
(7)
У производителя иной раз сменилась упаковка, состав и комплектация изделия, а штрихкод там один и тот же.

а как вам поможет допреквизит? и что за допреквизит вы добавляете?
пока не понятно, как в ситуации Товар1+ШК1 и Товар2+ШК1 - однозначно идентифицировать по ШК1 нужный Товар?...даже без учета конфигурации, на пальцах алгоритм расскажите
10. kembrik 10 03.12.18 12:40 Сейчас в теме
(8) 1. Штрихкод с коробки бьётся в допреквизит "Штрихкод производителя"
2. У номенклатуры жесткая иерархия в зависимости от сезона поставки
3. Периодически запускается регламентная обработка, которая сигнализирует, что у нескольких позиций одинаковый штрихкод у разных поставок, а собственный штрихкод ещё не присвоен
4. Присваивается собственный штрихкод каждой из задвоившейся номенклатуры, если ещё нет, после визуального контроля, отличается ли состав, комплектация товара и т.д. Если не отличается то такой же, как у прошлой поставки, если отличается - то новый. Как то так

Соответственно типовое "пиканье" учим искать и в регистре сведений номенклатуры и в допреквизитах, и отображать все варианты, а не единственное
11. RustIG 1836 03.12.18 18:54 Сейчас в теме
(10)
1. Штрихкод с коробки бьётся в допреквизит "Штрихкод производителя"

этот ШК к новой номенклатуре привязывается или к имеющейся старой?
по моему уже на этом этапе происходит визуальный контроль - отличается ли состав, комплектация товара и т.д

(10)
2. У номенклатуры жесткая иерархия в зависимости от сезона поставки

иерархия в зависимости от срока поставки - не хочу вас судить, но, имхо, в целом это плохая идея, плохо решенная задача - это первое мое мнение не видя решения и причин...


(10)
Периодически запускается регламентная обработка, которая сигнализирует, что у нескольких позиций одинаковый штрихкод у разных поставок, а собственный штрихкод ещё не присвоен

если в регистре сведений использовать только типовые измерения Товар + ШК, то регламентная процедура для разных позиций нормально отработает - и определит что у нескольких позиций одинаковый шк...
13. kembrik 10 04.12.18 14:43 Сейчас в теме
(11)
этот ШК к новой номенклатуре привязывается или к имеющейся старой?
по моему уже на этом этапе происходит визуальный контроль - отличается ли состав, комплектация товара и т.д


К новой. Товар ещё на таможне, но производитель уже прислал "Баркоды". Визуальный осмотр товара в контейнере особо не произведёшь, а приходовать уже пора


(11)
иерархия в зависимости от срока поставки - не хочу вас судить, но, имхо, в целом это плохая идея, плохо решенная задача - это первое мое мнение не видя решения и причин...


Сроки поставки укрупненные, например сейчас идёт поступление товара на сезон "Весна-лето 2019", чуть позже начнется "Осень-зима 2019-2020". Кроме иерархии справочника ессно заводится допреквизит сезона и т.д. Это новый товар, произведенный специально для этого сезона.


(11)
если в регистре сведений использовать только типовые измерения Товар + ШК, то регламентная процедура для разных позиций нормально отработает - и определит что у нескольких позиций одинаковый шк...


Я не знаю про какие вы конфигурации говорите - в последних типовых штрихкод это ЕДИНСТВЕННОЕ измерение. В том то и дело, отсюда и корень проблем
Прикрепленные файлы:
15. RustIG 1836 04.12.18 14:56 Сейчас в теме
(13) ясно, понял вас, спасибо за картинку - лучше один раз увидеть, чем сто раз услышать.
я привык, что в ут 10.3 несколько измерений : Номенклатура, Штрихкод, Серия, Тип ШК и еще какой-то....
12. RustIG 1836 03.12.18 18:55 Сейчас в теме
(10) в целом, непонятно все-таки за что вы критикуете "Штрихкод" в измерении...
14. kembrik 10 04.12.18 14:44 Сейчас в теме
(12) За то что кроме "Штрихкода" в измерении больше ничего нет. См. выше
9. RustIG 1836 27.11.18 18:49 Сейчас в теме
(0) интересная тема. спасибо!
16. user619273_alevtina 30.12.18 17:22 Сейчас в теме
Статья интересная, спасибо.
17. Xershi 1564 12.02.19 16:27 Сейчас в теме
Добрый день, пытаюсь завести сканер ШК, но не выходит. https://forum.infostart.ru/forum72/topic210249/
Вы писали:
Для проверки нажимаем (в этой же форме) «Настроить» и «Тест устройства». Сканер я предварительно перевел в режим virtual COM и установил драйвер виртуального COM порта.

Но не написали как это сделать, если это скрин, с оборудованием в справочнике, то это сделано!
18. Dem1urg 394 12.02.19 21:07 Сейчас в теме
(17) Процедуры настройки сканера лежат за рамками публикации.
В каком режиме у вас сейчас работает сканер? Если запустить Блокнот и попытаться считать штрихкод что-нибудь происходит?
19. Xershi 1564 12.02.19 21:13 Сейчас в теме
(18) это сразу работало. В теме уже нашли решение!
Можете почитать последние ответы. Там остались не понятки почему оно криво работало.
20. Dreary 24.03.20 14:58 Сейчас в теме
Подскажите, статья еще актуальна?
Что-то не получается( БП 3.0.75.93
21. Dreary 24.03.20 15:41 Сейчас в теме
Сорян, все работает. Это я затупил. Спасибо за статью!
22. Dreary 24.03.20 16:48 Сейчас в теме
Есть у кого-нибудь мысли, как это реализовать в документе "Отчет производства за смену"?
23. Dem1urg 394 30.03.20 19:08 Сейчас в теме
(22) А в чем суть вопроса? Если взять код из публикации для документа "Перемещение" в использовать его. Заменив, при необходимости, имена табличных частей и реквизитов.
Оставьте свое сообщение