Штрихкод в управляемой форме в толстом клиенте.

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

Как делалось
&НаСервере
Функция ПечатьЭтикеткиНаСервере()
    
    Об = РеквизитФормыВЗначение("Объект");
    
    СтруктураВозврат = Новый Структура;
    СтруктураВозврат.Вставить("Успех", Истина);
    
    ПринтерДляПечати = МДО_ОбщийМодуль.ОпределитьПринтерДляПользователя(ПараметрыСеанса.ТекущийПользователь);
    Если ПринтерДляПечати = "" Тогда
        СтруктураВозврат.Успех = Ложь;
        СтруктураВозврат.Вставить("Ошибка","Не задан принтер");
        Возврат СтруктураВозврат;
    КонецЕсли;
    
    Макет = Об.ПолучитьМакет("Этикетка");
    
    ТабДокумент = Новый ТабличныйДокумент;
    ТабДокумент.ВысотаСтраницы    =    370;
    ТабДокумент.ШиринаСтраницы    =    570;
    ТабДокумент.ПолеСверху         =     0;
    ТабДокумент.ПолеСправа         =     0;
    ТабДокумент.ПолеСнизу         =     0;
    ТабДокумент.ПолеСлева         =     0;
    ТабДокумент.АвтоМасштаб     =     Истина;
    ТабДокумент.ИмяПринтера        =    ПринтерДляПечати;
    ТабДокумент.ВерхнийКолонтитул.Выводить    =    Ложь;
    ТабДокумент.НижнийКолонтитул.Выводить    =    Ложь;
          
    Область =     Макет.ПолучитьОбласть("Этикетка");    
    Для Каждого Товар из Объект.Товары Цикл
        Область.Параметры.Заполнить(Товар.Номенклатура);            
    КонецЦикла;
    
    КомпонентШК               =    Область.Рисунки.Штрихкод.Объект;
    КомпонентШК.ТипКода         = 4;
    КомпонентШК.АвтоТип         = Ложь;
    КомпонентШК.Сообщение     = Объект.Номер;
    ТабДокумент.Вывести(Область);
    
    ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();
    
    СтруктураВозврат.Вставить("ТД",ТабДокумент);
    Возврат СтруктураВозврат;

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

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



Показать


Ну и разумеется ошибка начинается с этой части
КомпонентШК               =    Область.Рисунки.Штрихкод.Объект;
КомпонентШК.ТипКода         = 4;



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


Прочел мега тону статей, понял, что в УФ это сделано через анус обезьяны и расстроился.
Теперь вопрос. Может кто делал такой изврат ... ? и поможет с кодом и компонентами для УТ...
По теме из базы знаний
Найденные решения
5. Ivanov_OM 38 19.08.21 19:06 Сейчас в теме
(3)
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
    
    //Макет = ПолучитьМакет("КомпонентаПечатиШтрихкода");
    
    ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкода", "ШтрихКод", ТипВнешнейКомпоненты.Native);
    
    // Создадим объект внешней компоненты
    Если ПодключениеВыполнено Тогда
        ВнешняяКомпонента = Новый("AddIn.ШтрихКод.Barcode");
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
    // Если нет возможности рисовать
    Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
        // То картинку сформировать не сможем
        Возврат Неопределено;
    Иначе
        // Установим основные параметры компоненты
        // Если в системе установлен шрифт Tahoma
        Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
            // Выбираем его как шрифт для формирования картинки
            ВнешняяКомпонента.Шрифт = "Tahoma";
        Иначе
            // Шрифт Tahoma в системе отсутствует
            // Обойдем все доступные компоненте шрифты
            Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
                // Получим очередной шрифт, доступный компоненте
                ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
                // Если шрифт доступен
                Если ТекущийШрифт <> Неопределено Тогда
                    // Они и будет шрифтом для формирования штри-кода
                    ВнешняяКомпонента.Шрифт = ТекущийШрифт;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        // Утановим размер шрифта
        ВнешняяКомпонента.РазмерШрифта = 12;
        
        Возврат ВнешняяКомпонента;
    КонецЕсли;
    
КонецФункции
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Ivanov_OM 38 19.08.21 18:50 Сейчас в теме
Тут все зависит от платформы.
У новых платформ не работает старая компонента штрихкода, только встроенная.
У меня платформа 8.3.18.1208
У меня вот так работает:
ПараметрыШтрихкода = Новый Структура;
            ПараметрыШтрихкода.Вставить("Ширина",        110);
            ПараметрыШтрихкода.Вставить("Высота",        20);
            ПараметрыШтрихкода.Вставить("ТипКода",        1);//Автоопределение
            ПараметрыШтрихкода.Вставить("РазмерШрифта",    8);
            ПараметрыШтрихкода.Вставить("Штрихкод",        СтрокаИзСписка.ШтрихКод);
            ПараметрыШтрихкода.Вставить("ОтображатьТекст",    Истина);
                            
            ЭтикеткаОбласть.Рисунки.ШтрихКод.Картинка = ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода)
Показать


Функция получения штрихкода:
Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
    
    ВнешняяКомпонента = ПодключитьВнешнююКомпонентуПечатиШтрихкода();
    
    Если ВнешняяКомпонента = Неопределено Тогда
        ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
    КонецЕсли;
    
    // Зададим размер картинки
    ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
    ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
    
    ВнешняяКомпонента.АвтоТип = Ложь;
    ВнешняяКомпонента.ТипКода         = ПараметрыШтрихкода.ТипКода;
    ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
    ВнешняяКомпонента.РазмерШрифта    = ПараметрыШтрихкода.РазмерШрифта;
    
    // Или установим код EAN-13
    // ВнешняяКомпонента.ТипКода = 1;
    //
    // Тип смотрим в документации на внешнуюю компоненту
    
    // Если код содержит контрольный символ, обязательно указываем
    ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
    
    // Если отображать контрольный символ не нужно
    // ВнешняяКомпонента.ВидимостьКС = Ложь;
    
    // Формируем картинку штрихкода
    ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
    
    // Если установленная нами ширина меньше минимально допустимой для этого штрихкода
    Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
        ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода + 10;
    КонецЕсли;
    
    // Сформируем картинку
    ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
    
    // Если картинка сформировалась
    Если ДвоичныеДанныеКартинки <> Неопределено Тогда
        // Формируем из двоичных данных
        Возврат Новый Картинка(ДвоичныеДанныеКартинки);
    КонецЕсли;
    
    Возврат Неопределено;
    
КонецФункции
Показать
3. Mi11er 99 19.08.21 18:58 Сейчас в теме
(2)
У меня платформа 8.3.18.1208

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

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

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

4. Ivanov_OM 38 19.08.21 19:01 Сейчас в теме
(3)Тогда тебе надо добавить компоненту печати штрихкода.
Нужно создать общий макет тип Двоичные данные и загрузить этот файл:
Прикрепленные файлы:
КомпонентаПечатиШтрихкода.xml
5. Ivanov_OM 38 19.08.21 19:06 Сейчас в теме
(3)
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода() Экспорт
    
    //Макет = ПолучитьМакет("КомпонентаПечатиШтрихкода");
    
    ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкода", "ШтрихКод", ТипВнешнейКомпоненты.Native);
    
    // Создадим объект внешней компоненты
    Если ПодключениеВыполнено Тогда
        ВнешняяКомпонента = Новый("AddIn.ШтрихКод.Barcode");
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
    // Если нет возможности рисовать
    Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
        // То картинку сформировать не сможем
        Возврат Неопределено;
    Иначе
        // Установим основные параметры компоненты
        // Если в системе установлен шрифт Tahoma
        Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
            // Выбираем его как шрифт для формирования картинки
            ВнешняяКомпонента.Шрифт = "Tahoma";
        Иначе
            // Шрифт Tahoma в системе отсутствует
            // Обойдем все доступные компоненте шрифты
            Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
                // Получим очередной шрифт, доступный компоненте
                ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
                // Если шрифт доступен
                Если ТекущийШрифт <> Неопределено Тогда
                    // Они и будет шрифтом для формирования штри-кода
                    ВнешняяКомпонента.Шрифт = ТекущийШрифт;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        // Утановим размер шрифта
        ВнешняяКомпонента.РазмерШрифта = 12;
        
        Возврат ВнешняяКомпонента;
    КонецЕсли;
    
КонецФункции
Показать
6. Mi11er 99 19.08.21 19:23 Сейчас в теме
(5) сработало, коряво, но сработало...главное что с этим уже можно работать
У меня только один вопрос, как можно было из 4 лаконично спроектированных строк вывода ШК, превратить в 100 строк + еще какая внешняя компонента...
Прикрепленные файлы:
7. Ivanov_OM 38 19.08.21 22:35 Сейчас в теме
(6) Вт так 1с сейчас и работает.
Чтобы нормально читался штрихкод, пробуй изменять настройки принтера.
Там тоже куча нюансов.
8. Mi11er 99 20.08.21 11:34 Сейчас в теме
(7) Сам ШК четкий получился, это надпись у него такая, но я ее просто убрал и вывел параметром как текст, проблемы более нет.
Спасибо еще раз
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот