Kbase P73765: How to set fields lengths when printing QUERY/RESULTS genera
Autor |
  Progress Software Corporation - Progress |
Acesso |
  Público |
Publicação |
  25/03/2004 |
|
Status: Unverified
GOAL:
How to set fields lengths when printing QUERY/RESULTS generated address labels?
FIX:
This solution works equally well for both GUI and CHUI results. The objective here is to set the maximum length of the fields to be printer on address labels generated by QUERY/RESULTS so that extra long fields do not reach the end of the label or wrap around.
The solution has three steps:
1. Use Query/Results to define the address labels you need printed.
2. Generate a 4GL .p procedure using Query/Results and save it ResultsLabels.p
3. Modify the following ASSIGN statement in the .p procedure generated above and save the modified version as ResultsLabelsModified.p. In our modification we use the STRING function to define the maximum length of any field on the label:
/*** The original ASSIGN statement from the generated ResultsLabels.p ***/
ASSIGN
qbf-count = qbf-count - 1
qbf-i = 1
qbf-l = (IF sports2000.Customer.Name = ? THEN "" ELSE sports2000.Customer.Name)
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.Address = ? THEN "" ELSE sports2000.Customer.Address)
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.City = ? THEN "" ELSE sports2000.Customer.City)
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.PostalCode = ? THEN "" ELSE sports2000.Customer.PostalCode)
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.State = ? THEN "" ELSE sports2000.Customer.State)
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.Country = ? THEN "" ELSE sports2000.Customer.Country)
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-n = qbf-n + 1.
/*** The modified ASSIGN statement from the generated ResultsLabels.p ***/
ASSIGN
qbf-count = qbf-count - 1
qbf-i = 1
qbf-l = (IF sports2000.Customer.Name = ? THEN "" ELSE STRING(sports2000.Customer.Name, "X(50)"))
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.Address = ? THEN "" ELSE STRING(sports2000.Customer.Address, "X(50)"))
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.City = ? THEN "" ELSE STRING(sports2000.Customer.City, "X(50)"))
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.PostalCode = ? THEN "" ELSE STRING(sports2000.Customer.PostalCode, "X(50)"))
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.State = ? THEN "" ELSE STRING(sports2000.Customer.State, "X(50)"))
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-i = (IF LENGTH(qbf-l,"CHARACTER":u) > 0 THEN qbf-i + 1 ELSE qbf-i)
qbf-l = (IF sports2000.Customer.Country = ? T.HEN "" ELSE STRING(sports2000.Customer.Country, 40))
qbf-l = (IF qbf-l = ? THEN "" ELSE qbf-l)
qbf-b[qbf-i] = qbf-l
qbf-n = qbf-n + 1.
4. Use a printer driver code similar to the following to run the modified ResultsLabelsModified.p from outside Query/Results:
DEFINE NEW SHARED VARIABLE qbf-total AS INTEGER NO-UNDO.
OUTPUT TO PRINTER PAGED.
RUN ResultsLabelsModified.p.
OUTPUT CLOSE..