2014-01-14 3 views
0

PRTRUTO, PRTOUTB, PRTOUTC PRTRUTO 프로그램을 사용하여 정보를 출력 파일에 쓰는 프로그램을 작성 중입니다. 변수를 PRINT-AREA 등으로 옮겨야합니다.JCL은 PRTOUTA, ... 등등을 Cobol 프로그램과 어떻게 연결합니까?

나는 그것이 PRTRTENO과 관련이있다 확신하지만 난 완전히 확실하지 오전

코볼 :

PRINT-B.        
    DISPLAY 'PRINT-B SECTION'   
    MOVE 'B' TO RPT.     
    CALL 'PRTRTENO' USING PRINT-AREA. 
PRINT-B-X. EXIT.      

코볼 전화 :

MOVE TEST-LINE TO PRINT-AREA. PERFORM PRINT-B. 

더 코볼 :

PAGE-TOPA.       
    MOVE 'P' TO CTL.     
PRINT-A.        
    MOVE 'A' TO RPT. <-- Is it here that determines the JCL printout.    
    CALL 'PRTRTENO' USING PRINT-AREA. 
    IF CTL = '*'      
     PERFORM HEAD-A THRU HEAD-A-X 
    END-IF.       
HEAD-A.        
    ...etc... //code here 
HEAD-A-X. 

JCL :

//OUTPUT1 DD DSN=Test-File-Name-Goes-Here,DISP=(,CATLG),   
//   DCB=TS20.FB0080.MODEL,MGMTCLAS=TDML1 --EMAIL  
//PRTOUTA DD SYSOUT=1,DCB=TS20.FBM0133.MODEL --EOS  
//PRTOUTB DD SYSOUT=1,DCB=TS20.FBM0133.MODEL --LABELS  
//PRTOUTC DD SYSOUT=1,DCB=TS20.FBM0133.MODEL --NO EMAIL 
+1

전자 메일과 관련하여 프로그램에서 OUTPUT1로만 작성하고 있습니다. 귀하가 귀하의 의견에 (FD에 종속되어있는 경우) 또는 WORKING-STORAGE SECTION에있는 01 레벨을 표시하십시오. 프로그램에서 CALL 된 프로그램에서 직접 또는 간접적으로 수행되는 것처럼 프로그램을 JCL의 DDNAME에 연결하기 위해 프로그램을 연결할 필요가 없습니다. –

답변

4

파일은 프로그램의 환경부 파일 제어 단락을 통해 COBOL 프로그램에 알려집니다. 파일 (FILE)-CONTROL의 단락과 같은 :

FILE-CONTROL. 
    SELECT PRT-FILE  <-- Name in FD SECTION 
    ASSIGN TO PRTOUTA  <-- JCL DD Name 
    ... 

그럼 당신은 FD가 FILE-CONTROL에서 선택한 파일에 기록 버퍼를 연결하는 데 사용하는 데이터 DIVISION한다. 연관된 v 퍼에 READ/WRITE하면 레코드가 프로그램에서 이름 지정된 파일로 전송됩니다. 로 시작됩니다 FD 년대 : 그 너머

FD PRT-FILE <-- same as SELECT from FILE-CONTROL 
... 

불리는 프로그램 ('PRTRTENO')를 프로그램이 직접이 파일에 기록되지 않기 때문에 조금 복잡를 얻을 수 있지만, 을 통해 수있는 일. 위의 파일 정의는 프로그램이나 호출 된 프로그램에 나타날 수 있습니다. 어느 경우 든 EXTERNAL로 선언되어 런 - 유닛의 어느 곳에서나 사용할 수 있습니다.

내가 전화 한 프로그램에서 EXTERNAL로 발견 할 것이라고 확신합니다. 질문에 답하기 위해 프로그램에서 FILE-CONTROL 단락과 FD를 찾아야합니다. JCL DD Names과 관련이없는 경우 호출 된 프로그램을 확인하십시오. 이 있어야합니다.

+0

FILE-CONTROL. UT-S-INPUT1에 클레임 선택. SELECT EMAILFILE ASSIGN TO UT-S-OUTPUT1. 내 파일 컨트롤이 01 print-area처럼 보입니다. 02 ctl pic x 값 'p'02 rpt pic x 값 'A'<- 이것은 프린트 아웃 02 아웃풋 x (132) 값 스페이스를 결정합니다. –

+0

위의 인쇄 영역은 Printout의 출력을 결정했다고 말했던 것입니다. 파일 제어에서 문제를 해결하지는 못합니다. rpt 값을 D 또는 V로 변경할 수 있기 때문입니다. 그것은 당신의 jcl에서 그 위치에 쓸 것입니다. Java와 강력한 OOP 배경에서 나에게 혼란 스러울 때가 있습니다. –

4

프로그램의 DDNAMES에 SELECT/ASSIGN/FD가있을 것으로 기대하지는 않습니다. 하위 프로그램을 갖는 한 가지 이유는 1,000 개의 동일한 (또는 거의 동일한) SELECT/ASSIGN/FD와 모든 IO 및 검사 및 페이지 크기 등을 포함하여 1,000 개의 보고서 프로그램을 피하는 것입니다.

그들은 CALLed 프로그램에 있거나 프로그램에서 차례로 호출합니다. 길을 따라 DDNAMES는 "동적으로"할당 될 가능성이 가장 높습니다. 또는 최소한 JCL에서 DDNAME이 있는지 프로그램에 문의하고 DDNAME이있는 경우에만 사용합니다 (코드에 액세스하지 않으면 분명히 알기가 어렵습니다).

실제 IO가 어셈블러 서브 루틴에서 수행 된 것 같습니다. 그것은 COBOL에서 가능하지만 원본 프로그램의 나이에 따라 달라집니다.

로컬로 작성된 PRTRTENO 프로그램이 있습니다. 이 프로그램은 귀하의 프로그램에 의해 호출됩니다. PRTRTENO는 직접 또는 다른 프로그램을 호출하여 다양한 유형의 "보고서"출력을 지원합니다.

보고서 작성 프로그램은 원본 크기를 통해 지나치게 복잡하고 미묘한 차이가있을 수있는 중복 된 코드 (제목, 새 페이지, 표준 목록 보고서, 레이블, 문자 등)를 처리하는 경향이 있습니다. 일반 유지 관리 등을 제공하기 위해 많은 프로그램을 변경해야합니다.

PRTRTENO와 같은 하위 프로그램을 사용하여 이러한 문제 중 일부를 해결할 수 있습니다. 표준 회사 전체 제목, 발자취 및 보고서 끝, 출력 라우팅 정보, 특수 편지지 (전자 메일과 같은 편지지가 아닌 편지지) 등을 하나의 프로그램으로 중앙 집중화하여 여러 가지 이점을 제공합니다.

하위 프로그램이 동시에 여러 출력을 처리 할 수있는 경우 매개 변수는 어떤 인쇄 줄이 어떤 논리 보고서에 속하는지 나타내는 데 필요합니다. 이것은 출력의 A, B, C 설정이며, 서브 프로그램 (또는이 서브 프로그램이 사용하는 것)은이를 사용하여 출력을 JCL의 DDNAME에 맵핑합니다.

동료에게 물어 보면 PRTRTENO의 출처를보고 무엇이 일어나는지, 그리고 그것이 어떻게 일어나는지 볼 수 있어야합니다. 그것 또는 그 구성 요소는 꽤 큰 프로그램이 될 것이고 그렇지 않으면 프로그램은 PRTRTENO와 비슷한 코드를 포함해야만 인쇄물을 출력 할 수 있습니다.

일부 사이트는 그렇게합니다. 일부는 그렇지 않습니다. 다른 사이트에서는 OPEN/WRITE/CLOSE, 라인 계산, 정확한 위치 표제 가져 오기 등 각 프로그램에 코딩 된 코드가 있습니다.