Имя: Пароль:
1C
1С v8
Печать штрихкода (УФ)
0 slimuz
 
24.03.21
12:24
Добрый день.
Бухгалтерия 3.0.76.77.
Нужно выводить штрихкод code128 на печатную форму. Набросал код, но ошибка: Поле объекта не обнаружено (D2).
D2- имя объекта "V8.Печать штрих-кодов" в макете.


&НаКлиенте
Процедура СформироватьШтрихкод(Команда)
    ПодключитьВнешнююКомпонентуПечатиШтрихкода();
    СформироватьШтрихкодНаСервере();
КонецПроцедуры

&НаКлиенте
Функция ПодключитьВнешнююКомпонентуПечатиШтрихкода()
    
    // В зависимости от типа платформы подключим соответствующую внешнюю компоненту
    ПодключениеВыполнено = Неопределено;
    СистемнаяИнформация = Новый СистемнаяИнформация;
    Если СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовWindows32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Windows_x86_64 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовWindows64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    ИначеЕсли СистемнаяИнформация.ТипПлатформы = ТипПлатформы.Linux_x86 Тогда
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовLinux32", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    Иначе
        ПодключениеВыполнено = ПодключитьВнешнююКомпоненту("Обработка.ПечатьЭтикетокИЦенников.Макет.КомпонентаПечатиШтрихкодовLinux64", "КартинкаШтрихкода", ТипВнешнейКомпоненты.Native);
    КонецЕсли;
    
    // Создадим объект внешней компоненты
    Если ПодключениеВыполнено Тогда
        ВнешняяКомпонента = Новый("AddIn.КартинкаШтрихкода.Barcode");
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
    // Если нет возможности рисовать
    Если НЕ ВнешняяКомпонента.ГрафикаУстановлена Тогда
        // То картинку сформировать не сможем
        Возврат Неопределено;
    Иначе
        
        // Установим основные параметры компоненты
        
        // Если в системе установлен шрифт Tahoma
        Если ВнешняяКомпонента.НайтиШрифт("Tahoma") = Истина Тогда
            // Выбираем его как шрифт для формирования картинки
            ВнешняяКомпонента.Шрифт = "Tahoma";
        Иначе
            
            // Шрифт Tahoma в системе отсутствует
            // Обойдем все доступные компоненте шрифты
            Для Сч = 0 По ВнешняяКомпонента.КоличествоШрифтов -1 Цикл
                // Получим очередной шрифт, доступный компоненте
                ТекущийШрифт = ВнешняяКомпонента.ШрифтПоИндексу(Сч);
                // Если шрифт доступен
                Если ТекущийШрифт <> Неопределено Тогда
                    // Они и будет шрифтом для формирования штри-кода
                    ВнешняяКомпонента.Шрифт = ТекущийШрифт;
                    Прервать;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        
        // Утановим размер шрифта
        ВнешняяКомпонента.РазмерШрифта = 12;
        
        Возврат ВнешняяКомпонента;
        
    КонецЕсли;
    
КонецФункции


&НаСервере
Функция СформироватьШтрихкодНаСервере()
    ТабДокумент = Новый ТабличныйДокумент;

    Об      = РеквизитФормыВЗначение("Объект");
    Макет   = Об.ПолучитьМакет("Макет");
    Область = Макет.ПолучитьОбласть("Штрихкод");        
    Штрихк = "123456789";
    Область.Рисунки.D2.ТипКода     = Перечисления.ТипыШтрихкодов.Code128;
    Область.Рисунки.D2.Сообщение   = Штрихк;
    Область.Рисунки.D2.ТекстКода   = Штрихк;
    ТабДокумент.Вывести(Область);
КонецФункции

[\1С]
1 Ногаминебить
 
24.03.21
12:53
Букв очень много. Так есть по факту в макете рисунок с именем D2 в указанной области?
2 slimuz
 
24.03.21
12:58
(1) Ага. Макет называется Макет. Область называется Штрихкод и там рисунок D2.


&НаСервере
Функция СформироватьШтрихкодНаСервере()
    ТабДокумент = Новый ТабличныйДокумент;

    Об      = РеквизитФормыВЗначение("Объект");
    Макет   = Об.ПолучитьМакет("Макет");
    Область = Макет.ПолучитьОбласть("Штрихкод");        
    Штрихк = "123456789";
    Область.Рисунки.D2.ТипКода     = Перечисления.ТипыШтрихкодов.Code128;
    Область.Рисунки.D2.Сообщение   = Штрихк;
    Область.Рисунки.D2.ТекстКода   = Штрихк;
    ТабДокумент.Вывести(Область);
КонецФункции
3 lubitelxml
 
24.03.21
13:02
(2) была такой глюк - в конфигураторе картинка называется d2, а если отладчиком развернуть "Область.Рисунки" - то там другое имя, проверь - может в этом дело
4 Ногаминебить
 
24.03.21
13:03
(2) А это точно именно Рисунок? У рисунка есть свойство Картинка, а вот этих не наблюдаю.
5 slimuz
 
24.03.21
13:18
(3) Так и есть, спасибо. Название было другое.
Теперь ошибка: Значение не является значением объектного типа (ТипКода)

И кстати вот так правильней:

Область.Рисунки.D2.Объект.ТипКода

А то поле объекта не обнаружено
6 slimuz
 
24.03.21
13:22
А если закоментить  
Область.Рисунки.D2.Объект.ТипКода = Перечисления.ТипыШтрихкодов.Code128;
То ошибка на следующую строку
Значение не является значением объектного типа (Сообщение)
7 lubitelxml
 
24.03.21
13:24
У меня вот так печатается:
            ПараметрыШтрихкода = Новый Структура;
                ПараметрыШтрихкода.Вставить("Ширина",         60);
                ПараметрыШтрихкода.Вставить("Высота",         100);
                ПараметрыШтрихкода.Вставить("Штрихкод",        ШК);
                ПараметрыШтрихкода.Вставить("ТипКода",         4);
                ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
                ПараметрыШтрихкода.Вставить("РазмерШрифта",    10);
                ПараметрыШтрихкода.Вставить("УголПоворота", 0);
                Картинка =  МенеджерОборудованияСервер.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
                ОбластьПечати.Рисунки.ШК.Картинка =  Картинка;
8 slimuz
 
24.03.21
13:45
(7)   ПараметрыШтрихкода.Вставить("Штрихкод", ШК);

ШК - ведь картинка, которая у меня D2 ?
Что-то ругается обновлении изменений: Переменная не определена
9 lubitelxml
 
24.03.21
13:46
ШК - это текстовый штрихкод который я формирую сам
10 lubitelxml
 
24.03.21
13:47
в твоем случае - это Штрихк
11 slimuz
 
24.03.21
14:02
(10) Спасибо)
Ошибка:Поле объекта недоступно для записи (Картинка).
На строчку

ОбластьПечати.Рисунки.D2.Картинка =  Картинка;

В свойствах рисунка галочку "Защита" убрал, не помогло.
12 lubitelxml
 
24.03.21
14:07
13 slimuz
 
26.03.21
07:38
(12)
1. Нужно было вставлять картинку, вместо объекта "v8.Печать ш-к"
2. Табличный док. необходимо выводить на клиенте, запутался :D
Теперь не могу картинку подогнать под размер 43х25 для печати.

ПараметрыШтрихкода.Вставить("Ширина",43);
ПараметрыШтрихкода.Вставить("Высота",25);

Это походу не то, что нужно))