* * WHERELST * PREPARE WHERE USED ANALYSIS FOR ONE COMPONENT OR SUBASSEMBLY SET HEADING OFF SET SAFETY OFF SET STATUS OFF CLEAR CLEAR ALL SET TALK OFF SET BELL OFF STORE SPACE(80) TO BLANK @ 1,22 SAY "SMITH'S BIKEWORKS INFORMATION SYSTEM" @ 3,18 SAY ">> Production System Where-Used Analysis <<" @ 5,29 SAY "Today's Date: " ?? DATE() STORE " " TO DUMMY DO WHILE DUMMY<>"M" STORE " " TO STOCK_NUM STORE 1 TO MFG_NUM @ 11,1 SAY "Produce Where-Used Analysis For Stock Number " GET STOCK_NUM STORE " " TO DUMMY @ 21,1 SAY ; "REPLACE VALUE AT CURSOR. 'M' HERE RETURNS TO THE PRODUCTION SYSTEM MENU," @ 22,1 SAY ; "ANY OTHER KEY STARTS THE REPORT => "; GET DUMMY READ STORE UPPER(DUMMY) TO DUMMY IF DUMMY="M" RETURN ENDIF * OPEN FILE USE ASSEMBLY INDEX ASTOCKNO,SSTOCKNO * ESTABLISH STACK AND STACK POINTER FOR CURRENT ASSEMBLY STOCK NUMBER STORE 1 TO STACK_PTR STORE "KEY"+STR(STACK_PTR,1,0) TO TEMP STORE STOCK_NUM TO &TEMP STORE &TEMP TO KEY SEEK KEY * IF NO RECORD FOUND FOR REQUESTED STOCK NUMBER, SETUP ERROR MESSAGE FLAG IF (EOF() .OR. BOF()) STORE (1=1) TO NOT_FOUND @ 16,12 SAY "RECORD NOT FOUND" WAIT " PRESS ANY KEY AND ENTER A NEW STOCK NUMBER" @ 16,0 SAY BLANK @ 17,0 SAY BLANK LOOP ELSE STORE (1=2) TO NOT_FOUND * IF RECORD FOUND, STORE ITS LOCATION IN RECORD NUMBER STACK STORE "RECORD"+STR(STACK_PTR,1,0) TO RECORD STORE RECNO() TO &RECORD STORE ASM_STKNO+" "+ASM_DESC TO COMPONENT ENDIF * GET FIRST ENTRY USING THE COMPONENT SET INDEX TO SSTOCKNO,ASTOCKNO SEEK KEY IF (EOF() .OR. BOF()) STORE (1=1) TO NOT_FOUND @ 16,12 SAY "THIS PART IS A MAJOR ASSEMBLY AND NOT A COMPONENT OF ANY" @ 17,25 SAY "OTHER ASSEMBLIES" WAIT " PRESS ANY KEY AND ENTER A NEW STOCK NUMBER" @ 16,0 SAY BLANK @ 17,0 SAY BLANK @ 18,0 SAY BLANK LOOP ENDIF * OUTPUT GOES TO PRINTER SET PRINT ON SET DEVICE TO PRINT SET CONSOLE OFF STORE 60 TO LINE_CNT STORE 0 TO PAGE_NUM STORE (1=1) TO PRINT_FLG STORE 1 TO ASSEM_CNT STORE 1 TO TOT_CNT * USE STACK TO MOVE THROUGH ASSEMBLY LEVELS DO WHILE STACK_PTR>0 * PAGE HEADING IF LINE_CNT>=60 STORE PAGE_NUM+1 TO PAGE_NUM @ 2,0 SAY "SMITH'S BIKEWORKS -- WHERE-USED ANALYSIS" @ 2,50 SAY DATE() @ 2,70 SAY "PAGE " ?? STR(PAGE_NUM,2,0) @ 4,0 SAY "Stock Num" @ 4,30 SAY "Description" @ 4,55 SAY "Assemblies" @ 4,70 SAY "Qty. Req'd" @ 6,0 SAY COMPONENT STORE 7 TO LINE_CNT ENDIF * PRINT RECORD IF PRINT FLAG IS SET IF PRINT_FLG IF STACK_PTR>1 STORE ASSEM_CNT TO QUANTITY ELSE STORE 1 TO QUANTITY ENDIF IF NOT_FOUND @ LINE_CNT,40 SAY "Total Requirement For Assembly:" @ LINE_CNT,72 SAY TOT_CNT PICTURE "99999.99" STORE 1 TO TOT_CNT STORE LINE_CNT+1 TO LINE_CNT ELSE @ LINE_CNT,0+5*(STACK_PTR) SAY ASM_STKNO @ LINE_CNT,12+5*(STACK_PTR) SAY ASM_DESC STORE TOT_CNT*ASSEM_CNT TO TOT_CNT * PRINT ASSEMBLY COUNT IF SUB_STKNO=" " @ LINE_CNT,72 SAY QUANTITY PICTURE "99999.99" ELSE @ LINE_CNT,45+5*(STACK_PTR) SAY QUANTITY PICTURE "99999.99" ENDIF ENDIF STORE LINE_CNT+1 TO LINE_CNT ENDIF * IF THERE IS NO LOWER LEVEL, TRY NEXT ENTRY, THEN MOVE UP THE STACK IF SUB_STKNO=" ".OR.NOT_FOUND STORE " " TO TEMP STORE (1=2) TO NOT_FOUND STORE 0 TO RECNOW DO WHILE SUB_STKNO<>TEMP.AND.STACK_PTR>0.OR.RECNOW=RECNO() STORE STACK_PTR-1 TO STACK_PTR IF STACK_PTR>0 STORE "RECORD"+STR(STACK_PTR,1,0) TO RECORD GO &RECORD STORE &RECORD TO RECNOW * STORE CURRENT ASSEMBLY NUMBER TO SEE IF NEXT RECORD MATCHES STORE SUB_STKNO TO TEMP SKIP +1 ENDIF ENDDO * TURN PRINT FLAG ON STORE (1=1) TO PRINT_FLG STORE RECNO() TO &RECORD * SUBASSEMBLY IDENTIFIED SO GO DOWN A LEVEL ELSE * SET FLAG TO PRINT NEXT RECORD STORE (1=1) TO PRINT_FLG * STORE NUMBER OF ASSEMBLIES REQUIRED STORE SUB_NOREQ TO ASSEM_CNT STORE "RECORD"+STR(STACK_PTR,1,0) TO RECORD STORE RECNO() TO &RECORD STORE (1=2) TO NOT_FOUND STORE ASM_STKNO TO MEMKEY SEEK MEMKEY STORE STACK_PTR+1 TO STACK_PTR IF (EOF() .OR. BOF()) GO &RECORD STORE (1=1) TO NOT_FOUND ENDIF ENDIF ENDDO EJECT SET PRINT OFF SET CONSOLE ON SET DEVICE TO SCREEN ENDDO RETURN