http://www.1c-galaxy.ru/forum4/topic476287/
http://help1c.com/faq8/best/77.html
http://www.tirika.ru/freebies/generator-shtrih-kodov/
Функция КонтрольныйСимволШК(ШтрКод) Экспорт
Чет = 0;
Нечет = 0;
х = 0;
ДлинаШК = СтрДлина(ШтрКод);
Пока х < ДлинаШК Цикл
Символ = Сред(ШтрКод, ДлинаШК-х, 1);
Если х%2 = 0 тогда // четный символ
Чет = Чет+ Число(Символ)
Иначе
Нечет= Нечет+ Число(Символ)
КонецЕсли;
х = х + 1;
КонецЦикла;
КонтЦифра= 10- (Нечет+ Чет*3)%10;
Возврат ?(КонтЦифра=10, "0", Строка(КонтЦифра));
КонецФункции // глКонтрольныйСимволШК()
Функция NumberToUpperChar( Num ) Экспорт
UpperCharSet = "ABCDEFGHIJ";
Num = Число(Прав(Num,1));
Стр = Сред(UpperCharSet, Num + 1, 1);
Возврат Стр;
КонецФункции
Функция NumberToLowerChar( Num ) Экспорт
LowerCharSet = "abcdefghij";
Num = Число(Прав(Num,1));
Стр = Сред(LowerCharSet, Num + 1, 1);
Возврат Стр;
КонецФункции
Функция СформироватьКодEAN13(код) Экспорт
// Проверки
Если ТипЗначения(код) 1 Тогда
Сообщить("Код для EAN13 должен числовым.");
Возврат "";
КонецЕсли;
Если СтрДлина(код) > 13 Тогда
Сообщить("Код для EAN13 должен быть длинной не более 12 символов.");
Возврат "";
КонецЕсли;
// Разбор строки
ПервыйФлаг = Число(Сред(код,1,1));
левстр = Сред(код,2,6);
правстр = Сред(код,8,6);
правкод = "";
Для Поз = 1 По 6 Цикл
правкод = правкод + NumberToLowerChar(Сред(правстр,Поз,1));
КонецЦикла;
// Формирование левой части кода зависит от значениа ПервыйФлаг
Если ПервыйФлаг = 0 Тогда
// 0 A A A A A
левкод = "#!" + Лев(левстр,1)
+ Сред(левстр,2,1)
+ Сред(левстр,3,1)
+ Сред(левстр,4,1)
+ Сред(левстр,5,1)
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 1 Тогда
// 1 A A B A B B
левкод = "$!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 2 Тогда
// 2 A A B B A B
левкод = "%!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 3 Тогда
// 3 A A B B B A
левкод = "&!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 4 Тогда
// 4 A B A A B B
левкод = "'!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 5 Тогда
// 5 A B B A A B
левкод = "(!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 6 Тогда
// 6 A B B B A A
левкод = ")!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 7 Тогда
// 7 A B A B A B
левкод = "*!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 8 Тогда
// 8 A B A B B A
левкод = "+!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ NumberToUpperChar(Сред(левстр,4,1))
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 9 Тогда
// 9 A B B A B A
левкод = ",!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
КонецЕсли;
// Получение строки - результата
кодстр = левкод + "-" + правкод + "!";
Возврат кодстр;
КонецФункции // СформироватьКодEAN13()
//*******************************************
Функция СимволыВЦифры(СтрСимв) Экспорт
СтрЦифр = "";
Для х= 1 По СтрДлина(СтрСимв) Цикл
ТекСимв = Сред(СтрСимв, х, 1);
Если Найти("1234567890", ТекСимв)= 0 Тогда
// преобразуем символ в цифру
ТекСимв = Строка(КодСимв(ТекСимв) % 10);
КонецЕсли;
СтрЦифр = СтрЦифр + ТекСимв;
КонецЦикла;
Возврат СтрЦифр;
КонецФункции // СимволыВЦифры()
//*******************************************
Функция глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13) Экспорт
Если ТипКода = 13 Тогда
ИспКолво = 10;
Иначе
ИспКолво = 6;
КонецЕсли;
Штрихкод = СимволыВЦифры(Прав(СокрЛП(ПредвКод), ИспКолво));
Штрихкод = Префикс + СтрЗаменить(Формат(Штрихкод, "С"+ИспКолво), " ", "0");
Штрихкод = СформироватьКодEAN13(Число(СокрЛП(Штрихкод) + КонтрольныйСимволШК(Штрихкод)));
Возврат Штрихкод;
КонецФункции // СформироватьШтрихкод()
http://help1c.com/faq8/best/77.html
http://www.tirika.ru/freebies/generator-shtrih-kodov/
Функция КонтрольныйСимволШК(ШтрКод) Экспорт
Чет = 0;
Нечет = 0;
х = 0;
ДлинаШК = СтрДлина(ШтрКод);
Пока х < ДлинаШК Цикл
Символ = Сред(ШтрКод, ДлинаШК-х, 1);
Если х%2 = 0 тогда // четный символ
Чет = Чет+ Число(Символ)
Иначе
Нечет= Нечет+ Число(Символ)
КонецЕсли;
х = х + 1;
КонецЦикла;
КонтЦифра= 10- (Нечет+ Чет*3)%10;
Возврат ?(КонтЦифра=10, "0", Строка(КонтЦифра));
КонецФункции // глКонтрольныйСимволШК()
Функция NumberToUpperChar( Num ) Экспорт
UpperCharSet = "ABCDEFGHIJ";
Num = Число(Прав(Num,1));
Стр = Сред(UpperCharSet, Num + 1, 1);
Возврат Стр;
КонецФункции
Функция NumberToLowerChar( Num ) Экспорт
LowerCharSet = "abcdefghij";
Num = Число(Прав(Num,1));
Стр = Сред(LowerCharSet, Num + 1, 1);
Возврат Стр;
КонецФункции
Функция СформироватьКодEAN13(код) Экспорт
// Проверки
Если ТипЗначения(код) 1 Тогда
Сообщить("Код для EAN13 должен числовым.");
Возврат "";
КонецЕсли;
Если СтрДлина(код) > 13 Тогда
Сообщить("Код для EAN13 должен быть длинной не более 12 символов.");
Возврат "";
КонецЕсли;
// Разбор строки
ПервыйФлаг = Число(Сред(код,1,1));
левстр = Сред(код,2,6);
правстр = Сред(код,8,6);
правкод = "";
Для Поз = 1 По 6 Цикл
правкод = правкод + NumberToLowerChar(Сред(правстр,Поз,1));
КонецЦикла;
// Формирование левой части кода зависит от значениа ПервыйФлаг
Если ПервыйФлаг = 0 Тогда
// 0 A A A A A
левкод = "#!" + Лев(левстр,1)
+ Сред(левстр,2,1)
+ Сред(левстр,3,1)
+ Сред(левстр,4,1)
+ Сред(левстр,5,1)
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 1 Тогда
// 1 A A B A B B
левкод = "$!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 2 Тогда
// 2 A A B B A B
левкод = "%!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 3 Тогда
// 3 A A B B B A
левкод = "&!"
+ Лев(левстр,1)
+ Сред(левстр,2,1)
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 4 Тогда
// 4 A B A A B B
левкод = "'!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 5 Тогда
// 5 A B B A A B
левкод = "(!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 6 Тогда
// 6 A B B B A A
левкод = ")!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 7 Тогда
// 7 A B A B A B
левкод = "*!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ NumberToUpperChar(Сред(левстр,4,1))
+ Сред(левстр,5,1)
+ NumberToUpperChar(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг = 8 Тогда
// 8 A B A B B A
левкод = "+!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ Сред(левстр,3,1)
+ NumberToUpperChar(Сред(левстр,4,1))
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг = 9 Тогда
// 9 A B B A B A
левкод = ",!"
+ Лев(левстр,1)
+ NumberToUpperChar(Сред(левстр,2,1))
+ NumberToUpperChar(Сред(левстр,3,1))
+ Сред(левстр,4,1)
+ NumberToUpperChar(Сред(левстр,5,1))
+ Сред(левстр,6,1);
КонецЕсли;
// Получение строки - результата
кодстр = левкод + "-" + правкод + "!";
Возврат кодстр;
КонецФункции // СформироватьКодEAN13()
//*******************************************
Функция СимволыВЦифры(СтрСимв) Экспорт
СтрЦифр = "";
Для х= 1 По СтрДлина(СтрСимв) Цикл
ТекСимв = Сред(СтрСимв, х, 1);
Если Найти("1234567890", ТекСимв)= 0 Тогда
// преобразуем символ в цифру
ТекСимв = Строка(КодСимв(ТекСимв) % 10);
КонецЕсли;
СтрЦифр = СтрЦифр + ТекСимв;
КонецЦикла;
Возврат СтрЦифр;
КонецФункции // СимволыВЦифры()
//*******************************************
Функция глСформироватьШтрихкод(Префикс, ПредвКод, ТипКода=13) Экспорт
Если ТипКода = 13 Тогда
ИспКолво = 10;
Иначе
ИспКолво = 6;
КонецЕсли;
Штрихкод = СимволыВЦифры(Прав(СокрЛП(ПредвКод), ИспКолво));
Штрихкод = Префикс + СтрЗаменить(Формат(Штрихкод, "С"+ИспКолво), " ", "0");
Штрихкод = СформироватьКодEAN13(Число(СокрЛП(Штрихкод) + КонтрольныйСимволШК(Штрихкод)));
Возврат Штрихкод;
КонецФункции // СформироватьШтрихкод()
Комментариев нет:
Отправить комментарий