Solved

Add a bar-code to an already created spool file

Posted on 2003-12-09
29
735 Views
Last Modified: 2012-06-22
Is it possible to take an already created spool file, and add a bar-code symbol into the
spool file, then allow it to be printed?

The printer attached to the AS/400 is an Epson DFX 8000.

Thanks,

Pipster1
0
Comment
Question by:pipster1
  • 14
  • 13
29 Comments
 
LVL 14

Expert Comment

by:daveslater
ID: 9904407
Hi
are you using IPDS, USERASCII or ADFPDS to create you output file

Dave
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9904430
ps
other detailed info, ie is it a calcilated barcode or a standard barcode; will the barcode be always be in the same place etc..
this would be useful

dave
0
 

Author Comment

by:pipster1
ID: 9905148
The spool file output is being created by an RPG program as far as I know. I could get you an example of the file if necessary.

I assume the barcode will be standard. I've been asked to put the barcode on the spool
file but do not know how. THe barcode will always be in the same place.

Pipster1
0
 

Author Comment

by:pipster1
ID: 9905158
In addition, I do not have access to the RPG program.

pipster1
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9905220
Hi
you can check the output type by running the program to create a print. Pur an option 8 against the print and page down
there will be a line that looks like

Printer device type  . . . . . . . . . :   *SCS
this is wnhat I need to know.

Do you have access to an RPG or RPGLE compiler.

Dave

0
 

Author Comment

by:pipster1
ID: 9905290
The printer device type is *SCS

Yes I have my own as/400 with RPG and RPGLE compilers.

pipster1
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9905390
Hi
Here is a theory

Direct the spool file in question to a dummy outputq ie QGPL/ADDBARCDE;

This output queue has a data queue attached that will receive the spool file details when an entry is added.

A background process picks up the spool file details; copies the spool file to a physical file with the control characters. It writes the *SCS file to an AFPDS file inserting the barcode at the correct point in the spool file.


I can give you technical advice and supply some code but as I do not have the spoo file information things are a bit limited


Technical considerations are:

Is the report a multipage report that requires barcodes printing of different pages.

Does the printer support an AFPDS data stream


Dave

I will generate some sample code to check if the printer can support and AFPDS data stream that can print a barcode; if it does then we are in business
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9905435
Hi
Second thought.

If the program only ever generates a single page report there is an easier way.

Dave
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9905538
Hi
AFPDS test

Member: BARCODE
Type: PRTF

 **  COMPILE OPTIONS                                        
 **  DEVTYPE(*AFPDS) UOM(*CM)                                
A          R @@HDR                                          
             BAR01         11S 0  10  5BARCODE(UPCA 6)      




Member: Anything
Type: RPGLE
h                                                                
fbarcode   o    e             printer                            
c                   eval      bar01=123456                      
c                   write     @@hdr                              
c                                                                
c                   eval      *inlr=*on                          


Dave

0
 

Author Comment

by:pipster1
ID: 9905767
The report may contain up to 50 pages at a time.

I also forgot to mention (like a numbskull) there is field data on a specific line in a specific
column that needs to be converted to a barcode and the barcode of that info printed on the line below the field to be translated.

I'm sorry I didn't mention this before.

I can get you a cpyf of the spool file if you want but I don't know how to get it to you.

pipster1
0
 

Author Comment

by:pipster1
ID: 9907094
Dave,

Thanks for answering my other questions. Might I hear from you on the last item I posted?

Thanks,

Pipster1
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9911902
Hi again

Did you manage to do the AFPDS test?
If we can not print the barcode on the printer my solution will not work.

Rgds


Dave
0
 

Author Comment

by:pipster1
ID: 9912468
Dave,

No, but I should be able to do it shortly.
I'll let you know.

Thanks,
pipster1
0
 

Author Comment

by:pipster1
ID: 9912632
Dave,

Can you explain the 'DEVTYPE(*AFPDS) UOM(*CM)'
compile option? specifically the uom(*cm)? I findthe following

                           Create Printer File (CRTPRTF)                        
                                                                               
 Type choices, press Enter.                                                    
                                                                               
                                                                               
                            Additional Parameters                              
                                                                               
 Source listing options . . . . .                 *SRC, *NOSRC, *SOURCE...    
                + for more values                                              
 Page size:                                                                    
   Length--lines per page . . . .   66            .001-255.000                
   Width--positions per line  . .   132           .001-378.000                
   Measurement method . . . . . . > *UOM          *ROWCOL, *UOM                
 Lines per inch . . . . . . . . .   6             6, 3, 4, 7.5, 7,5, 8, 9, 12  
 Characters per inch  . . . . . .   10            10, 5, 12, 13.3, 13,3, 15...
 Front margin:                                                                
   Offset down  . . . . . . . . .   *DEVD         0-57.790, *DEVD              
   Offset across  . . . . . . . .                 0-57.790                    

I can put in *uom but how do I define (*cm) ?

Thanks,

Phil
0
Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

 
LVL 14

Expert Comment

by:daveslater
ID: 9912667
Hi Phil
I take it you are using PDM
simply put an option 14 to compile then on the command line type
 DEVTYPE(*AFPDS) UOM(*CM)  

then press F4 to prompt of enter to compile


Dave
0
 

Author Comment

by:pipster1
ID: 9912686
Dave,

Nevermind, I figured out the previous problem.

Will let you know how the test goes.

Phil
0
 

Author Comment

by:pipster1
ID: 9912948
Dave,

Test was unsucessful but a praim emulation is being used to run the epson printer.
The praim emulation can be change to support barcodes, and is being changed now.
Will let you know if test is sucessful under new emulation configuration.

Thanks,

Phil
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9913712
Hi
How is the printer connected to the AS/400.
Is there a HP laserjet connected as a network printer, if so the AFPDS test should work on that.

Dave
0
 

Author Comment

by:pipster1
ID: 9913745
Dave,

There is an insistence on using the epson printer.

Phil
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9913930
Hi
That is OK.

What I am trying to identify is:

Is the AFPDS test working correctly? To do this we can print it to a laser jet.
Once we know that this is OK we can try to configure the Epson to print it. My whole solution is dependant on the Epson being able to prine an AFPDS converted barcode.

Is the Epson printer connected via client access or a JetDirect Box?

If it is a JetDirect Box try the following:
For a Laserjet (JD port 1)
CRTOUTQ OUTQ(DSLIBEE/HP) RMTSYS(‘192.192.192.192’) RMTPRTQ(RAW1) CNNTYPE(*IP)
DESTTYPE(*OTHER) MFRTYPMDL(*HP4) SEPPAGE(*NO)

For the Epson (JD port 1)
CRTOUTQ OUTQ(DSLIBEE/EPSON) RMTSYS(‘192.192.192.192’) RMTPRTQ(RAW1) CNNTYPE(*IP)
DESTTYPE(*OTHER) MFRTYPMDL(*EPDFX8000) SEPPAGE(*NO)

If it is connected via client access we must identify what how to configure client access.

Regards


Dave
0
 

Author Comment

by:pipster1
ID: 9914039
Dave,

The printer is connected via a Praim emulation box. I'm not sure about the configurarion of the Praim emulator but there is a way to configure it as a 5224 and then it will accept graphics.

Pipster1
0
 

Author Comment

by:pipster1
ID: 9921044
Dave,

Still waiting on the Praim emulator re-config. Thanks for your patience.

Pipster1
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9921102
Hi
First bit of cod to get started
I use dslibee as my work library

Create dataq and output queue to receive entries. When a release netry hits the outq it will send an entry to the dataq
By holding then releasing a spool file another entry will be sent to the data queue

CRTDTAQ DTAQ(DSLIBEE/BARCODE) MAXLEN(128) TEXT('Barcode processing')    
CRTOUTQ OUTQ(dslibee/BARCODES) DTAQ(dslibee/BARCODE)  

Code to get Dataq entry and spool file attribues (all in RPGLE)

H                                                                      
 *******************************************************************  
 **                                                                    
 **                                                                    
 ********************************************************************  
 /COPY QSYSINC/QRPGLESRC,QUSRSPLA                                      
 ** Dataq definition                                                  
D Dtaq            S             10    INZ('BARCODE')                  
D DtaqLib         S             10    INZ('DSLIBEE')                  
D DtaqLen         S              5  0                                  
D Wait            S              5  0 INZ(15)                          
 **                                                                    
D DtaqData        DS           128                                    
D XID                           10                                    
D XRECID                         2                                    
D XJOB                          10                                    
D XUSER                         10                                    
D XJOB#                          6                                    
D XSPL                          10                                    
D XSPL#                         10i 0                                    
D XOUTQ                         10                                        
D XOUTL                         10                                        
 ** API details                                                          
D JobName         S             26    INZ                                
D JobID           S             26    INZ                                
D SplFID          S             26    INZ                                
D EndOper         S             10    INZ('*WAIT')                        
D RecLen          S              9B 0 INZ(%size(QUSA0200))                
D SplfIH          S              9B 0                                    
D SplfOH          S              9B 0                                    
D #Buff           S              9B 0                                    
D Buffer#         S              9B 0                                    
D Splf#d          S              5  0                                    
D SpcFormat       S              8                                        
D                 DS                                                      
D Splf#b                  1      4B 0                                    
D CSpl#                   1      4                                        
 *                                                                        
D File            S             10                                        
D Job             S             10                                                
D User            S             10                                                
D Job#            S              6                                                
D Splf#x          S              5                                                
 **                                                                              
 ****************************************************                            
 ** LOOP TO FREE                                                                  
C                   DO        *HIVAL                                              
 ** Test for end of job                                                          
C                   SHTDN                                        LR              
C   LR              RETURN                                                        
 ** Get dataq entry                                                              
C                   CALL(e)   'QRCVDTAQ'                                          
C                   PARM                    DTAQ                                  
C                   PARM                    DTAQLIB                              
C                   PARM                    DTAQLEN                              
C                   PARM                    DTAQDATA                              
C                   PARM                    WAIT                                  
 ** Null entry -                                                                  
C                   IF        Dtaqlen=0                                          
C                   ITER                                              
C                   ENDIF                                              
C                                                                      
 ** set spool file attribues                                          
C                   eval      JobName = XJob + XUser + XJob#          
C                   MOVE      XSPL          file                      
C                   eval      Splf#b = XSPL#                          
 *                                                                    
C                   CALL      'QUSRSPLA'                           01  
C                   PARM                    QUSA0200                  
C                   PARM                    RecLen                    
C                   PARM      'SPLA0200'    SpcFormat                  
C                   PARM                    JobName                    
C                   PARM                    JobID                      
C                   PARM                    SplfID                    
C                   PARM                    File                      
C                   PARM                    Splf#b                    
C                                                                      
C   01              ITER                                              
C                   ENDDO                                              


I will try and do somemore tomorrow


Dave


0
 

Author Comment

by:pipster1
ID: 9922326
Dave,

Most excellent, Thanks.

Pipster1
0
 
LVL 14

Expert Comment

by:daveslater
ID: 9927792
Hi again
PART 2
now create a physical file to hold a the spool file
(I am assuming the leng does not exceed 132)
I have called it SPOOLPF

A          R SPOOLPFR                            
A            SKIP           3                    
A            SPACE          1                    
A            DATA         132                    

then using details from the previous program you can copy the spol to the database

CPYSPLF FILE(BARCODE) TOFILE(SPOOLPF) CTLCHAR(*PRTCTL)

Now create a new printer file. This sould have teh same page length CPI etc as the original
I have called it  BARCODE
This is a very simple exapmle - if you original spool file has different CPI's etc you will need to code different record formats

 **  COMPILE OPTIONS                                              
 **  DEVTYPE(*AFPDS) UOM(*CM)                                      
A          R @@HDR                                                
             BAR01         11S 0      5BARCODE(UPCA 6)            
A                                                                  
A          R @@SKIP                    SKIPB(1)                    
A          R @@SPACE                   SPACEB(1)                  
A          R @@DTL                                                
A            FIELD        132         1                            


Program to duplicate the spool file.
again this is a simple version and is not that well written. If the barcode needs to be above the field data then you will need to read the database file into an array or MODS

h                                                                          
 ** spool copied to physical file                                          
fspoolpf   if   e             disk                                          
 ** printer file to generate a copy and create barcode                      
fBARCODE   o    e             printer                                      
 **********************************************************************    
 ** work fields                                                            
 **********************************************************************    
DSKIPN            S              3  0                                      
DSPACEN           S              1  0                                      
DLINE             S              3  0                                      
DIDX              S              3  0                                      
D BARCODEDATA     S              8                                          
 *********************************************************************      
 ** process entire file                                                    
C                   DO        *HIVAL                                        
C                   READ      SPOOLPF                                      
 ** exit on EOF                                                            
C                   IF        %EOF                                          
C                   EVAL      *INLR=*ON                                            
C                   RETURN                                                          
C                   ENDIF                                                          
 ** check for SKIP or space control                                                
C     SKIP          CASNE     *BLANKS       SKIPSR                                  
C                   CAS                     SPACESR                                
C                   ENDCS                                                          
 ** EXTRACT BARCODE DATA                                                            
C                   IF        LINE=5                                                
C                   EVAL      BARCODEDATA=%SUBST(DATA:10:8)                        
C                   ENDIF                                                          
 **  BARCODE                                                                        
C                   if        LINE=23                                              
C                   WRITE     @@HDR                                                
C                   ENDIF                                                          
 ** WRITE ORIGINAL DATA                                                            
C                   EVAL      FIELD=DATA                                            
C                   WRITE     @@DTL                                                
C                   ENDDO                                                          
 *******************************************************************************    
 ** SKIPSR                                                                          
 ********************************************************************************    
C     SKIPSR        BEGSR                                                            
 ** Conver to number                                                                
C                   MOVE      SKIP          SKIPN                                    
 ** new page?                                                                        
c                   IF        SKIPN<LINE                                            
C                   EVAL      LINE=1                                                
C                   WRITE     @@SKIP                                                
C                   ENDIF                                                            
 ** move to the correct line                                                        
C                   DO        *HIVAL                                                
C                   IF        LINE=SKIPN                                            
C                   LEAVE                                                            
C                   ENDIF                                                            
 ** move to the correct line                                                        
C                   WRITE     @@SPACE                                                
C                   EVAL      LINE=LINE+1                                            
C                   ENDDO                                                            
C                                                                                    
C                   ENDSR                                                                
 *******************************************************************************        
 ** SPACESR                                                                              
 ********************************************************************************        
C     SPACESR       BEGSR                                                                
 ** Move down the correct number of lines                                                    
C                   MOVE      SPACE         SPACEN                                      
C                   FOR       IDX = 1 TO SPACEN                                          
C                   WRITE     @@SPACE                                                    
C                   EVAL      LINE=LINE+1                                                
C                   ENDFOR                                                              
C                                                                                        
C                   ENDSR                                                                
0
 

Author Comment

by:pipster1
ID: 9957114
Dave,

Am still waiting to hear back from guys on reconfigurating the Praim
emulator. Thanks for your patience.

Pipster1
0
 
LVL 16

Expert Comment

by:theo kouwenhoven
ID: 10183418
Hi pipster1,

In the past we used EZ-print. With EZ-print, you are able to capture the output, an manipulate it.
- Drawing lines, boxes
- Move data
- Hide data
- Change font
- Copy data

With the Copy data ore move data, you are able to pickup values from the captured output end print them somewhere els on the page or make an Bar-code from it.
It's a little work to get it up and running but after manipulating your first page, it will work very easy and reliable.

0
 
LVL 14

Accepted Solution

by:
daveslater earned 500 total points
ID: 10917101
Hi
how are you getting on with this?

Dave
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Moving applications to the cloud or switching services to cloud-based ones, is a stressful job.  Here's how you can make it easier.
Access reports are powerful and flexible. Learn how to create a query and then a grouped report using the wizard. Modify the report design after the wizard is done to make it look better. There will be another video to explain how to put the final p…
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

8 Experts available now in Live!

Get 1:1 Help Now