8.х Как сделать печать ШК в макете УФ

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Inkeeper, 20 май 2014.

  1. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    Используются управляемые формы. В макете обработки добавил объект с типом "1С V8 Печать штрих-кодов" и именем "Штрихкод" - для печати штрихкода;

    в функцию печати макета добавил строчки:
    Код:
    ПараметрыШтрихкода = Новый Структура;
                 ПараметрыШтрихкода.Вставить("Ширина",         23);
                 ПараметрыШтрихкода.Вставить("Высота",         12);
                 ПараметрыШтрихкода.Вставить("Штрихкод",        ШК);
                 ПараметрыШтрихкода.Вставить("ТипКода",         99);
                 ПараметрыШтрихкода.Вставить("ОтображатьТекст", Истина);
                 ПараметрыШтрихкода.Вставить("РазмерШрифта",    10);
                 ПараметрыШтрихкода.Вставить("УголПоворота", 0);
                
                 Картинка =  МенеджерОборудованияСервер.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
                 Этикетка.Рисунки.Штрихкод.Картинка =  Картинка;
    
    Этикетка - область макета.

    В переменную Картинка возвращается значение картинки с типом данных "Картинка" (т.е. картинка штрихкода), но 1С ругается на попытку присвоить картинку в элемент макета:

    Подскажите пожалуйста - как правильно сделать присваивание элементу макета значение
  2. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
  3. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    этот пример я видел, в примере вывод картинки:
    Код:
    ОбластьЗначение.Рисунки.Штрихкод.Картинка = ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, Штрихкод, 50, 30);
    у меня:
    Код:
     Картинка =  МенеджерОборудованияСервер.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
                 Этикетка.Рисунки.Штрихкод.Картинка =  Картинка;
    можно и так
    Код:
     Этикетка.Рисунки.Штрихкод.Картинка =  МенеджерОборудованияСервер.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
    но результат один:
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    На сервере пишите ?
  5. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    вроде да, в модуле объекта внешней обработки
  6. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    :) Директива препроцессору какая, &НаКлиенте или &НаСервере ?
  7. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    директивы нет, по умолчанию вроде на сервере? Если да то нужно вызывать клиентскую функцию и там работать с макетом?
  8. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Нет, на клиенте вы только отображаете то, что сделали на сервере. По умолчанию, если нет директивы, то выполняется на сервере.
    Попробуйте отладчиком прогнать ваш код, посмотрите, формируется ли печатный документ.
  9. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    если закомментить строчку
    , то печатный документ формируется, но конечно без вывода картинки ШК
  10. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    с внешними это не в составе конфигурации, так что там может всё по иному быть
    вот код из типовой УТ11.1
    но! лежит он в общем модуле конфигурации (деректив нет)
    и ещё раз обращаю внимание что кода 99 для типа ШК нет

    Код:
    Процедура ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, Знач ОбластьМакета, Ссылка) Экспорт
       
        ВыводитьШтрихкодВОтдельнуюОбласть = Ложь;
        Если Не ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакета) Тогда
            // Картинки штрихкода в этой области макета нет.
           
            Если Макет.Области.Найти("ОбластьШтрихкода") <> Неопределено Тогда
               
                // Проверить картинку штрихкода в области "Штрихкод"
                ОбластьМакетаШтрихкод = Макет.ПолучитьОбласть("ОбластьШтрихкода");
                Если ЕстьКартинкаШтрихкодаВОбластиМакета(ОбластьМакетаШтрихкод) Тогда
                    ОбластьМакета = ОбластьМакетаШтрихкод;
                    ВыводитьШтрихкодВОтдельнуюОбласть = Истина;
                Иначе
                    Возврат;
                КонецЕсли;
            Иначе
                Возврат;
            КонецЕсли;
           
        КонецЕсли;
       
        Если Не ПолучитьФункциональнуюОпцию("ИспользоватьШтрихкодированиеПечатныхФормОбъектов") Тогда
            ОбластьМакета.Рисунки.Удалить(ОбластьМакета.Рисунки.КартинкаШтрихкода);
            Возврат;
        КонецЕсли;
       
        Эталон = Обработки.ПечатьЭтикетокИЦенников.ПолучитьМакет("Эталон");
        КоличествоМиллиметровВПикселе = Эталон.Рисунки.Квадрат100Пикселей.Высота / 100;
       
        ПараметрыШтрихкода = Новый Структура;
        ПараметрыШтрихкода.Вставить("Ширина",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Ширина / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Высота",          Окр(ОбластьМакета.Рисунки.КартинкаШтрихкода.Высота / КоличествоМиллиметровВПикселе));
        ПараметрыШтрихкода.Вставить("Штрихкод",        СокрЛП(ЧисловойКодПоСсылке(Ссылка)));
        ПараметрыШтрихкода.Вставить("ТипКода",         4); // Code128
        ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
        ПараметрыШтрихкода.Вставить("РазмерШрифта",    6);
       
        ОбластьМакета.Рисунки.КартинкаШтрихкода.Картинка = МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода);
       
        Если ВыводитьШтрихкодВОтдельнуюОбласть Тогда
            ТабличныйДокумент.Вывести(ОбластьМакета);
        КонецЕсли;
       
    КонецПроцедуры
    
    
  11. TopicStarter Overlay
    Inkeeper
    Offline

    Inkeeper Опытный в 1С

    Регистрация:
    22 мар 2009
    Сообщения:
    327
    Симпатии:
    0
    Баллы:
    26
    картинку получаю с помощью функции общего модуля:

    Код:
    Функция ПолучитьКартинкуШтрихкода(ПараметрыШтрихкода) Экспорт
       
        ВнешняяКомпонента = МенеджерОборудованияСерверПовтИсп.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
       
        Если ВнешняяКомпонента = Неопределено Тогда
            ВызватьИсключение НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода!'");
        КонецЕсли;
       
        // Зададим размер картинки
        ВнешняяКомпонента.Ширина = Окр(ПараметрыШтрихкода.Ширина);
        ВнешняяКомпонента.Высота = Окр(ПараметрыШтрихкода.Высота);
       
        ВнешняяКомпонента.АвтоТип = Ложь;
       
        Если ПараметрыШтрихкода.ТипКода = 99 Тогда
            ТипШтрихкодаВрем = ОпределитьТипШтрихкода(ПараметрыШтрихкода.Штрихкод);
            Если ТипШтрихкодаВрем = "EAN8" Тогда
                ВнешняяКомпонента.ТипКода = 0;
            ИначеЕсли ТипШтрихкодаВрем = "EAN13" Тогда
                ВнешняяКомпонента.ТипКода = 1;
        // Если код содержит контрольный символ, обязательно указываем
        ВнешняяКомпонента.СодержитКС = СтрДлина(ПараметрыШтрихкода.Штрихкод) = 13;
            ИначеЕсли ТипШтрихкодаВрем = "EAN128" Тогда
                ВнешняяКомпонента.ТипКода = 2;
            ИначеЕсли ТипШтрихкодаВрем = "CODE39" Тогда
                ВнешняяКомпонента.ТипКода = 3;
            ИначеЕсли ТипШтрихкодаВрем = "CODE128" Тогда
                ВнешняяКомпонента.ТипКода = 4;
            ИначеЕсли ТипШтрихкодаВрем = "ITF14" Тогда
                ВнешняяКомпонента.ТипКода = 11;
            Иначе
                ВнешняяКомпонента.АвтоТип = Истина;
            КонецЕсли;
        Иначе
            ВнешняяКомпонента.АвтоТип = Ложь;
            ВнешняяКомпонента.ТипКода = ПараметрыШтрихкода.ТипКода;
        КонецЕсли;
       
        ВнешняяКомпонента.ОтображатьТекст = ПараметрыШтрихкода.ОтображатьТекст;
       
        // Формируем картинку штрихкода
        ВнешняяКомпонента.ЗначениеКода = ПараметрыШтрихкода.Штрихкод;
       
        Если ПараметрыШтрихкода.Свойство("УголПоворота") Тогда   
            ВнешняяКомпонента.УголПоворота = ПараметрыШтрихкода.УголПоворота;
        Иначе
            ВнешняяКомпонента.УголПоворота = 0;
        КонецЕсли;
       
        Если ВнешняяКомпонента.УголПоворота = 90 Или ВнешняяКомпонента.УголПоворота = 270 Тогда
            ВнешняяКомпонента.Высота = ВнешняяКомпонента.Ширина;
        КонецЕсли;
       
        // Если установленная нами ширина меньше минимально допустимой для этого штрихкода
        Если ВнешняяКомпонента.Ширина < ВнешняяКомпонента.МинимальнаяШиринаКода Тогда
            ВнешняяКомпонента.Ширина = ВнешняяКомпонента.МинимальнаяШиринаКода;
        КонецЕсли;
       
        // Если установленная нами высота меньше минимально допустимой для этого штрихкода
        Если ВнешняяКомпонента.Высота < ВнешняяКомпонента.МинимальнаяВысотаКода Тогда
            ВнешняяКомпонента.Высота = ВнешняяКомпонента.МинимальнаяВысотаКода;
        КонецЕсли;
    
        Если ПараметрыШтрихкода.Свойство("РазмерШрифта") И (ПараметрыШтрихкода.РазмерШрифта > 0)
            И (ПараметрыШтрихкода.ОтображатьТекст) И (ВнешняяКомпонента.РазмерШрифта <> ПараметрыШтрихкода.РазмерШрифта) Тогда
            ВнешняяКомпонента.РазмерШрифта = ПараметрыШтрихкода.РазмерШрифта;
        КонецЕсли;
    
        // Сформируем картинку
        ДвоичныеДанныеКартинки = ВнешняяКомпонента.ПолучитьШтрихкод();
       
        // Если картинка сформировалась
        Если ДвоичныеДанныеКартинки <> Неопределено Тогда
            // Формируем из двоичных данных
            Возврат Новый Картинка(ДвоичныеДанныеКартинки);
        КонецЕсли;
       
        Возврат Неопределено;
       
    КонецФункции
    
    поэтому и передаю в структуру ПараметрыШтрихкода.ТипКода = 99.

    п.с. разобрался - всё оказалось интересней - убрал с макета рисунок - объект "1С V8 Печать штрих-кодов", вставил из макета "Эталон" рисунок и ШК напечатался.
    --- Объединение сообщений, 21 май 2014 ---
    alexburn и LordMaverick спасибо за помощь!

Поделиться этой страницей