Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 июл 2021, 16:54

Алгоритм генерации штрих кода

Автор PrimaGod, 15 июн 2021, 11:24

0 Пользователей и 1 гость просматривают эту тему.

PrimaGod

Подскажите где можно взять алгоритм? В интернете не могу найти. Через внешний обработчик хочу сделать генератор штрихкода на 9 символов, но алгоритмы не могу найти. И мне нужно чтоб в штрих коде было 9 цифр, это какой тип штрих кода мне подойдёт? EAN 8 - мало, EAN 13 много. Помогите!
UPD: Как я понял в EAN 8 максимум 8 символов, а в EAN 13 -только 13 символов.

LexaK

берите EAN 13
первыми делайте "0000" (четыре ноля) + 9 (ваши цифры) итого  13
ответ Понравился? (в смысле пригодился?)

PrimaGod

Цитата: LexaK от 15 июн 2021, 11:43
берите EAN 13
первыми делайте "0000" (четыре ноля) + 9 (ваши цифры) итого  13
А сам алгоритм можете подсказать где можно взять?

LexaK

да это вроде как любая строка (13) включая контрольный символ
в любой типовой
вот какой-то пример расчета контрольки

Функция КонтрольныйСимволEAN(ШтрихКод, Тип) Экспорт

Четн   = 0;
Нечетн = 0;

КоличествоИтераций = ?(Тип = 13, 6, 4);

Для Индекс = 1 По КоличествоИтераций Цикл
Если (Тип = 8) И (Индекс = КоличествоИтераций) Тогда
Иначе
Четн   = Четн   + Сред(ШтрихКод, 2 * Индекс, 1);
КонецЕсли;
Нечетн = Нечетн + Сред(ШтрихКод, 2 * Индекс - 1, 1);
КонецЦикла;

Если Тип = 13 Тогда
Четн = Четн * 3;
Иначе
Нечетн = Нечетн * 3;
КонецЕсли;

КонтЦифра = 10 - (Четн + Нечетн) % 10;

Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));

КонецФункции
ответ Понравился? (в смысле пригодился?)

PrimaGod

Спасибо! А можно теперь рассказать как использовать этот фрагмент кода? В Модуле обработчика завязать на кнопку этот код?

LexaK

посмотрите, вот какой-то пример где на вход подается какой-то свой счетчик чего-то, как-то анализируется добавляется "000"
и превращается в штихкод, почти как по вашей задачи, чуть-чуть переработайте и все у вас получится

Функция ПодготовитьШтрихкод(Знач Штрихкод) Экспорт

Если СтрДлина(Штрихкод) = 13 И Лев(Штрихкод, 2) = "2_" Тогда
Диапазон = ЗначениеНастроекПовтИсп.ДиапазонВесовыхШтрихкодовПоУмолчанию();

Если Диапазон = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Не определены диапазоны весовых штрихкодов.'");
КонецЕсли;

Строка = Диапазон + Сред(Штрихкод, 3, 5) + "00000";
Возврат Строка + КонтрольныйСимволEAN(Строка, 13);
КонецЕсли;

Возврат Штрихкод;

КонецФункции

ответ Понравился? (в смысле пригодился?)

PrimaGod

Цитата: LexaK от 15 июн 2021, 13:34
посмотрите, вот какой-то пример где на вход подается какой-то свой счетчик чего-то, как-то анализируется добавляется "000"
и превращается в штихкод, почти как по вашей задачи, чуть-чуть переработайте и все у вас получится

Функция ПодготовитьШтрихкод(Знач Штрихкод) Экспорт

Если СтрДлина(Штрихкод) = 13 И Лев(Штрихкод, 2) = "2_" Тогда
Диапазон = ЗначениеНастроекПовтИсп.ДиапазонВесовыхШтрихкодовПоУмолчанию();

Если Диапазон = Неопределено Тогда
ВызватьИсключение НСтр("ru = 'Не определены диапазоны весовых штрихкодов.'");
КонецЕсли;

Строка = Диапазон + Сред(Штрихкод, 3, 5) + "00000";
Возврат Строка + КонтрольныйСимволEAN(Строка, 13);
КонецЕсли;

Возврат Штрихкод;

КонецФункции


А можно как-то фиксированной первые 3 цифры сделать? Просто мне дали задачу сделать генератор ШК, сказали чтоб первые 3 цифры везде одинаковые а остальные 6 это инвентарный номер.

LexaK

так выложи ли же пример, переставить части строчки вызывает такие затруднения?


примерно так
ВашиФиксЦифры = "567";
Строка = ВашиФиксЦифры + ВашСчетчик + "00000"; //где-то (в любой части строки) добавить нули до длины 12/13 символов
или так
Строка = "00000" + ВашиФиксЦифры + ВашСчетчик; //где-то (в любой части строки) добавить нули до длины 12/13 символов
или так
Строка = ВашиФиксЦифры + "00000" + ВашСчетчик; //где-то (в любой части строки) добавить нули до длины 12/13 символов

Возврат Строка + КонтрольныйСимволEAN(Строка, 13); //плюс контролька
ответ Понравился? (в смысле пригодился?)

Теги:

Похожие темы (5)

41421

Ответов: 0
Просмотров: 3563

71001

Ответов: 0
Просмотров: 727

30876

Ответов: 3
Просмотров: 13334

76597

Ответов: 0
Просмотров: 231

Рейтинг@Mail.ru Rambler's Top100

Поиск