(2) Для печати EAN13 используется процедура формирования штрихкода;
//----------------------------------------------------------------
// Процедуры формирования штрих-кодов (фирма 1С)
// Для печати штрих-кодов используются шрифты
// производства фирмы Bear Rock Technologies Corp.http://www.bearrock.com/brhome.htm
// EanBwrP36Tt - EAN13
// C39HrP36DlTt - CODE93
//----------------------------------------------------------------
// Вспомогательные функции
Функция ДобавитьСлева(Стр1, Длн, Стр2)
Стр0=Стр1;
Пока СтрДлина(Стр0) <= Длн Цикл
Стр0=Стр2+Стр0;
КонецЦикла;
Стр0=Прав(Стр0, Длн);
Возврат Стр0;
КонецФункции
//----------------------------------------------------------------
Функция ToUpper(Num)
UpperCharSet="ABCDEFGHIJ"; Num=Число(Прав(Num,1)); Стр=Сред(UpperCharSet, Num+1, 1);
Возврат Стр;
КонецФункции
//----------------------------------------------------------------
Функция NumberToLowerChar(Num)
LowerCharSet="abcdefghij"; Num=Число(Прав(Num,1)); Стр=Сред(LowerCharSet, Num+1, 1);
Возврат Стр;
КонецФункции
//----------------------------------------------------------------
Функция ParityCheck(Код) // Вычисление кода четности
четн=0; неч=0;
// Для строки с нечетной длинной верхняя граница округлается в большую сторону
Для Поз=1 По Окр(СтрДлина(Код) / 2+0.1, 0) Цикл
неч=неч+Сред(Код, Поз * 2 - 1, 1);
Если Поз * 2 <= СтрДлина(Код) Тогда
четн=четн+Сред(Код, Поз * 2, 1);
КонецЕсли;
КонецЦикла;
КодЧетности=Число(Прав(Строка(1000 - четн - неч * 3), 1));
Возврат КодЧетности;
КонецФункции
//----------------------------------------------------------------
// Генерация строки, печатаемой как код EAN13
Функция ЕАН13(код) Экспорт
код=ДобавитьСлева(Строка(код),12,"0");
код=код+Строка(ParityCheck("0"+Код));
ПервыйФлаг=Число(Сред(код,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)+ToUpper(Сред(левстр,3,1))+Сред(левстр,4,1)+ToUpper(Сред(левстр,5,1))+ToUpper(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг=2 Тогда
// 2 A A B B A B
левкод="%!"+Лев(левстр,1)+Сред(левстр,2,1)+ToUpper(Сред(левстр,3,1))+ToUpper(Сред(левстр,4,1))+Сред(левстр,5,1)+ToUpper(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг=3 Тогда
// 3 A A B B B A
левкод="&!"+Лев(левстр,1)+Сред(левстр,2,1)+ToUpper(Сред(левстр,3,1))+ToUpper(Сред(левстр,4,1))+ToUpper(Сред(левстр,5,1))+Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг=4 Тогда
// 4 A B A A B B
левкод="'!"+Лев(левстр,1)+ToUpper(Сред(левстр,2,1))+Сред(левстр,3,1)+Сред(левстр,4,1)+ToUpper(Сред(левстр,5,1))+ToUpper(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг=5 Тогда
// 5 A B B A A B
левкод="(!"+Лев(левстр,1)+ToUpper(Сред(левстр,2,1))+ToUpper(Сред(левстр,3,1))+Сред(левстр,4,1)+Сред(левстр,5,1)+ToUpper(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг=6 Тогда
// 6 A B B B A A
левкод=")!"+Лев(левстр,1)+ToUpper(Сред(левстр,2,1))+ToUpper(Сред(левстр,3,1))+ToUpper(Сред(левстр,4,1))+Сред(левстр,5,1)+Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг=7 Тогда
// 7 A B A B A B
левкод="*!"+Лев(левстр,1)+ToUpper(Сред(левстр,2,1))+Сред(левстр,3,1)+ToUpper(Сред(левстр,4,1))+Сред(левстр,5,1)+ToUpper(Сред(левстр,6,1));
ИначеЕсли ПервыйФлаг=8 Тогда
// 8 A B A B B A
левкод="+!"+Лев(левстр,1)+ToUpper(Сред(левстр,2,1))+Сред(левстр,3,1)+ToUpper(Сред(левстр,4,1))+ToUpper(Сред(левстр,5,1))+Сред(левстр,6,1);
ИначеЕсли ПервыйФлаг=9 Тогда
// 9 A B B A B A
левкод=",!"+Лев(левстр,1)+ToUpper(Сред(левстр,2,1))+ToUpper(Сред(левстр,3,1))+Сред(левстр,4,1)+ToUpper(Сред(левстр,5,1))+Сред(левстр,6,1);
КонецЕсли;
кодстр=левкод+"-"+правкод+"!";
Возврат кодстр;
КонецФункции
Показать
Полученная строка печатается как текст шрифтом EanBwrP36Tt.
Как по аналогии сформировать строку EAN8?