Makes the execution of a statement or block of statements conditional. If the value of the expression following the IF statement is TRUE, the AVM processes the statements following the THEN statement. Otherwise, the AVM processes the statements following the ELSE statement.
Any block or blocks you use in an IF . . . THEN . . . ELSE statement can contain other blocks or other IF . . . THEN . . . ELSE statements.
The r-ifelss.p procedure creates a report in a file that lists Customers whose Orders have been shipped, but who have not paid for those Orders:
r-ifelss.p
DEFINE VARIABLE ans AS LOGICAL NO-UNDO. DEFINE STREAM due. OUTPUT STREAM due TO ovrdue.lst. DISPLAY STREAM due "Orders shipped but still unpaid as of" TODAY SKIP(2) WITH NO-BOX NO-LABELS CENTERED FRAME hdr PAGE-TOP. FOR EACH Order WITH FRAME oinfo: FIND Customer OF Order NO-LOCK. DISPLAY Order.OrderNum Customer.Name Order.OrderDate Order.PromiseDate Order.ShipDate. IF Order.ShipDate = ? THEN DO: IF Order.PromiseDate = ? THEN DO: MESSAGE "Please update the promise date.". REPEAT WHILE promise-date = ?: UPDATE Order.PromiseDate WITH FRAME oinfo. END. END. ans = FALSE. MESSAGE "Has this order been shipped?" UPDATE ans. IF ans THEN REPEAT WHILE Order.ShipDate = ?: UPDATE Order.ShipDate WITH FRAME oinfo. END. END. ELSE DO: ans = TRUE. MESSAGE "Has this order been paid?" UPDATE ans. IF NOT ans THEN DO: DISPLAY STREAM due Order.OrderNum TO 14 Customer.Name AT 18 Order.OrderDate AT 42 Order.ShipDate AT 54 WITH NO-BOX DOWN FRAME unpaid. END. END. END. OUTPUT STREAM due CLOSE. |
First, the procedure writes report headers to the ovrdue.lst file. Next, the outer FOR EACH block reads each of the Orders using a DISPLAY statement to display information on each Order. If there are no values in the ShipDate and PromiseDate fields, the procedure prompts you to enter a promise date. The procedure then prompts if the order has been shipped. If it has, supply a ship date.
If there is a ship date and a promise date for an order, the procedure prompts if the order has been paid for. If not, the procedure displays the order information to the file.