Обрезать qr код

1. Greek26rusa 2 14.05.17 22:32 Сейчас в теме
Добрый день вопрос состоит в том как отрезать штрих код.

Товар поставщика весь про макрирован qr кодами что бы заного не проклеивать хотел бы использовать его коды. ну дела в том что его код состоит из 2х блоков первый это штрих кода 13 значный ean 13 стоит пробел и 2 блок это служебные цифры определяющий дату номер и число сортировки.

то есть при сканировании qr кода выплывает вот такая длинная строка

2000013001061 3700011101013
а мне нужно что бы при сканировании этого qr кода он сканировал только первые 13 цифр и все. qr код прикладываю к скрину. помогите добрые люди.

Подскажите добрые люди как можно поправить функцию

Функция ПроверитьШтрихКод(ШтрихКод, ТипШтрихкода) Экспорт

	ДлинаКода = СтрДлина(Штрихкод);

	Если ДлинаКода = 0 Тогда
		Возврат Ложь;
	Иначе
		Если ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
			Если (ДлинаКода <> 13)
			 Или НЕ(ТолькоЦифры(Штрихкод)) // штрихкод должен состоять из цифр
			 Или КонтрольныйСимволEAN(Лев(Штрихкод,12), 13) <> Прав(Штрихкод, 1) Тогда
				Возврат Ложь;
			КонецЕсли;
		ИначеЕсли ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
			Если (ДлинаКода <> 8)
			 Или НЕ(ТолькоЦифры(Штрихкод)) // штрихкод должен состоять из цифр
			Или КонтрольныйСимволEAN(Лев(Штрихкод, 7), 8 ) <> Прав(Штрихкод, 1) Тогда
				Возврат Ложь;
			КонецЕсли;
		ИначеЕсли ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
			Условие = 13;//СтрДлина(ШтрихКод) - 1;
			Для Индекс = 0 По Условие Цикл
				Символ = Лев(Прав(Штрихкод, Условие - Индекс + 1), 1);
				Если НЕ (((Символ >= "0") И (Символ <= "9"))
					ИЛИ	((Символ >= "A") И (Символ <= "Z"))
					ИЛИ (Символ = "-")
					ИЛИ (Символ = ".")
					ИЛИ (Символ = " ")
					ИЛИ (Символ = "$")
					ИЛИ (Символ = "/")
					ИЛИ (Символ = "+")
					ИЛИ (Символ = "%")
					ИЛИ (Символ = "*")) Тогда
					Возврат Ложь;
				КонецЕсли
			КонецЦикла;
		ИначеЕсли ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 
				ИЛИ ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
			Условие = СтрДлина(ШтрихКод) - 1;
			Для Индекс = 0 По Условие Цикл
				Если КодСимвола(ШтрихКод, Индекс) > 127 Тогда
					Возврат Ложь;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		Возврат Истина;
	КонецЕсли;
	Возврат Ложь;
КонецФункции // ПроверитьШтрихКод()



функция отвечающая за цифры
Функция ТолькоЦифры(Штрихкод)

	Для Сч = 1 По СтрДлина(Штрихкод) Цикл
		Символ = Сред(Штрихкод, Сч, 1);
		Если НЕ(Найти("0123456789", Символ)) Тогда
			Возврат Ложь;
		КонецЕсли;
	КонецЦикла;

	Возврат Истина;

КонецФункции // ТолькоЦифры()
Показать
Прикрепленные файлы:
code (132?132).pdf
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. olegmedvedev 65 15.05.17 09:24 Сейчас в теме
(1) Вам нужно сделать обработку Штрихкода до проверки на ТипШтрихкода примерно следующим образом:
Строка = "2000013001061 3700011101013"; //ваш получаемый штрихкод
ШК = СтрПолучитьСтроку(СтрЗаменить(Строка," ",Символы.пс), 1);//делим строку на две строки по пробелу, берем только первую строку 
Yakud3a; KazanKokos; +2 Ответить
3. Greek26rusa 2 15.05.17 13:14 Сейчас в теме
(2)А если у меня 2 половина штрих кода будет постоянно меняться.Мне нужно отдельную сделать обработку? или же могу добавить в текущию ?
допустим до начала проверки ШК как вы уже написали
4. tjurikov_ivan 215 15.05.17 13:41 Сейчас в теме
(3)Тут вторая часть не имеет значения, вам же нужна первая до пробела, вот если этого пробела не будет, то он и не обрежет
Думаю можно и в текущую вставить, не помню, что бы стандартные штрихкоды были с пробелами
6. Greek26rusa 2 15.05.17 15:11 Сейчас в теме
(4)это же qr код там может) то есть я вставляю эту строку перед


Если ДлинаКода = 0 Тогда правильно?
8. tjurikov_ivan 215 15.05.17 15:14 Сейчас в теме
(6) Если других QR кодов считывать не собираетесь, то тогда можно в эту, и добавить думаю это нужно перед первой строчкой "ДлинаКода = СтрДлина(Штрихкод);"
10. Greek26rusa 2 15.05.17 15:26 Сейчас в теме
(8)попробывал все ровно читает все(
11. olegmedvedev 65 15.05.17 15:42 Сейчас в теме
(10) значит не туда вставили. код рабочий. поясняю подробнее:
Строка = "2000013001061 3700011101013"; //ваш получаемый штрихкод. 
вот тут тот штрихкод, что у вас получается после сканирования.эта строка может быть любой, тк пришла со сканера.
ШК = СтрПолучитьСтроку(СтрЗаменить(Строка," ",Символы.пс), 1);//делим строку на две строки по пробелу, берем только первую строку

тут мы делаем два действия СтрЗаменить(Строка," ",Символы.пс) - превращаем вашу однострочную строку в многосторочную, первая строка до пробела и вторая после пробела.

было:
2000013001061 3700011101013
стало:
2000013001061
3700011101013

СтрПолучитьСтроку(xxx,1) - берем только первую строку из получившейся многострочной строки, то есть

2000013001061

вам нужно скорее всего воткнуться вот сюда:

Функция ПроверитьШтрихКод(ШтрихКод, ТипШтрихкода) Экспорт
//добавлено начало
Штрихкод= СтрПолучитьСтроку(СтрЗаменить(Штрихкод," ",Символы.пс), 1);
//конец
ДлинаКода = СтрДлина(Штрихкод);
13. Greek26rusa 2 15.05.17 15:49 Сейчас в теме
(11)
Функция ПроверитьШтрихКод(ШтрихКод, ТипШтрихкода) Экспорт
	  Строка = "2000013001061 3700011101012";
	  ШтрихКод = СтрПолучитьСтроку(СтрЗаменить(Строка," ",Символы.пс), 1);//делим строку на две строки по пробелу, берем только первую строку

	ДлинаКода = СтрДлина(Штрихкод);

	Если ДлинаКода = 0 Тогда
		Возврат Ложь;
	Иначе
		Если ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
			Если (ДлинаКода <> 13)
			 Или не (ТолькоЦифры(Штрихкод)) // штрихкод должен состоять из цифр
			 Или КонтрольныйСимволEAN(Лев(Штрихкод,12), 13) <> Прав(Штрихкод, 1) Тогда
				Возврат Ложь;
			КонецЕсли;
		ИначеЕсли ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
			Если (ДлинаКода <> 8)
			 Или НЕ(ТолькоЦифры(Штрихкод)) // штрихкод должен состоять из цифр
			Или КонтрольныйСимволEAN(Лев(Штрихкод, 7), 8 ) <> Прав(Штрихкод, 1) Тогда
				Возврат Ложь;
		КонецЕсли;
		ИначеЕсли ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
			Условие = СтрДлина(ШтрихКод) - 1;
			Для Индекс = 0 По Условие Цикл
				Символ = Лев(Прав(Штрихкод, Условие - Индекс + 1), 1);
				Если НЕ (((Символ >= "0") И (Символ <= "9"))
					ИЛИ	((Символ >= "A") И (Символ <= "Z"))
					ИЛИ (Символ = "-")
					ИЛИ (Символ = ".")
					ИЛИ (Символ = " ")
					ИЛИ (Символ = "$")
					ИЛИ (Символ = "/")
					ИЛИ (Символ = "+")
					ИЛИ (Символ = "%")
					ИЛИ (Символ = "*")) Тогда
					Возврат Ложь;
				КонецЕсли
			КонецЦикла;
	ИначеЕсли ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 
				ИЛИ ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
			Условие = СтрДлина(ШтрихКод) - 1;
			Для Индекс = 0 По Условие Цикл
				Если КодСимвола(ШтрихКод, Индекс) > 127 Тогда
					Возврат Ложь;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		Возврат Истина;
	КонецЕсли;
	Возврат Ложь;
КонецФункции // ПроверитьШтрихКод()
Показать
16. Greek26rusa 2 15.05.17 16:00 Сейчас в теме
(11)
Штрихкод= СтрПолучитьСтроку(СтрЗаменить(Штрихкод," ",Символы.пс), 1);


Добавил все ровно читает все
18. olegmedvedev 65 15.05.17 16:02 Сейчас в теме
(16) значит вы используете не ту процедуру. Посмотрите в отладчике, в стеке вызовов, какая процедура получает штрихкод.
20. Greek26rusa 2 15.05.17 16:08 Сейчас в теме
(18)А как это сделать? отладчик знаю где как проверить стек?
12. tjurikov_ivan 215 15.05.17 15:43 Сейчас в теме
(10) в самом начале процедуры напишите
Штрихкод= СтрПолучитьСтроку(СтрЗаменить(Штрихкод," ",Символы.пс), 1);
14. Greek26rusa 2 15.05.17 15:54 Сейчас в теме
(12)Пишу читает все( я сделал 2 штрих кода у позиции для проверки

Номенклатура
Тест
2000013001061 3700011101012 это единица упк
2000013001061 шт

При сканировании qr кода добавляет упаковку
17. Greek26rusa 2 15.05.17 16:02 Сейчас в теме
(12)
ПроверитьШтрихКод(ШтрихКод, ТипШтрихкода) Экспорт
	
	 Штрихкод= СтрПолучитьСтроку(СтрЗаменить(Штрихкод," ",Символы.пс), 1);

	ДлинаКода = СтрДлина(Штрихкод);

	Если ДлинаКода = 0 Тогда
		Возврат Ложь;
	Иначе
		Если ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
			Если (ДлинаКода <> 13)
			 Или не (ТолькоЦифры(Штрихкод)) // штрихкод должен состоять из цифр
			 Или КонтрольныйСимволEAN(Лев(Штрихкод,12), 13) <> Прав(Штрихкод, 1) Тогда
				Возврат Ложь;
			КонецЕсли;
		ИначеЕсли ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
			Если (ДлинаКода <> 8)
			 Или НЕ(ТолькоЦифры(Штрихкод)) // штрихкод должен состоять из цифр
			Или КонтрольныйСимволEAN(Лев(Штрихкод, 7), 8 ) <> Прав(Штрихкод, 1) Тогда
				Возврат Ложь;
		КонецЕсли;
		ИначеЕсли ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
			Условие = СтрДлина(ШтрихКод) - 1;
			Для Индекс = 0 По Условие Цикл
				Символ = Лев(Прав(Штрихкод, Условие - Индекс + 1), 1);
				Если НЕ (((Символ >= "0") И (Символ <= "9"))
					ИЛИ	((Символ >= "A") И (Символ <= "Z"))
					ИЛИ (Символ = "-")
					ИЛИ (Символ = ".")
					ИЛИ (Символ = " ")
					ИЛИ (Символ = "$")
					ИЛИ (Символ = "/")
					ИЛИ (Символ = "+")
					ИЛИ (Символ = "%")
					ИЛИ (Символ = "*")) Тогда
					Возврат Ложь;
				КонецЕсли
			КонецЦикла;
	ИначеЕсли ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 
				ИЛИ ТипШтрихКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
			Условие = СтрДлина(ШтрихКод) - 1;
			Для Индекс = 0 По Условие Цикл
				Если КодСимвола(ШтрихКод, Индекс) > 127 Тогда
					Возврат Ложь;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		Возврат Истина;
	КонецЕсли;
	Возврат Ложь;
КонецФункции // ПроверитьШтрихКод()
Показать



Без результатно
9. Greek26rusa 2 15.05.17 15:26 Сейчас в теме
(2)
Строка = "2000013001061 3700011101013"; //ваш получаемый штрихкод
ШК = СтрПолучитьСтроку(СтрЗаменить(Строка," ",Символы.пс), 1);//делим строку на две строки по пробелу, берем только первую строку


Если вам не трудно можете по подробней объяснить ?
5. user726855 2 15.05.17 14:21 Сейчас в теме
А по -моему в настройках сканера бывает такая штука, чтобы обрезать по какой-то длине... не?
7. Greek26rusa 2 15.05.17 15:12 Сейчас в теме
(5)Не знаю не сталкивался если знаете подскажите
15. Greek26rusa 2 15.05.17 15:55 Сейчас в теме
Может быть не эта функция просто отвечает за это?
19. tjurikov_ivan 215 15.05.17 16:05 Сейчас в теме
(15)точно, попробуйте в отладке посмотреть функцию
МенеджерОборудованияКлиент.ПреобразоватьДанныеСоСканераВМассив
Там должен получаться массив с штрихкодами
или в документе в форме обработку оповещения
21. Greek26rusa 2 15.05.17 16:14 Сейчас в теме
(19)
МенеджерОборудованияКлиент.ПреобразоватьДанныеСоСканераВМасси


не подскажите подробней как это сделать?
22. olegmedvedev 65 15.05.17 16:15 Сейчас в теме
(21) 1)ставим точку останова
2) вызываем стек
3) внизу пишутся процедуры откуда что и куда
Прикрепленные файлы:
23. Greek26rusa 2 15.05.17 16:22 Сейчас в теме
(22)это я понял а над какой процедурой точку поставить как ее найти(?
24. Greek26rusa 2 15.05.17 16:26 Сейчас в теме
может быть обработка внешняя отвечает за сканирования? там есть такая функция

Функция ОбработатьСобытиеСШК(Объект, Событие, Данные, ШК, ТипШК) Экспорт

	Результат = мНетОшибки;
	ШК        = СокрЛП(Данные);

	Объект.Драйвер.ПосылкаДанных = 0;

	Если Объект.Параметры.Префикс <> 0 Тогда
		Если Объект.Параметры.Префикс = Лев(ШК, 1) Тогда
			ШК = Сред(ШК, 2);
		КонецЕсли;
	КонецЕсли;

	Возврат Результат;

КонецФункции // ОбработатьВнешнееСобытиеСШК()
Показать
25. Greek26rusa 2 15.05.17 16:27 Сейчас в теме
ну стека она не показывает
26. tjurikov_ivan 215 15.05.17 18:20 Сейчас в теме
(25)надо открыть табло и внизу в таблице в левой колонке написать название переменной
27. Greek26rusa 2 15.05.17 20:20 Сейчас в теме
(26)Какое табло открыть? можно по подробней если вас не затруднит(
28. Greek26rusa 2 15.05.17 21:05 Сейчас в теме
Вопрос закрыт спасибо кто пытался помочь. Суффикс 32 решил проблему
Оставьте свое сообщение

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