gifts2017

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

Опубликовал Константин (Fisherru) в раздел Программирование - Практика программирования

Несколько функций, служащих для проверки корректности введенного штрих-кода на соответствие 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. Василий Демидов (Душелов) 14.11.08 18:40
Оформлено не очень... Используйте
Код
 
Показать полностью

Для разметки кода.
2. Василий Демидов (Душелов) 14.11.08 18:40
В смысле code и /code в квадратных скобках.
3. Константин (Fisherru) 17.11.08 08:41
Спасибо, не обратил внимание, что так можно...
4. игорь тос (svet222) 22.01.12 17:01
5. Петр Астахов (Zebar) 19.02.13 11:12
Только не хватает еще формирования строки для печати штрих-кода шрифтом EANGNIVC - это дает огромную гибкость - не надо со внешними объектами заморачиваться, все, что нужно - это напечатать строку определенным шрифтом.
6. Валерий (valbir) 06.03.16 19:28
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа