Доработка поддержки ШК в формах номенклатуры УТ 11/БИТ.Автосервис
Так сложилось, что Бит сделал отраслевку, в которой типовые формы списка и подбора номенклатуры заменили собственными, но забыли реализовать в них поддержку штрих-кода:
В итоге я сделал собственное расширение, где реализовал поддержку ШК.
Вообще, принципы использования библиотеки подключаемого оборудования для сканера ШК описаны в закрытой статье на ИТС.
Но проверка показала, что статья устарела (это видно даже потому, что код не раскрашен), например событие ПриОткрытии там выглядит так:
А в конфигурации используется совершенно другой метод:
Поэтому я не стал смотреть морально устаревшую методичку с ИТС, а сделал Copy-Paste из конфигурации:
&НаКлиенте Перем КэшированныеЗначения; &НаКлиенте Процедура шкфа_ПриОткрытииПосле(Отказ) МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода"); КонецПроцедуры &НаКлиенте Процедура шкфа_ПриЗакрытииПосле(ЗавершениеРаботы) МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма); КонецПроцедуры // МеханизмВнешнегоОборудования &НаКлиенте Процедура ОбработатьШтрихкоды(ДанныеШтрихкода) ПараметрыОбработки = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов(); ПараметрыОбработки.Штрихкоды = ДанныеШтрихкода; ПараметрыОбработки.ИзменятьКоличество = Истина; ПараметрыОбработки.БлокироватьДанныеФормы = Ложь; ПараметрыОбработки.ДействияСНеизвестнымиШтрихкодами = "ТолькоЗарегистрировать"; Номенклатура = НоменклатураПоШтрихкоду(ПараметрыОбработки, КэшированныеЗначения); Если Номенклатура <> Неопределено Тогда //Осипов: Чрезмерно усложненный поиск списка номенклатуры, тут только один список //Элементы[ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма)].ТекущаяСтрока = Номенклатура; Элементы.Список.ТекущаяСтрока = Номенклатура; ПоказатьЗначение(,Номенклатура); Иначе ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(ПараметрыОбработки, КэшированныеЗначения, ЭтаФорма); КонецЕсли; КонецПроцедуры // Конец МеханизмВнешнегоОборудования &НаСервереБезКонтекста Функция НоменклатураПоШтрихкоду(ПараметрыОбработки, КэшированныеЗначения) //Осипов: Используется потому что модуль ШтрихкодированиеНоменклатурыСервер не вызвать с клиента... увы... Возврат ШтрихкодированиеНоменклатурыСервер.НоменклатураПоШтрихкоду(ПараметрыОбработки, КэшированныеЗначения); КонецФункции &НаСервере Процедура шкфа_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка) //Осипов - реквизиты формы добавляю программно, не руками ДобавляемыеРеквизиты = Новый Массив; ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоддерживаемыеТипыПодключаемогоОборудования", Новый ОписаниеТипов("Строка"), , , Ложь)); ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИспользоватьПодключаемоеОборудование", Новый ОписаниеТипов("Булево"), , , Ложь)); //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантПоискаТоваров", Новый ОписаниеТипов("Строка"), , , Ложь)); ИзменитьРеквизиты(ДобавляемыеРеквизиты); ЭтаФорма.ИспользоватьПодключаемоеОборудование = истина; //ЭтаФорма.ВариантПоискаТоваров = "ПоУмолчанию"; КонецПроцедуры &НаКлиенте Процедура шкфа_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник) // ПодключаемоеОборудование //Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда Если Источник = "ПодключаемоеОборудование" Тогда Если ИмяСобытия = "ScanData" Тогда ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВСтруктуру(Параметр)); КонецЕсли; ИначеЕсли Источник = "ПодключаемоеОборудование" И НЕ ВводДоступен() Тогда Сообщить("Событие сканера ШК, но ввод не доступен"); КонецЕсли; // Конец ПодключаемоеОборудование КонецПроцедуры
Как видите, код довольно объемный. Также пришлось добавлять несколько реквизитов программно. Я вообще не очень понимаю, зачем 1С их добавляет вручную на каждую форму.
Создал тестовый сканер штрихкода:
Тайм-аут клавиатуры заменил с 75 на 200, чтобы можно было вводить ШК ловкими руками (каюсь, у меня до сих пор нет физического сканера ШК):
И вот, введя 123 и нажав Enter в форме списка, я получил событие в процедуре ОбработкаВнешнегоСобытия модуля приложения:
Были какие-то сомнения насчет ВводДоступен, оставил их до тестирования с реальным сканером.
Среда: УТ 11/БИТ.Автосервис (11.4.14.140) Объем: 1 час.
Свежие комментарии