Commit inicial: fuentes MBS ERP (Genero 6) + .gitignore + docs/SETUP_PC_MBS.md

This commit is contained in:
2026-08-18 20:59:52 -04:00
commit 454973e269
5978 changed files with 2664094 additions and 0 deletions
+18
View File
@@ -0,0 +1,18 @@
# Property of Four Js*
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
# * Trademark of Four Js Development Tools Europe Ltd
# in the United States and elsewhere
#
# Four Js and its suppliers do not warrant or guarantee that these
# samples are accurate and suitable for your purposes. Their inclusion is
# purely for information purposes only.
MODULES= \
formwizard.42m \
formwizard_old.42m
FORMS= \
formwizard.42f \
formwizard_old.42f
include ../../Makeincl
+56
View File
@@ -0,0 +1,56 @@
Form wizard
-----------
This is an example to mimic the main component of the Microsoft Access form wizard, the dialog to choose which database columns should be handled in the generated form.
It turned out that it is pretty easy to mimic with the help of the multiple dialogs; it behaves exactly like the original dialog (with the same logic behind and all Keyboard shortcuts).
The code to do this is pretty short and readable.
This dialog is used in the $FGLDIR/demo/tools/fglped program to generate a form from a list of chosen columns.
formwizard_old
This example shows what you would have to do (theoretically) to program a similar dialog in 4GL without multiple dialogs available. As you can see in the wizard() function, 3 tradional dialogs are called in a loop and a lot of actions are needed to jump from one dialog to the other. 3 additional buttons are inside the form to leave the current active dialog and jump to a different dialog...pure headache!
Unfortunately the GDC by default renders non-active tables in the same way as active tables, so the end user may think that he could click on a table and edit there; but, bummer, you must use the "Edit Left/Right" button or <Tab> to leave the current active table (Shift-Tab is not even possible).
This example also shows why it is not sufficient to add a trigger like
ON OTHERTABLECLICKED (demanded by a lot of our customers).
Although it makes the "Edit Left/Right" button unnecessary, it still forces you to write such a big state loop of traditional dialogs.
Further Differences
-------------------
If you look at the code in formwizard.4gl and formwizard_old.4gl there are also differences in performing the actions.
FUNCTION right(d) --multiple dialog variant
DEFINE d ui.Dialog
DEFINE idx,lastC INT
--get index of the left array; cannot use arr_curr() here because arr_curr()
--returns the index of the current active row in the current focused table
--which is not necessarily the right hand side array
--the "right" action is always active regardless of the focus
LET idx = d.getCurrentRow("a")
LET lastC=cfields.getLength()+1
LET cfields[lastC].ctable=afields[idx].atable
LET cfields[lastC].ccol=afields[idx].acol
CALL afields.deleteElement(idx)
--set the current line to the last index
CALL d.setCurrentRow("c",lastC)
END FUNCTION
You may also note that you don't need to refresh the arrays on the screen; this is done with the ATTRIBUTES(UNBUFFERED) flag of the entire dialog. Since all arrays are active, you won't need to refresh one of them manually.
Please note that you can do this only for DISPLAY ARRAY; for INPUT ARRAY it is strongly recommended that you don't manipulate the bound arrays with the array methods (deleteElement(), insertElement()) because this conflicts with the built-in triggers of INPUT ARRAY.
Now the "right" function from the formwizard_old example:
--move the current item to the right hand side and delete it on the left hand side
FUNCTION right(d)
DEFINE d ui.Dialog
DEFINE idx,lastC,i INT
LET idx = arr_curr()
LET lastC=cfields.getLength()+1
LET cfields[lastC].ctable=afields[idx].atable
LET cfields[lastC].ccol=afields[idx].acol
CALL afields.deleteElement(idx)
FOR i=1 TO cfields.getLength()
DISPLAY cfields[i].* TO c[i].*
END FOR
END FUNCTION
The "right" action is only active if the focus is inside the left hand side array; that's why it's possible to use arr_curr(). At the end of the function we need to redisplay the right hand side array, because it's not active (we are in a DISPLAY ARRAY of the left hand side).
@@ -0,0 +1,239 @@
# Property of Four Js*
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
# * Trademark of Four Js Development Tools Europe Ltd
# in the United States and elsewhere
#
# Four Js and its suppliers do not warrant or guarantee that these
# samples are accurate and suitable for your purposes. Their inclusion is
# purely for information purposes only.
TYPE schema_rec RECORD
table_name STRING, -- customer
field_name STRING, -- customer_name
field_type SMALLINT, -- 0
field_strtype STRING, -- CHAR(30)
field_length SMALLINT -- 80
END RECORD
DEFINE col_arr DYNAMIC ARRAY OF schema_rec
DEFINE tab_arr DYNAMIC ARRAY OF STRING
DEFINE currtable STRING --current table in combobox
--a(vailable) fields
DEFINE afields DYNAMIC ARRAY OF RECORD
atable STRING,
acol STRING
END RECORD
--c(hosen) fields
DEFINE cfields DYNAMIC ARRAY OF RECORD
ctable STRING,
ccol STRING
END RECORD
-- Current wizard page
DEFINE currpage SMALLINT
DEFINE myd ui.Dialog
CONSTANT TOTAL_PAGES = 5
MAIN
CLOSE WINDOW screen
CALL wizard()
END MAIN
--contains the wizard MD dialog
FUNCTION wizard()
DEFINE i INT
CALL readTables("stores.sch")
OPEN WINDOW formwizard WITH FORM "formwizard"
CALL init_tables()
OPTIONS FIELD ORDER FORM
DIALOG ATTRIBUTES(UNBUFFERED)
INPUT BY NAME currtable ATTRIBUTES(WITHOUT DEFAULTS=TRUE)
ON CHANGE currtable
CALL on_change_currtable()
CALL setup(DIALOG)
END INPUT
DISPLAY ARRAY afields TO a.* END DISPLAY
DISPLAY ARRAY cfields TO c.* END DISPLAY
ON ACTION right CALL right(DIALOG)
ON ACTION allright CALL allright(DIALOG)
ON ACTION left CALL left(DIALOG)
ON ACTION allleft CALL allleft(DIALOG)
ON ACTION prevwiz DISPLAY "prevwiz" EXIT DIALOG
ON ACTION nextwiz DISPLAY "nextwiz" EXIT DIALOG
ON ACTION cancel
EXIT DIALOG
ON ACTION accept
ACCEPT DIALOG
BEFORE DIALOG
LET currpage = 1
CALL setup(DIALOG)
AFTER DIALOG
--we just show all chosen columns in the terminal
FOR i=1 TO cfields.getLength()
DISPLAY sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol)
END FOR
END DIALOG
LET myd=NULL
CLOSE WINDOW formwizard
END FUNCTION
--fill the combobox with all table names
FUNCTION init_tables()
DEFINE cb ui.ComboBox
DEFINE i INTEGER
LET cb = ui.ComboBox.forName("formonly.currtable")
IF cb IS NULL THEN
CALL myerror("combobox not found")
END IF
FOR i=1 TO tab_arr.getLength()
CALL cb.addItem(tab_arr[i],tab_arr[i])
END FOR
LET currtable=tab_arr[1]
CALL on_change_currtable()
END FUNCTION
--combo value has changed,refill the left array and omit
--values of the right hand side
FUNCTION on_change_currtable()
DEFINE tab,col STRING
DEFINE col_len,used_col_len,idx,i,j,foundUsed INT
IF myd IS NOT NULL THEN
CALL myd.deleteAllRows("a")
ELSE
CALL afields.clear()
END IF
LET idx=0
LET col_len=col_arr.getLength()
FOR i=1 TO col_len
LET tab=col_arr[i].table_name
LET col=col_arr[i].field_name
LET used_col_len=cfields.getLength()
LET foundUsed=FALSE
FOR j=1 TO used_col_len
IF cfields[j].ctable=tab AND cfields[j].ccol=col THEN
LET foundUsed=TRUE
EXIT FOR
END IF
END FOR
IF NOT foundUsed AND tab=currtable THEN
LET idx=idx+1
IF myd IS NOT NULL THEN
CALL myd.appendRow("a")
ELSE
CALL afields.appendElement()
END IF
LET afields[idx].atable=tab
LET afields[idx].acol=col
END IF
END FOR
END FUNCTION
FUNCTION setup(d)
DEFINE d ui.Dialog
DEFINE rl,rr INT
LET myd=d
LET rl = afields.getLength()
LET rr = cfields.getLength()
CALL d.setActionActive("right", rl>0)
CALL d.setActionActive("allright", rl>0)
CALL d.setActionActive("left", rr>0)
CALL d.setActionActive("allleft", rr>0)
CALL d.setActionActive("prevwiz", currpage>1)
CALL d.setActionActive("nextwiz", currpage<TOTAL_PAGES)
END FUNCTION
--move the current item to the right hand side and delete it on the left hand side
FUNCTION right(d)
DEFINE d ui.Dialog
DEFINE idx,lastC INT
LET idx = d.getCurrentRow("a")
IF idx<1 THEN RETURN END IF
LET lastC=cfields.getLength()+1
CALL myd.appendRow("c")
LET cfields[lastC].ctable=afields[idx].atable
LET cfields[lastC].ccol=afields[idx].acol
CALL afields.deleteElement(idx)
CALL d.setCurrentRow("c",lastC)
CALL setup(d)
END FUNCTION
--move all items to the right hand side
FUNCTION allright(d)
DEFINE d ui.Dialog
DEFINE lastC,i INT
LET lastC=cfields.getLength()
FOR i=1 TO afields.getLength()
LET lastC=lastC+1
CALL myd.appendRow("c")
LET cfields[lastC].ctable=afields[i].atable
LET cfields[lastC].ccol=afields[i].acol
END FOR
CALL myd.deleteAllRows("a") --CALL afields.clear()
CALL d.setCurrentRow("c",lastC)
CALL setup(d)
END FUNCTION
--remove the current item from the right hand side and refill the left hand side
FUNCTION left(d)
DEFINE d ui.Dialog
DEFINE idx,i INT
DEFINE col, tab STRING
LET idx =d.getCurrentRow("c")
IF idx<1 THEN RETURN END IF
LET tab=cfields[idx].ctable
LET col=cfields[idx].ccol
CALL cfields.deleteElement(idx)
CALL on_change_currtable()
FOR i=1 TO afields.getLength()
IF afields[i].atable=tab AND afields[i].acol=col THEN
CALL d.setCurrentRow("a",i)
EXIT FOR
END IF
END FOR
CALL setup(d)
END FUNCTION
--remove all items from the right hand side and refill the left hand side
FUNCTION allleft(d)
DEFINE d ui.Dialog
CALL cfields.clear()
CALL on_change_currtable()
CALL setup(d)
END FUNCTION
--read in a schema file
FUNCTION readTables(schemaFile)
DEFINE schemaFile STRING
DEFINE ch base.channel
DEFINE prevTabName STRING
DEFINE sch schema_rec
CALL col_arr.clear()
CALL tab_arr.clear()
LET ch = base.channel.create()
WHENEVER ERROR CONTINUE
CALL ch.openFile(schemaFile, "r")
WHENEVER ERROR STOP
IF STATUS!=0 THEN
CALL myerror( "error: could not open schema file '"||schemaFile||"'")
END IF
CALL ch.setdelimiter("^")
LET prevTabName=NULL
WHILE ch.read(sch)
IF sch.table_name.getIndexOf("sys",1)==1 THEN
CONTINUE WHILE
END IF
LET col_arr[col_arr.getLength()+1].* = sch.*
IF prevTabName IS NULL OR sch.table_name <> prevTabName THEN
LET tab_arr[tab_arr.getLength()+1]=sch.table_name
LET prevTabName=sch.table_name
END IF
END WHILE
CALL ch.close()
IF tab_arr.getLength()==0 THEN
CALL myerror("did not find any coluns in "||schemaFile)
END IF
END FUNCTION
FUNCTION myerror(str)
DEFINE str STRING
DISPLAY "ERROR:",str
EXIT PROGRAM 1
END FUNCTION
@@ -0,0 +1,60 @@
# Property of Four Js*
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
# * Trademark of Four Js Development Tools Europe Ltd
# in the United States and elsewhere
#
# Four Js and its suppliers do not warrant or guarantee that these
# samples are accurate and suitable for your purposes. Their inclusion is
# purely for information purposes only.
LAYOUT(STYLE="dialog3",TEXT="Form assistant")
GRID
{
[img ]
[ ] [quest : ]
[ ]
[ ]
Tables:
[currtable ]
<T t > <T z >
Available fields Chosen fields
[x|afields ] [r ][y|cfields ]
[x|afields ] [rr ][y|cfields ]
[x|afields ] [y|cfields ]
[x|afields ] [l ][y|cfields ]
[x|afields ] [ll ][y|cfields ]
[""]
---------------------------------------------------------------
[ :cancel:" ":back : next :" ":finish ]
}
END
END
ATTRIBUTES
IMAGE img:IMAGE="formwizard.png";
LABEL quest:TEXT="Which fields your form should contain ?";
COMBOBOX currtable=FORMONLY.currtable,COMMENT="You can choose from more than one table.",NOT NULL;
TABLE t:DOUBLECLICK=right;
TABLE z:DOUBLECLICK=left;
x=FORMONLY.atable,SCROLL,HIDDEN;
afields=FORMONLY.acol,SCROLL;
y=FORMONLY.ctable,SCROLL,HIDDEN;
cfields=FORMONLY.ccol;
BUTTON r:right,TEXT=">";
BUTTON rr:allright,TEXT=">>";
BUTTON l:left,TEXT="<";
BUTTON ll:allleft,TEXT="<<";
BUTTON cancel:cancel,TEXT="Cancel";
BUTTON back:prevwiz,TEXT="< &Back";
BUTTON next:nextwiz,TEXT="&Next >";
BUTTON finish:accept,TEXT="&Finish";
END
INSTRUCTIONS
SCREEN RECORD a(atable,acol);
SCREEN RECORD c(ctable,ccol);
END
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

@@ -0,0 +1,247 @@
# Property of Four Js*
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
# * Trademark of Four Js Development Tools Europe Ltd
# in the United States and elsewhere
#
# Four Js and its suppliers do not warrant or guarantee that these
# samples are accurate and suitable for your purposes. Their inclusion is
# purely for information purposes only.
TYPE schema_rec RECORD
table_name STRING, -- customer
field_name STRING, -- customer_name
field_type SMALLINT, -- 0
field_strtype STRING, -- CHAR(30)
field_length SMALLINT -- 80
END RECORD
DEFINE col_arr DYNAMIC ARRAY OF schema_rec
DEFINE tab_arr DYNAMIC ARRAY OF STRING
DEFINE currtable STRING --current table in combobox
--a(vailable) fields
DEFINE afields DYNAMIC ARRAY OF RECORD
atable STRING,
acol STRING
END RECORD
--c(hosen) fields
DEFINE cfields DYNAMIC ARRAY OF RECORD
ctable STRING,
ccol STRING
END RECORD
MAIN
CLOSE WINDOW screen
CALL wizard()
END MAIN
--contains the wizard dialog build with traditional 4GL dialogs called in a loop
--the common actions must be cloned into each dialog
FUNCTION wizard()
DEFINE i INT
DEFINE state STRING
CALL readTables("stores.sch")
OPEN WINDOW formwizard WITH FORM "formwizard_old"
CALL init_tables()
OPTIONS FIELD ORDER FORM
LET state="combo"
WHILE state<>"exit" AND state<>"accept"
CASE state
WHEN "combo"
LET state="left"
INPUT BY NAME currtable WITHOUT DEFAULTS ATTRIBUTES(UNBUFFERED)
ON CHANGE currtable CALL on_change_currtable()
ON ACTION gocombo LET state="combo" EXIT INPUT
ON ACTION goleft LET state="left" EXIT INPUT
ON ACTION goright LET state="right" EXIT INPUT
ON ACTION cancel LET state="exit" EXIT INPUT
ON ACTION accept LET state="accept" EXIT INPUT
END INPUT
WHEN "left"
LET state="right"
DISPLAY ARRAY afields TO a.* ATTRIBUTES(UNBUFFERED)
ON ACTION right CALL right(DIALOG)
ON KEY(RIGHT) CALL right(DIALOG)
ON ACTION allright CALL allright(DIALOG)
ON KEY(TAB) EXIT DISPLAY
ON ACTION gocombo LET state="combo" EXIT DISPLAY
ON ACTION goleft LET state="left" EXIT DISPLAY
ON ACTION goright LET state="right" EXIT DISPLAY
ON ACTION cancel LET state="exit" EXIT DISPLAY
ON ACTION accept LET state="accept" EXIT DISPLAY
END DISPLAY
WHEN "right"
LET state="combo"
DISPLAY ARRAY cfields TO c.* ATTRIBUTES(UNBUFFERED)
ON ACTION left CALL left(DIALOG)
ON KEY(LEFT) CALL left(DIALOG)
ON ACTION allleft CALL allleft(DIALOG)
ON KEY(TAB) EXIT DISPLAY
ON ACTION gocombo LET state="combo" EXIT DISPLAY
ON ACTION goleft LET state="left" EXIT DISPLAY
ON ACTION goright LET state="right" EXIT DISPLAY
ON ACTION cancel LET state="exit" EXIT DISPLAY
ON ACTION accept LET state="accept" EXIT DISPLAY
ON ACTION prevwiz LET state="exit" EXIT DISPLAY
ON ACTION nextwiz LET state="exit" EXIT DISPLAY
END DISPLAY
END CASE
END WHILE
--we just show all chosen columns in the terminal
IF state=="accept" THEN
FOR i=1 TO cfields.getLength()
DISPLAY sfmt("table:%1,column:%2",cfields[i].ctable,cfields[i].ccol)
END FOR
END IF
CLOSE WINDOW formwizard
END FUNCTION
--fill the combobox with all table names
FUNCTION init_tables()
DEFINE cb ui.ComboBox
DEFINE i INTEGER
LET cb = ui.ComboBox.forName("formonly.currtable")
IF cb IS NULL THEN
CALL myerror("combobox not found")
END IF
FOR i=1 TO tab_arr.getLength()
CALL cb.addItem(tab_arr[i],tab_arr[i])
END FOR
LET currtable=tab_arr[1]
CALL on_change_currtable()
END FUNCTION
--combo value has changed,refill the left array and omit
--values of the right hand side
FUNCTION on_change_currtable()
DEFINE tab,col STRING
DEFINE col_len,used_col_len,idx,i,j,foundUsed,tabSize INT
CALL afields.clear()
LET idx=0
LET col_len=col_arr.getLength()
FOR i=1 TO col_len
LET tab=col_arr[i].table_name
LET col=col_arr[i].field_name
LET used_col_len=cfields.getLength()
LET foundUsed=FALSE
FOR j=1 TO used_col_len
IF cfields[j].ctable=tab AND cfields[j].ccol=col THEN
LET foundUsed=TRUE
EXIT FOR
END IF
END FOR
IF NOT foundUsed AND tab=currtable THEN
LET idx=idx+1
LET afields[idx].atable=tab
LET afields[idx].acol=col
END IF
END FOR
LET tabSize=tableSize("a")
FOR i=1 TO tabSize
DISPLAY "" TO a[i].acol
END FOR
FOR i=1 TO afields.getLength()
DISPLAY afields[i].* TO a[i].*
END FOR
END FUNCTION
--move the current item to the right hand side and delete it on the left hand side
FUNCTION right(d)
DEFINE d ui.Dialog
DEFINE idx,lastC,i INT
LET idx = arr_curr()
LET lastC=cfields.getLength()+1
LET cfields[lastC].ctable=afields[idx].atable
LET cfields[lastC].ccol=afields[idx].acol
CALL afields.deleteElement(idx)
FOR i=1 TO cfields.getLength()
DISPLAY cfields[i].* TO c[i].*
END FOR
END FUNCTION
--move all items to the right hand side
FUNCTION allright(d)
DEFINE d ui.Dialog
DEFINE lastC,i INT
LET lastC=cfields.getLength()
FOR i=1 TO afields.getLength()
LET lastC=lastC+1
LET cfields[lastC].ctable=afields[i].atable
LET cfields[lastC].ccol=afields[i].acol
END FOR
CALL afields.clear()
FOR i=1 TO cfields.getLength()
DISPLAY cfields[i].* TO c[i].*
END FOR
END FUNCTION
--remove the current item from the right hand side and refill the left hand side
FUNCTION left(d)
DEFINE d ui.Dialog
CALL cfields.deleteElement(arr_curr())
CALL on_change_currtable()
END FUNCTION
--remove all items from the right hand side and refill the left hand side
FUNCTION allleft(d)
DEFINE d ui.Dialog
CALL cfields.clear()
CALL on_change_currtable()
END FUNCTION
--read in a schema file
FUNCTION readTables(schemaFile)
DEFINE schemaFile STRING
DEFINE ch base.channel
DEFINE prevTabName STRING
DEFINE sch schema_rec
CALL col_arr.clear()
CALL tab_arr.clear()
LET ch = base.channel.create()
WHENEVER ERROR CONTINUE
CALL ch.openFile(schemaFile, "r")
WHENEVER ERROR STOP
IF STATUS!=0 THEN
CALL myerror( "error: could not open schema file '"||schemaFile||"'")
END IF
CALL ch.setdelimiter("^")
LET prevTabName=NULL
WHILE ch.read(sch)
IF sch.table_name.getIndexOf("sys",1)==1 THEN
CONTINUE WHILE
END IF
LET col_arr[col_arr.getLength()+1].* = sch.*
IF prevTabName IS NULL OR sch.table_name <> prevTabName THEN
LET tab_arr[tab_arr.getLength()+1]=sch.table_name
LET prevTabName=sch.table_name
END IF
END WHILE
CALL ch.close()
IF tab_arr.getLength()==0 THEN
CALL myerror("did not find any coluns in "||schemaFile)
END IF
END FUNCTION
FUNCTION myerror(str)
DEFINE str STRING
DISPLAY "ERROR:",str
EXIT PROGRAM 1
END FUNCTION
FUNCTION tableSize(screenRec)
DEFINE screenRec STRING
DEFINE nl om.NodeList
DEFINE root,tab om.DomNode
DEFINE doc om.DomDocument
DEFINE currWinId,bufferSize INT
LET root=ui.Interface.getRootNode()
LET currWinId=root.getAttribute("currentWindow")
LET doc =ui.Interface.getDocument()
LET root=doc.getElementById(currWinId)
LET nl=root.selectByPath(sfmt("//Table[@tabName=\"%1\"]",screenRec))
IF nl.getLength()>0 THEN
LET tab=nl.item(1)
LET bufferSize=tab.getAttribute("bufferSize")
ELSE
DISPLAY "can't find Table"
END IF
RETURN bufferSize
END FUNCTION
@@ -0,0 +1,54 @@
# Property of Four Js*
# (c) Copyright Four Js 1995, 2019. All Rights Reserved.
# * Trademark of Four Js Development Tools Europe Ltd
# in the United States and elsewhere
#
# Four Js and its suppliers do not warrant or guarantee that these
# samples are accurate and suitable for your purposes. Their inclusion is
# purely for information purposes only.
LAYOUT(STYLE="dialog3",TEXT="Form assistant")
GRID
{
[img ]
[ ] [quest : ]
[ ]
[ ]
[gocombo: ]
[currtable ]
<T t > <T z >
Available fields Chosen fields
[x|afields ] [r ][y|cfields ]
[x|afields ] [rr ][y|cfields ]
[x|afields ] [y|cfields ]
[x|afields ] [l ][y|cfields ]
[x|afields ] [ll ][y|cfields ]
[goleft ] [goright ]
[""]
---------------------------------------------------------------
[ :cancel:" ":back : next :" ":finish ]
}
END
ATTRIBUTES
IMAGE img:IMAGE="formwizard.png";
LABEL quest:TEXT="Which fields your form should contain ?";
COMBOBOX currtable=FORMONLY.currtable,COMMENT="You can choose from more than one table.",NOT NULL;
x=FORMONLY.atable,SCROLL,HIDDEN;
afields=FORMONLY.acol,SCROLL;
y=FORMONLY.ctable,SCROLL,HIDDEN;
cfields=FORMONLY.ccol;
BUTTON gocombo:gocombo,TEXT="Tables:";
BUTTON goleft:goleft,TEXT="Edit Left";
BUTTON goright:goright,TEXT="Edit Right";
BUTTON r:right,TEXT=">";
BUTTON rr:allright,TEXT=">>";
BUTTON l:left,TEXT="<";
BUTTON ll:allleft,TEXT="<<";
BUTTON cancel:cancel,TEXT="Cancel";
BUTTON back:prevwiz,TEXT="< &Back";
BUTTON next:nextwiz,TEXT="&Next >";
BUTTON finish:accept,TEXT="&Finish";
INSTRUCTIONS
SCREEN RECORD a(atable,acol);
SCREEN RECORD c(ctable,ccol);
+410
View File
@@ -0,0 +1,410 @@
customer^customer_num^262^4^1^
customer^fname^0^15^2^
customer^lname^0^15^3^
customer^company^0^20^4^
customer^address1^0^20^5^
customer^address2^0^20^6^
customer^city^0^15^7^
customer^state^0^2^8^
customer^zipcode^0^5^9^
customer^phone^0^18^10^
items^item_num^1^2^1^
items^order_num^2^4^2^
items^stock_num^1^2^3^
items^manu_code^0^3^4^
items^quantity^1^2^5^
items^total_price^8^2050^6^
manufact^manu_code^0^3^1^
manufact^manu_name^0^15^2^
orders^order_num^262^4^1^
orders^order_date^7^4^2^
orders^customer_num^2^4^3^
orders^ship_instruct^0^40^4^
orders^backlog^0^1^5^
orders^po_num^0^10^6^
orders^ship_date^7^4^7^
orders^ship_weight^5^2050^8^
orders^ship_charge^8^1538^9^
orders^paid_date^7^4^10^
state^code^0^2^1^
state^sname^0^15^2^
stock^stock_num^1^2^1^
stock^manu_code^0^3^2^
stock^description^0^15^3^
stock^unit_price^8^1538^4^
stock^unit^0^4^5^
stock^unit_descr^0^15^6^
sysaggregates^name^13^128^1^
sysaggregates^owner^0^32^2^
sysaggregates^aggid^6^4^3^
sysaggregates^init_func^13^128^4^
sysaggregates^iter_func^13^128^5^
sysaggregates^combine_func^13^128^6^
sysaggregates^final_func^13^128^7^
sysams^am_name^13^128^1^
sysams^am_owner^0^32^2^
sysams^am_id^2^4^3^
sysams^am_type^0^1^4^
sysams^am_sptype^0^3^5^
sysams^am_defopclass^2^4^6^
sysams^am_keyscan^2^4^7^
sysams^am_unique^2^4^8^
sysams^am_cluster^2^4^9^
sysams^am_rowids^2^4^10^
sysams^am_readwrite^2^4^11^
sysams^am_parallel^2^4^12^
sysams^am_costfactor^4^4^13^
sysams^am_create^2^4^14^
sysams^am_drop^2^4^15^
sysams^am_open^2^4^16^
sysams^am_close^2^4^17^
sysams^am_insert^2^4^18^
sysams^am_delete^2^4^19^
sysams^am_update^2^4^20^
sysams^am_stats^2^4^21^
sysams^am_scancost^2^4^22^
sysams^am_check^2^4^23^
sysams^am_beginscan^2^4^24^
sysams^am_endscan^2^4^25^
sysams^am_rescan^2^4^26^
sysams^am_getnext^2^4^27^
sysams^am_getbyid^2^4^28^
sysams^am_build^2^4^29^
sysams^am_init^2^4^30^
sysattrtypes^extended_id^2^4^1^
sysattrtypes^seqno^1^2^2^
sysattrtypes^levelno^1^2^3^
sysattrtypes^parent_no^1^2^4^
sysattrtypes^fieldname^13^128^5^
sysattrtypes^fieldno^1^2^6^
sysattrtypes^type^1^2^7^
sysattrtypes^length^1^2^8^
sysattrtypes^xtd_type_id^2^4^9^
sysblobs^spacename^13^128^1^
sysblobs^type^0^1^2^
sysblobs^tabid^2^4^3^
sysblobs^colno^1^2^4^
syscasts^owner^0^32^1^
syscasts^argument_type^1^2^2^
syscasts^argument_xid^2^4^3^
syscasts^result_type^1^2^4^
syscasts^result_xid^2^4^5^
syscasts^routine_name^13^128^6^
syscasts^routine_owner^0^32^7^
syscasts^class^0^1^8^
syschecks^constrid^2^4^1^
syschecks^type^0^1^2^
syschecks^seqno^1^2^3^
syschecks^checktext^0^32^4^
syscolatt^tabname^0^18^1^
syscolatt^colname^0^18^2^
syscolatt^seqno^262^4^3^
syscolatt^color^1^2^4^
syscolatt^inverse^0^1^5^
syscolatt^underline^0^1^6^
syscolatt^blink^0^1^7^
syscolatt^left^0^1^8^
syscolatt^def_format^0^64^9^
syscolatt^condition^0^64^10^
syscolattribs^tabid^2^4^1^
syscolattribs^colno^1^2^2^
syscolattribs^extentsize^2^4^3^
syscolattribs^flags^2^4^4^
syscolattribs^flags1^2^4^5^
syscolattribs^sbspace^13^128^6^
syscolauth^grantor^0^32^1^
syscolauth^grantee^0^32^2^
syscolauth^tabid^2^4^3^
syscolauth^colno^1^2^4^
syscolauth^colauth^0^3^5^
syscoldepend^constrid^2^4^1^
syscoldepend^tabid^2^4^2^
syscoldepend^colno^1^2^3^
syscolumns^colname^13^128^1^
syscolumns^tabid^2^4^2^
syscolumns^colno^1^2^3^
syscolumns^coltype^1^2^4^
syscolumns^collength^1^2^5^
syscolumns^colmin^2^4^6^
syscolumns^colmax^2^4^7^
syscolumns^extended_id^2^4^8^
sysconstraints^constrid^6^4^1^
sysconstraints^constrname^13^128^2^
sysconstraints^owner^0^32^3^
sysconstraints^tabid^2^4^4^
sysconstraints^constrtype^0^1^5^
sysconstraints^idxname^13^128^6^
sysconstraints^collation^0^36^7^
sysdefaults^tabid^2^4^1^
sysdefaults^colno^1^2^2^
sysdefaults^type^0^1^3^
sysdefaults^default^0^256^4^
sysdefaults^class^0^1^5^
sysdepend^btabid^2^4^1^
sysdepend^btype^0^1^2^
sysdepend^dtabid^2^4^3^
sysdepend^dtype^0^1^4^
sysdistrib^tabid^2^4^1^
sysdistrib^colno^1^2^2^
sysdistrib^seqno^2^4^3^
sysdistrib^constructed^7^4^4^
sysdistrib^mode^0^1^5^
sysdistrib^resolution^4^4^6^
sysdistrib^confidence^4^4^7^
sysdomains^id^262^4^1^
sysdomains^owner^0^32^2^
sysdomains^name^13^128^3^
sysdomains^type^1^2^4^
syserrors^sqlstate^0^5^1^
syserrors^locale^0^36^2^
syserrors^level^1^2^3^
syserrors^seqno^1^2^4^
syserrors^message^13^255^5^
sysfragauth^grantor^0^32^1^
sysfragauth^grantee^0^32^2^
sysfragauth^tabid^2^4^3^
sysfragauth^fragment^13^128^4^
sysfragauth^fragauth^0^6^5^
sysfragments^fragtype^0^1^1^
sysfragments^tabid^2^4^2^
sysfragments^indexname^13^128^3^
sysfragments^colno^2^4^4^
sysfragments^partn^2^4^5^
sysfragments^strategy^0^1^6^
sysfragments^location^0^1^7^
sysfragments^servername^13^128^8^
sysfragments^evalpos^2^4^9^
sysfragments^exprtext^12^56^10^
sysfragments^exprbin^11^56^11^
sysfragments^exprarr^11^56^12^
sysfragments^flags^2^4^13^
sysfragments^dbspace^13^128^14^
sysfragments^levels^1^2^15^
sysfragments^npused^2^4^16^
sysfragments^nrows^2^4^17^
sysfragments^clust^2^4^18^
sysindexes^idxname^13^128^1^
sysindexes^owner^0^32^2^
sysindexes^tabid^2^4^3^
sysindexes^idxtype^0^1^4^
sysindexes^clustered^0^1^5^
sysindexes^part1^1^2^6^
sysindexes^part2^1^2^7^
sysindexes^part3^1^2^8^
sysindexes^part4^1^2^9^
sysindexes^part5^1^2^10^
sysindexes^part6^1^2^11^
sysindexes^part7^1^2^12^
sysindexes^part8^1^2^13^
sysindexes^part9^1^2^14^
sysindexes^part10^1^2^15^
sysindexes^part11^1^2^16^
sysindexes^part12^1^2^17^
sysindexes^part13^1^2^18^
sysindexes^part14^1^2^19^
sysindexes^part15^1^2^20^
sysindexes^part16^1^2^21^
sysindexes^levels^1^2^22^
sysindexes^leaves^2^4^23^
sysindexes^nunique^2^4^24^
sysindexes^clust^2^4^25^
sysindices^idxname^13^128^1^
sysindices^owner^0^32^2^
sysindices^tabid^2^4^3^
sysindices^idxtype^0^1^4^
sysindices^clustered^0^1^5^
sysindices^levels^1^2^6^
sysindices^leaves^2^4^7^
sysindices^nunique^2^4^8^
sysindices^clust^2^4^9^
sysindices^nrows^3^8^10^
sysinherits^child^2^4^1^
sysinherits^parent^2^4^2^
sysinherits^class^0^1^3^
syslangauth^grantor^0^32^1^
syslangauth^grantee^0^32^2^
syslangauth^langid^2^4^3^
syslangauth^langauth^0^1^4^
syslogmap^tabloc^2^4^1^
syslogmap^tabid^2^4^2^
syslogmap^fragid^2^4^3^
syslogmap^flags^2^4^4^
sysobjstate^objtype^0^1^1^
sysobjstate^owner^0^32^2^
sysobjstate^name^13^128^3^
sysobjstate^tabid^2^4^4^
sysobjstate^state^0^1^5^
sysopclasses^opclassname^13^128^1^
sysopclasses^owner^0^32^2^
sysopclasses^amid^2^4^3^
sysopclasses^opclassid^6^4^4^
sysopclstr^owner^0^32^1^
sysopclstr^clstrname^13^128^2^
sysopclstr^clstrsize^2^4^3^
sysopclstr^tabid^2^4^4^
sysopclstr^blobcol1^1^2^5^
sysopclstr^blobcol2^1^2^6^
sysopclstr^blobcol3^1^2^7^
sysopclstr^blobcol4^1^2^8^
sysopclstr^blobcol5^1^2^9^
sysopclstr^blobcol6^1^2^10^
sysopclstr^blobcol7^1^2^11^
sysopclstr^blobcol8^1^2^12^
sysopclstr^blobcol9^1^2^13^
sysopclstr^blobcol10^1^2^14^
sysopclstr^blobcol11^1^2^15^
sysopclstr^blobcol12^1^2^16^
sysopclstr^blobcol13^1^2^17^
sysopclstr^blobcol14^1^2^18^
sysopclstr^blobcol15^1^2^19^
sysopclstr^blobcol16^1^2^20^
sysopclstr^clstrkey1^1^2^21^
sysopclstr^clstrkey2^1^2^22^
sysopclstr^clstrkey3^1^2^23^
sysopclstr^clstrkey4^1^2^24^
sysopclstr^clstrkey5^1^2^25^
sysopclstr^clstrkey6^1^2^26^
sysopclstr^clstrkey7^1^2^27^
sysopclstr^clstrkey8^1^2^28^
sysopclstr^clstrkey9^1^2^29^
sysopclstr^clstrkey10^1^2^30^
sysopclstr^clstrkey11^1^2^31^
sysopclstr^clstrkey12^1^2^32^
sysopclstr^clstrkey13^1^2^33^
sysopclstr^clstrkey14^1^2^34^
sysopclstr^clstrkey15^1^2^35^
sysopclstr^clstrkey16^1^2^36^
sysprocauth^grantor^0^32^1^
sysprocauth^grantee^0^32^2^
sysprocauth^procid^2^4^3^
sysprocauth^procauth^0^1^4^
sysprocbody^procid^2^4^1^
sysprocbody^datakey^0^1^2^
sysprocbody^seqno^2^4^3^
sysprocbody^data^0^256^4^
sysprocedures^procname^13^128^1^
sysprocedures^owner^0^32^2^
sysprocedures^procid^6^4^3^
sysprocedures^mode^0^1^4^
sysprocedures^retsize^2^4^5^
sysprocedures^symsize^2^4^6^
sysprocedures^datasize^2^4^7^
sysprocedures^codesize^2^4^8^
sysprocedures^numargs^2^4^9^
sysprocedures^isproc^0^1^10^
sysprocedures^specificname^13^128^11^
sysprocedures^externalname^13^255^12^
sysprocedures^paramstyle^0^1^13^
sysprocedures^langid^2^4^14^
sysprocplan^procid^2^4^1^
sysprocplan^planid^2^4^2^
sysprocplan^datakey^0^1^3^
sysprocplan^seqno^2^4^4^
sysprocplan^created^7^4^5^
sysprocplan^datasize^2^4^6^
sysprocplan^data^0^256^7^
sysreferences^constrid^2^4^1^
sysreferences^primary^2^4^2^
sysreferences^ptabid^2^4^3^
sysreferences^updrule^0^1^4^
sysreferences^delrule^0^1^5^
sysreferences^matchtype^0^1^6^
sysreferences^pendant^0^1^7^
sysroleauth^rolename^0^32^1^
sysroleauth^grantee^0^32^2^
sysroleauth^is_grantable^0^1^3^
sysroutinelangs^langid^6^4^1^
sysroutinelangs^langname^0^30^2^
sysroutinelangs^langinitfunc^13^128^3^
sysroutinelangs^langpath^0^255^4^
sysroutinelangs^langclass^0^18^5^
syssequences^seqid^6^4^1^
syssequences^tabid^2^4^2^
syssynonyms^owner^0^32^1^
syssynonyms^synname^13^128^2^
syssynonyms^created^7^4^3^
syssynonyms^tabid^2^4^4^
syssyntable^tabid^2^4^1^
syssyntable^servername^13^128^2^
syssyntable^dbname^13^128^3^
syssyntable^owner^0^32^4^
syssyntable^tabname^13^128^5^
syssyntable^btabid^2^4^6^
systabamdata^tabid^2^4^1^
systabamdata^am_param^0^256^2^
systabamdata^am_space^13^128^3^
systabauth^grantor^0^32^1^
systabauth^grantee^0^32^2^
systabauth^tabid^2^4^3^
systabauth^tabauth^0^9^4^
systables^tabname^13^128^1^
systables^owner^0^32^2^
systables^partnum^2^4^3^
systables^tabid^6^4^4^
systables^rowsize^1^2^5^
systables^ncols^1^2^6^
systables^nindexes^1^2^7^
systables^nrows^2^4^8^
systables^created^7^4^9^
systables^version^2^4^10^
systables^tabtype^0^1^11^
systables^locklevel^0^1^12^
systables^npused^2^4^13^
systables^fextsize^2^4^14^
systables^nextsize^2^4^15^
systables^flags^1^2^16^
systables^site^13^128^17^
systables^dbname^13^128^18^
systables^type_xid^2^4^19^
systables^am_id^2^4^20^
systraceclasses^name^0^18^1^
systraceclasses^classid^6^4^2^
systracemsgs^name^13^128^1^
systracemsgs^msgid^6^4^2^
systracemsgs^locale^0^36^3^
systracemsgs^seqno^1^2^4^
systracemsgs^message^13^255^5^
systrigbody^trigid^2^4^1^
systrigbody^datakey^0^1^2^
systrigbody^seqno^2^4^3^
systrigbody^data^0^256^4^
systriggers^trigid^6^4^1^
systriggers^trigname^13^128^2^
systriggers^owner^0^32^3^
systriggers^tabid^2^4^4^
systriggers^event^0^1^5^
systriggers^old^13^128^6^
systriggers^new^13^128^7^
systriggers^mode^0^1^8^
systriggers^collation^0^36^9^
sysusers^username^0^32^1^
sysusers^usertype^0^1^2^
sysusers^priority^1^2^3^
sysusers^password^0^16^4^
sysviews^tabid^2^4^1^
sysviews^seqno^1^2^2^
sysviews^viewtext^0^64^3^
sysviolations^targettid^2^4^1^
sysviolations^viotid^2^4^2^
sysviolations^diatid^2^4^3^
sysviolations^maxrows^2^4^4^
sysxtddesc^extended_id^2^4^1^
sysxtddesc^seqno^1^2^2^
sysxtddesc^description^0^256^3^
sysxtdtypeauth^grantor^0^32^1^
sysxtdtypeauth^grantee^0^32^2^
sysxtdtypeauth^type^2^4^3^
sysxtdtypeauth^auth^0^2^4^
sysxtdtypes^extended_id^6^4^1^
sysxtdtypes^domain^0^1^2^
sysxtdtypes^mode^0^1^3^
sysxtdtypes^owner^0^32^4^
sysxtdtypes^name^13^128^5^
sysxtdtypes^type^1^2^6^
sysxtdtypes^source^2^4^7^
sysxtdtypes^maxlen^2^4^8^
sysxtdtypes^length^2^4^9^
sysxtdtypes^byvalue^0^1^10^
sysxtdtypes^cannothash^0^1^11^
sysxtdtypes^align^1^2^12^
sysxtdtypes^locator^2^4^13^