본문 바로가기
ERP-SAP/ABAP

<ABAP> 국세청 제공하는 SAP 전표 다운로드 소스 문제점을 같이 뜯어보고 고치기(파일서버로 파일전송, 파일일괄다운로드)

by 행복한워니의 기록 2024. 10. 22.
728x90
반응형

너무 여러가지 문제가 있는데
요약하면 sap와 abap을 하지 않는분이
개발하신듯 하여.....

그리하여 파생되는 문제점을 요약하면

1. 다운로드 파일마다의 엄청난 데이터 용량이 발생한다. 1개월치 110만건의 전표 아이템이라면
용량이 600메가다...
코딩만 잘하면 1개월치 100메가 이내로도 만들 수 있다.. 3년치면 무려 21기가를 4기가이내로  줄일 수 있어보인다.

2. 고로 용량으로 인해 사내 이메일 전송도 어렵다.
감사가 직접 다운로드 받아야 한다. 예비감사 회계업체가 다운받거나..

3. foreground 방식으로 내 피씨 드라이브 지정후 다운이라 1달치 돌리면 구형 SAP에서는 근 30분이상 돌게 둬야 한다.

4. 그렇게 느려지는 이유는 Loop 돌며 처리시
안에서 전부 select 를 건건히 탄다.....
전표가 월당 10만건이면 전표 텍스트와 코드텍스트들을 위해 DB 10개넘는 곳에서
건건히 SELECT SINGLE 해서 값을 가져온다.



감사용 프로그램이라 소스를 뜯어버리면 문제가 발생하기에 로직은 건드리지 말고 ....
유지보수라도 개발자는 이런 꼴을 보면 안되기에
내가 바꾼것은

1. background 가능하게 만들고

2. Sap 서버내 용량확보후 그 폴더로 파일다운로드를 걸고

3. 파일당 10만건이나 20만건씩 다운로드하면 5개~10개이상의 파일이 만들어지므로 이걸 하나하나 다운로드하면 힘들기에 일괄다운로드를 만들었다.

4. 용량줄이기는 선언부를 다 뜯어버리면 되는데
빨리달라고 성화라 가이드를 적어두겠다.


1번과 2번을 해결하려면

open dataset을 활용한다.

대신 파일명은 일관되게 만들어줘야한다.
가령 bkpf_20200101_20200131_file1
이런식으로 만들어주기로 한다.
file뒤에 붙은 1 2 3... 의 경우 이미 제공프로그램에서 건수별 분할코딩이 있기에
그 파일명 만드는 숫자를 활용한다.

기본화면에서 디렉토리 파일명을 숨겼다.
이제부터 background만 만들거다.

자 gui download는 다 블럭처리하고
파일서버로 넣자.

저 위에 블럭처리 한 부분은
각필드 선언된 length길이를 파악해서 파일생성시
length 지정을 해주려 한 것인데(용량줄이기)
우선 급하게 달래서  블럭처리....


p_path는 알다시피 al11파일서버디렉토리 + 파일명이다.
아래와같이 만들었는데 노란색 칠한부분은
내맘대로 정한 prefix부분으로 일괄다운로드시
앞에 prefix가 들어간건 다 다운로드 하려고
만든거다



이렇게 바꾸고 첫화면에서 background job으로 잡아라...
그럼 서버에 남을것이고 sm37에서 확인해봐라 ..


그럼 이제 잘 만들어졌으면 파일서버에서 일괄 다운로드 코딩을 해놔야겠지 .
임시 프로그램이니 그냥 막 짜서 넣었다.
그러나 이런걸 만들면 앞으로도 계속 prefix만 잘 주고 규칙대로만 짜면 이걸 활용해 일괄다운 가능하다.





1. 아래처럼 디렉토리 리스트를 다 가져오고


2. 내가 만든 prefix가 들어갔나 확인해서 그것만 다운로드 건다..


막짰기에 텍스트 심볼이나 선언들을 제대로 정리안했으니... 장기적으로 사용한다면 예쁘게 스크린부터 잘 나눠두길 바란다....



마지막으로 loop 안에 select 들은 전부 바깥으로 빼서
internal table에 담아 loop안에가서 read table binary search 로 바꾸고...(sap hana는 그럴필요 없을것....)

용량문제는...
이거 선언부도 잘못된게
1. 헤더 텍스트 선언 필드들을 그냥 막 30자리 50자리씩 그냥 다 줘버리고
2. 실 데이터 담는 부분을 헤더선언을 참조해서(like)로 만드니 30자리 50자리 막 들어가있고
3. 데이터를 담는 it base 선언은 또 다르게 선언해놨다.

2 3번이 같아야 하는데
1 2번선언을 같게 하고 자릿수를 그냥 막 30 50개씩 주니 용량이........

파일로 떨굴때도 각라인의 길이를 10000자리씩 박아넣었으니 용량이 줄지않는다...
개발자라면 아래 선언부만 보고도 바로 이해할 것이다.... ㅠㅜ





728x90
반응형