Makale Özeti

İlk makalemde MBS Axapta da barkod uygulaması oluşturulmasını inceleyelim

Makale

Merhaba,

İlk makalemde MBS Axapta da barkod uygulaması oluşturulmasını inceleyelim ,

     Teknik olarak anlatmak gerekirse barkod, farklı kalınlıklardan oluşan yanyana dizilmiş siyah çizgiler topluluğudur , barkod sistemi temelde 2 fayda sağlar, bunlar doğru, hatasız bilgi elde etme ve bilgi erişim hızıdır.

     İstatistiki analizlerde barkod okuyucular arasında hata oranı 3 milyonda bir olarak ölçülmüştür. Barkod okuyucular optik sistemleri ile algıladığı veri girişi ve kontrolünde, diğer takip sistemlerinden kat kat daha hızlıdır. Özellikle alışveriş merkezleri, depolar, marketler gibi yüksek ürün hacmine sahip iş ortamlarında hatasız ve hızlı veri takibinde büyük avantaj sağlamaktadır. 

 

BsStockBarcodeLabel Reportunu inceleyelim ,

 

public class ReportRun extends ObjectRun

{ BarCode barcodeInvoiceId;       // barkod tipli değişkenimiz

#DEFINE.BarCodeFontSize(100)       // barcode font size declare için local macro tanımlıyoruz

#DEFINE.BarCodeWidth(10000)       // barcode font width declare için local macro tanımlıyoruz

#DEFINE.BarCodeHeight(11000)      //  barcode font heigth declare için local macro tanımlıyoruz           

// eğer report execute n tane barcode döndürmek içinse

// Herbiri için spesifik değer tanımlayabiliriz

BarCode barcodeInvoiceId1;                                                                              

#DEFINE.BarCodeFontSize1(100)                                                                            

#DEFINE.BarCodeWidth1(1000)

#DEFINE.BarCodeHeight1(11000)                   

Buradaki değerleri static tanımladığımız için raporumuzdaki object properties kısmından değiştiremiyoruz ,yinede gerekirse rapor çalışırken metodla değiştirebiliriz.

 

Evet report class içinde tanımladığımız macroların ,raporun initial kısmındaki report string controle atamalarını yapalım ,

public void init()

{

ReportStringControl rsc;              //Barkod için değer atayacağımız değişken

ReportStringControl rsc1;            //Barkod için değer atayacağımız 2. değişken 

barcodeInvoiceId = BarCode::construct(BarcodeType::Code128);

barcodeInvoiceId1 = BarCode::construct(BarcodeType::Code128);

rsc = element.design().controlName(identifierStr(InvoiceIdBarCode));

rsc.font(barcodeInvoiceId.defaultfont());                                                              

rsc.fontSize(#BarCodeFontSize);                                                                     

rsc.width100mm(#BarCodeWidth);                                                              

rsc.height100mm(#BarCodeHeight);                                                           

rsc1 = element.design().controlName(identifierStr(InvoiceIdBarCode1));  

rsc1.font(barcodeInvoiceId.defaultfont());

rsc1.fontSize(#BarCodeFontSize);

rsc1.width100mm(#BarCodeWidth);                                                         

rsc1.height100mm(#BarCodeHeight);

super();

     Dikkat ettiyseniz Code128 atadım  ,MBS Axapta diğer uluslararası barkod standartlarını  (EAN128, EAN13,kod 39 ,kod128,UPC A,UPC E, EAN8)  destekler ,neden diye soracak olursanız benim alfanümerik ve uzun stringleri barkoda dönüştürmem gerekebilir yada kullanılacak donanım özellikleri nedeniyle barkod okuyucu-yazıcı için seçim yapmam gerekebilir kısaca  uygun olanı  bu kriterlere göre uygulamamız gerekiyor.

Axapta içinde barkod tanımı yaparken uzunluk ve font gibi değerlerini atayabilliriz,

 

 Barkodun altında gözükmesini istediğimiz madde açıklama alanı için display method kullanabiliriz,

Rapor metodlarına buna benzer yapıyla string değerler yada sizin yaratıcılığınıza bağlı olarak diğer bilgileri gönderebiliriz ancak bu barkod uygulaması olduğundan kısa ve anlaşılır bir tanım yeterli olacaktır sanırım,

display str iteminfo()

{                                                                                                                                                                     

str iteminfo;

inventtablemodule _inventtablemodule;

;

select * from _inventtablemodule

             where _inventtablemodule.ItemId == inventtable.ItemId &&

                   _inventtablemodule.ModuleType == ModuleInventPurchSales::Invent;

return inventtable.ItemId+' '+ _inventtablemodule.UnitId+' '+inventtable.AxsShelfNo;

}

Display method aracılığı ile madde bilgilerimizi, select cümleciği ile çağırdık ve report string döndürecek tanımlamamızı yapmış olduk ,bundan sonrası report designer içinde devam edecek ,

   Tasarımda Bulk data için bir section grup yada herbir rapor için Programmable Section oluşturalım ve

Oluşturduktan sonra body – methodlarına aşağıdaki gibi bir kod ekleyerek , rapor çalıştığında,veriyi yakalayıp bize barcode decode-encode etmesini sağlayalım ,

display BarcodeString InvoiceIdBarCode()

{

BarcodeString ret;

;

barcodeInvoiceId.string(true,strUpr(InventTable.ItemId));                      

barcodeInvoiceId.encode();

ret = barcodeInvoiceId.barcodeStr();                                                                                                                                

return ret;

}

Hazırladığımız methodları reportdaki body içine içine sürükle-bırakarak ekleyip raporu çalıştırabiliriz,