How to create a bar code label printing report

Shenpen
Member Posts: 386
It is the hardest suffering I had in this year, so I would like to share it.
First, forget bar code fonts (do not work for non-English countries, it is a deep Navision bug of what fonts it accept).
Use the BMP-generating download from the downloads.
You will need to print more than one barcode per item, so you will need a new table, with fields like Item No., Barcode, Barcode BMP (a BLOB), Quantity, Price, Description, etc. of which Barcode (f.e. Item Cross-References) and Quantity is important now - quantity is where users enter how much to print from a given item (and of course you need additional code that suggests to print the quantities on inventory or a receipt or manuf. document etc., but that's easy to do)
Create a directory C:\barcode. Of course you can create fields in some settings table, but for this example I will hardcode it.
the barcode generating and importing code (on a button, or something) will look something like:
highlights:
- this is for EAN13. the STRLEN-tricks are to ensure only 13 digit barcodes will be printed, but we export only 12, because Navibar autocalculates the check digit, so even if it's wrong in Navision, it can print it. (Of course reading it will not be possible, as you don't have such code. Okay, it may be a bit clumsy solution, but I did not want to add error messages.)
shl is an Automation, "Windows Scripting Host Object Library.Shell
it is configured by the two variables, to hold up everything until the program finishes running. It is important, or else you try reading a file that is locked and that is not possible.
Then we run the report. The report will be the next post.
First, forget bar code fonts (do not work for non-English countries, it is a deep Navision bug of what fonts it accept).
Use the BMP-generating download from the downloads.
You will need to print more than one barcode per item, so you will need a new table, with fields like Item No., Barcode, Barcode BMP (a BLOB), Quantity, Price, Description, etc. of which Barcode (f.e. Item Cross-References) and Quantity is important now - quantity is where users enter how much to print from a given item (and of course you need additional code that suggests to print the quantities on inventory or a receipt or manuf. document etc., but that's easy to do)
Create a directory C:\barcode. Of course you can create fields in some settings table, but for this example I will hardcode it.
the barcode generating and importing code (on a button, or something) will look something like:
fname:='c:\barcode\barcodetemp.bmp'; CLEAR(itemlabel); CREATE(shl); IF itemlabel.FIND('-') THEN REPEAT bc:=itemlabel."Barcode No."; IF STRLEN(bc)=13 THEN BEGIN bc:=COPYSTR(bc,1,12); zero:=0; tru:=TRUE; shl.Run('c:\barcode\NAVIBAR.exe ' + bc +'{01{120{60{'+fname,zero,tru); itemlabel."Barcode BMP".IMPORT(fname); itemlabel.MODIFY(TRUE); FILE.ERASE(fname); END ELSE BEGIN itemlabel.DELETE(TRUE); END; UNTIL itemlabel.NEXT=0; CLEAR(shl); COMMIT; rep.SETTABLEVIEW(itemlabel); rep.RUN;
highlights:
- this is for EAN13. the STRLEN-tricks are to ensure only 13 digit barcodes will be printed, but we export only 12, because Navibar autocalculates the check digit, so even if it's wrong in Navision, it can print it. (Of course reading it will not be possible, as you don't have such code. Okay, it may be a bit clumsy solution, but I did not want to add error messages.)
shl is an Automation, "Windows Scripting Host Object Library.Shell
it is configured by the two variables, to hold up everything until the program finishes running. It is important, or else you try reading a file that is locked and that is not possible.
Then we run the report. The report will be the next post.
Do It Yourself is they key. Standard code might work - your code surely works.
0
Comments
-
The report is really hard.
You can start with a report wizard, that at least can easily configure the layout.
You will need the record count in you OnPreDataItem>NoOfRecords:=0; CLEAR(iltocount); iltocount.COPYFILTERS(IL); IF iltocount.FIND('-') THEN REPEAT NoOfRecords+=iltocount.Quantity; UNTIL iltocount.NEXT=0;
First thing is to create an Integer data item, indented. You will needSETRANGE(Number,1,IL.Quantity);
in the OnPreDataItem of integer. Do not forget to copy the OnPreSection!
OnAfterGetRecord of Integer for a 3-column report is something like:RecordNo := RecordNo + 1; ColumnNo := ColumnNo + 1; IL.CALCFIELDS("Barcode BMP"); IF ColumnNo=1 THEN BEGIN il1.COPY(IL); il1.CALCFIELDS("Barcode BMP"); END; IF ColumnNo=2 THEN BEGIN il2.COPY(IL); il2.CALCFIELDS("Barcode BMP"); END; IF ColumnNo=3 THEN BEGIN il3.COPY(IL); il3.CALCFIELDS("Barcode BMP"); END; Addr[ColumnNo][1] := FORMAT(IL."Item No."); Addr[ColumnNo][2] := FORMAT(IL."Variant Code"); Addr[ColumnNo][3] := FORMAT(IL."Item Description"); Addr[ColumnNo][4] := FORMAT(IL."Price"); //and maybe the currency IF RecordNo = NoOfRecords THEN BEGIN FOR i := ColumnNo + 1 TO NoOfColumns DO CLEAR(Addr[i]); //CLEAR(il1); //CLEAR(il2); //CLEAR(il3); // there is some bug here, so commented out ColumnNo := 0; END ELSE BEGIN IF ColumnNo = NoOfColumns THEN ColumnNo := 0; END;
I don't even try to explain it. Some of it is standard, wizard-generated code, the other is working around Navision's limitation that it cannot print a BMP from a variable, so we trick with record variables. OF course you need picture boxes with sourceexpr like il1."Barcode BMP", and so on.
There is a bug somewhere near the commented out code, it prints two extra labels, only with picture, no text. This is not a serious problem, I am tired now, but I will try making a 3-array of record variable instead of IL1, IL2, IL3 record variables, maybe that corrects that.
Maybe with this help barcode printing won't become a big nightmare for you.
Do It Yourself is they key. Standard code might work - your code surely works.0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions