Создание формы с подбором по штрих-коду

1. deletel 01.11.21 17:11 Сейчас в теме
Управление нашей фирмой 1.6. Платформа 19.1264. Создал обработку с табличной частью на форме "СписокНоменклатуры" с колонками Номенклатура, Количество, Продукция. Как сканированием штрихкодов заполнять таблицу номенклатурой?
В форме есть реквизиты "ИспользоватьПодключаемоеОборудование"(булево) И "ПоддерживаемыеТипыПодключаемогоОборудования"(строка). Взял все процедуры и функции с документа перемещения касаемые штрих-кодов + ОбработкаОповещение. Буду так же рад ответу на вопрос: "Почему при сканировании первой отрабатывает процедура ПолучитьДанныеПоШтрихКодам, которая &НаСервереБезКонтекста?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
2. Alexponenta 01.11.21 17:35 Сейчас в теме +0.21 $m
Можно добавить поле "Штрихкод" и в него сканировать штрикод - а на событие "ПриИзменении" повесить механизм заполнения полей ТЧ.
11. deletel 08.11.21 15:55 Сейчас в теме
&НаКлиенте
Процедура ШтрихкодПриИзменении(Элемент)             
	
	Штрихкод = Элементы.Штрихкод.ТекстРедактирования;
	ТекШтрихкод = Новый Структура;
	ТекШтрихкод.Вставить("Штрихкод", Штрихкод);   
	ТекШтрихкод.Вставить("Количество", 1);
	РазвернутьМассив(ТекШтрихкод);   
	Штрихкод = ""; 
	Элементы.Штрихкод.ОбновитьТекстРедактирования();
	Штрихкод = "";    
	
	ПодключитьОбработчикОжидания("ВернутьКурсорНаПолеВвода", 0.1, Истина);
    
КонецПроцедуры

&НаКлиенте
Процедура ВернутьКурсорНаПолеВвода()
    
    ЭтаФорма.ТекущийЭлемент = Элементы.Штрихкод;

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

&НаСервере 
Процедура РазвернутьМассив(ТекШтрихкод)
	
	РегистрыСведений.ШтрихкодыНоменклатуры.ПреобразоватьВесовойШтрихкод(ТекШтрихкод);
	МассивШтрихкодов = Новый Массив;
	МассивШтрихкодов.Добавить(ТекШтрихкод);
	ДанныеПоШтрихКодам = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьДанныеПоШтрихкодам(МассивШтрихкодов);
	ДанныеШтрихкода = ДанныеПоШтрихкодам[ТекШтрихкод.Штрихкод];   
	Если НЕ ЗначениеЗаполнено(ДанныеШтрихкода) Тогда
		Сообщить("Такого штрих-кода не существует в базе!");
		Возврат;
	КонецЕсли;
	Ном = ДанныеШтрихкода.Номенклатура;
	Кол = ТекШтрихкод.Количество;
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. vadim.semyonov.rzn 01.11.21 17:48 Сейчас в теме
(1)
Почему при сканировании первой отрабатывает процедура ПолучитьДанныеПоШтрихКодам
Проще всего поставить там точку останова и посмотреть стек вызовов - откуда пришло... Стандартная же метода вроде.
5. deletel 01.11.21 17:54 Сейчас в теме
(4) Одна строка в стеке вызовов, я даже успел через отладка - остановить.
6. vadim.semyonov.rzn 01.11.21 19:34 Сейчас в теме
(5)
Одна строка в стеке вызовов
Серверная процедура вызывается событием на клиенте БЕЗ участия клиентской процедуры? Первый раз о такой возможности слышу... Клиентское событие в первую очередь обрабатывается на клиенте всегда. Может быть, асинхроника виновата? Попробуйте еще раз, с подключением фоновых заданий.
2. Alexponenta 01.11.21 17:35 Сейчас в теме +0.21 $m
Можно добавить поле "Штрихкод" и в него сканировать штрикод - а на событие "ПриИзменении" повесить механизм заполнения полей ТЧ.
3. deletel 01.11.21 17:37 Сейчас в теме
(2) Звучит классно, попробую
10. djvu 145 04.11.21 12:47 Сейчас в теме
(2)

Если УФ, тогда, лучше "ОкончаниеВводаТекста", более универсально получается:

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

//Активировать режим непрерывного считывания ШК, на мобильной платформе дополнительно необходимо вызовом "НачатьРедактированиеЭлемента"
&НаКлиенте
Процедура ПозиционированиеВводНовыйШК()
	// Вставить содержимое обработчика.
	СтрокаШК = "";
	ЭтаФорма.ТекущийЭлемент = Элементы.СтрокаШК;
    #Если МобильноеПриложениеКлиент Тогда
        ЭтаФорма.НачатьРедактированиеЭлемента();
    #КонецЕсли
КонецПроцедуры

&НаСервере
Процедура ОбработатьСчитанныйШК(Текст)
   //................
КонецПроцедуры

Показать
7. starik-2005 3087 02.11.21 21:34 Сейчас в теме
Там все просто - добавляете два реквизита на форму, при открытии дергаете менеджер оборудования на тему подключения сканера, при закрытии формы (тоже на клиенте) дергаете отключение.

Дальше к вам в обработку оповещения (не во внешнее событие) будут прилетать события подоткнутого таким образом оборудования. Но нужно убедиться, что в форме обработка оповещения приаттачена к соответствующему событию, а не просто скопипащена извне...
8. deletel 03.11.21 14:12 Сейчас в теме
(7) Вот почему-то такой способ у меня и не зашёл. База с веб размещением и отладка клиентские процедуры пропускает и я никак не мог отследить клиентский сканер. И кстати, чтобы пикнуть сканером приходилось звонить клиенту. Я скоро выложу своё решение
9. starik-2005 3087 03.11.21 14:14 Сейчас в теме
(8)
Я скоро выложу своё решение
Интересно будет поглядеть на очередной костыль )())
12. deletel 08.11.21 15:58 Сейчас в теме
(9) Костыль - это изменение данных после их определения.
11. deletel 08.11.21 15:55 Сейчас в теме
&НаКлиенте
Процедура ШтрихкодПриИзменении(Элемент)             
	
	Штрихкод = Элементы.Штрихкод.ТекстРедактирования;
	ТекШтрихкод = Новый Структура;
	ТекШтрихкод.Вставить("Штрихкод", Штрихкод);   
	ТекШтрихкод.Вставить("Количество", 1);
	РазвернутьМассив(ТекШтрихкод);   
	Штрихкод = ""; 
	Элементы.Штрихкод.ОбновитьТекстРедактирования();
	Штрихкод = "";    
	
	ПодключитьОбработчикОжидания("ВернутьКурсорНаПолеВвода", 0.1, Истина);
    
КонецПроцедуры

&НаКлиенте
Процедура ВернутьКурсорНаПолеВвода()
    
    ЭтаФорма.ТекущийЭлемент = Элементы.Штрихкод;

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

&НаСервере 
Процедура РазвернутьМассив(ТекШтрихкод)
	
	РегистрыСведений.ШтрихкодыНоменклатуры.ПреобразоватьВесовойШтрихкод(ТекШтрихкод);
	МассивШтрихкодов = Новый Массив;
	МассивШтрихкодов.Добавить(ТекШтрихкод);
	ДанныеПоШтрихКодам = РегистрыСведений.ШтрихкодыНоменклатуры.ПолучитьДанныеПоШтрихкодам(МассивШтрихкодов);
	ДанныеШтрихкода = ДанныеПоШтрихкодам[ТекШтрихкод.Штрихкод];   
	Если НЕ ЗначениеЗаполнено(ДанныеШтрихкода) Тогда
		Сообщить("Такого штрих-кода не существует в базе!");
		Возврат;
	КонецЕсли;
	Ном = ДанныеШтрихкода.Номенклатура;
	Кол = ТекШтрихкод.Количество;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот