В какой момент лучше инициализироать внешнюю компоненту?

1. baracuda 2 08.05.23 14:35 Сейчас в теме
Всем добра. У меня на внешней печатной форме печатается картинка штрихкода. Генерится картинка через внешнюю компоненту 1С Печать штрихкодов.
Я пока каждый раз при печати делаю инициализацию компоненты. Талонов печати печатается в день до 800 штук.
Хотелось бы уточнить как првильнее и где лучше инициировать внешнюю компоненту для уменьшения накладных расходов по части производительности.
Найденные решения
9. spacecraft 08.05.23 17:56 Сейчас в теме
(8) теперь посмотрите есть общий модуль ГенерацияШтрихкода и в нем метод ИзображениеШтрихкода.
Если есть, то замените нижнюю половину кода на приведенную мной.

Если ОбластьШапка.Области.Найти("КартинкаШтрихкода") <> Неопределено Тогда
        ОбластьШтрихкода = ОбластьШапка.Область("КартинкаШтрихкода");
        ОбластьШтрихкода.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
        ОбластьШтрихкода.Высота = 15;
        ПараметрыГенерацииШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
        ПараметрыГенерацииШтрихкода.Высота = 45;
        ПараметрыГенерацииШтрихкода.Ширина = 210;
        ПараметрыГенерацииШтрихкода.ТипКода = 1; //EAN 13 
        ПараметрыГенерацииШтрихкода.Штрихкод = Прав("0000000000" + СтрЗаменить(Число(ДанныеПечати.Номер), Символы.НПП, ""), 12); // номер преврашаем в штрихкод
        РезультатГенерацииШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
        КартинкаШК = РезультатГенерацииШтрихкода.Картинка;
        ОбластьШтрихкода.Картинка = КартинкаШК;    
    КонецЕсли;
Показать
baracuda; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user5300 1078 08.05.23 14:57 Сейчас в теме
В типовых компонента инициализируется при печати .

Но в теории можно сохранить внешнюю компоненту в переменную (В открытой форме) и генерировать новые штрихкоды...

Так же можно использовать методы БСП, если конфа типовая
3. baracuda 2 08.05.23 15:53 Сейчас в теме
(2) я методы БСП и использую.
То есть ли каждый раз при старте приложения компоненту инициировать то в теории можно получать ее. только интересно где она хранится.
4. user5300 1078 08.05.23 15:55 Сейчас в теме
(3) Хранится она в макете конфигурации,
При открытии формы - инициализируете ВК и загоняете в переменную, и в дальнейшей печати используете ее для генерации
5. baracuda 2 08.05.23 15:58 Сейчас в теме
(4) при открытии какой формы инициировать если открытие формы документа в этом нет смысла так идет открытие большого числа докумкентов?
при открытии самого приложения разве нельзя это сделать.
6. user5300 1078 08.05.23 15:59 Сейчас в теме
(5) можно в теории ) в глобальную переменную загнать
7. spacecraft 08.05.23 17:48 Сейчас в теме
(3) теперь вопрос: как инициируете и зачем?
Все же просто.
Формируете структура с параметрами для штрихкода.
Передаете эти параметры в метод:
РезультатГенерацииШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);

В РезультатГенерацииШтрихкода.Картинка будет уже сформированная картинка штрихкода.
А внутри вызываемого метода идет вызов метода инициализации через общий модуль с Повторное использование возвращаемых значений На время сеанса. Т.е. инициализация будет не постоянно.
8. baracuda 2 08.05.23 17:50 Сейчас в теме
(7)вот кусок кода который генерит ШК из фунгкции Печать() внешней печатной формы.


    Если ОбластьШапка.Области.Найти("КартинкаШтрихкода") <> Неопределено Тогда
        ОбластьШтрихкода = ОбластьШапка.Область("КартинкаШтрихкода");
        ОбластьШтрихкода.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
        ОбластьШтрихкода.Высота = 15;
        ПараметрыГенерацииШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
        ПараметрыГенерацииШтрихкода.Высота = 45;
        ПараметрыГенерацииШтрихкода.Ширина = 210;
        ПараметрыГенерацииШтрихкода.ТипКода = 1; //EAN 13 
        ПараметрыГенерацииШтрихкода.Штрихкод = Прав("0000000000" + СтрЗаменить(Число(ДанныеПечати.Номер), Символы.НПП, ""), 12); // номер преврашаем в штрихкод
        СистемнаяИнформация = Новый СистемнаяИнформация;
        //Внешняя компонрента для генерации ШК, по хорошему надо перенсти ее инициализацию в модуль сеанса
        //и каждый раз вызывать уже инициализированную    
        ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(Строка(СистемнаяИнформация.ТипПлатформы));
        
        Если ВнешняяКомпонента = Неопределено Тогда
            ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'");
            ЗаписьЖурналаРегистрации(ТекстСообщения, 
                ОбщегоНазначения.КодОсновногоЯзыка(),
                УровеньЖурналаРегистрации.Ошибка,,, 
                ТекстСообщения);
            ВызватьИсключение ТекстСообщения;
        КонецЕсли;
        КартинкаШК = Штрихкодирование.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента, ПараметрыГенерацииШтрихкода);
        ОбластьШтрихкода.Картинка = КартинкаШК;    
    КонецЕсли;


Показать
9. spacecraft 08.05.23 17:56 Сейчас в теме
(8) теперь посмотрите есть общий модуль ГенерацияШтрихкода и в нем метод ИзображениеШтрихкода.
Если есть, то замените нижнюю половину кода на приведенную мной.

Если ОбластьШапка.Области.Найти("КартинкаШтрихкода") <> Неопределено Тогда
        ОбластьШтрихкода = ОбластьШапка.Область("КартинкаШтрихкода");
        ОбластьШтрихкода.РазмерКартинки = РазмерКартинки.РеальныйРазмер;
        ОбластьШтрихкода.Высота = 15;
        ПараметрыГенерацииШтрихкода = ГенерацияШтрихкода.ПараметрыГенерацииШтрихкода();
        ПараметрыГенерацииШтрихкода.Высота = 45;
        ПараметрыГенерацииШтрихкода.Ширина = 210;
        ПараметрыГенерацииШтрихкода.ТипКода = 1; //EAN 13 
        ПараметрыГенерацииШтрихкода.Штрихкод = Прав("0000000000" + СтрЗаменить(Число(ДанныеПечати.Номер), Символы.НПП, ""), 12); // номер преврашаем в штрихкод
        РезультатГенерацииШтрихкода = ГенерацияШтрихкода.ИзображениеШтрихкода(ПараметрыШтрихкода);
        КартинкаШК = РезультатГенерацииШтрихкода.Картинка;
        ОбластьШтрихкода.Картинка = КартинкаШК;    
    КонецЕсли;
Показать
baracuda; +1 Ответить
10. baracuda 2 08.05.23 17:58 Сейчас в теме
(9) ваш вариант тоже рабочий. А в чем отличие?
11. spacecraft 08.05.23 18:00 Сейчас в теме
(10) БСП сама все сделает и как нужно. Инициализация будет не чаще 1 раза в 20 минут.
12. baracuda 2 08.05.23 18:02 Сейчас в теме
(11) да вижу, есть такое.,
Функция ИзображениеШтрихкода(ПараметрыШтрихкода) Экспорт
    
    СистемнаяИнформация = Новый СистемнаяИнформация;
    ТипПлатформыКомпоненты = Строка(СистемнаяИнформация.ТипПлатформы);
    
    ВнешняяКомпонента = ГенерацияШтрихкодаСерверПовтИсп.ПодключитьКомпонентуГенерацииИзображенияШтрихкода(ТипПлатформыКомпоненты);
    
    Если ВнешняяКомпонента = Неопределено Тогда
        ТекстСообщения = НСтр("ru = 'Ошибка подключения внешней компоненты печати штрихкода.'", ОбщегоНазначения.КодОсновногоЯзыка());
    #Если НЕ МобильноеПриложениеСервер Тогда
        ЗаписьЖурналаРегистрации(НСтр("ru = 'Ошибка генерации штрихкода'", 
            ОбщегоНазначения.КодОсновногоЯзыка()),
            УровеньЖурналаРегистрации.Ошибка,,, 
            ТекстСообщения);
    #КонецЕсли
        ВызватьИсключение ТекстСообщения;
    КонецЕсли;
    
    Возврат ПодготовитьИзображениеШтрихкода(ВнешняяКомпонента, ПараметрыШтрихкода); 
     
КонецФункции
Показать


Спасибо, за помощь.
Оставьте свое сообщение

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