EAN 13, EAN 8 - контроль и формирование 1С 7.7
1Методические материалы
14.11.2008
Fisherru
Описание
Генерация ШК в формате EAN 13, EAN 8.
Видел в рассылке, что народ интересуется работой со штрих-кодами.
Это конечно элементарно и во многих местах есть, но может кому копать лень..
//Начало
//это используется для контроля
гтТестШтрихКода , глКонтрольныйСимволEAN
//а вот для генерации, например для весового товара или собственных наклеек
//диапазон для префикса, если не ошибаюсь 20-29, он никогда не используется производителями
//дальше 10 символов - чего хотите (код товара в учетной программе, цена, вес, скидка и т.д., можно в комбинации),
//ну и контрольный символ ;-)
глСформироватьШтрихкод , СимволыВЦифры , глДополнитьСтрокуЛ , глКонтрольныйСимволEAN
использование СимволыВЦифры и глДополнитьСтрокуЛ в глСформироватьШтрихкод - мне кажется избыточным,
но возможно это для чего-нибудь нужно... :)
//А это в глобальнике:
//******************************************************************************
// глДополнитьСтрокуЛ(Стр,Чем,Длина)
//
// Параметры:
// Стр - исходная строка
// Чем - символ, которым дополняем строку
// Длина - длина, до которой заполняем строку
//
// Возвращаемое значение:
// Результирующая строка
//
// Описание:
// Дополняет передаваемую строку Стр символами Чем до строки длиной Длина
// слева
//
//******************************************************************************
// глКонтрольныйСимволEAN(ШтрКод, Тип)
//
// Параметры:
// ШтрКод - 12-символьный штрих-код (без контрольной цифры)
// Тип - тип штрихкода: 13 - EAN13, 8 - EAN8
//
// Возвращаемое значение:
// Контрольный символ
//
// Описание:
// Функция вычисляет контрольный символ кода EAN
//
//************
//******************************************************************************
// СтрокаВЦифры(Стр)
//
// Параметры:
// Стр - строка символов
//
// Возвращаемое значение:
// Строку, сосотоящую только из символов цифр
//
// Описание:
// Из исходной строки переносит в результирующую строку символы, при этом,
// если символ не является цифровым, то в результирующую строку переносится
// символ цифры, который является самым правым в коде символа исходной строки
//
//******************************************************************************
// глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13)
//
// Параметры:
// Префикс - префикс штрихкода (строка из 2-х символов)
// ПредвКод - строка, содержащая символы из которых нужно сформировать штрих-код
// ТипКода - тип формируемого штрихкода. Возможные значения:
// 13 - для формирования EAN 13 (по умолчанию)
// 8 - для формирования EAN 8
// Возвращаемое значение:
// Нет
//
// Описание:
// На основании кода Номенклатуры и кода ОКЕИ формирует штрихкод в формате EAN
//
Собственно всё...
Это конечно элементарно и во многих местах есть, но может кому копать лень..
//Начало
ВвестиСтроку(ШК_Товара,"Введите штрих-код товара:",13,0,);
Если гтТестШтрихКода(ШК_Товара)=0 Тогда
Предупреждение("Внимание! Штрих-код не соответствует EAN-13");
КонецЕсли;
//это используется для контроля
гтТестШтрихКода , глКонтрольныйСимволEAN
//а вот для генерации, например для весового товара или собственных наклеек
//диапазон для префикса, если не ошибаюсь 20-29, он никогда не используется производителями
//дальше 10 символов - чего хотите (код товара в учетной программе, цена, вес, скидка и т.д., можно в комбинации),
//ну и контрольный символ ;-)
Процедура ПоКнопкеГенерацияШтрихКода() КодТовара= глДополнитьСтрокуЛ(СокрЛП(Код), "0", 10); ШтрихКод = глСформироватьШтрихкод(глПрефиксШтучногоШК, КодТовара); // и т.д. ... КонецПроцедуры
глСформироватьШтрихкод , СимволыВЦифры , глДополнитьСтрокуЛ , глКонтрольныйСимволEAN
использование СимволыВЦифры и глДополнитьСтрокуЛ в глСформироватьШтрихкод - мне кажется избыточным,
но возможно это для чего-нибудь нужно... :)
//А это в глобальнике:
//******************************************************************************
// глДополнитьСтрокуЛ(Стр,Чем,Длина)
//
// Параметры:
// Стр - исходная строка
// Чем - символ, которым дополняем строку
// Длина - длина, до которой заполняем строку
//
// Возвращаемое значение:
// Результирующая строка
//
// Описание:
// Дополняет передаваемую строку Стр символами Чем до строки длиной Длина
// слева
//
Функция глДополнитьСтрокуЛ(Стр,Чем,Длина) Экспорт Добавить=Длина-СтрДлина(Стр); Добавок=""; Для Сч = 1 По Добавить Цикл Добавок=Добавок+Чем; КонецЦикла; Возврат Добавок+Стр; КонецФункции //глДополнитьСтрокуЛ()
//******************************************************************************
// глКонтрольныйСимволEAN(ШтрКод, Тип)
//
// Параметры:
// ШтрКод - 12-символьный штрих-код (без контрольной цифры)
// Тип - тип штрихкода: 13 - EAN13, 8 - EAN8
//
// Возвращаемое значение:
// Контрольный символ
//
// Описание:
// Функция вычисляет контрольный символ кода EAN
//
Функция глКонтрольныйСимволEAN(ШтрКод, Тип) Экспорт
Четн = 0;
Нечетн = 0;
Если Тип = 13 Тогда
КолвоИтераций = 6;
Иначе
КолвоИтераций = 4;
КонецЕсли;
Для Индекс = 1 По КолвоИтераций Цикл
Четн = Четн + Сред(ШтрКод, 2 * Индекс, 1);
Нечетн = Нечетн + Сред(ШтрКод, 2 * Индекс - 1, 1);
КонецЦикла;
Если Тип = 13 Тогда
Четн = Четн * 3;
Иначе
Нечетн = Нечетн * 3;
КонецЕсли;
КонтЦифра = 10 - (Четн + Нечетн) % 10;
Возврат ?(КонтЦифра = 10, "0", Строка(КонтЦифра));
КонецФункции // глКонтрольныйСимволEAN()
//************
Функция гтТестШтрихКода(ШК) Экспорт
Рез=1;
ДлинаШК = СтрДлина(ШК);
Если ДлинаШК <> 13 Тогда
сообщить("Длина штрих-кода не равна 13 символам! Проверьте его правильность! ");
Рез=0;
КонецЕсли;
Тест=глКонтрольныйСимволEAN(ШК, 13);
Если Сред(ШК,13,1) <> Тест Тогда
сообщить("Неверный штрих-код! Проверьте");
Рез=0;
КонецЕсли;
Возврат(Рез);
КонецФункции
//******************************************************************************
// СтрокаВЦифры(Стр)
//
// Параметры:
// Стр - строка символов
//
// Возвращаемое значение:
// Строку, сосотоящую только из символов цифр
//
// Описание:
// Из исходной строки переносит в результирующую строку символы, при этом,
// если символ не является цифровым, то в результирующую строку переносится
// символ цифры, который является самым правым в коде символа исходной строки
//
Функция СимволыВЦифры(СтрСимв)
СтрЦифр = "";
Для Индекс = 1 По СтрДлина(СтрСимв) Цикл
ТекСимв = Сред(СтрСимв, Индекс, 1);
Если Найти("1234567890", ТекСимв) = 0 Тогда
// преобразуем символ
ТекСимв = Строка(КодСимв(ТекСимв) % 10);
КонецЕсли;
СтрЦифр = СтрЦифр + ТекСимв;
КонецЦикла;
Возврат СтрЦифр;
КонецФункции // СтрокаВЦифры()
//******************************************************************************
// глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13)
//
// Параметры:
// Префикс - префикс штрихкода (строка из 2-х символов)
// ПредвКод - строка, содержащая символы из которых нужно сформировать штрих-код
// ТипКода - тип формируемого штрихкода. Возможные значения:
// 13 - для формирования EAN 13 (по умолчанию)
// 8 - для формирования EAN 8
// Возвращаемое значение:
// Нет
//
// Описание:
// На основании кода Номенклатуры и кода ОКЕИ формирует штрихкод в формате EAN
//
Функция глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13) Экспорт Если ТипКода = 13 Тогда ИспКолво = 10; Иначе ИспКолво = 6; КонецЕсли; Штрихкод = СимволыВЦифры(Прав(СокрЛП(ПредвКод), ИспКолво)); Штрихкод = Префикс + глДополнитьСтрокуЛ(Штрихкод, "0", ИспКолво); Возврат Штрихкод + глКонтрольныйСимволEAN(Штрихкод, ТипКода); КонецФункции // глСформироватьШтрихкод()
Собственно всё...
Оценка сообщества
|
Плюсы (+1):
|
Добавить плюс Добавить минус
Комментарии (3)
2.
3.
Для добавления комментария необходимо зарегистрироваться.



Оформлено не очень... Используйте
Для разметки кода.