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

14.11.08

Разработка - Универсальные функции

Несколько функций, служащих для проверки корректности введенного штрих-кода на соответствие 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С: Предприятие 7.7"

Универсальные функции Платформа 1С v7.7 Россия Абонемент ($m)

В библиотеку собраны различные функции по работе с документами, журналами, типами данных, строками, датой и временем, таблицами значений, Excel, файлами, XML, JSON, Http-сервисами, SMTP серверами и т.п.

1 стартмани

22.12.2023    657    9    user706545_kseg1971    0    

4

1С 7.7 и новый 1С:Контрагент

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Россия Бесплатно (free)

Получение реквизитов контрагентов из 1С:Контрагент для старых конфигураций под 1с 7.7.

25.04.2022    1820    zhenyat    7    

6

Печать таблицы значений в 1С 7.7 при отладке

Универсальные функции Платформа 1С v7.7 Россия Бесплатно (free)

Функция выводит таблицу значений в табличный документ. (v7.7) Особенно полезно при отладке. Не нужно вносить изменения в код, вызываем функцию как вычисляемое выражение при останове. Если таблица обрабатывается в несколько этапов, можно вывести её после каждого и визуально проследить эволюцию.

30.06.2021    4401    Zoltan_Black    11    

2

Установка принтера по умолчанию для 1С 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    13286    4    alsen    3    

4

Формирование строки json в 1С: 7.7

Универсальные функции Платформа 1С v7.7 Конфигурации 1cv7 1С:Комплексная 7.7 Абонемент ($m)

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    10100    malovandrey    3    

18

Как создать индикатор в 1С:Предприятии 7.7

Универсальные функции Работа с интерфейсом Платформа 1С v7.7 Конфигурации 1cv7 Россия Абонемент ($m)

В статье дано описание создания индикатора на форме в среде разработки 1С:Предприятие 7.7 исключительно типовыми средствами.

1 стартмани

27.09.2016    18674    2    HAMMER_59    6    

2
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Душелов 4014 14.11.08 18:40 Сейчас в теме
Оформлено не очень... Используйте
Код
 
Показать полностью

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