Доработка поддержки ШК в формах номенклатуры УТ 11/БИТ.Автосервис

Так сложилось, что Бит сделал отраслевку, в которой типовые формы списка и подбора номенклатуры заменили собственными, но забыли реализовать в них поддержку штрих-кода:

В итоге я сделал собственное расширение, где реализовал поддержку ШК.

Вообще, принципы использования библиотеки подключаемого оборудования для сканера ШК описаны в закрытой статье на ИТС.

Но проверка показала, что статья устарела (это видно даже потому, что код не раскрашен), например событие ПриОткрытии там выглядит так:

А в конфигурации используется совершенно другой метод:

Поэтому я не стал смотреть морально устаревшую методичку с ИТС, а сделал Copy-Paste из конфигурации:

&НаКлиенте
Перем КэшированныеЗначения;


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

&НаКлиенте
Процедура шкфа_ПриЗакрытииПосле(ЗавершениеРаботы)
	МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры 

// МеханизмВнешнегоОборудования
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкода)
	
	ПараметрыОбработки = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();
	ПараметрыОбработки.Штрихкоды                        = ДанныеШтрихкода;
	ПараметрыОбработки.ИзменятьКоличество               = Истина;
	ПараметрыОбработки.БлокироватьДанныеФормы           = Ложь;
	ПараметрыОбработки.ДействияСНеизвестнымиШтрихкодами = "ТолькоЗарегистрировать";
	
	Номенклатура = НоменклатураПоШтрихкоду(ПараметрыОбработки, КэшированныеЗначения);

	Если Номенклатура <> Неопределено Тогда
		
		//Осипов: Чрезмерно усложненный поиск списка номенклатуры, тут только один список
		//Элементы[ПодборТоваровКлиентСервер.ИмяСпискаНоменклатурыПоВариантуПоиска(ЭтаФорма)].ТекущаяСтрока = Номенклатура;
		Элементы.Список.ТекущаяСтрока = Номенклатура;
		ПоказатьЗначение(,Номенклатура);
		                                         
	Иначе
		ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(ПараметрыОбработки, КэшированныеЗначения, ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры
// Конец МеханизмВнешнегоОборудования    

&НаСервереБезКонтекста
Функция НоменклатураПоШтрихкоду(ПараметрыОбработки, КэшированныеЗначения)
	//Осипов: Используется потому что модуль ШтрихкодированиеНоменклатурыСервер не вызвать с клиента... увы...
	Возврат ШтрихкодированиеНоменклатурыСервер.НоменклатураПоШтрихкоду(ПараметрыОбработки, КэшированныеЗначения); 
КонецФункции


&НаСервере
Процедура шкфа_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
	//Осипов - реквизиты формы добавляю программно, не руками
	ДобавляемыеРеквизиты = Новый Массив;
    ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоддерживаемыеТипыПодключаемогоОборудования", Новый ОписаниеТипов("Строка"), , , Ложь));
    ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИспользоватьПодключаемоеОборудование", Новый ОписаниеТипов("Булево"), , , Ложь));
    //ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантПоискаТоваров", Новый ОписаниеТипов("Строка"), , , Ложь));
	
    ИзменитьРеквизиты(ДобавляемыеРеквизиты);  
	ЭтаФорма.ИспользоватьПодключаемоеОборудование = истина;
	//ЭтаФорма.ВариантПоискаТоваров = "ПоУмолчанию";
КонецПроцедуры


&НаКлиенте
Процедура шкфа_ОбработкаОповещенияПосле(ИмяСобытия, Параметр, Источник)
	// ПодключаемоеОборудование
	//Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
	Если Источник = "ПодключаемоеОборудование" Тогда
		Если ИмяСобытия = "ScanData" Тогда
			ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВСтруктуру(Параметр));
		КонецЕсли;
	ИначеЕсли Источник = "ПодключаемоеОборудование" И НЕ ВводДоступен() Тогда
		Сообщить("Событие сканера ШК, но ввод не доступен");
	КонецЕсли;
	// Конец ПодключаемоеОборудование
КонецПроцедуры


Как видите, код довольно объемный. Также пришлось добавлять несколько реквизитов программно. Я вообще не очень понимаю, зачем 1С их добавляет вручную на каждую форму.

Создал тестовый сканер штрихкода:

Тайм-аут клавиатуры заменил с 75 на 200, чтобы можно было вводить ШК ловкими руками (каюсь, у меня до сих пор нет физического сканера ШК):

И вот, введя 123 и нажав Enter в форме списка, я получил событие в процедуре ОбработкаВнешнегоСобытия модуля приложения:

Были какие-то сомнения насчет ВводДоступен, оставил их до тестирования с реальным сканером.

Среда: УТ 11/БИТ.Автосервис (11.4.14.140) Объем: 1 час.

fixin

Программирую на 1С с 1999 года. В 1С просто Гений. В 2020 году ушел из офиса на вольные хлеба фриланса. Принимаю заказы.

Читайте также:

Добавить комментарий

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