Добавление поддержки нестандартного штрих-кода в обработке ПечатьЭтикеток

Обработка ПечатьЭтикеток использует компоненту "1С:Печать штрихкодов"(доступную на диске ИТС) для печати штрих-кодов(далее ШК). Эта компонента поддерживает следующие типы штрих-кодов: EAN8, EAN13, EAN128, Code39, Code128.

Что делать если на предприятии используется отличный ШК, например Interleave 2 of 5, для которго есть системный шрифт @IDAutomationSHI25M, используемый для вывода ШК на экран или на принтер.

Рассмотрим как проще всего добавить поддержку этого типа ШК в обработке ПечатьЭтикеток.

Первым делом скопируем общий макет Этикетка в макет для вывода нашего штрих-кода ЭтикеткаInterleave. В этом макете надо удалить элемент управления, связанный с компонентой "1С:Печать штрихкодов". И оформить центральное поле как параметр табличного документа ШтрихКод, выводимый шрифтом @IDAutomationSHI25M.

рис. 1рис. 1

Далее разрешаем запуск обработки даже с неустановленной компонентой т.к. для вывода нашего ШК компонента не нужна. Для этого комментируем строчку в модуле формы обработки:

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)

   
//. 8< ...........................

   
Попытка
       
КомпонентШК = Новый COMОбъект("V8.Barcod.1");
       
Макет                   = ПолучитьОбщийМакет("Этикетка");
       
ЭтикеткаОбласть         = Макет.ПолучитьОбласть(1,1,4,2);
       
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Сообщение = "1111111111116";
    Исключение
       
Сообщить("Компонента 1С:Печать штрихкодов не установлена на данном компьютере!
                 |Возможна печать только штрих-кодов Interleave!"
, СтатусСообщения.Важное);
       
//Отказ = Истина;
   
КонецПопытки;

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

В общем модуле УправлениеРозничнойТорговлей также есть место проверки на компоненту

#Если Клиент Тогда
// Печать этикеток со штрих-кодом
//
Процедура ПечатьЭтикеток(Товары = Неопределено) Экспорт

//am+ Эта проверка нам не нужна, во первых она выполняется ПередОткрытием в форме обработки.
// Кроме того у нас есть тип штрихкода, который печататется без компоненты.
//Попытка
// КомпонентШК = Новый COMОбъект("V8.Barcod.1");
//Исключение
// Сообщить("Компонента 1С:Печать штрихкодов не установлена на данном компьютере!", СтатусСообщения.Важное);
// Возврат;
//КонецПопытки;
//am-

В обработке есть место, где выполняется проверка типа ШК. Наш ШК сейчас не пройдет проверку и печать выполнена не будет. Чтоб печать выполнялась необходимо исправить функцию в общем модуле УправлениеРозничнойТорговлей.

// Возвращает значение типа штрих-кода для использования в ЭУ
// "1С:Печать штрих-кодов"
//
// Параметры
//  ТипКода -   ПланыВидовХарактеристик.ТипыШтрихкодов - тип, значение для которого
//              нужно получить
//
// Возвращаемое значение:
//   Число, которое может быть присвоено свойству ЭУ "ТипКода"
//
Функция ПолучитьЗначениеТипаШтрихкодаДляЭУ(ТипКода) Экспорт
    Перем
Значение;

    Если
ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN8 Тогда
       
Значение = ;
    ИначеЕсли
ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13 Тогда
       
Значение = 1;
    ИначеЕсли
ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN128 Тогда
       
Значение = 2;
    ИначеЕсли
ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code39 Тогда
       
Значение = 3;
    ИначеЕсли
ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Code128 Тогда
       
Значение = 4;

//am+
   
ИначеЕсли ТипКода = ПланыВидовХарактеристик.ТипыШтрихкодов.Interleave20FS Тогда
       
Значение = 100;
//am-

   
Иначе
       
Значение = -1;
    КонецЕсли;

    Возврат
Значение;
КонецФункции
// ПолучитьЗначениеТипаШтрихкодаДляЭУ()

Мы на завершающем этапе, вносим изменения непосредственно в обработку.

Процедура Печать(ТаблицаТоваров) Экспорт

   
// - - - - 8< - - - - - -

    //am+ Так как у нас два разных макета, то нам нельзя смешивать типы ШК
    //    печатаемые в разных макетах. Выполним проверку.

   
флВремЕстьInterleave = Ложь;
   
флВремЕстьНеInterleave = Ложь;
    Для Каждого
СтрокаИзСписка Из ТаблицаТоваров Цикл
        Если
СтрокаИзСписка.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.Interleave20FS Тогда
           
флВремЕстьInterleave = Истина;
        Иначе
           
флВремЕстьНеInterleave = Истина;
        КонецЕсли;
        Если
флВремЕстьInterleave и флВремЕстьНеInterleave Тогда
           
Предупреждение("В списке одновременно встречаются штрих-коды несовместимых типов,
                           |Штрих-коды Interleave необходимо печатать отдельно от остальных!"
);
            Возврат;
        КонецЕсли;
    КонецЦикла;
   
//am-

    // - - - - 8< - - - - - -

   
Таб                     = Новый ТабличныйДокумент;
   
Таб.ИмяПараметровПечати =   "ПАРАМЕТРЫ_ПЕЧАТИ_Этикетка"+СокрЛП(ИмяКомпьютера());
   
//am+ Используем наш макет.
   
Если флВремЕстьInterleave Тогда
       
Макет                   = ПолучитьОбщийМакет("ЭтикеткаInterleave");
    Иначе
   
//am-
       
Макет                   = ПолучитьОбщийМакет("Этикетка");
    КонецЕсли;

   
// - - - - 8< - - - - - -

    //am+ Некоторые строки в нашем макете не заработают, необходимо добавить условие.
   
Если Не флВремЕстьInterleave Тогда
   
//am-
       
РисунокШтрихкод         = ЭтикеткаОбласть.Рисунки.Штрихкод;
    КонецЕсли;

   
// - - - - 8< - - - - - -

    //am+
   
Если Не флВремЕстьInterleave Тогда
   
//am-
       
РисунокШтрихкод.Расположить(ОбластьШтрихкод);
    КонецЕсли;

   
// - - - - 8< - - - - - -

       
Если УправлениеРозничнойТорговлей.ПроверитьШтрихКод(СтрокаИзСписка.ШтрихКод,
           
СтрокаИзСписка.ТипШтрихкода) Тогда
           
//am+ здесь мы установим размер шрифта (об этом в конце статьи) и зададим параметр ШтрихКод нашего макета для вывода
           
Если флВремЕстьInterleave Тогда
               
ЭтикеткаОбласть.Параметры.Установить(,
              СформироватьШтрихКодДляМакетаЭтикеткаInterleave(СтрокаИзСписка.ШтрихКод));
               
ЭтикеткаОбласть.Области.ОбластьШтрихкод.Шрифт =
              Новый
Шрифт(ЭтикеткаОбласть.Области.ОбластьШтрихкод.Шрифт,,РезмерШрифтаInterleave);
            Иначе
           
//am-
               
Попытка //попытку нужно добавить т.к. если компонента не установлена, то будут ошибки.
                   
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.ТипКода = ТипКода;
                   
ЭтикеткаОбласть.Рисунки.Штрихкод.Объект.Сообщение = СтрокаИзСписка.ШтрихКод;
                Исключение
                КонецПопытки;
            КонецЕсли;

   
// - - - - 8< - - - - - -

Последний штрих это добавить регулятор размера шрифта (в коде переменная РезмерШрифтаInterleave) на форму обработки:

рис. 2рис. 2

Спасибо автору за очень

Спасибо автору за очень интересный материал!

Уважаемый автор. Пожалуйста,

Уважаемый автор. Пожалуйста, не сочтите за дерзость, но я хотел бы высказать одно замечание.Я, как блогер со стажем, причем довольно немалым, хочу сказать Вам, что в целом у Вас все получается замечательно, и блог однозначно будет жить!Но вот лично мне, хотелось бы видеть какую-то живость в подаче материала. Как говорится, "чтобы за штаны" цепляло :) Но это мое личное..

Похожие материалы

Справочники

Документы

Отчеты

Обработки