Добрый день! Подскажите пожалуйста, как вывести в графическом виде в отчете штрихкод товара в отчете?

```1c
    ВЫБРАТЬ
    СпрНоменклатура.Ссылка КАК Номенклатура,
    ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    Штрихкоды.Штрихкод КАК Штрихкод
    ИЗ
    Справочник.Номенклатура КАК СпрНоменклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних
    ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
    ПО СпрНоменклатура.Ссылка = Штрихкоды.Владелец
    ГДЕ
    СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаТоваров)
    И СпрНоменклатура.ЕдиницаИзмерения = &ЕдиницаИзмерения

    УПОРЯДОЧИТЬ ПО
    Номенклатура ИЕРАРХИЯ
```

В сам отчет выводится цифровой код штрихкода. Как сделать так, чтобы штрихкод выводился графически?
---
Если используются только ШК EAN8 или EAN13 можно вывести используя шрифт Code EAN 13, но строку штрихкода нужно перекодировать

```1c
    Функция КодируемШтрихКод(Парам)
    Если СтрДлина(Парам)<>13 Тогда
    Возврат "1234567890123";
    КонецЕсли;
    ПечШтрих=";
    Код=Парам;
    Ф = Новый Массив(11);
    Ф[1]="000000"; //0
    Ф[2]="001011"; //1
    Ф[3]="001101"; //2
    Ф[4]="001110"; //3
    Ф[5]="010011"; //4
    Ф[6]="011001"; //5
    Ф[7]="011100"; //6
    Ф[8]="010101"; //7
    Ф[9]="010110"; //8
    Ф[10]="011010"; //9
    Маска="+Лев(СокрЛП(Код),1)+Ф[Число(Лев(СокрЛП(Код),1))+1]+"222222";
    Дл=СтрДлина(Код);
    Для ИИ=1 По Дл Цикл
    Если ИИ=1 Тогда
    Стр1="+Лев(СокрЛП(Код),1);
    Иначе //ИИ от 2 до 13

    СимволМаски=Сред(Маска,ИИ,1);
    Если СимволМаски="0" Тогда
    Стр1=Символ(65+Сред(Код,ИИ,1));
    ИначеЕсли СимволМаски="1" Тогда
    Стр1=Символ(75+Сред(Код,ИИ,1));
    ИначеЕсли СимволМаски="2" Тогда
    Стр1=Символ(97+Сред(Код,ИИ,1));
    КонецЕсли;
    КонецЕсли;
    ПечШтрих=ПечШтрих+Стр1;
    Если ИИ=7 Тогда
    ПечШтрих=ПечШтрих+"*";
    ИначеЕсли ИИ=13 Тогда
    ПечШтрих=ПечШтрих+"+";
    КонецЕсли;
    КонецЦикла;
    Возврат ПечШтрих;
    КонецФункции

    Функция КодируемШтрихКод8(Парам)
    Если СтрДлина(Парам)<>8 Тогда
    Возврат "12345678";
    КонецЕсли;
    ПечШтрих=":";
    Для ИИ=1 По 4 Цикл
    ПечШтрих=ПечШтрих+Символ(65+Сред(Парам,ИИ,1));
    КонецЦикла;
    ПечШтрих=ПечШтрих+"*";
    Для ИИ=5 По 8 Цикл
    ПечШтрих=ПечШтрих+Символ(97+Сред(Парам,ИИ,1));
    КонецЦикла;
    ПечШтрих=ПечШтрих+"+";
    Возврат ПечШтрих;
    КонецФункции
```
---
Если используются только ШК EAN8 или EAN13 можно вывести используя шрифт Code EAN 13, но строку штрихкода нужно перекодировать

```1c
    Функция КодируемШтрихКод(Парам)
    Если СтрДлина(Парам)<>13 Тогда
    Возврат "1234567890123";
    КонецЕсли;
    ПечШтрих=";
    Код=Парам;
    Ф = Новый Массив(11);
    Ф[1]="000000"; //0
    Ф[2]="001011"; //1
    Ф[3]="001101"; //2
    Ф[4]="001110"; //3
    Ф[5]="010011"; //4
    Ф[6]="011001"; //5
    Ф[7]="011100"; //6
    Ф[8]="010101"; //7
    Ф[9]="010110"; //8
    Ф[10]="011010"; //9
    Маска="+Лев(СокрЛП(Код),1)+Ф[Число(Лев(СокрЛП(Код),1))+1]+"222222";
    Дл=СтрДлина(Код);
    Для ИИ=1 По Дл Цикл
    Если ИИ=1 Тогда
    Стр1="+Лев(СокрЛП(Код),1);
    Иначе //ИИ от 2 до 13

    СимволМаски=Сред(Маска,ИИ,1);
    Если СимволМаски="0" Тогда
    Стр1=Символ(65+Сред(Код,ИИ,1));
    ИначеЕсли СимволМаски="1" Тогда
    Стр1=Символ(75+Сред(Код,ИИ,1));
    ИначеЕсли СимволМаски="2" Тогда
    Стр1=Символ(97+Сред(Код,ИИ,1));
    КонецЕсли;
    КонецЕсли;
    ПечШтрих=ПечШтрих+Стр1;
    Если ИИ=7 Тогда
    ПечШтрих=ПечШтрих+"*";
    ИначеЕсли ИИ=13 Тогда
    ПечШтрих=ПечШтрих+"+";
    КонецЕсли;
    КонецЦикла;
    Возврат ПечШтрих;
    КонецФункции

    Функция КодируемШтрихКод8(Парам)
    Если СтрДлина(Парам)<>8 Тогда
    Возврат "12345678";
    КонецЕсли;
    ПечШтрих=":";
    Для ИИ=1 По 4 Цикл
    ПечШтрих=ПечШтрих+Символ(65+Сред(Парам,ИИ,1));
    КонецЦикла;
    ПечШтрих=ПечШтрих+"*";
    Для ИИ=5 По 8 Цикл
    ПечШтрих=ПечШтрих+Символ(97+Сред(Парам,ИИ,1));
    КонецЦикла;
    ПечШтрих=ПечШтрих+"+";
    Возврат ПечШтрих;
    КонецФункции
```
---
Используется только EAN13. Я правильно понимаю, что для того чтобы вывести вместо цифрового кода графическое отображение штрихкода, нужно выгрузить запрос в ТЗ и по строкам для каждого значения штрихкода номенклатуры в цикле прогнать первую функцию из Вашего примера, после чего заменить значение штрихкода в каждой строке?
---
да
---
Спасибо, сейчас буду пробовать
---
Не вышло может что я неправильно сделал но вот что получилось (см прикрепленный файл)

```1c
    &НаСервере
    Функция ВывестиНоменклатуруНаСервере()

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | СпрНоменклатура.Ссылка КАК Номенклатура,
    | ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    | Штрихкоды.Штрихкод КАК Штрихкод
    |ИЗ
    | Справочник.Номенклатура КАК СпрНоменклатура
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ) КАК ЦеныНоменклатурыСрезПоследних
    | ПО СпрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
    | Внутреннее СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК Штрихкоды
    | ПО СпрНоменклатура.Ссылка = Штрихкоды.Владелец
    |ГДЕ
    | СпрНоменклатура.Ссылка В ИЕРАРХИИ(&ГруппаТоваров)
    | И СпрНоменклатура.ЕдиницаИзмерения = &ЕдиницаИзмерения
    |
    |УПОРЯДОЧИТЬ ПО
    | Номенклатура ИЕРАРХИЯ";

    Запрос.УстановитьПараметр("ГруппаТоваров", Объект.ГруппаНоменклатуры);
    Запрос.УстановитьПараметр("ЕдиницаИзмерения", Объект.ЕденицаИзмерения);

    РезультатЗапроса = Запрос.Выполнить().Выгрузить();

    ТЗ = РезультатЗапроса;
    Для Каждого Стр ИЗ ТЗ Цикл
    Штрихкод = КодируемШтрихКод(Стр.Штрихкод);
    Стр.Штрихкод = Штрихкод;
    КонецЦикла;

    ТаблДокум = Новый ТабличныйДокумент;

    МакетОбработки = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");

    ТаблДокум.Очистить();

    ТаблДокум.НачатьАвтогруппировкуСтрок();

    ОбластьШапка = МакетОбработки.ПолучитьОбласть("Шапка");
    ОбластьШапка.Параметры.ГруппаТоваров = Объект.ГруппаНоменклатуры;

    ТаблДокум.Вывести(ОбластьШапка);

    ОбластьШапкаТаблицы = МакетОбработки.ПолучитьОбласть("ШапкаТаблицы");
    ТаблДокум.Вывести(ОбластьШапкаТаблицы);

    ОбластьТаблица = МакетОбработки.ПолучитьОбласть("Таблица");
    Для каждого Стр из ТЗ Цикл
    ОбластьТаблица.Параметры.Номенклатура = Стр.Номенклатура;
    ОбластьТаблица.Параметры.Цена = Стр.Цена;
    ОбластьТаблица.Параметры.Штрихкод = Стр.Штрихкод;
    ТаблДокум.Вывести(ОбластьТаблица);
    КонецЦикла;

    ТаблДокум.АвтоМасштаб = Истина;

    Возврат ТаблДокум;

    КонецФункции

    &НаСервереБезКонтекста
    Функция КодируемШтрихКод(Парам)
    Если СтрДлина(Парам)<>13 Тогда
    Возврат "1234567890123";
    КонецЕсли;
    ПечШтрих=";
    Код=Парам;
    Ф = Новый Массив(11);
    Ф[1]="000000"; //0
    Ф[2]="001011"; //1
    Ф[3]="001101"; //2
    Ф[4]="001110"; //3
    Ф[5]="010011"; //4
    Ф[6]="011001"; //5
    Ф[7]="011100"; //6
    Ф[8]="010101"; //7
    Ф[9]="010110"; //8
    Ф[10]="011010"; //9
    Маска="+Лев(СокрЛП(Код),1)+Ф[Число(Лев(СокрЛП(Код),1))+1]+"222222";
    Дл=СтрДлина(Код);
    Для ИИ=1 По Дл Цикл
    Если ИИ=1 Тогда
    Стр1="+Лев(СокрЛП(Код),1);
    Иначе //ИИ от 2 до 13

    СимволМаски=Сред(Маска,ИИ,1);
    Если СимволМаски="0" Тогда
    Стр1=Символ(65+Сред(Код,ИИ,1));
    ИначеЕсли СимволМаски="1" Тогда
    Стр1=Символ(75+Сред(Код,ИИ,1));
    ИначеЕсли СимволМаски="2" Тогда
    Стр1=Символ(97+Сред(Код,ИИ,1));
    КонецЕсли;
    КонецЕсли;
    ПечШтрих=ПечШтрих+Стр1;
    Если ИИ=7 Тогда
    ПечШтрих=ПечШтрих+"*";
    ИначеЕсли ИИ=13 Тогда
    ПечШтрих=ПечШтрих+"+";
    КонецЕсли;
    КонецЦикла;
    Возврат ПечШтрих;
    КонецФункции

    &НаКлиенте
    Процедура ВывестиНоменклатуру(Команда)
    ТабДок = Новый ТабличныйДокумент;
    ТабДок = ВывестиНоменклатуруНаСервере();
    ТабДок.Показать();
    КонецПроцедуры
```
---
Шрифт не установил? :)
---
все правильно, только нужно задействовать шрифт code ean
---
Я его установил с Вашей ссылки. Может нужно как то его подключить?
---
В свойствах ячейки его еще нужно выбрать.
---
Да я уже понял))) Спасибо. Будет ли читаться такой штрихкод?
---
как то не так выглядит
---
у меня только этот шрифт можно выбрать
---
не тот шрифт, нужен этот (10)
---
Разобрался)))) Спасибо большое!
---
а панели управления - шрифты - есть code ean? Выйти зайти из/в конфигуратор
---
Все разобрался. Спасибо Вам большое! Я перезагрузился и все появилось.
---
осталось только этот шрифт поставить на все клиентские машины, на которых будет формироваться отчет :)
---
Это уже мелочь))) Мне этот отчет нужен был для магазина чтобы распечатать им штрихкоды весового товара для облегчения работы кассирам
---
Извиняюсь затупил со шрифтом))) Все сработало, прилагаю скрин. Только будет ли читать такой штрихкод (у меня нет сканера под рукой) тут посредине большой разрыв на 7
---
задача не тривиальная. единственное что пришло в голову - формировать картинки на ШК и прикреплять их к номенклатуре, их в свою очередь вытаскивать в отчет. примеры этому есть на инфостарте
---
ну или пост обработкой отчета, после его вывода, обходим строки и где указан штрихкод формируем картинку и программно вставляем
---
В Область макета вставляешь объект "Элемент управления 1С:Печать штрихкодов"
только я уже не помню как это делается, надо гуглить

```1c
    РисунокШтрихкод = ОбластьСтрока.Рисунки.РисунокШтрихкод;
    ИнвНомерДляШтрихКода = СтрЗаменить(ОбластьСтрока.Параметры.ИнвНомер, "КР", "99"); // меняем на Англ. буквы
    Если Стрдлина(ИнвНомерДляШтрихКода)=11 Тогда
    ИнвНомерДляШтрихКода = "9" + ИнвНомерДляШтрихКода;
    КонецЕсли;
    // ИнвНомерДляШтрихКода = СокрЛП(ОбластьСтрока.Параметры.ИнвНомер);
    РисунокШтрихкод.Объект.ТипКода = 4; // CODE128 1; // EAN13 6; // PDF417
    РисунокШтрихкод.Объект.ТекстКода = Лев(ОбластьСтрока.Параметры.Материал, 13);
    РисунокШтрихкод.Объект.Сообщение = ИнвНомерДляШтрихКода;
    РисунокШтрихкод.Объект.РазмерКрая = 0; // без рамки
    // РисунокШтрихкод.Расположить(ОбластьСтрока);
```
---
Я подумал и решил сделать внешний отчет для Розницы не на СКД, а программно внешней обработкой. Нагуглил пока такую ссылку http://codexp.ru/interesnoe/zametki-po-1s/12-pechat-shtrikh-kodov и пытаюсь разобраться
---
Это оно и есть;
P.S. В макет добавляется из меню:
 Таблица -> Рисунки -> Вставить объект
---
А какой объект вставлять из предложенного списка?
---
Понял, спасибо сейчас попробую
---
Для тонкого клиента единственный человеческий вариант - вставлять картинки штрихкода в табличный документ на сервере. Такой подход не предъявляет никаких требований к окружению клиента. Хоть из браузера печатай. С СКД тоже никаких проблем - скомпоновал табдок, пробежался по нему повтыкал картинки и готово. Ну а сама картинка штрихкода формируется одинэсной ВК.
---
Спасибо.
---
на всем инфостарте нет готового отчета с выводом ШК картинкой на СКД ( как так то
---
Потому что "на лету" не получится, а постобработкой уже без разницы - СКД это или не СКД. Обычная вставка картинок в ячейки табдока.через Расположить().
---
а постобработкой уже без разницы
так и примера то я что-то не смог найти в какой процедуре это сделать и как (наверное как в (4) написано)