처음 목표와는 다르게 글 올라가는 간격이 벌어지네요ㅠㅠ
업무가 바쁘다는 핑계로 며칠만에 글을 올립니다.
매일 반복되는 구매 발주서 인쇄, 거래명세서 출력 등 이런 단순 반복 업무를 별도의 프로그램으로 만들어 제공 하고 있을 것입니다.이런것은 그냥 생성(또는 릴리즈) 되면 자동으로 됐으면 좋겠다. 라는 생각을 한번쯤 하셨을 것입니다.
그래서 오늘은 SAP 출력제어(Output Control)를 알아볼까 합니다.
제가 MM담당자 이므로 많은 출력제어 중 Inbound Delivery 및 Invoice를 자동으로 만드는 것을 해보겠습니다.
이런 기능은 SAP에서 제공하고 있습니다.
출력 제어는 조건 결정 기법(Condition Technique)이라는 똑똑한 로직을 사용합니다. 이름은 어렵지만 원리는 간단해요.
"만약 A라는 조건이면, B라는 행동을 해!"라고 시스템에 미리 알려주는 것과 같습니다.
"어.. 어디서 보던 IMG 설정인데?" 라는 생각이 드시죠~.. 대부분은 구매단가 결정조건에서 보셨을 것입니다. 유사합니다.
용어 | 별명 | 역할 |
출력 유형 (Output Type) | 무엇을? | '주문 확인서', '구매 발주서' 등 출력할 문서의 종류 |
액세스 순서 (Access Sequence) | 조건 찾는 순서 | 어떤 조건부터 확인할지 순서를 정해주는 네비게이션 |
조건 레코드 (Condition Record) | 상황별 행동 지침 | 'A고객사' + '구매오더' = '이메일 발송' 과 같은 실제 규칙 |
프로시저 (Procedure) | 규칙 꾸러미 | 특정 문서(예: 판매)에 적용할 출력 유형(규칙)들의 묶음 |
출력 채널 (Output Channel) | 어떻게? | 프린터, 이메일, EDI, 팩스 등 문서를 보낼 방법 |
그럼 이제부터 STO 아웃바운드 출고시 인바운드 납품서를 자동으로 만드는 방법을 하나씩 찾아가보겠습니다.
1. 출력 유형 (Output Type) 유지보수(V/34)
SAP 이미 잘 구현해 놓은 것이 있습니다.
/SPE/STO_ID_PROCESSING, 설정을 하고 필요한 부분은 코딩을 하면 됩니다.
2. 액세스 순서 (Access Sequence, SIMG)
3. 조건 레코드 (Condition Record)
4. 출력 결정 절차 지정
위와 같이 설정을 합니다.
5. 소스코딩
FORM sto_id_creation USING rc us_screen.
FIELD-SYMBOLS : <f_return> TYPE bapiret2.
CLEAR: gv_delivery,gt_return,gv_error. "v_n1149015
DATA: lf_leave TYPE xfeld.
* (0) Redirect this NAST processing to separate LUW - in case it is
* called with processing time 4 (Immediate) in the update task
CALL FUNCTION '/SPE/CALL_PROC_IN_NEW_LUW'
EXPORTING
is_nast = nast
IMPORTING
ef_leave = lf_leave.
IF NOT lf_leave IS INITIAL.
* Per default we set the status on error, so that it can be reprocessed
* in error processing (RSNAST0F) if there is any syntax error / update
* termination / ... in the decoupled NAST processing.
rc = 4.
EXIT.
ENDIF.
* get outbound delivery data from NAST record
gv_delivery = nast-objky(10).
IF nast-kschl = 'ZPR0'.
PERFORM update_po_price USING rc us_screen.
ENDIF.
IF nast-kschl = 'RD00'.
PERFORM bliing_invoice_control TABLES gt_return USING rc us_screen.
ELSE.
* Check existence of active inbound delivery "v_n_1312812
PERFORM check_subsequent_exist
USING gv_delivery space "n_1879850
CHANGING gt_return[]
lf_leave.
LOOP AT gt_return ASSIGNING <f_return>
WHERE type CA 'EAX'.
gv_error = 'X'.
EXIT.
ENDLOOP.
* If subsequent delivery is already there do not create another one
* but do not issue an error
IF gv_error EQ space AND lf_leave EQ space.
* create inbound delivery
PERFORM create_inbound_delivery
TABLES gt_return
USING gv_delivery.
* write NAST protocol in Case of error
LOOP AT gt_return ASSIGNING <f_return>
WHERE type CA 'EAX'.
gv_error = 'X'.
EXIT.
ENDLOOP.
ENDIF. "^_n_1312812
IF NOT gv_error IS INITIAL.
PERFORM write_nast_protocol
TABLES gt_return.
rc = 4.
ELSE.
CLEAR rc.
ENDIF.
ENDIF.
ENDFORM. " sto_id_creation
이렇게 마무리를 할 수 있습니다.
글로 보면 좀 헷갈리지만 하나씩 따라가다 보면 어렵지 않습니다. ^^
'ABAP' 카테고리의 다른 글
SAP S/4HANA 개발 필수! CDS View 개념부터 MM 모듈 예제 (0) | 2025.07.19 |
---|---|
[ABAP] 애플리케이션 로그 마스터하기: BAL과 CBO 테이블 로깅, 언제 무엇을 써야 할까? (0) | 2025.07.13 |
[ABAP] Part 2 - 시점별 재고 ( 전통적인ABAP + ALV 리포트) (0) | 2025.07.05 |
[ABAP] Part 1 - 시점별 재고 (CDS View + ALV 리포트) (0) | 2025.07.05 |
[ABAP] 표준 자재 검색(F4)에 나만의 탭 추가하기 (Append Search Help) (0) | 2025.07.02 |