Добрый день вопрос состоит в том как отрезать штрих код.
Товар поставщика весь про макрирован qr кодами что бы заного не проклеивать хотел бы использовать его коды. ну дела в том что его код состоит из 2х блоков первый это штрих кода 13 значный ean 13 стоит пробел и 2 блок это служебные цифры определяющий дату номер и число сортировки.
то есть при сканировании qr кода выплывает вот такая длинная строка
2000013001061 3700011101013
а мне нужно что бы при сканировании этого qr кода он сканировал только первые 13 цифр и все. qr код прикладываю к скрину. помогите добрые люди.
Подскажите добрые люди как можно поправить функцию
Товар поставщика весь про макрирован 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
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Вам нужно сделать обработку Штрихкода до проверки на ТипШтрихкода примерно следующим образом:
Строка = "2000013001061 3700011101013"; //ваш получаемый штрихкод
ШК = СтрПолучитьСтроку(СтрЗаменить(Строка," ",Символы.пс), 1);//делим строку на две строки по пробелу, берем только первую строку
(10) значит не туда вставили. код рабочий. поясняю подробнее:
вот тут тот штрихкод, что у вас получается после сканирования.эта строка может быть любой, тк пришла со сканера.
тут мы делаем два действия СтрЗаменить(Строка," ",Символы.пс) - превращаем вашу однострочную строку в многосторочную, первая строка до пробела и вторая после пробела.
было:
2000013001061 3700011101013
стало:
2000013001061
3700011101013
СтрПолучитьСтроку(xxx,1) - берем только первую строку из получившейся многострочной строки, то есть
2000013001061
вам нужно скорее всего воткнуться вот сюда:
Строка = "2000013001061 3700011101013"; //ваш получаемый штрихкод.
ШК = СтрПолучитьСтроку(СтрЗаменить(Строка," ",Символы.пс), 1);//делим строку на две строки по пробелу, берем только первую строку
тут мы делаем два действия СтрЗаменить(Строка," ",Символы.пс) - превращаем вашу однострочную строку в многосторочную, первая строка до пробела и вторая после пробела.
было:
2000013001061 3700011101013
стало:
2000013001061
3700011101013
СтрПолучитьСтроку(xxx,1) - берем только первую строку из получившейся многострочной строки, то есть
2000013001061
вам нужно скорее всего воткнуться вот сюда:
Функция ПроверитьШтрихКод(ШтрихКод, ТипШтрихкода) Экспорт
//добавлено начало
Штрихкод= СтрПолучитьСтроку(СтрЗаменить(Штрихкод," ",Символы.пс), 1);
//конец
ДлинаКода = СтрДлина(Штрихкод);
(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 Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ПроверитьШтрихКод()
Показать
(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 Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции // ПроверитьШтрихКод()
ПоказатьБез результатно
может быть обработка внешняя отвечает за сканирования? там есть такая функция
Функция ОбработатьСобытиеСШК(Объект, Событие, Данные, ШК, ТипШК) Экспорт
Результат = мНетОшибки;
ШК = СокрЛП(Данные);
Объект.Драйвер.ПосылкаДанных = 0;
Если Объект.Параметры.Префикс <> 0 Тогда
Если Объект.Параметры.Префикс = Лев(ШК, 1) Тогда
ШК = Сред(ШК, 2);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции // ОбработатьВнешнееСобытиеСШК()
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот