In order to bring you the best possible user experience, this site uses Javascript. If you are seeing this message, it is likely that the Javascript option in your browser is disabled. For optimal viewing of this site, please ensure that Javascript is enabled for your browser.
Login  |   On Demand  |   Home  |

­About This Course
Lesson 1. Overview
Lesson 1 includes the following topics:
Course description
Course agenda
Additional resources
Introduction to using sample programs provided for class activities
Course Description
QAD designed this course for programmers working with QAD non-component-based code. The intent of this course is to introduce basic database and programming concepts as they apply to QAD applications. Additionally, basic Progress programming syntax is covered to include custom report writing or changes to existing reporting capability. A working view of the data structures is also presented.
The course includes hands-on programming to understand key concepts, as well as sample program snippets for later reference. The sample programs are already available in the classroom training environment.
Each topic in the course follows the same format, beginning with an overview of the concepts and commands to be discussed, followed by a detailed explanation and a hands-on exercise. Sample programs representing solutions for the exercises are provided in an appendix to the guide as well as in a folder in the training environment.
Version of QAD Enterprise Applications
The course is intended to be taught with the Progress Version 10. Most basic principles of Progress programming are independent of the particular version of QAD Enterprise Application being used. However, significant differences in the database structure of QAD Enterprise Edition and QAD Standard Edition do affect some points of the training.
The training assumes that you are using the latest QAD Enterprise Edition version of the product suite, that includes the enhanced Enterprise Financials. But the concepts covered apply regardless of the version.
Course Objectives
By the end of this class, students will know how to:
Use basic Progress programming principles and the QAD data definitions
Use the Progress Editor
Create Progress procedures
Calculate fields and report totals
Access data from multiple tables
Use standard QAD include files
Understand more advanced Progress functions including arrays, temp-tables, scoping, and ProDataSets
QAD supports an extensive set of reporting tools that can be used to generate both simple and complex reports, without having to write custom queries. You can learn more about these tools in these classes:
QAD Reporting Framework. This class teaches you how to use the QAD Reporting Framework to create reports based on existing browses, custom programs, or in QAD EE, using financials APIs. The built-in Report Wizard guides you through building basic reports and completing common reporting tasks. A rich set of report design tools lets you create more complex reports tailored to your specific requirements. You can publish reports to a variety of outputs including printers, PDFs, and Excel files and schedule the system to run reports automatically at a designated times or intervals.
.NET UI Administration. This class teaches you how to use Browse Maintenance to create custom browses and create menu and browse collections.
Course Benefits
A basic foundation for programming non-component-based code used in QAD products
Ability to more fully utilize the features provided by QAD applications
This course is intended for:
Beginning programmers who plan to customize reports in QAD applications or who need to know how to write simple queries
Project managers who want to understand the fundamentals of developing non-component based QAD applications
Members of QAD implementation teams
This class is intended to be completed in three days. Some topics are optional so that the class can be completed in two days if necessary.
Students should have a general understanding of QAD Enterprise Applications and an interest in how it works. Prior programming or database administration experience is suggested, but not required.
Virtual Environment Information
A virtual environment is only available during QAD classroom training. For information on how to register for a class, go to:
The hands-on exercises in this book should be used with the environment specified by your instructor. A special simplified database has been designed for use with this class, to make it easier to write simple inquiries. Unlike the standard application training database, the database used for the Progress training contains only a small number of tables with a small number of records.
Progress Editor
The navigation instructions in this class assume that you are using the GUI version of the Progress Editor. If you are using the character-based version of the Editor, you will need to adjust these instructions. The screen appearance and shortcut keys are different in the two versions.
Beginning with QAD Standard Edition (previously known as MFG/PRO eB2.1), QAD introduced the concept of domains, which represent separate business areas. To support this concept, the domain field was added to most tables in the QAD database to support the segregation of data by domain. In the QAD code base, a global variable is used to determine the user’s current domain so that the correct records are returned. A standard include file is used to set this variable correctly.
In this class, the domain is being set manually to the value 10USA, one of the domains that exists in the training database. This approach keeps the code in the sample exercises simple and easy to understand.
Important: If you attempt to use these exercises in a database other than the one the book is designed to work with, the exercises will fail if domain 10USA does not exist.
Special Environment Considerations
Significant architectural differences are found between QAD Enterprise Applications Standard Edition and Enterprise Edition. However, this class explores very basic Progress programming principles that are the same in both.
You should note the following special considerations about the training environment:
Since the training database includes only a few tables, some of the examples discussed in the class reference tables that do not exist in this small database. These sample procedures are for reference and cannot be executed in the training environment.
The class only applies to the operational code base of QAD Enterprise Edition, not the Enterprise Financials, which are managed with a different architecture.
Connecting to the Training Database
To connect to this database, follow these steps:
Double-click the Progress OE10 Training icon on the training desktop.
This will start the Progress Editor with the following small program displayed:
propath = "c:\_OE10\code,c:\_OE10\Exercises,c:\_OE10\examples,c:\_OE10\labs,"
+ propath.

connect c:\_OE10\db\train -1.

/* WE'RE DONE */
message "Connected." view-as alert-box.
Choose Compile|Run from the Editor menu to execute this program and connect to the training database.
When connected, choose File|Close to close the connection program.
Sample programs for use during the class exercises are located in the following directory of the virtual environment:
Exercise Solutions
To supplement the exercises, a folder of exercise solutions is also provided with executable programs:
You can also find the answers to non-program questions as well as the program code samples in Exercise Answers.
Course Agenda
This class is divided into three major sections, introduced by an overview. Each section includes a number of lessons.
Lesson 1: Overview
Section 1: Getting Started and Creating Simple Reports
Lesson 2: Introduction to Progress
Lesson 3: Using the Progress Editor
Lesson 4: Creating simple Progress procedures
Lesson 5: Formatting, sorting, and report totals
Lesson 6: Selecting specific records
Section 2: Writing More Complex Reports
Lesson 7: Using FIND, REPEAT, and defined variables
Lesson 8: Accessing multiple tables
Lesson 9: Frame control
Lesson 10: Using include files
Lesson 11: Arrays, temp-tables, buffers, and some useful functions
Section 3: Advanced Topics
Lesson 12: Scoping
Lesson 13: ProDataSets
Lesson 14: Triggers and events (optional)
Lesson 15: Queries, browses, and handles (optional)
Additional Resources
Progress Resources
The OpenEdge Progress programming language is a product of Progress Software Corporation. Extensive documentation on all Progress products can be found on the company Web site:
Documentation in PDF format for OpenEdge 10 is found here:
Progress Software Corporation also provides Web-based training opportunities.
QAD Resources
If you encounter questions on QAD software that are not addressed in this book, several resources are available. The QAD corporate Web site provides product and company overviews. From the main site, you can access the QAD Learning or Support site and the QAD Document Library. Access to some portions of these sites depends on having a registered account.
QAD Learning Center
To view available training courses, locations, and materials, use the QAD Learning Center. Choose Education under the Services tab to access this resource. In the Learning Center, you can reserve a learning environment if you want to perform self-study and follow a training guide on your own.
QAD Document Library
To access release notes, user guides, training guides, technical references, and installation and conversion guides by product and release, visit the QAD Document Library. Choose Document Library under the Support tab. In the QAD Document Library, you can view HTML pages online, print specific pages, or download a PDF of an entire book.
To find a resource, you can use the navigation tree on the left or use a powerful cross-document search, which finds all documents with your search terms and lets you refine the search by book type, product suite or module, and date published.
Of particular interest for this class are the two technical references: Database Definitions and Entity Diagrams. These two references provide programmers with the information they need to understand relationships between tables and the kind of data stored in the tables. They are both referenced in this class.
QAD Support
Support also offers an array of tools depending on your company’s maintenance agreement with QAD. These include the Knowledgebase and QAD Forums, where you can post questions and search for topics of interest. To access these, choose Visit Online Support Center under the Support tab.
QAD Development Standards
QAD has developed an extensive set of reference information about preferred coding practices, which it makes available to users on the QAD Support site. After accessing the Support site, choose Tools, then General Reference to find the link to the Development Standards.
Using Class Materials
Your class materials consist of this book, which is yours to keep. We encourage you to take notes in the book. The QAD Enterprise Applications Data Definitions and Entity Relationship manuals are also available for reference. While your instructor will lecture on the main topics covered in the course, you should read the explanation in this guide as well. You may also find it useful to refer to this guide when you are back at work.
Most of the topics are illustrated with exercises. The data you enter when you are learning the system cannot harm the training database. Some of the topics build on information presented earlier, so it is important to complete the exercises in order.
Conventions for Progress Syntax Used in the Class
To highlight Progress syntax, the following conventions are used in the examples in this course:
Progress keywords are shown in upper case for emphasis in the code. However, Progress is not case sensitive. The QAD standard in source code is to use all lower case, with a few exceptions.
Table and field names are shown in lower case.
Character strings are surrounded by quotes (" ").
Square Brackets ([]) indicate optional items.
Ellipses (…) indicate an item may be repeated.
Sample Programs
Sample programs like the one shown in Sample Inquiry are provided with the training environment. You will learn how to build a query similar to this sample, which illustrates the various commands introduced in the course. The sample program code structure includes the following elements:
Define variables, parameters, buffers, temp-tables...
Define forms
Procedure body
Exit point
Clean up
Internal procedures and functions
Note: Not all sample programs can be executed in the training environment because they reference tables that are not included.
Data for Use with Sample Programs
Some of the class exercises require input of a valid item or customer in order to display records. Others require the student to write a program that finds data. Since most data in the database is stored by domain, a valid domain name is also required.
For these exercises, the following data should be used:
Domain (*_domain): 10USA (where * represents the table name prefix in the exercise, such as so_domain)
Item (pt_part): 01010
Customer (cm_addr or so_cust): 10C1001
The sample in the following section illustrates the use of the 10USA domain.
Modifying Sample Programs
In many exercises, you are asked to modify lines in the supplied sample programs. In the instructions, the From code is provided in the sample program. The To code is the code that you create or modify. This is illustrated in the following example.
From: pt_desc1
To: pt_desc1 + pt_desc2 FORMAT "x(40)"
Locate the lines in the sample procedure described in the From condition.
FOR EACH pt_mstr WHERE pt_domain = "10USA" NO-LOCK:
DISPLAY pt_part
pt_um NO-LABEL
pt_price FORMAT "-9,999.99".
Change the lines described in the From condition to correspond to the To condition
FOR EACH pt_mstr WHERE pt_domain = "10USA" NO-LOCK:
DISPLAY pt_part
pt_desc1 + pt_desc2 FORMAT " x(40) "
pt_um NO-LABEL
pt_price FORMAT "-9,999.99".
Sample Inquiry
/* sample-inquiry.p QAD Enterprise Applications Inquiry Template Program */
{us/mf/mfdtitle.i "a"}
/* Form Definitions */
cust COLON 20
cust1 COLON 50
part COLON 20
part1 COLON 50
WITH FRAME a WIDTH 80 SIDE-LABELS TITLE "Customer Sales Inquiry ".
cph_part FORMAT "x(8)"
cph_sale(6) column-label "June!Sales"
cph_cost(6) column-label "June!Cost"
WITH FRAME custpart DOWN width 80 title " June Sales ".
IF cust1 = hi_char THEN cust1 = "".
IF part1 = hi_char THEN part1 = "".
{us/gp/gpselout.i &printType = "terminal"
&printWidth = 80
&pagedFlag = " "
&stream = " "
&appendToFile = " "
&streamedOutputToTerminal = " "
&withBatchOption = "no"
&displayStatementType = 1
&withCancelMessage = "no"
&pageBottomMargin = 6
&withEmail = "yes"
&withWinprint = "yes"
&defineVariables = "yes"}
IF cust1 = "" THEN cust1 = hi_char.
IF part1 = "" THEN part1 = hi_char.
WHERE cph_domain = global_domain
AND (cph_cust >= cust AND cph_cust <= cust1)
AND (cph_part >= part AND cph_part <= part1)
BREAK-BY cph_cust:
WITH FRAME custpart.
FIND pt_mstr NO-LOCK
WHERE pt_domain = global_domain
AND pt_part = cph_part
WITH FRAME custpart.
"" @ pt_desc1
WITH FRAME custpart.
DOWN 1 WITH FRAME custpart.
END. /* FOR EACH cph_hist */
END. /* repeat */