Способ кодирования каждого символа штрихкода по алгоритму EAN зависит не только от его значения, но и от положения. Таким образом, для вывода штрихкода шрифтом EanGnivc, недостаточно указать шрифт - штрихкод должен быть преобразован из текстового представления "2880000004097" в строку вида "%!88AA0A-aaeajh!". Что и делает представленная функция.
upd
Добавил поддержку формирования EAN-8
Функция СформироватьСтрокуEanGnivc(ШтрихкодСтрокойСимволов) Экспорт
Попытка
Тест = Число(ШтрихкодСтрокойСимволов);
Исключение
ВызватьИсключение "Штрихкод может содержать только цифры";
КонецПопытки;
СимволыСпособовКодирования = "#$%&'()*+,";
ЛевыйЗащитныйШаблон = "!";
СреднийЗащитныйШаблон = "-";
ПравыйЗащитныйШаблон = "!";
СимволыШрифтаПоТипамКодов = Новый Соответствие;
СимволыШрифтаПоТипамКодов.Вставить("L", "0123456789");
СимволыШрифтаПоТипамКодов.Вставить("G", "ABCDEFGHIJ");
СимволыШрифтаПоТипамКодов.Вставить("R", "abcdefghij");
СпособыКодированияЛевойЧасти = Новый Массив;
СпособыКодированияЛевойЧасти.Добавить("LLLLLL");
СпособыКодированияЛевойЧасти.Добавить("LLGLGG");
СпособыКодированияЛевойЧасти.Добавить("LLGGLG");
СпособыКодированияЛевойЧасти.Добавить("LLGGGL");
СпособыКодированияЛевойЧасти.Добавить("LGLLGG");
СпособыКодированияЛевойЧасти.Добавить("LGGLLG");
СпособыКодированияЛевойЧасти.Добавить("LGGGLL");
СпособыКодированияЛевойЧасти.Добавить("LGLGLG");
СпособыКодированияЛевойЧасти.Добавить("LGLGGL");
СпособыКодированияЛевойЧасти.Добавить("LGGLGL");
СпособКодированияПравойЧасти = "RRRRRR";
Если СтрДлина(ШтрихкодСтрокойСимволов) = 13 Тогда
КоличествоСимволовВГруппе = 6;
ИначеЕсли СтрДлина(ШтрихкодСтрокойСимволов) = 8 Тогда
КоличествоСимволовВГруппе = 4;
СимволыСпособовКодирования = "";
ШтрихкодСтрокойСимволов = "0"+ШтрихкодСтрокойСимволов;
Иначе
ВызватьИсключение "Поддерживаются только штрихкоды длиной 13 и 8 символов";
КонецЕсли;
ИндексСпособаКодирования = Число(Лев(ШтрихкодСтрокойСимволов,1));
ЛеваяЧастьКода = "";
ПраваяЧастьКода = "";
Для ИндексСимвола = 1 По КоличествоСимволовВГруппе Цикл
ЛеваяЧастьКода = ЛеваяЧастьКода
+ Сред(СимволыШрифтаПоТипамКодов[Сред(СпособыКодированияЛевойЧасти[ИндексСпособаКодирования],ИндексСимвола,1)]
,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+1),1))+1
,1);
ПраваяЧастьКода = ПраваяЧастьКода
+ Сред(СимволыШрифтаПоТипамКодов[Сред(СпособКодированияПравойЧасти,ИндексСимвола,1)]
,Число(Сред(ШтрихкодСтрокойСимволов,(ИндексСимвола+КоличествоСимволовВГруппе+1),1))+1
,1);
КонецЦикла;
Результат = "" + Сред(СимволыСпособовКодирования,ИндексСпособаКодирования+1,1)
+ ЛевыйЗащитныйШаблон
+ ЛеваяЧастьКода
+ СреднийЗащитныйШаблон
+ ПраваяЧастьКода
+ ПравыйЗащитныйШаблон;
Возврат Результат;
КонецФункции