Идет бета-тестирование портала. Об ошибках пишите нам или на форуме.

EAN 13, EAN 8 - контроль и формирование 1С 7.7

1

Методические материалы

14.11.2008

Описание

Несколько функций служащих для проверки корректности введенного штрих-кода на соответствие EAN 13, EAN 8.
Генерация ШК в формате EAN 13, EAN 8.

Видел в рассылке, что народ интересуется работой со штрих-кодами.
Это конечно элементарно и во многих местах есть, но может кому копать лень..

//Начало
ВвестиСтроку(ШК_Товара,"Введите штрих-код товара:",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)

1.
+ -
14.11.2008 18:11:16

Оформлено не очень... Используйте

 

Для разметки кода.

2.
+ -
14.11.2008 18:11:44

В смысле code и /code в квадратных скобках.

3.
+ -
17.11.2008 08:11:32

Спасибо, не обратил внимание, что так можно...

Для добавления комментария необходимо зарегистрироваться.
Есть вопросы?
тел. (812) 309-06-46
support@infostart.ru
Обратная связь
Логин :
Пароль :
Забыли пароль?

Статистика

Пользователей: 43872

См. также