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

1. deletel 01.11.21 17:11 Сейчас в теме
Управление нашей фирмой 1.6. Платформа 19.1264. Создал обработку с табличной частью на форме "СписокНоменклатуры" с колонками Номенклатура, Количество, Продукция. Как сканированием штрихкодов заполнять таблицу номенклатурой?
В форме есть реквизиты "ИспользоватьПодключаемоеОборудование"(булево) И "ПоддерживаемыеТипыПодключаемогоОборудования"(строка). Взял все процедуры и функции с документа перемещения касаемые штрих-кодов + ОбработкаОповещение. Буду так же рад ответу на вопрос: "Почему при сканировании первой отрабатывает процедура ПолучитьДанныеПоШтрихКодам, которая &НаСервереБезКонтекста?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
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 142 04.11.21 12:47 Сейчас в теме
(2)

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

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

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

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

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

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

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

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

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

Аналитик
Москва
зарплата от 150 000 руб.
Полный день

Разработчик 1С
Москва
зарплата от 150 000 руб.
Полный день

Программист 1С
Кемерово
зарплата от 80 000 руб. до 180 000 руб.
Полный день

Аналитик 1С:ЗУП
Москва
зарплата от 150 000 руб.
Полный день