Помогите со штрихкодом в 1.9. Нужно распечатать

Все вопросы, связанные с работой программы СБиС++ версии 1.9

Правила форума
Тема закрыта! Все обсуждения теперь ведутся в группе СБИС 2.Х
Подробнее о том как найти группы и вступить в них.

Помогите со штрихкодом в 1.9. Нужно распечатать

текст длиной 30 символов, например "038540119009001320614000002500", с помощью шрифта Сode128C. Для перевода используется таблица таблица соответствия http://en.wikipedia.org/wiki/Code_128 - тут таблица coommon/barcodesoft . Данные: 03 85 40 11 90 09 00 13 20 61 40 00 00 25 00 разбиваются попарно. Вид в character (coommon/barcodesoft): Í#uH+z)Â-4]HÂÂ9ÂWÎ . Дальше эту последовательность достаточно просто распечатать Сode128C. И все получается прекрасно. А вопрос - как занести эту самую таблицу соответствия в СБиС. Т.е. символы = Í Â Î и т.д. Заранее спасибо всем кто откликнется....
AVB 
» 15 июл 2014, 07:32


Это вам для факторинга наверно надо . могу поделиться :)

СтрокаШК1,СтрокаШК2 :ТЕКСТ в R
R=Code 128,20;
{
пРуб = БезКоп( Документ.Сумма2 );
пКоп = Документ.Сумма2 - БезКоп( Документ.Сумма2 );
ТпРуб = Текст(пРуб,"9п");
ТпРуб = Заменить(ТпРуб," ","0");
ТпКоп = Т0="";
Разбить(Текст(пКоп),".",Т0,ТпКоп);
Если(ТпКоп=="")
ТпКоп ="00";
Если(Размер(ТпКоп)==1)
ТпКоп = "0"+ТпКоп;
ТСумма = ТпРуб+ТпКоп;
ТДата = Текст(Документ.Дата,"(ддммгг)");
ТСимвол = "";
ТИНН0 = Текст(Лицо0.ИНН,"12п");
# Сообщить(Размер(ТИНН0)+"."+ТИНН0);
ТИНН0 = Заменить(ТИНН0," ","0");
ТИНН1 = Текст(Лицо1.ИНН,"12п");
ТИНН1 = Заменить(ТИНН1," ","0");
# Сообщить(ТСумма);
СтрокаШК1= ТИНН0+ТИНН1+ТСумма+ТДата +ТСимвол;
ТСимвол = 2EANCheckDigit(СтрокаШК1);

СтрокаШК1= ТИНН0+ТИНН1+ТСумма+ТДата +ТСимвол;

СтрокаШК2 ="";
#"810"
ТНомер = Текст(Документ.Номер,"10п");

пКодРубли = "056049048";
пКодПробела = "032";

ТСимвол ="";

ТНомер3= "";
СчетчикЦикла = 0;
# Сообщить(Размер(ТНомер)+"."+ТНомер);
Пока(СчетчикЦикла < Размер(ТНомер))
{
СчетчикЦикла++;
пСимвол = Подстрока(ТНомер,СчетчикЦикла,1);
КодСимвола = Текст(КодПоСимволу(пСимвол));
Если(Размер(КодСимвола) == 3)
ТНомер3 += КодСимвола;
Иначе
{
Если(Размер(КодСимвола) == 2)
ТНомер3 += "0" + КодСимвола;
Иначе
Если(Размер(КодСимвола) == 1)
ТНомер3 += "00" + КодСимвола;
}

}
СтрокаШК2= ТНомер3+пКодРубли +ТСимвол;

ТСимвол = 2EANCheckDigit(СтрокаШК2);
СтрокаШК2= ТНомер3+пКодРубли +ТСимвол;
}
^СтрокаШК1^

^СтрокаШК2^



и функции пригодятся эти:

Функция EANCheckDigit(code)
{
перем odd = 0, even = 0;
перем check;
перем i=Размер(code);

Пока(i>0)
{
Если( i % 2 == 0 )
odd += Число(ПодСтрока(code,i--,1));
Иначе
even += 3 * Число(ПодСтрока(code,i--,1));
}
Вернуть ((10 - (even + odd)%10)%10);

}
Функция 2EANCheckDigit(code)
{
перем odd = 0, even = 0;
перем check;
перем i=Размер(code);

Пока(i>0)
{
Если( i % 2 == 0 )
odd += 3*Число(ПодСтрока(code,i--,1));
Иначе
even += Число(ПодСтрока(code,i--,1));
}
# Вернуть ((10 - (even + odd)%10)%10);
пС=even + odd;
Вернуть ((10 - пС%10)%10);
}
#//Сформируем контрольный символ
# НК2 = СтрокаШК1;
# SumЧет=0;
# SumНеЧет=0;
# Для k=1 По 40 Цикл
# Если (k/2)=Цел(k/2) Тогда
# SumЧет=SumЧет+3*Число(Сред(НК2,k,1));
# Иначе
# SumНеЧет=SumНеЧет+Число(Сред(НК2,k,1));
# КонецЕсли;
# КонецЦикла;
# Шаг4=SumЧет+SumНеЧет;
# КС=(10-((ШАГ4/10)-Цел(ШАГ4/10))*10); //контрольный символ
# Если КС=10 Тогда
# КС=0;
# КонецЕсли;
# НК2=НК2+Строка(Цел(КС));
# СтрокаШК1 = НК2;
Функция СимволПоКоду(Код)
{
перем Символы = " !\$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?";
Вернуть ПодСтрока(Символы, Код-31, 1);
}
Функция КодПоСимволу(пСимвол)
{
перем пСимволы = " !..$%&'()*+,-..0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~?";
Объект оСимволы;
пИ = 0;
Пока(пИ<Размер(пСимволы))
{
пИ++;
Если(Подстрока(пСимволы,пИ,1) == пСимвол)
пКод = пИ;
}

# пКод = Найти( пСимволы, Символ );
# Если(пСимвол =="1")
# Сообщить(пКод);
Вернуть пКод+31;
}
Функция КодШтрих(Документ)
{
пРуб = БезКоп( Документ.Сумма2 );
пКоп = Документ.Сумма2 - БезКоп( Документ.Сумма2 );
ТпРуб = Текст(пРуб,"9п");
ТпРуб = Заменить(ТпРуб," ","0");
ТпКоп = Т0="";
Разбить(Текст(пКоп),".",Т0,ТпКоп);
Если(ТпКоп=="")
ТпКоп ="00";
Если(Размер(ТпКоп)==1)
ТпКоп = "0"+ТпКоп;
ТСумма = ТпРуб+ТпКоп;
ТДата = Текст(Документ.Дата,"(ддммгг)");
ТСимвол = "";
ТИНН0 = Текст(Лицо0.ИНН,"12п");
# Сообщить(Размер(ТИНН0)+"."+ТИНН0);
ТИНН0 = Заменить(ТИНН0," ","0");
ТИНН1 = Текст(Лицо1.ИНН,"12п");
ТИНН1 = Заменить(ТИНН1," ","0");
# Сообщить(ТСумма);
СтрокаШК1= ТИНН0+ТИНН1+ТСумма+ТДата +ТСимвол;
ТСимвол = 2EANCheckDigit(СтрокаШК1);

СтрокаШК1= ТИНН0+ТИНН1+ТСумма+ТДата +ТСимвол;

СтрокаШК2 ="";
#"810"
ТНомер = Текст(Документ.Номер,"10п");

пКодРубли = "056049048";
пКодПробела = "032";

ТСимвол ="";

ТНомер3= "";
СчетчикЦикла = 0;
# Сообщить(Размер(ТНомер)+"."+ТНомер);
Пока(СчетчикЦикла < Размер(ТНомер))
{
СчетчикЦикла++;
пСимвол = Подстрока(ТНомер,СчетчикЦикла,1);
КодСимвола = Текст(КодПоСимволу(пСимвол));
Если(Размер(КодСимвола) == 3)
ТНомер3 += КодСимвола;
Иначе
{
Если(Размер(КодСимвола) == 2)
ТНомер3 += "0" + КодСимвола;
Иначе
Если(Размер(КодСимвола) == 1)
ТНомер3 += "00" + КодСимвола;
}

}
СтрокаШК2= ТНомер3+пКодРубли +ТСимвол;

ТСимвол = 2EANCheckDigit(СтрокаШК2);
СтрокаШК2= ТНомер3+пКодРубли +ТСимвол;
}


Функция EAN8(ИсхКод)
# Возвращает строку для печати штрих-кода в формате EAN-8
# Используется шрифт SbisEAN-13.ttf
# Исходная строка ИсхКод должна содержать 7 символов
{
Если( Размер(ИсхКод) != 7 )
{
Ошибка("Исходная строка для штрих-кода EAN-8 должна быть ровно 7 символов");
Вернуть("");
}
перем СтрокаДляПечати = "";
СтрокаДляПечати += СимволПоКоду(97);
перем i = 1;
Пока(i<5)
СтрокаДляПечати += СимволПоКоду(48 + Число(ПодСтрока(ИсхКод,i++,1)));
СтрокаДляПечати += СимволПоКоду(96);
Пока(i<8)
СтрокаДляПечати += СимволПоКоду(80 + Число(ПодСтрока(ИсхКод,i++,1)));
СтрокаДляПечати += СимволПоКоду(EANCheckDigit(ИсхКод)+80);
СтрокаДляПечати += СимволПоКоду(97);
Вернуть СтрокаДляПечати;
}
Ivan_Michailov 
» 15 июл 2014, 17:09


Спасибо за ответ.
AVB 
» 16 июл 2014, 21:57




Вернуться в СБиС++ 1.9

cron