본문 바로가기

Ⅰ. ERP/1. ABAP

[SAP ABAP] Program에서 인쇄 매개변수 직접 생성하고 background 작업 예약 ( SUBMIT...SPOOL)

728x90

SUBMIT TO SAP-SPOOL 문은 인쇄 매개변수를 명시적으로 지정하지 않으면 기본 매개면수가 사용됨. 

* 어떤 BDC를 일정한 간격으로 돌린다. 

* 어떤 에러가 발생한 부분이 있으면 에러 난 것들은 계속 추후에 다시 진행해야할 때. 

 

단) 아래 프로세스 전에 아래의 조건문을 넣어야 무한 background 안생김

( 안넣으면 어떻게 되는지 맨 아래 첨부해 둠)

SELECT SINGLE * FROM TBTCO into TBTCO
           WHERE JOBNAME LIKE JOBNAME
             AND STATUS = 'R'.  "활성화"

  IF SY-SUBRC = 0.
    MESSAGE S001 WITH '이미 추출 실행 중입니다.' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

 

1. 필요한 매개변수 : 작업 ID / 작업 name / print parameters 

2. 원하는 name 지정


CONCATENATE 'T.SEARCH/' GV_EMPNO '/' SY-DATUM+2(6) '/' SY-UZEIT INTO LV_NAME.

3. Function ' JOB_OPEN' & SUBMIT 구문  또는 Function ' JOB_OPEN' & Function 'JOB SUBMIT' 구문

- JOB OPEN  : background에서 job 을 오픈함( lv_number 추출)

- JOB SUBMIT : job을 submit 함 ( 갖다줌 )

- JOB CLSOE : job close

 CALL FUNCTION 'JOB_OPEN'
          EXPORTING
            JOBNAME          = LV_NAME
          IMPORTING
            JOBCOUNT         = LV_NUMBER
          EXCEPTIONS
            CANT_CREATE_JOB  = 1
            INVALID_JOB_DATA = 2
            JOBNAME_MISSING  = 3
            OTHERS           = 4.
        IF SY-SUBRC = 0.
        
" AND RETURN : 수행 프로그램 수행 뒤 돌어와서 호출한 프로그램의 나머지 부분 processing 진행 ( 서브루틴처럼)
"               없으면 SUBMIT 수행 후 호출한 프로그램 종료 "
" USER user VIA JOIB job NUMBER n : 프로그램을 실행하되 variant 이용하여 수행"
" WITH par_name = passing_var : selection screen에 정의된 select-options/parameters로 선언된 변수들에게 값을 넘겨줄 경우 사용"
" TO SAP-SPOOL spool_options : 호출되는 프로그램에서 출력 list를 생성할 경우 새로운 출력 list 번호로 생성 "

SUBMIT 프로그램명 TO SAP-SPOOL
                          SPOOL PARAMETERS LV_PRINT_PARAMETERS
                          WITHOUT SPOOL DYNPRO
                          VIA JOB LV_NAME NUMBER LV_NUMBER
                          WITH P_BUKRS = P_BUKRS
                          ...
                          ANDRETURN .

4. Function JOB_CLOSE 실행

IF SY-SUBRC = 0.
            CALL FUNCTION 'JOB_CLOSE'
              EXPORTING
                JOBCOUNT             = LV_NUMBER
                JOBNAME              = LV_NAME
                STRTIMMED            = 'X'
              EXCEPTIONS
                CANT_START_IMMEDIATE = 1
                INVALID_STARTDATE    = 2
                JOBNAME_MISSING      = 3
                JOB_CLOSE_FAILED     = 4
                JOB_NOSTEPS          = 5
                JOB_NOTEX            = 6
                LOCK_FAILED          = 7
                OTHERS               = 8.
            IF SY-SUBRC <> 0.
              ROLLBACK WORK.
              MESSAGE E001 WITH '실패!'.
              EXIT.
            ENDIF.
          ENDIF.

T-CODE  : SM37 에서 생성된것을 확인할 수 있음. 

(가린건 ID임)

 

 

 

 

 

 

 

+) 맨위에 조건문 안넣어주면 일케 됨 ; 무한 background 작업............

- 해결하는 방법은 릴리즈된거 stop/삭제 해주고 해당 소스 주석처리.........

 

728x90