Всем привет.
Есть старая УТ 10.3 , есть в ней пара документов у которых на управляемых формах ( ну просто их проще дизайнить... )
Вот в одном из новых доков, потребовалось сделать печать этикетки со штрихкодом.
Думал , все по старинке сделаю, но встретил проблему.

Как делалось

```1c
    &НаСервере
    Функция ПечатьЭтикеткиНаСервере()

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

    СтруктураВозврат = Новый Структура;
    СтруктураВозврат.Вставить("Успех", Истина);

    ПринтерДляПечати = МДО_ОбщийМодуль.ОпределитьПринтерДляПользователя(ПараметрыСеанса.ТекущийПользователь);
    Если ПринтерДляПечати = " Тогда
    СтруктураВозврат.Успех = Ложь;
    СтруктураВозврат.Вставить("Ошибка","Не задан принтер");
    Возврат СтруктураВозврат;
    КонецЕсли;

    Макет = Об.ПолучитьМакет("Этикетка");

    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ВысотаСтраницы = 370;
    ТабДокумент.ШиринаСтраницы = 570;
    ТабДокумент.ПолеСверху = 0;
    ТабДокумент.ПолеСправа = 0;
    ТабДокумент.ПолеСнизу = 0;
    ТабДокумент.ПолеСлева = 0;
    ТабДокумент.АвтоМасштаб = Истина;
    ТабДокумент.ИмяПринтера = ПринтерДляПечати;
    ТабДокумент.ВерхнийКолонтитул.Выводить = Ложь;
    ТабДокумент.НижнийКолонтитул.Выводить = Ложь;

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

    КомпонентШК = Область.Рисунки.Штрихкод.Объект;
    КомпонентШК.ТипКода = 4;
    КомпонентШК.АвтоТип = Ложь;
    КомпонентШК.Сообщение = Объект.Номер;
    ТабДокумент.Вывести(Область);

    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

    СтруктураВозврат.Вставить("ТД",ТабДокумент);
    Возврат СтруктураВозврат;

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

    &НаКлиенте
    Процедура ПечатьЭтикетки(Команда)

    Если Объект.Номер = " Или Объект.Товары.Количество() = 0 Тогда
    ПоказатьОповещениеПользователя("Ошибка печати",,"Неверный номере или пустая таблица товаров");
    Возврат;
    КонецЕсли;

    Результат = ПечатьЭтикеткиНаСервере();
    Если НЕ Результат.успех Тогда
    ПоказатьОповещениеПользователя("Ошибка",,Результат.ошибка);
    Возврат;
    КонецЕсли;

    ТабДокумент = Результат.ТД;
    ТабДокумент.Показать();

    КонецПроцедуры
```

Ну и разумеется ошибка начинается с этой части

```1c
    КомпонентШК = Область.Рисунки.Штрихкод.Объект;
    КомпонентШК.ТипКода = 4;
```

{Документ.мд_Рекламация.Форма.ФормаДокумента.Форма(536)}: Значение не является значением объектного типа (ТипКода)
 КомпонентШК.ТипКода = 4;

Прочел мега тону статей, понял, что в УФ это сделано через анус обезьяны и расстроился.
Теперь вопрос. Может кто делал такой изврат ... ? и поможет с кодом и компонентами для УТ...
---
```1c
    Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт

    //Макет = ПолучитьМакет("КомпонентаПечатиШтрихкода");

    ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкода", "ШтрихКод", ТипВнешнейКомпоненты.Native);

    // Создадим объект внешней компоненты
    Если ПодключениеВыполнено Тогда
    ВнешняяКомпонента = Новый("AddIn.ШтрихКод.Barcode");
    Иначе
    Возврат Неопределено;
    КонецЕсли;

    // Если нет возможности рисовать
    Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
    // То картинку сформировать не сможем
    Возврат Неопределено;
    Иначе
    // Установим основные параметры компоненты
    // Если в системе установлен шрифт Tahoma
    Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
    // Выбираем его как шрифт для формирования картинки
    ВнешняяКомпонента.Шрифт = "Tahoma";
    Иначе
    // Шрифт Tahoma в системе отсутствует
    // Обойдем все доступные компоненте шрифты
    Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
    // Получим очередной шрифт, доступный компоненте
    ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
    // Если шрифт доступен
    Если ТекущийШрифт <> Неопределено Тогда
    // Они и будет шрифтом для формирования штри-кода
    ВнешняяКомпонента.Шрифт = ТекущийШрифт;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    // Утановим размер шрифта
    ВнешняяКомпонента.РазмерШрифта = 12;

    Возврат ВнешняяКомпонента;
    КонецЕсли;

    КонецФункции
```
---
Тут все зависит от платформы.
У новых платформ не работает старая компонента штрихкода, только встроенная.
У меня платформа 8.3.18.1208
У меня вот так работает:

```1c
    ПараметрыШтрихкода = Новый Структура;
    ПараметрыШтрихкода.Вставить("Ширина", 110);
    ПараметрыШтрихкода.Вставить("Высота", 20);
    ПараметрыШтрихкода.Вставить("ТипКода", 1);//Автоопределение
    ПараметрыШтрихкода.Вставить("РазмерШрифта", 8);
    ПараметрыШтрихкода.Вставить("Штрихкод", СтрокаИзСписка.ШтрихКод);
    ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);

    ЭтикеткаОбласть.Рисунки.ШтрихКод.Картинка = ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода)
```

Функция получения штрихкода:

```1c
    Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт

    ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();

    Если ВнешняяКомпонента = Неопределено Тогда
    ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
    КонецЕсли;

    // Зададим размер картинки
    ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
    ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);

    ВнешняяКомпонента.АвтоТип = Ложь;
    ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
    ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
    ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;

    // Или установим код EAN-13
    // ВнешняяКомпонента.ТипКода = 1;
    //
    // Тип смотрим в документации на внешнуюю компоненту

    // Если код содержит контрольный символ, обязательно указываем
    ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;

    // Если отображать контрольный символ не нужно
    // ВнешняяКомпонента.ВидимостьКС = Ложь;

    // Формируем картинку штрихкода
    ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;

    // Если установленная нами ширина меньше минимально допустимой для этого штрихкода
    Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
    ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
    КонецЕсли;

    // Сформируем картинку
    ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();

    // Если картинка сформировалась
    Если ДвоичныеДанныеКартинки <> Неопределено Тогда
    // Формируем из двоичных данных
    Возврат Новый Картинка(ДвоичныеДанныеКартинки);
    КонецЕсли;

    Возврат Неопределено;

    КонецФункции
```
---
У меня платформа 8.3.18.1208

Была бы еще у меня новая =) Так ладно бы... а тут 1С:Предприятие 8.3 (8.3.8.2322) и УТ 10.3.13.2, старье =)
Работает и ладно =) Свое дело знает. Просто мне скучно и подавай УФ для документа.

Вот и ищу, как напечатать чудный ШК.

А где взяли ?

```1c
    ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
```
---
Тогда тебе надо добавить компоненту печати штрихкода.
Нужно создать общий макет тип Двоичные данные и загрузить этот файл:
---
```1c
    Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт

    //Макет = ПолучитьМакет("КомпонентаПечатиШтрихкода");

    ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкода", "ШтрихКод", ТипВнешнейКомпоненты.Native);

    // Создадим объект внешней компоненты
    Если ПодключениеВыполнено Тогда
    ВнешняяКомпонента = Новый("AddIn.ШтрихКод.Barcode");
    Иначе
    Возврат Неопределено;
    КонецЕсли;

    // Если нет возможности рисовать
    Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
    // То картинку сформировать не сможем
    Возврат Неопределено;
    Иначе
    // Установим основные параметры компоненты
    // Если в системе установлен шрифт Tahoma
    Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
    // Выбираем его как шрифт для формирования картинки
    ВнешняяКомпонента.Шрифт = "Tahoma";
    Иначе
    // Шрифт Tahoma в системе отсутствует
    // Обойдем все доступные компоненте шрифты
    Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
    // Получим очередной шрифт, доступный компоненте
    ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
    // Если шрифт доступен
    Если ТекущийШрифт <> Неопределено Тогда
    // Они и будет шрифтом для формирования штри-кода
    ВнешняяКомпонента.Шрифт = ТекущийШрифт;
    Прервать;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    // Утановим размер шрифта
    ВнешняяКомпонента.РазмерШрифта = 12;

    Возврат ВнешняяКомпонента;
    КонецЕсли;

    КонецФункции
```
---
сработало, коряво, но сработало...главное что с этим уже можно работать
У меня только один вопрос, как можно было из 4 лаконично спроектированных строк вывода ШК, превратить в 100 строк + еще какая внешняя компонента...
---
Вт так 1с сейчас и работает.
Чтобы нормально читался штрихкод, пробуй изменять настройки принтера.
Там тоже куча нюансов.
---
Сам ШК четкий получился, это надпись у него такая, но я ее просто убрал и вывел параметром как текст, проблемы более нет.
Спасибо еще раз