home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / clarion / multiadd.zip / ROUTE12.CLA < prev   
Text File  |  1989-06-30  |  24KB  |  594 lines

  1.          MEMBER('ROUTE')
  2. WIP_FORM     PROCEDURE
  3.  
  4. SCREEN         SCREEN      WINDOW(25,44),AT(1,34),PRE(SCR),HUE(15,1,11)
  5.  OMIT('**-END-**')
  6.                  ╔══════════════════════════════════════════╗
  7.                  ║           Labor Ticket File        ║
  8.                  ║    ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        ║
  9.                  ║                        ║
  10.                  ║  Lot#   :■■■■■■        Date :mm/dd/yy  ║
  11.                  ║  Part#  :■■■■■                ║
  12.                  ║  Dept#  :##           (■■■■■■■■■■■■■■■     )  ║
  13.                  ║  Oper#  :###           (■■■■■■■■■■■■■■■■■)  ║
  14.                  ║  Accept :<<#      Rework :<<#    Scrap :<<#  ║
  15.                  ║ ╔══════════════════════════════════════╗ ║
  16.                  ║ ║ Out(hh:mmXM) - In(hh:mmXM) = (<<#.##)║ ║
  17.                  ║ ╠════════════╤════════════╤════════════╣ ║
  18.                  ║ ║ Out :##:## │ Out :##:## │ Out :##:## ║ ║
  19.                  ║ ║ In     :##:## │ In  :##:## │ In  :##:## ║ ║
  20.                  ║ ╟────────────┼────────────┼────────────╢ ║
  21.                  ║ ║ Out :##:## │ Out :##:## │ Out :##:## ║ ║
  22.                  ║ ║ In     :##:## │ In  :##:## │ In  :##:## ║ ║
  23.                  ║ ╟────────────┼────────────┼────────────╢ ║
  24.                  ║ ║ Out :##:## │ Out :##:## │ Out :##:## ║ ║
  25.                  ║ ║ In     :##:## │ In  :##:## │ In  :##:## ║ ║
  26.                  ║ ╚════════════╧════════════╧════════════╝ ║
  27.                  ║ Total Time :<<#.##         Sample Lot :■  ║
  28.                  ║ Clk# :### (■■■■■■■■■■■■■■■■■)  Shft# :#  ║
  29.                  ║          Enter to Save, Esc to Edit... ║
  30.                  ╚══════════════════════════════════════════╝
  31. **-END-**
  32.  
  33.            ROW(10,3)  PAINT(11,1),HUE(11,1)
  34.            ROW(21,3)  PAINT(1,39),HUE(11,1)
  35.            ROW(11,42) PAINT(11,1),HUE(11,1)
  36.            ROW(10,4)  PAINT(1,39),HUE(11,1)
  37.            ROW(12,4)  PAINT(1,39),HUE(11,1)
  38.            ROW(15,2)  PAINT(1,41),HUE(11,1)
  39.            ROW(18,4)  PAINT(1,39),HUE(11,1)
  40.            ROW(12,29) PAINT(10,1),HUE(11,1)
  41.            ROW(12,16) PAINT(9,1),HUE(11,1)
  42.            ROW(5,4)      PAINT(5,8),HUE(14,1)
  43.            ROW(11,5)  PAINT(1,1),HUE(11,1)
  44.            ROW(1,1)      STRING('<201,205{42},187>')
  45.            ROW(2,1)      REPEAT(23);STRING('<186,0{42},186>') .
  46.            ROW(25,1)  STRING('<200,205{42},188>')
  47.            ROW(10,3)  STRING('<201,205{38},187>')
  48.            ROW(11,3)  STRING('<186,0{38},186>')
  49.            ROW(12,3)  STRING('<204,205{12},209,205{12},209,205{12},185>')
  50.            ROW(13,3)  REPEAT(3),EVERY(3);STRING('<186,0{12},179,0{12},179,0{12},186>') .
  51.            ROW(14,3)  REPEAT(3),EVERY(3);STRING('<186,0{12},179,0{12},179,0{12},186>') .
  52.            ROW(15,3)  REPEAT(2),EVERY(3);STRING('<199,196{12},197,196{12},197,196{12},182>') .
  53.            ROW(21,3)  STRING('<200,205{12},207,205{12},207,205{12},188>')
  54.            ROW(2,15)  STRING('Labor Ticket File')
  55.            ROW(5,4)      STRING('Lot#')
  56.          COL(10)  STRING(' '),HUE(15,1)
  57.          COL(22)  STRING(' {5}'),HUE(15,1)
  58.          COL(27)  STRING(' Date'),HUE(14,1)
  59.          COL(32)  STRING(' '),HUE(15,1)
  60.            ROW(6,4)      STRING('Part#')
  61.          COL(10)  STRING(' '),HUE(15,1)
  62.            ROW(7,4)      STRING('Dept#')
  63.          COL(10)  STRING(' '),HUE(15,1)
  64.          COL(20)  STRING('  '),HUE(15,1)
  65.          COL(22)  STRING(' '),HUE(11,1)
  66.          COL(23)  STRING('(')
  67.          COL(39)  STRING('  '),HUE(15,1)
  68.          COL(41)  STRING(')')
  69.            ROW(8,4)      STRING('Oper#')
  70.          COL(10)  STRING(' '),HUE(15,1)
  71.          COL(20)  STRING('  '),HUE(15,1)
  72.          COL(22)  STRING(' '),HUE(11,1)
  73.          COL(23)  STRING('(')
  74.          COL(41)  STRING(')')
  75.            ROW(9,4)      STRING('Accept'),HUE(14,1)
  76.          COL(10)  STRING(' '),HUE(15,1)
  77.          COL(17)  STRING(' '),HUE(15,1)
  78.          COL(29)  STRING('   '),HUE(15,1)
  79.            ROW(11,5)  STRING('O'),HUE(11,1)
  80.          COL(6)      STRING('ut('),HUE(11,1)
  81.          COL(16)  STRING(')'),HUE(11,1)
  82.          COL(17)  STRING(' '),HUE(15,1)
  83.          COL(18)  STRING('- In('),HUE(11,1)
  84.          COL(30)  STRING(')'),HUE(11,1)
  85.          COL(31)  STRING(' '),HUE(15,1)
  86.          COL(32)  STRING('= ('),HUE(11,1)
  87.          COL(41)  STRING(')'),HUE(11,1)
  88.            ROW(22,21) STRING(' {7}'),HUE(15,1)
  89.          COL(28)  STRING(' Sample Lot'),HUE(14,1)
  90.          COL(39)  STRING(' '),HUE(15,1)
  91.            ROW(23,3)  STRING('Clk#'),HUE(14,1)
  92.          COL(13)  STRING('(')
  93.          COL(31)  STRING(')')
  94.          COL(33)  STRING(' Shft#'),HUE(14,1)
  95. MESSAGE           ROW(3,8)      STRING(30),HUE(10,1)
  96. DEPTNAME       ROW(7,24)  STRING(15),HUE(10,1)
  97. OPERNAME       ROW(8,24)  STRING(17),HUE(10,1)
  98. EMPNAME           ROW(23,14) STRING(17),HUE(10,1)
  99. TIME_OUT       ROW(11,9)  STRING(@T3),HUE(10,1)
  100. TIME_IN         COL(23)  STRING(@T3),HUE(10,1)
  101. TIME         COL(35)  STRING(@N6.2),HUE(10,1)
  102.            ROW(7,35)  ENTRY,USE(?FIRST_FIELD)
  103.            ROW(5,11)  STRING(':')
  104.          COL(12)  ENTRY(@S6),USE(WIP:LOTNBR),NUM,LFT,UPR
  105.          COL(33)  STRING(':'),HUE(14,1)
  106.          COL(34)  ENTRY(@D1),USE(WIP:WORK_DATE),INS,NUM
  107.            ROW(6,11)  STRING(':')
  108.          COL(12)  ENTRY(@S5),USE(WIP:PARTNBR),NUM,LFT,UPR
  109.            ROW(7,11)  STRING(':')
  110.          COL(12)  ENTRY(@N02),USE(WIP:DEPTNBR),INS,NUM
  111.            ROW(8,11)  STRING(':')
  112.          COL(12)  ENTRY(@N03),USE(WIP:OPERNBR),INS,NUM
  113.            ROW(9,11)  STRING(':')
  114.          COL(12)  ENTRY(@N3),USE(WIP:ACC_QTY),INS,NUM
  115.          COL(18)  STRING('Rework :'),HUE(14,1)
  116.          COL(26)  ENTRY(@N3),USE(WIP:RWK_QTY),INS,NUM
  117.          COL(32)  STRING('Scrap :'),HUE(14,1)
  118.          COL(39)  ENTRY(@N3),USE(WIP:SCRAP_QTY),INS,NUM
  119.            ROW(13,5)  STRING('Out :'),HUE(14,1)
  120.          COL(10)  ENTRY(@P##:##P),USE(SAV:ENDTIME1),INS,NUM
  121.            ROW(14,5)  STRING('In  :'),HUE(14,1)
  122.          COL(10)  ENTRY(@P##:##P),USE(SAV:BEGTIME1),INS,NUM
  123.            ROW(16,5)  STRING('Out :'),HUE(14,1)
  124.          COL(10)  ENTRY(@P##:##P),USE(SAV:ENDTIME2),INS,NUM
  125.            ROW(17,5)  STRING('In  :'),HUE(14,1)
  126.          COL(10)  ENTRY(@P##:##P),USE(SAV:BEGTIME2),INS,NUM
  127.            ROW(19,5)  STRING('Out :'),HUE(14,1)
  128.          COL(10)  ENTRY(@P##:##P),USE(SAV:ENDTIME3),INS,NUM
  129.            ROW(20,5)  STRING('In  :'),HUE(14,1)
  130.          COL(10)  ENTRY(@P##:##P),USE(SAV:BEGTIME3),INS,NUM
  131.            ROW(13,18) STRING('Out :'),HUE(14,1)
  132.          COL(23)  ENTRY(@P##:##P),USE(SAV:ENDTIME4),INS,NUM
  133.            ROW(14,18) STRING('In  :'),HUE(14,1)
  134.          COL(23)  ENTRY(@P##:##P),USE(SAV:BEGTIME4),INS,NUM
  135.            ROW(16,18) STRING('Out :'),HUE(14,1)
  136.          COL(23)  ENTRY(@P##:##P),USE(SAV:ENDTIME5),INS,NUM
  137.            ROW(17,18) STRING('In  :'),HUE(14,1)
  138.          COL(23)  ENTRY(@P##:##P),USE(SAV:BEGTIME5),INS,NUM
  139.            ROW(19,18) STRING('Out :'),HUE(14,1)
  140.          COL(23)  ENTRY(@P##:##P),USE(SAV:ENDTIME6),INS,NUM
  141.            ROW(20,18) STRING('In  :'),HUE(14,1)
  142.          COL(23)  ENTRY(@P##:##P),USE(SAV:BEGTIME6),INS,NUM
  143.            ROW(13,31) STRING('Out :'),HUE(14,1)
  144.          COL(36)  ENTRY(@P##:##P),USE(SAV:ENDTIME7),INS,NUM
  145.            ROW(14,31) STRING('In  :'),HUE(14,1)
  146.          COL(36)  ENTRY(@P##:##P),USE(SAV:BEGTIME7),INS,NUM
  147.            ROW(16,31) STRING('Out :'),HUE(14,1)
  148.          COL(36)  ENTRY(@P##:##P),USE(SAV:ENDTIME8),INS,NUM
  149.            ROW(17,31) STRING('In  :'),HUE(14,1)
  150.          COL(36)  ENTRY(@P##:##P),USE(SAV:BEGTIME8),INS,NUM
  151.            ROW(19,31) STRING('Out :'),HUE(14,1)
  152.          COL(36)  ENTRY(@P##:##P),USE(SAV:ENDTIME9),INS,NUM
  153.            ROW(20,31) STRING('In  :'),HUE(14,1)
  154.          COL(36)  ENTRY(@P##:##P),USE(SAV:BEGTIME9),INS,NUM
  155.            ROW(22,3)  STRING('Total Time :'),HUE(14,1)
  156.          COL(15)  ENTRY(@N6.2),USE(WIP:TOTAL_TIME),INS,NUM
  157.          COL(40)  STRING(':'),HUE(14,1)
  158.          COL(41)  ENTRY(@S1),USE(WIP:SAMPLE),UPR
  159.            ROW(23,8)  STRING(':'),HUE(14,1)
  160.          COL(9)      ENTRY(@N03),USE(WIP:CLOCKNBR),INS,NUM
  161.          COL(40)  STRING(':'),HUE(14,1)
  162.          COL(41)  ENTRY(@N1),USE(WIP:SHIFT),INS,NUM
  163.            ROW(24,14) PAUSE('Enter to Save, Esc to Edit...'),USE(?PAUSE_FIELD),HUE(31,1)
  164.            ROW(19,37) ENTRY,USE(?LAST_FIELD)
  165.          COL(37)  PAUSE(''),USE(?DELETE_FIELD)
  166.          .
  167. SAVE_RECORD  GROUP;BYTE,DIM(SIZE(WIP:RECORD)).
  168.  
  169. PROD_TIME    GROUP,PRE(SAV)
  170. ENDTIME           DECIMAL(5)             !Saved End Production Time
  171. BEGTIME           DECIMAL(5)             !Saved Beg Production Time
  172. ENDTIME1       DECIMAL(5)             !End Production Time
  173. BEGTIME1       DECIMAL(5)             !Beg Production Time
  174. ENDTIME2       DECIMAL(5)             !End Production Time
  175. BEGTIME2       DECIMAL(5)             !Beg Production Time
  176. ENDTIME3       DECIMAL(5)             !End Production Time
  177. BEGTIME3       DECIMAL(5)             !Beg Production Time
  178. ENDTIME4       DECIMAL(5)             !End Production Time
  179. BEGTIME4       DECIMAL(5)             !Beg Production Time
  180. ENDTIME5       DECIMAL(5)             !End Production Time
  181. BEGTIME5       DECIMAL(5)             !Beg Production Time
  182. ENDTIME6       DECIMAL(5)             !End Production Time
  183. BEGTIME6       DECIMAL(5)             !Beg Production Time
  184. ENDTIME7       DECIMAL(5)             !End Production Time
  185. BEGTIME7       DECIMAL(5)             !Beg Production Time
  186. ENDTIME8       DECIMAL(5)             !End Production Time
  187. BEGTIME8       DECIMAL(5)             !Beg Production Time
  188. ENDTIME9       DECIMAL(5)             !End Production Time
  189. BEGTIME9       DECIMAL(5)             !Beg Production Time
  190.          .
  191.  
  192.   EJECT
  193.   CODE
  194.   OPEN(SCREEN)                     !OPEN THE SCREEN
  195.   SETCURSOR                     !TURN OFF ANY CURSOR
  196.   SAVE_RECORD = WIP:RECORD             !SAVE THE ORIGINAL
  197.   CLEAR(PROD_TIME)                 !Clear Prod Time Variables
  198.   IF ACTION = 1                     !ON ADD, DISPLAY DEFAULT
  199.     WIP:WORK_DATE  = MEM:ANYDATE         !  Production Work Date
  200.     WIP:SHIFT       = 1                    !  Default Value
  201.     POINTER# = 0                 !  NO RECORD FOR ADD
  202.   .
  203.   IF ACTION = 2 THEN POINTER# = POINTER(WIP).     !CURRENT RECORD FOR CHANGE
  204.   IF ACTION = 2 OR ACTION = 3             !IF CHANGING OR DELETING RECORD
  205.     DO SHOW_OPER                 !  DISPLAY OPER & DEPT NAMES
  206.     DO SHOW_EMP                     !  DISPLAY EMPLOYEE NAME
  207.   .
  208.   DISPLAY                     !DISPLAY THE FIELDS
  209.   LOOP                         !LOOP THRU ALL THE FIELDS
  210.     MEM:MESSAGE = CENTER(MEM:MESSAGE,SIZE(MEM:MESSAGE)) !DISPLAY ACTION MESSAGE
  211.     SCR:MESSAGE = MEM:MESSAGE
  212.     ALERT                     !RESET ALERTED KEYS
  213.     ALERT(ACCEPT_KEY)                 !ALERT SCREEN ACCEPT KEY
  214.     ALERT(REJECT_KEY)                 !ALERT SCREEN REJECT KEY
  215.     IF ACTION = 1 THEN DO CALC_TIME.         !ON ADD, CALCULATE FIELD VALUE
  216.     ACCEPT                     !READ A FIELD
  217.     IF KEYCODE() = REJECT_KEY             !ON SCREEN REJECT KEY
  218.       IF ACTION = 1 THEN ACTION = 0.         !  SET ADD ACTION TO COMPLETE
  219.       RETURN                     !  RETURN
  220.     .
  221.     EXECUTE ACTION                 !SET ACTION MESSAGE
  222.       MEM:MESSAGE = 'Labor Ticket will be Added'  !
  223.       MEM:MESSAGE = 'Labor Ticket will be Changed'!
  224.       MEM:MESSAGE = 'Enter to Delete, Esc to Exit'!
  225.     .
  226.     EDIT_RANGE# = FIELD()             !SET ONE FIELD EDIT RANGE
  227.     IF KEYCODE() = ACCEPT_KEY             !ON SCREEN ACCEPT KEY
  228.       UPDATE                     !  MOVE ALL FIELDS FROM SCREEN
  229.       EDIT_RANGE# = FIELDS()             !  AND EDIT REMAINING FIELDS
  230.     .                         !
  231.     LOOP FIELD# = FIELD() TO EDIT_RANGE#     !EDIT FIELDS IN THE EDIT RANGE
  232.       CASE FIELD#                 !JUMP TO FIELD EDIT ROUTINE
  233.       OF ?FIRST_FIELD                 !FROM THE FIRST FIELD
  234.     IF KEYCODE() = ESC_KEY             ! ON ESC KEY
  235.       IF ACTION = 1 THEN ACTION = 0.     !  SET ADD ACTION TO COMPLETE
  236.       RETURN                 !  AND RETURN
  237.     .
  238.     IF ACTION = 3 THEN SELECT(?DELETE_FIELD).!  OR CONFIRM FOR DELETE
  239.  
  240.       OF ?WIP:LOTNBR                 !Production Lot Number
  241.     IF WIP:LOTNBR = ''             !IF REQUIRED FIELD IS BLANK
  242.       BEEP(500,32)                 !  SOUND KEYBOARD ALARM
  243.       MEM:MESSAGE =     'Field is Required!'     !  MOVE AN ERROR MESSAGE
  244.       SELECT(?WIP:LOTNBR)             !  AND STAY ON THIS FIELD
  245.       BREAK                     !
  246.     .
  247.     IF ACTION = 1                 !If adding a record
  248.       LOTNBR# = WIP:LOTNBR             !  Save Entered Lot#
  249.       WIP:DEPTNBR = 99             !  Set Key Field to last
  250.       WIP:OPERNBR = 999             !   entry in desired region
  251.       SET(WIP:LOT_KEY,WIP:LOT_KEY)         !   and get the
  252.       PREVIOUS(WIP)                 !   previous record
  253.       IF WIP:LOTNBR = LOTNBR#         !  If there is a match
  254.         DISPLAY(?WIP:SAMPLE)         !    display lookup field
  255.         DISPLAY(?WIP:ACC_QTY)         !    display lookup field
  256.         IND:SEQNBR    = WIP:SEQNBR         !    equal to closest values in
  257.       ELSE
  258.         IND:SEQNBR    = 0
  259.         WIP:SAMPLE    = 'N'                !  Default Value
  260.       .
  261.       IND:ITEMNBR = WIP:PARTNBR         !    set fields in lookup file
  262.       SET(IND:ITEMDTL_KEY,IND:ITEMDTL_KEY) !      current record
  263.       NEXT(INVDFILE)                !  Get next record
  264.       IF IND:ITEMNBR <> WIP:PARTNBR THEN BREAK.    !  If linking fields do not match then break
  265.       WIP:DEPTNBR = IND:DEPTNBR            !      then move the
  266.       WIP:OPERNBR = IND:OPERNBR            !      lookups fields
  267.       DO SHOW_OPER                    !      plus their associated names
  268.       DISPLAY(?WIP:PARTNBR,?WIP:OPERNBR)        !display the fields
  269.       DISPLAY(?WIP:SAMPLE)
  270.     .
  271.  
  272.       OF ?WIP:WORK_DATE                 !Production Work Date
  273.     IF MEM:ANYDATE <> WIP:WORK_DATE         !If entry is different than save field
  274.       MEM:ANYDATE = WIP:WORK_DATE         !  then update save field to current entry
  275.     .
  276.  
  277.       OF ?WIP:PARTNBR                 !Part Number
  278.     INH:ITEMNBR = WIP:PARTNBR         !MOVE RELATED FIELDS
  279.     GET(INVHFILE,INH:INVHNBR_KEY)         !READ THE RECORD
  280.     IF ERROR()                 !IF NO RECORD IS FOUND
  281.       ACTION# = ACTION             !  SAVE ACTION
  282.       ACTION = 4                 !  REQUEST TABLE LOOKUP
  283.       INV_TABLE                  !  CALL LOOKUP PROCEDURE
  284.       WIP:PARTNBR = INH:ITEMNBR         !  MOVE LOOKUP FIELD
  285.       DISPLAY(?WIP:PARTNBR)             !  AND DISPLAY IT
  286.       IF ACTION THEN SELECT(?WIP:PARTNBR).     !  NO SELECTION WAS MADE
  287.       ACTION = ACTION#             !  RESTORE ACTION
  288.     .
  289.  
  290.       OF ?WIP:DEPTNBR                 !Department Number
  291.  
  292.       OF ?WIP:OPERNBR                 !Operation Number
  293.     OPR:DEPTNBR = WIP:DEPTNBR         !MOVE RELATED FIELDS
  294.     OPR:OPERNBR = WIP:OPERNBR         !MOVE RELATED FIELDS
  295.     GET(OPERFILE,OPR:DEPTOPER_KEY)         !READ THE RECORD
  296.     IF ERROR()                 !IF NO RECORD IS FOUND
  297.       ACTION# = ACTION             !  SAVE ACTION
  298.       ACTION = 4                 !  REQUEST TABLE LOOKUP
  299.       OPER_DIR                 !  CALL LOOKUP PROCEDURE
  300.       WIP:DEPTNBR = OPR:DEPTNBR         !  MOVE LOOKUP FIELD
  301.       WIP:OPERNBR = OPR:OPERNBR         !  MOVE LOOKUP FIELD
  302.       DISPLAY(?WIP:DEPTNBR)             !  AND DISPLAY IT
  303.       DISPLAY(?WIP:OPERNBR)             !  AND DISPLAY IT
  304.       IF ACTION THEN SELECT(?WIP:DEPTNBR).     ! NO SELECTION WAS MADE
  305.       ACTION = ACTION#             !  RESTORE ACTION
  306.     .
  307.     SCR:DEPTNAME = OPR:DEPTNAME
  308.     SCR:OPERNAME = OPR:OPERDESC
  309.     IF OPR:LBR_TYPE = 'I'
  310.       BEEP
  311.       MEM:MESSAGE = 'Indirect Labor Operation'! MOVE A MESSAGE
  312.     .
  313.     GET(WIP,WIP:LOT_KEY)             !READ THE RECORD BY KEY
  314.     IF NOT ERROR()                 !IF A RECORD IS FOUND
  315.       IF POINTER(WIP) <> POINTER#         !  BUT NOT THE SAME RECORD
  316.         CLEAR(WIP:RECORD)             !    CLEAR IN CASE OF ADD
  317.         GET(WIP,POINTER#)             !    RE-READ THE OLD RECORD
  318.         UPDATE                 !    RE-UPDATE THE RECORD
  319.         MEM:MESSAGE = 'Creates Duplicate Labor Ticket'! MOVE AN ERROR MESSAGE
  320.         SELECT(?WIP:OPERNBR)         !    STAY ON THE SAME FIELD
  321.         BEEP(500,32)             !*   SOUND KEYBOARD ALARM
  322.         BREAK                 !    AND LOOP AGAIN
  323.     . .
  324.     GET(WIP,POINTER#)             !  RE-READ THE OLD RECORD
  325.     UPDATE                     !  AND RE-UPDATE THE RECORD
  326.  
  327.       OF ?WIP:ACC_QTY                 !Good Quantity
  328.  
  329.       OF ?WIP:RWK_QTY                 !Rework Quantity
  330.  
  331.       OF ?WIP:SCRAP_QTY                 !Scrap Quantity
  332.     IF WIP:SCRAP_QTY > WIP:ACC_QTY
  333.       BEEP(500,32)                 !  SOUND KEYBOARD ALARM
  334.       MEM:MESSAGE =     'Scrap Qty S/B <<= Accept Qty' !* MOVE AN ERROR MESSAGE
  335.       SELECT(?WIP:SCRAP_QTY)         !  AND STAY ON THIS FIELD
  336.       BREAK                     !
  337.     .
  338.  
  339.       OF ?SAV:ENDTIME1                 !Production Stop Time
  340.     SAV:ENDTIME = SAV:ENDTIME1         !Save Entry Value
  341.     DO EDIT_ENDTIME                 !Call Edit Routine
  342.  
  343.       OF ?SAV:BEGTIME1                 !Production Start Time
  344.     SAV:ENDTIME = SAV:ENDTIME1         !Save Entry Value
  345.     SAV:BEGTIME = SAV:BEGTIME1         !Save Entry Value
  346.     DO EDIT_BEGTIME                 !Call Edit Routine
  347.     IF SEL_FLG#                 !If Select Flag On
  348.       SELECT(?SAV:BEGTIME1)             !  Stay on Same Field
  349.       BREAK                     !  and Break out of edit loop
  350.     .
  351.  
  352.       OF ?SAV:ENDTIME2                 !Production Stop Time
  353.     SAV:ENDTIME = SAV:ENDTIME2         !Save Entry Value
  354.     DO EDIT_ENDTIME                 !Call Edit Routine
  355.  
  356.       OF ?SAV:BEGTIME2                 !Production Start Time
  357.     SAV:ENDTIME = SAV:ENDTIME2         !Save Entry Value
  358.     SAV:BEGTIME = SAV:BEGTIME2         !Save Entry Value
  359.     DO EDIT_BEGTIME                 !Call Edit Routine
  360.     IF SEL_FLG#                 !If Select Flag On
  361.       SELECT(?SAV:BEGTIME2)             !  Stay on Same Field
  362.       BREAK                     !  and Break out of edit loop
  363.     .
  364.  
  365.       OF ?SAV:ENDTIME3                 !Production Stop Time
  366.     SAV:ENDTIME = SAV:ENDTIME3         !Save Entry Value
  367.     DO EDIT_ENDTIME                 !Call Edit Routine
  368.  
  369.       OF ?SAV:BEGTIME3                 !Production Start Time
  370.     SAV:ENDTIME = SAV:ENDTIME3         !Save Entry Value
  371.     SAV:BEGTIME = SAV:BEGTIME3         !Save Entry Value
  372.     DO EDIT_BEGTIME                 !Call Edit Routine
  373.     IF SEL_FLG#                 !If Select Flag On
  374.       SELECT(?SAV:BEGTIME3)             !  Stay on Same Field
  375.       BREAK                     !  and Break out of edit loop
  376.     .
  377.  
  378.       OF ?SAV:ENDTIME4                 !Production Stop Time
  379.     SAV:ENDTIME = SAV:ENDTIME4         !Save Entry Value
  380.     DO EDIT_ENDTIME                 !Call Edit Routine
  381.  
  382.       OF ?SAV:BEGTIME4                 !Production Start Time
  383.     SAV:ENDTIME = SAV:ENDTIME4         !Save Entry Value
  384.     SAV:BEGTIME = SAV:BEGTIME4         !Save Entry Value
  385.     DO EDIT_BEGTIME                 !Call Edit Routine
  386.     IF SEL_FLG#                 !If Select Flag On
  387.       SELECT(?SAV:BEGTIME4)             !  Stay on Same Field
  388.       BREAK                     !  and Break out of edit loop
  389.     .
  390.  
  391.       OF ?SAV:ENDTIME5                 !Production Stop Time
  392.     SAV:ENDTIME = SAV:ENDTIME5         !Save Entry Value
  393.     DO EDIT_ENDTIME                 !Call Edit Routine
  394.  
  395.       OF ?SAV:BEGTIME5                 !Production Start Time
  396.     SAV:ENDTIME = SAV:ENDTIME5         !Save Entry Value
  397.     SAV:BEGTIME = SAV:BEGTIME5         !Save Entry Value
  398.     DO EDIT_BEGTIME                 !Call Edit Routine
  399.     IF SEL_FLG#                 !If Select Flag On
  400.       SELECT(?SAV:BEGTIME5)             !  Stay on Same Field
  401.       BREAK                     !  and Break out of edit loop
  402.     .
  403.  
  404.       OF ?SAV:ENDTIME6                 !Production Stop Time
  405.     SAV:ENDTIME = SAV:ENDTIME6         !Save Entry Value
  406.     DO EDIT_ENDTIME                 !Call Edit Routine
  407.  
  408.       OF ?SAV:BEGTIME6                 !Production Start Time
  409.     SAV:ENDTIME = SAV:ENDTIME6         !Save Entry Value
  410.     SAV:BEGTIME = SAV:BEGTIME6         !Save Entry Value
  411.     DO EDIT_BEGTIME                 !Call Edit Routine
  412.     IF SEL_FLG#                 !If Select Flag On
  413.       SELECT(?SAV:BEGTIME6)             !  Stay on Same Field
  414.       BREAK                     !  and Break out of edit loop
  415.     .
  416.  
  417.       OF ?SAV:ENDTIME7                 !Production Stop Time
  418.     SAV:ENDTIME = SAV:ENDTIME7         !Save Entry Value
  419.     DO EDIT_ENDTIME                 !Call Edit Routine
  420.  
  421.       OF ?SAV:BEGTIME7                 !Production Start Time
  422.     SAV:ENDTIME = SAV:ENDTIME7         !Save Entry Value
  423.     SAV:BEGTIME = SAV:BEGTIME7         !Save Entry Value
  424.     DO EDIT_BEGTIME                 !Call Edit Routine
  425.     IF SEL_FLG#                 !If Select Flag On
  426.       SELECT(?SAV:BEGTIME7)             !  Stay on Same Field
  427.       BREAK                     !  and Break out of edit loop
  428.     .
  429.  
  430.       OF ?SAV:ENDTIME8                 !Production Stop Time
  431.     SAV:ENDTIME = SAV:ENDTIME8         !Save Entry Value
  432.     DO EDIT_ENDTIME                 !Call Edit Routine
  433.  
  434.       OF ?SAV:BEGTIME8                 !Production Start Time
  435.     SAV:ENDTIME = SAV:ENDTIME8         !Save Entry Value
  436.     SAV:BEGTIME = SAV:BEGTIME8         !Save Entry Value
  437.     DO EDIT_BEGTIME                 !Call Edit Routine
  438.     IF SEL_FLG#                 !If Select Flag On
  439.       SELECT(?SAV:BEGTIME8)             !  Stay on Same Field
  440.       BREAK                     !  and Break out of edit loop
  441.     .
  442.  
  443.       OF ?SAV:ENDTIME9                 !Production Stop Time
  444.     SAV:ENDTIME = SAV:ENDTIME9         !Save Entry Value
  445.     DO EDIT_ENDTIME                 !Call Edit Routine
  446.  
  447.       OF ?SAV:BEGTIME9                 !Production Start Time
  448.     SAV:ENDTIME = SAV:ENDTIME9         !Save Entry Value
  449.     SAV:BEGTIME = SAV:BEGTIME9         !Save Entry Value
  450.     DO EDIT_BEGTIME                 !Call Edit Routine
  451.     IF SEL_FLG#                 !If Select Flag On
  452.       SELECT(?SAV:BEGTIME9)             !  Stay on Same Field
  453.       BREAK                     !  and Break out of edit loop
  454.     .
  455.  
  456.       OF ?WIP:TOTAL_TIME             !Total Prod Time
  457.     IF ACTION = 1 THEN DO CALC_TIME.
  458.  
  459.       OF ?WIP:SAMPLE                 !Sample Lot Y=Yes N=No
  460.     IF WIP:SAMPLE <> 'Y' AND |         !IF FIELD IS OUT OF RANGE
  461.       WIP:SAMPLE <>     'N'             !IF FIELD IS OUT OF RANGE
  462.       BEEP(500,32)                 !  SOUND KEYBOARD ALARM
  463.       MEM:MESSAGE =     'Sample Lot:  Y=Yes or N=No' !* MOVE AN ERROR MESSAGE
  464.       SELECT(?WIP:SAMPLE)             !  AND STAY ON THIS FIELD
  465.       BREAK                     !
  466.     .
  467.  
  468.       OF ?WIP:CLOCKNBR                 !Employee Clock Number
  469.     !SCR:EMPNAME = EMPLOYEE NAME
  470.  
  471.       OF ?WIP:SHIFT                 !Production Work Shift
  472.     IF ~INRANGE(WIP:SHIFT,1,3)         !IF FIELD IS OUT OF RANGE
  473.       BEEP(500,32)                 !  SOUND KEYBOARD ALARM
  474.       MEM:MESSAGE =     'Shift# Must Be 1 or 2 or 3' !* MOVE AN ERROR MESSAGE
  475.       SELECT(?WIP:SHIFT)             !  AND STAY ON THIS FIELD
  476.       BREAK                     !
  477.     .
  478.  
  479.       OF ?PAUSE_FIELD                 !ON PAUSE FIELD
  480.     IF KEYCODE() <> ENTER_KEY  |         !IF NOT ENTER KEY
  481.     AND KEYCODE() <> ACCEPT_KEY         !AND NOT CTRL-ENTER KEY
  482.       BEEP(500,32)                 !* ALERT USER TO ERROR
  483.       MEM:MESSAGE = 'Invalid Key Pressed'     !* DISPLAY ERROR MESSAGE
  484.       SELECT(?PAUSE_FIELD)             !  AND STAY ON PAUSE FIELD
  485.     .
  486.       OF ?LAST_FIELD                 !FROM THE LAST FIELD
  487.     IF ACTION = 2                 !IF UPDATEING RECORD
  488.       HOLD(WIP)                 !  HOLD FILE
  489.       GET(WIP,POINTER#)             !  RE-READ SAME RECORD
  490.       IF ERRORCODE() = 35             !  IF RECORD WAS DELETED
  491.         ACTION = 1                 !    THEN ADD IT BACK
  492.       ELSIF |                 !  IF IT HAS BEEN CHANGED
  493.         WIP:RECORD <> SAVE_RECORD         !    BY ANOTHER STATION
  494.         MEM:MESSAGE = 'Changed By Another Station' !INFORM USER
  495.         SELECT(2)                 !  GO BACK TO FIELD 1
  496.         BEEP                 !  SOUND ALARM
  497.         RELEASE(WIP)             !  RELEASE FILE
  498.         SAVE_RECORD = WIP:RECORD         !  SAVE RECORD
  499.         DISPLAY                 !  DISPLAY THE FIELDS
  500.         BREAK                 !  AND CONTINUE
  501.       .
  502.       UPDATE                 !UPDATE FROM SCREEN TO RECORD
  503.     .
  504.     WIP:SEQNBR = IND:SEQNBR             ! SAVE HIDDEN LOOKUP FIELD
  505.     EXECUTE ACTION                 !  UPDATE THE FILE
  506.       ADD(WIP)                 !    ADD NEW RECORD
  507.       PUT(WIP)                 !    CHANGE EXISTING RECORD
  508.       DELETE(WIP)                 !    DELETE EXISTING RECORD
  509.     .
  510.     IF ERROR()                 !  CHECK FOR UNEXPECTED ERROR
  511.       GBL:DISK_ERROR = FILE_ERR()         !    DISPLAY ERROR WINDOW
  512.       STOP(ERROR())                 !    STOP PROGRAM
  513.     .                     !
  514.     SAVE_RECORD = WIP:RECORD         !  NEW ORIGINAL
  515.     IF ACTION <> 1                 !*IF CHANGE/DELETE RECORD
  516.       ACTION = 0                 !* SET ACTION TO COMPLETE
  517.       RETURN                 !* AND RETURN TO CALLER
  518.     ELSE                     !*ELSE IF ADDING A RECORD
  519.       POINTER# = POINTER(WIP)         !* POINT TO RECORD
  520.       ACTION = 1                 !* SET ACTION TO ADD
  521.       RETURN                 !* AND RETURN TO CALLER
  522.     .
  523.  
  524.       OF ?DELETE_FIELD                 !FROM THE DELETE FIELD
  525.     GBL:OK_TO_DEL = DEL_SCR()         ! DISPLAY DELETE CONFIRMATION WINDOW
  526.     IF GBL:OK_TO_DEL             ! IF OK TO DELETE
  527.       SELECT(?LAST_FIELD)             !    DELETE THE RECORD
  528.     ELSE                     !  OTHERWISE
  529.       RETURN                 !    RETURN TO CALLING PROGRAM
  530.   . . . .
  531.  
  532. EDIT_ENDTIME ROUTINE                   !End Time Edit Routine
  533.   SCR:TIME_OUT = SAV:ENDTIME * 3600           !Convert to Std Time
  534.   IF ~INRANGE(SAV:BEGTIME,0,2399)           !IF ENTRY OUT OF RANGE
  535.      BEEP(500,32)                   ! SOUND KEYBOARD ALARM
  536.      MEM:MESSAGE = 'Invalid Time!'           ! MOVE AN ERROR MESSAGE
  537.      SEL_FLG# = 1                   ! AND STAY ON THIS FIELD
  538.      EXIT                       ! EXIT EDIT ROUTINE
  539.   .
  540.  
  541. EDIT_BEGTIME ROUTINE                   !Beg Time Edit Routine
  542.   SEL_FLG# = 0                       !Turn Select Flag Off
  543.   SCR:TIME_IN = SAV:BEGTIME * 3600           !Convert to Std Time
  544.   IF SAV:BEGTIME = 0 AND SAV:ENDTIME = 0       !Bypass entry if no input
  545.     SELECT(?WIP:TOTAL_TIME)               !  Select Next Input Field
  546.     EXIT                       !  Exit Routine
  547.   .
  548.   IF ~INRANGE(SAV:ENDTIME,0,2399)           !IF ENTRY OUT OF RANGE
  549.      BEEP(500,32)                   ! SOUND KEYBOARD ALARM
  550.      MEM:MESSAGE = 'Invalid Time!'           ! MOVE AN ERROR MESSAGE
  551.      SEL_FLG# = 1                   ! AND STAY ON THIS FIELD
  552.      EXIT                       ! EXIT EDIT ROUTINE
  553.   .
  554.  
  555.   IF SAV:ENDTIME <> 0                   !If End Time was entered
  556.     IF SAV:BEGTIME = 0                   !but not Beg Time
  557.       BEEP(500,32)                   ! SOUND KEYBOARD ALARM
  558.       MEM:MESSAGE = 'Time-In is Required!'       ! MOVE AN ERROR MESSAGE
  559.       SEL_FLG# = 1                   ! AND STAY ON THIS FIELD
  560.       EXIT                       ! EXIT EDIT ROUTINE
  561.   . .
  562.   IF SAV:BEGTIME > SAV:ENDTIME               !If not valid range
  563.     BEEP(500,32)                   ! SOUND KEYBOARD ALARM
  564.     MEM:MESSAGE = 'Time In S/B >= Time Out'       ! MOVE AN ERROR MESSAGE
  565.     SEL_FLG# = 1                   ! AND STAY ON THIS FIELD
  566.     EXIT                       ! EXIT EDIT ROUTINE
  567.   .
  568.   SCR:TIME = ((SAV:ENDTIME - SAV:BEGTIME)/100)       !Display Prod Times
  569.  
  570. SHOW_OPER    ROUTINE                   !Display Lookup Fields
  571.   OPR:DEPTNBR = WIP:DEPTNBR             !MOVE RELATED FIELDS
  572.   OPR:OPERNBR = WIP:OPERNBR             !MOVE RELATED FIELDS
  573.   GET(OPERFILE,OPR:DEPTOPER_KEY)         !READ THE RECORD
  574.   IF ~ERROR()                     !IF A RECORD IS FOUND
  575.     SCR:DEPTNAME = OPR:DEPTNAME             !  DISPLAY LOOKUP FIELD
  576.     SCR:OPERNAME = OPR:OPERDESC             !  DISPLAY LOOKUP FIELD
  577.   .
  578.  
  579. SHOW_EMP     ROUTINE                   !Display Lookup Fields
  580.  
  581. CALC_TIME    ROUTINE                      !Calculate Total Time
  582.   WIP:TOTAL_TIME = 0                      !Clear Variable
  583.   WIP:TOTAL_TIME = (((SAV:ENDTIME1 - SAV:BEGTIME1) + |      !Accumulate Prod Times
  584.              (SAV:ENDTIME2 - SAV:BEGTIME2) + |      !Accumulate Prod Times
  585.              (SAV:ENDTIME3 - SAV:BEGTIME3) + |      !Accumulate Prod Times
  586.              (SAV:ENDTIME4 - SAV:BEGTIME4) + |      !Accumulate Prod Times
  587.              (SAV:ENDTIME5 - SAV:BEGTIME5) + |      !Accumulate Prod Times
  588.              (SAV:ENDTIME6 - SAV:BEGTIME6) + |      !Accumulate Prod Times
  589.              (SAV:ENDTIME7 - SAV:BEGTIME7) + |      !Accumulate Prod Times
  590.              (SAV:ENDTIME8 - SAV:BEGTIME8) + |      !Accumulate Prod Times
  591.              (SAV:ENDTIME9 - SAV:BEGTIME9))/100) !Accumulate Prod Times
  592.   DISPLAY(?WIP:TOTAL_TIME)                  !Display Field
  593.  
  594.