2009년 8월 24일 월요일

오브젝트 Lock 거는 방법

 

CBO테이블의 경우에는 잠금오브젝트를 만들어 줘야되고

스탠다드 테이블의 경우에는 왠만한건 만들어져 있다..

 

여기에서는 오더(AUFNR)에 Lock을 거는 방법을 설명한다.

 

내가 했던 방법대로 설명하자면.

 

SE11에서 제일 밑에 잠금 오브젝트에서 AUFNR을 검색했다.

그러면 ESORDER 라는 오브젝트가 검색되어 나오는데.. 이 오브젝트를 잠궈 버리면 된다.

 

잠그는 방법은

ENQUEUE_’오브젝트명’ 이다.

즉, 여기에서 예를 들고 있는 ESORDER 오브젝트를 잠그기 위해서는

 

CALL FUNCTION  'ENQUEUE_ESORDER'
EXPORTING
        AUFNR          = 오더번호
EXCEPTIONS
        FOREIGN_LOCK   = 1
        SYSTEM_FAILURE = 2
OTHERS         = 3.

이렇게 하면 된다.

함수의 양식은 SE80에서는 패턴을 눌러서 ENQUEUE_ESORDER 을 검색하면 나오니 참고하면 된다.

 

Lock의 해제는 DEQUEUE_’오브젝트명’을 쓰면 된다.

프링글스 마크의 유래

동그란 얼굴에 인자한
콧수염 아저씨가 그려진 프링글스 마크.
이 마크엔 눈물 나는 사연이 있습니다.
2차 세계대전 당시 연합군과 독일군이
치열하게 싸우던 서부전선의 작은 마을.
프록터 앤드 갬블사의 창업자이자 초대회장인
루카시 도비슨(Lucacci Dawbison)은
독일군의 공습에 부모를 잃은 전쟁 고아였습니다.
어느 춥고 배고픈 날,
먹을 것을 며칠간이나 구하지 못했던
고아들은 제비뽑기를 하여 군부대 취사실에 가서
먹을 것을 훔쳐오기로 했는데 하필 루카시가 걸렸습니다.
군부대 취사실에 숨어들어 감자와 옥수수 같은
먹을 것들을 몇 개 집어서 취사실을 빠져나오던
루카시는 이내 어떤 투박한 손에 붙잡히고 말았습니다.
그것이 바로 벙어리 프링글스 씨와 루카시의 첫 만남입니다.
호되게 야단을 맞을 줄 알았던 루카시는 되려
프링글스 씨가 미소를 지으며 감자 몇 알과 고기 몇 점도
넣어주자 몇 번이고 감사하다고 인사 를 했습니다.
그렇게 둘의 인연이 계속 되던 어느 날,
루카시는 프링글스 씨의 손목과 팔, 얼굴 등에
상처가 난 것을 보게 되었습니다.
음식이 조금씩 없어진 것을 눈치 챈 상사가
말 못하는 벙어리인 프링글스 아저씨에게
거친 폭언을 쏟으며 채찍으로 모질게 때렸던 것을 알고
둘은 껴안은 채 뜨거운 눈물을 흘렸습니다.
그러던 중 프링글스 씨가 일하는 부대가
독일군에 의해 포위되어 병사들마저
굶는 사태가 일어났고 루카시는 프링글스 씨가
탈영을 했다는 소문을 들었습니다.
뒤이어 어떤 연합군의 벙어리 병사가
독일군의 밭에서 감자를 훔치다가 잡혀
곧 총살당할 것이라는 소식을 들은
루카시는 깜짝 놀라 형장으로 달려갔습니다.
그 때 마침 울리는 총성...
총에 맞은 프링글스 씨의 고개가 숙여지면서
그가 쓴 허름한 군모가 벗겨졌고,
그와 함께 굴러 떨어지는 조그만 감자 네 알...
루카시는 그 감자 네 알을 안고 언제까지고 울었습니다.
프링글스 씨는 탈영을 한 것이 아니라
배고픔에 떠는 루카시를 지켜볼 수 없어
자신의 목숨이 위험할 痼 알면서도
몇 안 되는 감자 몇 알이라도
더 가져가려고 했던 것입니다.
세월이 흘러도 루카시는 프링글스 씨를 잊지 못해
자신이 만든 과자에 그의 얼굴을 기억해 새겼고
그것이 이 마크의 유래가 되었습니다.

 

 

뭐.. 정말인지는 모르겠지만.. 프링글스 볼때마다 이 일화가 생각날거 같다..

 

하지만 조금 더 찾다 보면 이런 내용도 있다.


프링글스의 원료는 감자이다.

그래서 프링글스의 Brand Team에서는 감자 (POTATO) 와 두운을 맞춘 이름을 원했고, 그래서 제일 처음 P로 시작하는 도로의 이름을 찾기 시작했다.
마침 프링글스 직원 중 한 명이 Pringles Drive 근처에 살고 있었다.

. 매일 지나다니는 도로의 이름이 새로운 감자 칩의 이름에 딱 맞는다고 생각한 직원은 Brand Team 에게 아이디어를 냈고, 그렇게 찾아낸 이름이 프링글스이다.

 

 

어째 이게 더 신빙성 있어 보인다.

2009년 8월 21일 금요일

89회 정보관리 기술사 기출문제

이번 시험은 운영체제, B-tree, 유닉스 운영체제, 알고리즘 등 전산의 기초를 묻는 부분과,

사례를 주고 테스트 케이스를 작성하는 문제, 시나리오를 주고 동적 모델링을

구축하는 문제 등 실무적인 문제가 다수 출제된 것이 특징이라 할 수 있습니다.

 

------------------------ 1교시 --------------------------

1. 운영체제(OS)의 기능과 역할에 대해 설명하시오.

2. B-tree의 장점과 단점에 대해 설명하시오.

3. 공개키 기반 구조(PKI)에 대해 설명하시오.

4. 전자ID지갑 시스템에 대해 설명하시오.

5. Smart Dust를 이용한 홈네트워킹에 대해 설명하시오.

6. 데이터를 압축할 경우의 장점과 단점에 대해 설명하시오.

7. 인터넷 주소로 사용하는 ENUM(tElephone Number Mapping)에 대해 설명하시오.

8. CCL(Creative Commons License)을 설명하시오.

9. SaaS 에스크로우(Software as a service Escrow)에 대해 설명하시오.

10. Open ID를 설명하시오.

11. RIA(Rich Internet Applocation)와 X-Internet을 비교하여 설명하시오.

12. Hypervisor의 두가지 방식(Type1, Type2)과 두가지 구현 기술(Monolithic 방식,

     Microkernel 방식)에 대해 설명하시오.

13. 메타버스(Metaverse)의 4가지 범주인 증강현실(Augmented Reality), 가상 세계

     (Virtual Worlds), 라이프로깅(LifeLogging), 미러월드(Mirror Worlds)에 대해

     설명하시오.

------------------------ 2교시 --------------------------

1. 운영체제에서 프로세스 상태 다이어그램을 그리고, 각 상태와 상태간의
    변환과정에 대해 설명하시오.

2. OSS(Open Source Software)에 대해 설명하시오.

3. DBMS의 성능평가 방법에 대해 설명하시오.

4. 데이터 Read, Write시에 블록(Block) 단위로 입출력을 하게 된다. 이 블록의
   크기가 프로그램에 미치는 영향에 대해 설명하시오.

5. U-City 구축 및 안전한 운영을 보장하기 위한 보안 체계에 대해 설명하시오.

6. 전자여권의 보안 문제점과 적용되는 보안 기술인 PA(Passive Authentication),
   AA(Active Authentication), BAC(Basic Access Control), EAC(Extended Access
   Control)를 비교하여 설명하시오.

------------------------ 3교시 --------------------------

1. 프로젝트 경제성 분석에 대해 다음 항목을 설명하시오.

  가. 프로젝트 경제성 분석의 개념과 필요성
  나. 프로젝트 경제성 분석의 기법
  다. 일반적으로 적용되는 3단계 절차.

2. 가상화(Virtualization)를 통한 정보시스템의 효율화 방안에 대해 설명하시오.

3. 그린(Green) IT 2.0에 대해 설명하시오.

4. 유닉스 운영체제(Unix OS)의 시스템 호출(System Call)동작 구조에 대해 설명하시오.

5. 우리나라 소프트웨어 산업구조를 시장구조, 기업역량, 기업간 거래구조 측면에서
   현황 및 문제점을 분석하고, 소프트웨어 산업구조의 선진화 방향에 대해 설명하시오.

6. 다음 사례를 이용하여 블랙박스 테스트를 위한 테스트 케이스(Test Case)를
   작성하시오.

  <사례>

  식품점의 전산화를 위한 모듈이 식표품의 이름과 킬로그램(Kg)으로 표시된 무게를
  입력받는다. 품명은 영문자 2자리에서 15자리까지 구성되고, 무게는 1에서 48자리까지의
  정수로 구성된 값이다. 무게는 오름차순으로 입력된다. 품명이 먼저 입력되고 다음에
  쉼표가 따라오고, 마지막으로 무게 값의 리스트가 나온다. 쉼표는 각 무게를 구별하기
  위하여 쓰인다. 입력에 빈 칸이 나오면 무시된다.

------------------------ 4교시 --------------------------

1. 알고리즘의 평가 방법인 Time Complexity와 Space Complexity에 대해 설명하시오.

2. IFRS(International Financial Reporting Standards) 도입과 관련한 기업 업무
   시스템의 영향 및 연계 방향에 대해 설명하시오.

3. 크라우드 컴퓨팅(Cloud Computing)과 XaaS를 비교하여 설명하시오.

4. 최근 DDoS(Distributed Denial of Service) 공격으로 국가적인 혼란에 직면하였는데,
   이런 DDoS 공격에 대한 전용방어 장비의 종류(두가지 방식)와 중장기적인 대책에
   대해 설명하시오.

5. 유닉스 운영체제(Unix OS)의 inode 자료 구조에 대해 설명하시오.

6. 객체지향 모델링에서 클래스들의 상호작용이나 상태 변경을 다루는 동적모델링이라고
   하는데, 다음의 비디로를 대여하는 사례에 관한 시나리오를 읽고 동적 모델링 작업 중
   상호작용 다이어그램을 작성하시오.

   <사례 시나리오>

   ① 비디오 대여를 위하여 점원(Clerk)이 처음에 대여 처리를 위한 메뉴를 선택한다.
   ② UI를 관리하는 객체(RentUI)는 화면에 입력될 자료나 출력될 자료를 디스플레이
      하기 위한 창을 만든 후 우선 Rental 객체를 생성한다.
   ③ Rental 객체는 대여한 비디오가 무엇이며, 누가 빌려갔는지를 기록하기 위한
      엔티티 객체이다. 생성된 Rental 객체가 고객의 정보를 알아내기 위하여 Customer
      객체에게 고객 정보를 요청한다.
   ④ Rental 객체는 화면에서 등록된 고객으로 확인된 후에는 바코드를 스캔하여 해당되는
       비디오 테이프를 찾아내고 테이프에 대한 자세한 사항을 Title이라는 클래스에 의뢰한다.
   ⑤ 대여하려는 비디오 테이프가 더 없으면 Rental 클래스가 총액을 계산하여 저장한 후
       RentalUI에게 디스플레이 하도록 의뢰한다.
   ⑥ RentalUI가 정상적인 종료를 보고 받으면 이벤트가 끝난다.

알아두면 유용한 SAP TABLE

지난번엔 자주쓰이는(?) sap테이블에 대해 포스팅을 했었다.

이번에는 개발자를 위한 유용한 테이블 몇개를 소개 한다.

 

1. 먼저 소개될 DD02L, DD02T는
오라클의 TABLES와 비슷한 역할을 하는 테이블 들이다.
테이블의 Description을 담고 있다.


DD02T(R/3 DD: SAP table texts)
Table Short text 에 값 Accounting Document Header 를 넣고 조회 하면
Table Name 에 BKPF를 출력함을 알수 있다.


DD02L(SAP table)  
Sap Table을 저장하고 있다.


2. DD03L,DD03T

오라클의 Cols 와 비슷한 역할을 하는 테이블이다.
테이블의 필드목록을 가지고 있다.


DD03L(Table Fields) table은 table field 의 목록이 저장 되어 있는 table이다.
Table의 Field와 그에 대한 설명과 유사한 Field를 조회 할때 사용된다.

DD03L(Table Field)
Field name 를 BELNR 를 넣고 조회를 하면 BELNR를 사용하고 있는 Table의 전체 내역과
그에 대한 설정및 Data element 등 여러가지 정보를 얻을수 있다.

3. 그외

TADIR(Directory of Repository Objects)
SAP 에서 사용되고 있는 각종 Program ID 등 Repository Object 에 대한 정보를 알수 있다.

TBTCO(Job status overview table)
Background Job에 대한 정보 등을 알수 있는 Table 입니다.
E070(Change & Transport System: Header of Requests/Tasks)

CTS에 대한 Master Table 입니다.
보통 Release 된 CTS를 다시 되돌릴때 사용되기도 합니다.(비추)

TSTC(SAP Transaction Codes)
SE93에서 T-CODE를 대부분 조회 하시겠지만 Transaction Codes가 저장된 Table 입니다.

2009년 8월 19일 수요일

잘못된 영어표현(콩글리쉬)

실생활에 흔히 쓰이지만..
잘못된 영어 표현이다.. 
잘익혀두면 나중에 실수 할일이 없을거 같다.. 

 

아이쇼핑 eye shopping - window shopping
백넘버 back number - uniform number
미팅 meeting - blind date
스킨쉽 skinship - foreplay, physical contact. (참고로 kinship은 친족관계나 혈족관계를 말한답니다.) 컨디션 condition


샤프 sharp - mechanical pencil
화이트 white - correction fluid, correction pen, white-out(이 단어가 더 많이 쓰인다고 하네요. 실생활에서..)
싸인펜 sign pen - felt tip pen
노트북 notebook - laptop
모닝콜 morning call - wakeup call (automatic wakeup call)
코팅 coating - laminating
오토바이 - motorcycle, autocycle
핸들 handle - steering wheel
백미러 back mirror - outside mirror, rear mirror, rearview mirror
클락션 klaxon - horn
킥보드 kickboard
카센타 car center - auto repair center

 

diary(다이어리)-->schedule book/appointment book
sign pen(싸인펜)--->felt-tip pen magic
sharp(샤프)--->mechanical pencil
underline pen(형광펜)--->highlighter
cutline(커트라인)--->cut-off line
scotch tape(스카치테잎)--->sticky tape
cunning(컨닝)--->cheating

 

fighting(화이팅)--->way to go/go
pema(파마)--->permanent wave
castera(카스테라)--->sponge cake 
stand(스탠드)--->lamp
gas rainge(가스레인지)--->gas stove
eletronic rainge(전자레인지)--->microwave oven
mixer(믹서)--->blender

aircon(에어컨)--->airconditioner
remocon(리모콘)--->remote controller
shutter(셔터)--->release button,shutter button
hand phone(핸드폰)--->cellular phone/mobile phone 

 

근데 보니까.. 꼭 우리가 틀린게 아니라 미국과 다른 영어단어를 쓰는 경우도 꽤 보이는거 같다..

2009년 8월 14일 금요일

TCO Stream 삭제 프로그램

 

 

 

 

간혹 TCO Steam이란 프로그램 때문에 시스템에 문제가 발생하는 경우가 있다.

이놈을 지워야 되겠는데.. 당췌 지울수가 있어야지.. ㅡ-ㅡ;

 

다행히 삭제 프로그램을 구했다.. ㅎㅎ

생각보다 잘 되네.. ^^

 

 

 

2009년 8월 12일 수요일

업무별 사용 테이블 2

11. Purchase Requisition 관리 Table
      - EBAN       Purchase Requisition
      - EINA       Purchasing Info Record - General Data
      - EINE       Purchasing Info Record - Purchasing Organization Data
      - LFM1       Vendor master record purchasing organization data
      - T001K      Valuation area
      - T001W      Plants/Locations
      - T024E      Purchasing Organizations
      - T160       SAP Transaction Control, Purchasing
      - T161A      Linkage of Requisition Doc. Type to Purchasing Document Type
      - T161W      Order Types for Stock Transfer

  12. Purchase Document 관리 Table
      - EKKO       Purchasing Document(RFQ,CONTRACT,PO) Header
      - EKPO       Purchasing Document(RFQ,CONTRACT,PO) Item
      - EKET       Delivery Schedules
      - EKBE       History of Purchasing Document
      - EKKN       계정지정 구매문서 관련 테이블

  13. Sales Order 관리 Table
      - KNA1       General Data in Customer Master
      - VBAK       Sales Document: Header Data
      - VBAP       Sales Document: Item Data
      - VBEP       Sales Document: Schedule Line Data

  14. SOP (Sales & Operation Planning) 관리 Table
      - S076       Sales & Operations Planning
      - S076E      S076 - Structural Information
      - SAUF       SOP Orders
      - P445G      Parameters for PLOB Version_Key Figure
      - P445X      LIS Planning Versions Table
      - P44V       Planning Versions

  15. Demand Management 관리 Table
      - PBIM       Independent requirements for material
      - PBED       Independent requirements data
      - PBHI       Independent requirements history

  16. Work Center 관리 Table
      - CRHD       Work Center Header
      - CRCO       Assignment of Work Center to Cost Center
      - KAKO       Capacity Header Segment
      - TC31A      Key for performance efficiency rate

  17. Cost Center 관리 Table
      - CSKS       Cost center master
      - CRCO       Assignment of Work Center to Cost Center   

  18. Routings 관리 Table
      - MAPL       Allocation of task lists to materials
      - PLAS       Task list - selection of operations/activities
      - PLKO       Task list - header
      - PLPO       Task list - operation/activity

  19. Complete Confirmation 관리 Table
      - AFRU       Order completion confirmations

  20. Planned Order 관리 Table
      - PLAF       Planned order
      - MKAL       Production Versions of Material

  21. Production Order 관리 Table
      - AFKO       Order header data PP orders
      - AUFK       Order master data
      - AFPO       Order item
      - AFVV       DB structure of the quantities/dates/values in the operation
      - AFVC       Operation within an order
      - AFRU       확정번호를 키로 해서 액티비티 값을 가지고 있는 테이블

  22. CRP (Capacity Requirement Planning) 관리 Table
      - KAKO       Capacity Header Segment
      - KBKO       Header record for capacity requirements
      - KBED       Capacity requirements records

  23. Reservation 관리 Table
      - RKPF       예약문서:헤더
      - RESB       Reservation/dependent requirements
      - JEST       Object status

  24. 구매조직 관리 Table
      - T024       Purchasing Groups
      - T024D      MRP

  25. Storage Loc. 관리 Table
      - T001L      Storage Locations

  26. 화폐단위 관리 Table
      - TCURX      Decimal places in currencies
      - TCURR      Currency exchange rates

  27. Goods Receipt/Issue 관리 Table
      - MKPF       Header: Material Document
      - MSEG       Document Segment: Material
      - MSLB       Special Stocks with Vendor
      - S031       기간(월..)별 입출고 합계수량/금액
      - S032       재고이동이나 송장검증 또는 자재금액변경 등의 transaction이 발생할 때 이 정보구조에 반영.기간이 없다.
      - S033       일 기준으로 재고이동이나 송장검증 또는 자재금액변경 등의 transaction이 발생할 때 이 정보구조에 반영.
                   transaction개개별로 update가 된다.

  28. Message관리 Table
      - T100       Messages

  29. Plant 관리 Table
      - T001       Company Codes
      - T001W      Plants/Locations
      - T001L      Locations정보

  30. User 관리 Table
      - USR01      User master record (run-time data)
      - USR02      Logon data
      - USR03      User address data
      - USR04      User master authorizations
      - USR05      User Master Parameter ID

  31. SAP R/3 프로그램 관리 Table (SAP & CBO)
      - DD02V      Generated table for view DD02V
      - TRDIR      System table TRDIR

  32. SAP R/3 테이블 관리 Table (SAP & CBO)
      - DD02L      SAP tables
      - DD02T      R/3-DD: SAP Table Texts
      - DD02V      Generated table for view DD02V
      - TADIR      Catalog of R/3 Repository objects

  33. MRP 관련 Table
      - MKPF       Header: Material Document
      - MDSM       Simulative dependent requirements
      - MDTB       MRP table
      - MDVM       Entry in MRP File
      - MDKP       Header data for MRP document
  34. Vendor Evaluation관련 Table
      - ELBK       가중키,Overall score(업체별)
      - ELBP       scores for main/subcriteria(업체별)
      - S013       업체평가관련 통계테이블(업체-자재별)
      - T147K      customizing의 채점방법관련 테이블

  35. Invoice Verification관련 Table
      - RBKP       Header 관련
      - RSEG       Item 관련
      - BKPF       회계전표:Header 관련
      - BSEG       회계전표:Item 관련

  36. Batch관련 테이블
      - MCHA       Batch
      - MCH1       Batch (플랜트간 Batch 관리일 경우)
      - MCHB       Batch재고
      - MCHBH      Batch 재고: 이력

  36. Archive관련 테이블
      - ADMI_RUN      Object name : MM-EBAN(for Purchase Requisitions)
                                    MM-EKKO(for Purchasing Documents)

  37. Classification관련 테이블
      - ZSD001V    object별 특성값

  38. AUTOPOSTING관련 테이블
      - T030    

  39. 세금관련 테이블
      - BSET 
      - T007S      코드와 내역

  40. 이동유형(Customizing) 관련 테이블
      - t156       이동유형관련 Customizing 테이블

  41. 업체주소관리 테이블
      - ADRC       업체명,주소,전화번호 관리 테이블
                   벤더마스타와 구매문서의 ADRNR필드와 ADRC-ADDRNUMBER가 키로 되어 있음.

효과적인 코딩기법

1 SELECT 구문 최적화

1.1 SAP R/3 구조 이해하기

- R/3 구조를 이해하기 위해 아래와 같이 VBAK 테이블에서 데이터를 1000건 SELECT 하는 프로그램을 작성해 보자.

- 읽어올 정보는 다음과 같다.

- VBAK-VBELN: 오더 번호

- VBAK-AUART: 오더 종류

- VBAK-BNAME: 오더 이름

- VBAK-KUNNR: Sold to party

- 일반적으로 아래와 같은 방식으로 SELECT 문장을 작성할 것이다.

REPORT ZSAMPLE1.

TABLES : vbak.

SELECT * FROM vbak.

IF sy-dbcnt > 1000. EXIT. ENDIF.

WRITE: / vbak-vbeln, …

ENDSELECT.

- 위 구문은 VBAK 테이블의 모든 칼럼을 한 건씩 읽어 가면서, WRITE 하는 구조로 되어 있으며, SY-DBCNT를 확인하여 1000건이 넘으면 EXIT하도록 되어 있다.

- 그럼 다음 단계에서 왜 위 문장이 비효율적인지 알아보자.

1.2 SAP R/3 구조와 실행시간

- R/3 는 아래 그림과 같은 구조로 이루어져 있다.

- R/3 는 위의 그림과 같이 3 계층 구조로 되어 있다.
즉, 사용자가 시스템에 특정 데이터에 대한 요청을 하면, Application Server가 중간에서 사용자의 요청을 가공한 후, DB Server에 데이터에 대한 요청을 보내고, DB Server로부터 데이터를 받아, 다시 가공하여 사용자에게 보내는 방식으로 처리한다.

- 따라서, 앞과 같이 SELECT * 하게 되면, 문제에서 제시한 네 개 필드 외에 해당 레코드의 모든 필드를 가져오게 된다. 즉, VBAK 테이블의 한 레코드 크기가 대략 575바이트인데, 1000건을 가져와야 하므로 총 575,000 바이트를 DB Server에서 Application Server로 전송해야 하며, 한번 전송할 때의 패킷 크기가 32,000 바이트인 경우(시스템에 따라 다를 수 있음), 총 20여 회의 네트워크 트래픽이 발생하게 된다. (575,000 / 32,000)

- 다음 단계에서 앞 문제의 해답과 이유를 알아보자.

1.3 SELECT * 개선

- SELECT * 형태의 문장을 COLUMN Selection 이용하여 아래와 같이 개선할 수 있다.

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr) FROM vbak

WRITE : / vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr.

ENDSELECT.

- 위와 같이 사용하려는 네 개의 Column만을 가져오도록 할 경우 네트워크 트래픽은 다음과 같다.

- 즉, 네 개 Column 크기의 합이 59 바이트이므로 1000건을 읽는다 해도 59,000 바이트의 데이터만 DB Server에서 Application Server로 전송되면 된다. 패킷의 크기가 역시 32,000 이라면, 이 경우에는 두 번의 트래픽만 필요하게 된다.

- BSEG, VBFA 같은 SAP Cluster Table에 대해서는 Column Selection 을 할 수 없다(Column Selection을 하도록 작성해도 내부적으로는 전체 Column을 읽는다.). 이러한 테이블을 Column Selection으로 읽고 싶은 경우에는, 시스템을 내리고, 테이블 형태를 Cluster Table에서 Transparent Table로 바꾼다.

1.4 데이터 건수 확인 요령

- 아래 방법은 SY-DBCNT를 이용한 데이터 건수 확인 문장을 UP TO n ROWS 구문을 이용하여 개선하는 예를 보여준다.

*-- 개 선 전

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr) FROM vbak.

IF SY-DBCNT > 1000. EXIT. ENDIF.

WRITE : / vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개 선 후

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr)

FROM vbak UP TO 1000 ROWS.

WRITE : / vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr.

ENDSELECT.

- 위의 예에서 첫 번째 문장은 데이터 1000건을 건건이 DB Server에서 Application Server로 전송하는 반면, 두 번째 문장은 DB Server에서 1000건을 읽은 후 일괄적으로 Application Server로 전송하는 방식으로 동작한다. 따라서 두번째 문장이 훨씬 좋은 성능을 나타낸다.

- WHERE 조건 없이 데이터 한 건만을 가져오는 경우라면, 차이가 더욱 두드러진다. 한 건을 가져올 경우 전자의 경우 150,000ms, 후자의 경우 1,500ms 시간이 걸린다.

1.5 CHECK 구문 개선

- 아래 예는 CHECK 문장에 들어가는 조건을 SELECT 문장에 포함하여 개선하는 방법이다.

PARAMETERS : param1.

DATA : BEGIN OF search_string,

FIRST(9) VALUE ‘_________’,

PARAM,

END OF search_string.

*-- 개 선 전

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr) FROM vbak.

CHECK vbak-vbeln+9(1) = param1.

WRITE : / vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개 선 후
search_string-param = param1.

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr) FROM vbak

WHERE vbeln LIKE search_string.

WRITE : / vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr.

ENDSELECT.

- Vbak 테이블에서 57,000건을 가져오는 것을 비교한 경우

SELECT & CHECK à 27,958,000ms

SELECT WITH WHERE condition à 3,065,000ms

- 가능하다면 어떠한 경우라도, CHECK 조건은 WHERE 절 안에 들어와야 하며 이것은 SELECT SINGLE에도 적용된다.

SELECT SINGLE vbeln auart … INTO (vbak-vbeln, …) FROM vbak

WHERE vbeln = ‘0090000090’ AND bname = ‘smith’.

- 위 구문에서 vbak 테이블의 키 필드는 vbeln이지만, bname을 CHECK로 빼지 않고, WHERE 절에 포함시킴으로써, DB Server와 Application Server 간에 쓸데없는 네트워크 트래픽을 줄일 수 있다.

- 그러나, CHECK 절이 매우 까다롭고 복잡한 경우에는 오히려 DB Server에서 일단 데이터를 받아오는 것이 빠를 수도 있다. 이것은 SQL Trace를 이용하여 실제로 어떤 것이 빠른지 조사해보고 결정하여야 한다.

1.6 ORDER BY 구문 개선

- 아래 예는 SELECT 구문에서 사용되는 ORDER BY를 Internal Sort를 이용하여 개선하는 방법을 보여준다.

*-- 개 선 전

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr) FROM vbak

WHERE bname IN so_bname

ORDER BY bname DESCENDING.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개 선 후
SELECT vbeln auart bname kunnr INTO TABLE it_vbak FROM vbak

WHERE bname IN so_bname.

SORT it_vbak BY bname DESCENDING.

- 많은 양의 DB를 DB Server에서 정렬하는 것은 그 시스템을 사용중인 모든 사용자에게 영향을 미친다. 하지만 ABAP/4 프로그램 내에서 처리하게 되면 해당 Application Server에만 영향을 미친다.

- 하지만 SELECT 구문 내에서 ORDER BY를 이용하여 정렬하고자 하는 필드에 INDEX가 적절하게 구성되어 있다면, DB Server에 해롭지 않다.

1.7 APPEND 구문 개선

- 아래 예는 APPEND 구문을 이용하여 내부 테이블에 건건이 데이터를 추가하는 것을 INTO TABLE을 사용하여 개선하는 방법을 보여준다.

*-- 개 선 전

SELECT vbeln auart bname kunnr

INTO (it_vbak-vbeln, it_vbak-auart, it_vbak-bname, it_vbak-kunnr) FROM vbak

WHERE bname IN so_bname.

APPEND it_vbak.

추가 작업.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개 선 후
SELECT vbeln auart bname kunnr INTO TABLE it_vbak FROM vbak

WHERE bname IN so_bname.

LOOP AT it_vbak.

“ 추가 작업.

ENDLOOP.

- 내부 테이블의 내용을 한 번에 전송하는 것이 더 효과적이다.

- 데이터를 내부 테이블로 한 번에 읽어 들이는 방법의 또 다른 효과는 처리시간이 매우 짧다는 것이다.

- SELECT .. ENDSELECT. 내에서 많은 처리를 할수록 ORAO155 Snapshot too old(rollback segment too small) 오류를 만날 확률이 높다.

- 수행시간이 긴 SELECT 문장은 동일한 작업 대상 테이블에 대한 INSERT/UPDATE 문장과 I/O Contention을 일으킬 확률이 높으며, 이럴 경우, DB Server가 반드시 read consistency를 보장한다고 단언하기 어렵다.

1.8 VIEW를 이용한 Nested SELECT 개선

- 아래 예는 여러 개의 테이블에서 데이터를 가져올 때, view를 이용하여 NESTED SELECT를 개선하는 방법을 보여준다.

*-- 개 선 전

SELECT vbeln auart bname kunnr

INTO (vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr) FROM vbak

WHERE vbeln IN so_vbeln.

SELECT posnr matnr kwmeng meins INTO … FROM vbap

WHERE vbeln = vbak-vbeln.

WRITE : / vbak-vbeln, vbak-auart, vbak-bname, vbak-kunnr.

ENDSELECT.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개 선 후

SELECT * FROM zv_vbak “ VIEW

WHERE vbeln IN so_vbeln.

WRITE : / …

ENDSELECT.

- VBAK : 716건, VBAP 2779건의 데이터를 대상으로 테스트 한 결과는 아래와 같다.

n 개선 전: 3,892,184 microseconds(약 4초)

n 개선 후: 981,385 microseconds(약 1초)

- Nested SELECT 대신에 VIEW를 이용하여 두 개의 테이블을 JOIN한 다음, VIEW에서 데이터를 읽어오는 것이 훨씬 수행 속도가 빠르다.

- 그러나, DB VIEW는 버퍼를 경유하지 않고 바로 DB에서 데이터를 읽어 오기 때문에 두 개의 테이블 중 하나가 버퍼링이 되고 있는 경우, 버퍼링의 장점을 살리지 못하여, 늦어지는 경우가 아주 가끔 발생할 수도 있다. 이런 경우는 SQL Trace를 이용하여 실제로 수행시간을 측정하고 결과가 좋은 것을 사용하도록 한다.

- DB Dictionary 의 DB VIEW는 항상 INNER JOIN이다.

- VIEW생성시 MANDT열을 가져오도록 정의한 테이블을 가장 먼저 읽는다.

1.9 SELECT FOR ALL ENTRIES를 이용한 OUTER JOIN

- 아래는 SELECT FOR ALL ENTRIES를 이용하여 ABAP에서 OUTER JOIN을 구현한 예이다.

*-- 개선 전.

SELECT vbeln auart … INTO … FROM vbak WHERE ….

SELECT posnr matnr … INTO … FROM vbap

WHERE vbeln = vbak-vbeln.

ENDSELECT.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개선 후.

SELECT vbeln auart… INTO TABLE it_vbak FROM vbak

WHERE vbeln IN so_vbeln.

SELECT vbeln posnr matnr … INTO TABLE it_vbap FROM vbap

FOR ALL ENTRIES IN it_vbak

WHERE vbeln = it_vbak-vbeln. “ vbeln과 it_vbak-vbeln은 같은 형과 길이여야 한다.

LOOP AT it_vbak.

READ TABEL it_vbap WITH KEY vbeln = it_vbak-vbeln

BINARY SEARCH TRANSPORTING NO FIELDS.

LOOP AT it_vbap FROM sy-tabix.

ENDLOOP.

ENDLOOP.

- OUTER JOIN을 할 경우 위처럼 FOR ALL ENTRIES IN 구문을 이용하여 SELECT한 후, 내부 테이블에서 처리하도록 한다.

1.10 SQL 함수 사용하기

- SELECT구문에서 LOOP를 돌면서 처리하는 형태의 합, 평균을 구하는 방법을 SQL 함수를 이용하여 개선하는 예이다.

DATA : BEGIN OF vbqty OCCURS 0.

matnr LIKE vbap-matnr,

kwmeng LIKE vbap-kwment,

meins LIKE vbap-meins.

*-- 개선 전.

SELECT matnr kwmeng meins INTO vbqty FROM vbap WHERE … .

COLLECT vbqty.

ENDSELECT.

*----------------------------------------------------------------------*

*-- 개선 후.

SELECT matnr SUM( kwmeng ) meins INTO TABLE vbqty

FROM vbap WHERE …

GROUP BY matnr meins.

- 10,000건의 데이터를 처리하였을 경우, 아래와 같은 성능 차이가 나왔다.

n 개선 전: 2,370,000 microseconds

n 개선 후: 1,574,000 microseconds

- GROUP BY 절은 Pool Table이나 Cluster Table에는 사용될 수 없다(BSEG, VBFA).

에러 팝업으로 보이기(HELP_START 이용)

DATA: LS_HELP_INFO LIKE HELP_INFO,
      LT_DSELC     LIKE DSELC OCCURS 0,
      LT_DVAL      LIKE DVAL OCCURS 0.

 

LS_HELP_INFO-CALL   = 'D'.
LS_HELP_INFO-OBJECT = 'N'.
LS_HELP_INFO-SPRAS  = SY-LANGU.
LS_HELP_INFO-DOCUID = 'RE'.
LS_HELP_INFO-REPORT = TEXT-001.

 

 

CALL FUNCTION 'HELP_START'
  EXPORTING
    HELP_INFOS   = LS_HELP_INFO
  TABLES
    DYNPSELECT   = LT_DSELC
    DYNPVALUETAB = LT_DVAL
  EXCEPTIONS
    OTHERS       = 1.

 

 

이외에도 HELP_INFO 까보면 넣을 수 있는 필드들이 많다.

Technorati 태그: ,

2009년 8월 11일 화요일

생산오더 생성시 USER_EXIT적용

1. 생산 오더 생성시 User_Exit. 적용

(PP) 생산 오더 생성시 특정 오더(‘PP01’)인 경우 생산 오더의 저장 전에 CO의 원가취합처 정보를 확인하여, 원가취합처가 없으면 생산 오더의 저장을 못하게 한다.

1) 생산 오더를 생성하는 화면(CO01)과, 관련된 SAP 커스터마이징(IMG)을 참고하여 해당 기능의 확장모듈을 찾는다.

2) 이를 기능 확장에 지정하고, 해당하는 User_Exit 모듈 내에 적절한 로직을 구현한다.

 

(기능 확장) 모듈을 찾는다.

1) 관련 T-CODE : (SPRO)

2) 메뉴 PATH : SAP 커스터마이징 구현 안내서 -> 생산 -> 작업 현장관리 -> 시스템 수정 -> 오더유지보수에 대한 기능확장 -> 오더저장시 기능확장(헤드필드)

clip_image002

 

(기능 확장) 에서 기능을 추가한다.

1) 관련 T-CODE : (CMOD)

2) 메뉴 PATH : SAP메뉴 -> 툴 -> ABAP 워크벤치 -> 유틸리티 -> 기능 확장 -> 프로젝트관리

(CMOD)화면을 실행하고,

clip_image004

프로젝트를 생성 또는 이미 생성된 프로젝트에 포함 하도록 한다,

clip_image006

위에서 찾은 (기능확장)의 코드를 생성 또는 추가 한다.

clip_image008

(구성요소)를 확인하여 해당하는 Enhancement의 해당 Exit 모듈에 **(추가)**할 기능의 ABAP 구문을 추가 하고,

해당 구성요소를 **(활성화)** 하면 된다. => 완료된 결과가 다음과 같이 된다

clip_image010

clip_image012

clip_image014

clip_image016

Technorati 태그: ,,

수정이 완료되면 **(전송)**요청을 하여, 테스트를 실시하여 문제가 없으면 적용한다.

ABAP 효과적인 코딩 기법2

1.11 WHERE 없는 SELECT 구문은 피하라.

- 아래와 같이 WHERE 조건 없이 SELECT 구문을 사용하는 것은 매우 위험하다.

SELECT col1 col2 … INTO … FROM vbak.

PERFORM cal_rtn.

ENDSELECT.

- 특히 다음과 같이 빠른 속도로 크기가 증가하는 테이블에는 절대로 사용하지 말 것

- BKPF, BSEG, COBK, COEP, LIPK, LIPS, MKPF, MSEG, VBAK, VBAP, VBPA, VBFA

- 테이블의 모든 데이터를 읽어 작업을 수행하려 한다면 다음과 같이 EXEC SQL 구문을 이용한 native sql을 구사하여 Application Server를 Bypass 하도록 한다. 그렇지 않으면 Application Server가 Where 절에 MANDT 조건을 붙여, Full Table Scan이 되지 않고 인덱스를 이용하게 되어 최악의 결과를 초래하게 된다.

EXEC SQL.

SELECT /* rule */

Vbeln INTO : ivbak-vbeln

FROM vbak

WHERE mandt || ‘’ =: sy-mandt

ENDEXEC.

2 DML 구문 최적화
2.1 효과적인 UPDATE 기법

- SELECT 와 ENDSELECT 사이에서 순환을 하면서 UPDATE 하는 형태는 아래와 같이 WHERE 절을 이용하여 개선할 수 있다.

*-- 개선 전.

PARAMETES : pa_vkbur LIKE zvbak-vkbur.

SELECT-OPTIONS : so_vbeln FOR zvbak-vbeln.

SELECT * FROM zvbak WHERE vbeln IN so_vbeln.

zvbak-vkbur = pa_vkbur.

UPDATE zvbak.

EDNSELECT.

*----------------------------------------------------------------------*

*-- 개선 후.

UPDATE zvbak SET vkbur = pa_vkbur

WHERE vbeln IN so_vbeln.

IF sy-subrc = 0.

COMMIT WORK.

ELSE.

ROLLBACK WORK.

ENDIF.

- zvbak 1000건을 대상으로 한 결과는 다음과 같다.

SELECT .. UPDATE .. ENDSELECT. à 1.8초

UPDATE .. SET à 0.3초

- 위의 예제에서 COMMIT WORK 또는 ROLLBACK WORK 구문은 논리적인 작업 단위가 끝나면 반드시 기술해 주는 것을 잊지 말자. COMMIT WORK나 ROLLBACK WORK를 빠뜨리면 DB Server가 수정 정보를 계속 rollback segment에 가지고 있어야 하기 때문에 System에 overload로 계속 남아있게 된다.

2.2 효과적인 INSERT 기법

- 데이터를 테이블에 INSERT 하고자 할 경우, LOOP를 돌면서 처리하는 것보다 아래의 예처럼 한꺼번에 INSERT 하면 효과적이다.

*-- 개선 전.

LOOP at it.

MOVE it TO z100.

INSERT z100.

ENDLOOP.

*----------------------------------------------------------------------*

*-- 개선 후.

INSERT z100 FROM TABLE it.

- 아래 결과는 건수 당 테스트 결과이다.

- 1,000건 입력 시.

한 건씩 : 2.58초

한꺼번에 : 0.72초

- 5,000건 입력 시.

한 건씩 : 9.66초

한꺼번에 : 1.59초

- 10,000건 입력 시.

한 건씩 : 20.00초

한꺼번에 : 2.47초

2.3 효과적인 DELETE 기법

- SELECT 와 ENDSELECT 사이에서 순환을 하면서 DELETE 하는 형태는 아래와 같이 WHERE 절을 이용하여 개선할 수 있다.

*-- 개선 전.

SELECT-OPTIONS : so_vbeln FOR zvbak-vbeln.

SELECT * FROM zvbak WHERE vbeln IN so_vbeln.

DELETE zvbak.

EDNSELECT.

*----------------------------------------------------------------------*

*-- 개선 후.

DELETE FROM zvbak WHERE vbeln IN so_vbeln.

IF sy-subrc = 0.

COMMIT WORK.

ELSE.

ROLLBACK WORK.

ENDIF.

- zvbak 1000건을 대상으로 한 결과는 다음과 같다.

SELECT .. DELETE .. ENDSELECT. à 3.0초

DELETE FROM à 1.2초

- 개선 전 코딩은 거의 최악의 코딩이다. 개선 전 경우 DB Server는 대상 데이터를 찾아서 모두 Application Server로 보낸다. 데이터를 받은 Application Server는 아무 일도 하지 않고, 받은 데이터를 다시 DB Server로 보내고, DB Server에서는 이 데이터를 삭제한다.

- 그러나 개선 후의 경우는 데이터의 발췌 및 삭제 작업이 DB Server에서만 발생하게 되므로, Application Server와 DB Server사이에 데이터 전송 작업이 전혀 일어나지 않는다.

3 효과적인 Internal Table 작업
3.1 Nested LOOP 처리

- Nested LOOP는 BINARY SEARCH를 이용하여 아래와 같이 개선할 수 있다.

DATA : ivbak LIKE VBAK OCCURS 0,

Ivbap LIKE VBAP OCCURS 0.

SORT : ivbaK BY vebln, ivbap BY vbeln.

*-- 개선 전.

LOOP AT ivbak.

LOOP AT ivbap WHERE vbeln = ivbak-vbeln.

WRITE : / …

ENDLOOP.

ENDLOOP.

*-- 개선 후.

LOOP AT ivbak.

“ Work Area에 아무 값도 넘기지 않음. Sy-subrc, sy-tabix를 설정하기 위함.

READ TABLE ivbap WITH KEY vbeln = ivbak-vbeln

BINARY SEARCH TRASPORTING NO FIELDS.

LOOP AT ivbap FROM sy-tabix.

IF ivbap-vbeln <> ivbak-vbeln. EXIT. ENDIF.

WRITE : /…

ENDLOOP.

ENDLOOP.

- Ivbak : 5,000 ivbap : 20,000 일 때.

Nested LOOP with WHERE : 5분.

LOOP/READ BINARY SEARCH/LOOP : 15초.

3.2 효과적인 LOOP 처리

- 특정 조건을 만족하는 데이터가 몇 건인지를 알고 싶은 경우에는 다음과 같이 한다.

LOOP AT it1 TRANSPORTING NO FIELDS

WHERE bname = ‘smith’.

ADD 1 TO counter.

ENDLOOP.

- 특정 조건을 만족시키는 데이터가 있는지 알고 싶다면 아래와 같이 하라.

LOOP AT it1 TRANSPORTING NO FIELDS

WHERE vbeln > ‘003000000100’.

EXIT.

ENDLOOP.

-

3.3 내부 테이블 간 데이터 복사

- 동일한 구조를 가지는 두 개의 내부 테이블 간에 서로 데이터를 복사하고자 할 경우 아래와 같이 한다.

DATA : it1 LIKE eban OCCURS 100 WITH HEADER LINE,

It2 LIKE eban OCCURS 100 WITH HEADER LINE.

*-- 개선 전.

REFRESH it2.

LOOP AT it1.

MOVE it1 TO it2.

APPEND it2.

ENDLOOP.

*-- 개선 후.

It2[] = it1[].

3.4 내부 테이블의 데이터 APPEND

- 동일한 구조를 가지는 두 개의 내부 테이블간에 서로 데이터를 APPEND 하고자 할 경우에는 아래와 같이 개선한다.

DATA : it1 LIKE eban OCCURS 100 WITH HEADER LINE,

It2 LIKE eban OCCURS 100 WITH HEADER LINE.

*-- 개선 전.

LOOP AT it1.

MOVE it1 TO it2.

APPEND it2.

ENDLOOP.

*-- 개선 후.

APPEND LINES OF it1 TO it2.

3.5 내부 테이블의 데이터 삭제

- 여러 건의 데이터를 내부 테이블에서 삭제하고자 할 경우 LOOP를 돌지 말고 아래와 같이 한다.

*-- 개선 전.

LOOP AT ivbak WHERE bname = ‘smith’.

DELETE ivbak.

ENDLOOP.

*-- 개선 후.

DELETE ivbak WHERE bname = ‘smith’.

3.6 내부 테이블의 중복 데이터 삭제

DELETE ADJACENT DUPLICATES FROM itab [COMPARING field1 field2…].

- 위 방법을 사용하기 위해서는 비교조건 필드를 기준으로 정렬되어 있어야 한다. 비교조건이 없다면, 모든 필드로 정렬되어 있어야 한다.

Technorati 태그:

업무별 사용 테이블

   1. 자재마스타 관리 Table
      - MARA       Material Master: General Data
      - MARC       Material Master: 자재에 대한 플랜트데이타
      - MARD       Material Master: Storage Location/Batch Segment
      - MAKT       Material Descriptions
      - MBEW       Material Valuation
      - MVKE       Material Master: Sales Data
      - MARC_WERK 
      - T132       Status definition
      - MBEWH      기초재고관리 TABLE
      - MARM       자재별 단위 conversion rule

   2. BOM 관리 Table
      - MAST : Material to BOM Link
      - STKO : BOM Header
      - STPO : BOM Item
      - STPU : BOM Sub-Item
      - STAS : BOMs - Item Selection

   3. INFO Record 관리 Table
      - A018       Material Info Record
      - EINA       Purchasing Info Record - General Data
      - EINE       Purchasing Info Record - Purchasing Organization Data
      - KONH       Conditions (Header)
      - KONP       Conditions (Item)

   4. Quota Arrangement 관리 Table
      - EQUK       Quota File - Header
      - EQUP       Quota File - Item

   5. Source List 관리 Table
      - EORD       Purchasing Source List

   6. Vendor Master 관리 Table
      - LFA1       Vendor master (general section)
      - LFB1       Vendor master (company code)
      - LFBK       Vendor master (bank details)
      - LFM1       Vendor master record purchasing organization data

   7. Inspection Plan 관리 Table
      - MAPL       Allocation of task lists to materials
      - PLKO       Task list - header
      - PLMK       Inspection characteristic
      - PLMW       MAPL-dependent characteristic values (inspection plan)
      - PLPO       Task list - operation/activity

   8. Customer Master 관리 Table
      - KNA1       General Data in Customer Master

   9. Quality Management 관리 Table
      - MAPL       Allocation of task lists to materials
      - QDQL       Quality level
      - QALS       Inspection lot record
      - QAMR       Characteristic results during inspection processing
      - QAMV       Characteristic specifications for inspection processing
      - QAVE       Inspection processing: Usage decision
      - QMAT       Inspection type - material parameters

  10. Kanban Master 관리 Table
      - PKHD       Control cycle header

ABAP 시스템 필드





SY-INDEX Loop Index - 루프문(do, while, ...등의 현재 인덱스)
SY-PAGNO Current List Page - 리스트의 현재 페이지 번호
SY-TABIX Index of Internal Tables - 내부테이블의 현재 인덱스
SY-TFILL Row Number of Internal Tables - 내부 테이블의 총 레코드 수 ( DESCRIBE TABLE itab LINES l_lines 의 l_lines 와 동일한 결과임 )
SY-TLOPC Internal ABAP System Field - 내부 사용
SY-TMAXL Obsolete ABAP System Field - 폐기된 시스템 필드
SY-TOCCU Obsolete ABAP System Field - 폐기된 시스템 필드
SY-TTABC Obsolete ABAP System Field - 폐기된 시스템 필드
SY-TSTIS Internal ABAP System Field - 내부 사용
SY-TTABI Obsolete ABAP System Field - 폐기된 시스템 필드
SY-DBCNT Processed Database Table Rows - 데이터베이스에서 처리(선택, 삭제, 삽임)된 데이터 수(select, insert, delete)
SY-FDPOS Found Location in Byte or Character String - 탐색(seacch 등)의 찾은 문자 위치 ex) data text(10) type 'ABCDEFGHI'. SEARCH text FOR 'C'. result sy-fdpos = 2.
SY-COLNO Current List Column - 리스트에서 현재 컬럼 ( write 로 리스트 출력 후 더블클릭등 이벤트에서 활용 )
SY-LINCT Page Length of List - 리스트의 한 페이지의 라인수 ( report에서 line-count 로 설정된 값 )
SY-LINNO Current Line in List - 리스트내의 현재 라인
SY-LINSZ Line width of list - 리스틍의 한 페이지의 컬럼수 ( report에서 line-size 로 설정된 값 )
SY-PAGCT Obsolete ABAP System Field - 폐기된 시스템 필드
SY-MACOL Number of Columns on Left Margin of Print List - 리스트 출력 시 왼쪽여백 컬럼수
SY-MAROW Number of Columns in Top Margin of a Print List - 리스트 출력 시 위쪽여백 컬럼수
SY-TLENG Row Length of Internal Table - 내부테이블의 레코드 크기
SY-SFOFF Internal ABAP System Field - 내부 사용
SY-WILLI Obsolete ABAP System Field - 폐기된 시스템 필드
SY-LILLI Selected List Line - 리스트에서 AT LINE-SELECTION 등의 이벤트 발생시 선택된 현재 페이지의 라인
SY-SUBRC Return Value of ABAP Statements - 리턴
SY-FLENG Internal ABAP System Field - 내부 사용
SY-CUCOL Horizontal Cursor Position at PAI - 커서 좌표 ( 수직 값 )
SY-CUROW Vertical Cursor Position at PAI -  커서 좌표 ( 수평 값 )
SY-LSIND Index of Details List - 상세리스트에 대한 인덱스( 최초 1, 이벤트로 다른 리스트가 호출되면 1씩 증가 )
SY-LISTI Index of Displayed List - 표시된 리스트의 인덱스
SY-STEPL Index of Current Step Loop Line - 스텝루프의 라인 인덱스
SY-TPAGI Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINX1 Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINY1 Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINX2 Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINY2 Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINCO Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINRO Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WINDI Obsolete ABAP System Field - 폐기된 시스템 필드
SY-SROWS Screens, numbers of lines - 스크린 라인 수(모니터에 표시된 전체 화면 크기에 대하여)
SY-SCOLS Screens, number of columns - 스크린의 컬럼 수(모니터에 표시된 전체 화면 크기에 대하여)
SY-LOOPC Visible Lines of a Step Loop - 화면에 표시되는 스텝루프의 라인 수
SY-FOLEN Internal ABAP System Field - 내부 사용
SY-FODEC Internal ABAP System Field - 내부 사용
SY-TZONE Date and Time, Time Difference to UTC Reference Time - 일/시 ?
SY-DAYST Daylight Saving Time Selection - ?
SY-FTYPE Internal ABAP System Field - 내부 사용
SY-APPLI Obsolete ABAP System Field - 폐기된 시스템 필드
SY-FDAYW Factory calendar weekday - 공장달력의 평일 ( 월-1, 화-2, 수-3, 목-4, 금-5 )
SY-CCURS Obsolete ABAP System Field - 폐기된 시스템 필드
SY-CCURT Obsolete ABAP System Field - 폐기된 시스템 필드
SY-DEBUG Internal ABAP System Field - 내부 사용
SY-CTYPE Obsolete ABAP System Field - 폐기된 시스템 필드
SY-INPUT Internal ABAP System Field - 내부 사용
SY-LANGU Language Key of Current Text Environment - 현재 사용 언어
SY-MODNO Index of External Session - 외부 세션 인덱스
SY-BATCH Program is running in the background - 'X' 프로그램이 백그라운드 작업에서 실행되고 있습니다.
SY-BINPT Program Running Under Batch Input - 'X' 프로그램이 BDC로 실행중입니다.
SY-CALLD ABAP program, ABAP program call mode - 'X' 다른프로그램에서 호출되에 사용되고 있습니다.
SY-DYNNR Current Screen Number - 현재 화면번호
SY-DYNGR Screen Group of Current Screen - 현재 화면의 그룹(화면속성의 화면그룹. 주의!-화면의 필드 그룹과 다름 )
SY-NEWPA Internal ABAP System Field - 내부 사용
SY-PRI40 Internal ABAP System Field - 내부 사용
SY-RSTRT Internal ABAP System Field - 내부 사용
SY-WTITL Selection for Standard Page Header - 선택된(현재화면에 출력된) 페이지 헤더
SY-CPAGE Current Page Number of a List - 리스트의 현재 페이지 번호
SY-DBNAM Logical Database of an Executable Program - LDB
SY-MANDT Client ID of Current User - 현재 클라이언트
SY-PREFX Obsolete ABAP System Field - 폐기된 시스템 필드
SY-FMKEY Obsolete ABAP System Field - 폐기된 시스템 필드
SY-PEXPI Spool Retention Period (Print Parameters) - 스풀 보존 기간
SY-PRINI Internal ABAP System Field - 내부 사용
SY-PRIMM Print Immediately (Print Parameters) - 즉시 인쇄
SY-PRREL Delete After Printing (Print Parameters) - 출력 후 삭제
SY-PLAYO Internal ABAP System Field - 내부 사용
SY-PRBIG Selection Cover Page (Print Parameters) - 표지선택
SY-PLAYP Internal ABAP System Field - 내부 사용
SY-PRNEW New Spool Request (Print Parameters) - 신규스풀요청
SY-PRLOG Internal ABAP System Field - 내부 사용
SY-PDEST Output Device (Print Parameters) - 출력장치
SY-PLIST Name of Spool Request (Print Parameters) - 요청스풀이름
SY-PAUTH Internal ABAP System Field - 내부 사용
SY-PRDSN Name of Spool File - 스풀파일명
SY-PNWPA Internal ABAP System Field - 내부 사용
SY-CALLR Start Location of List Print - 출력 시작위치
SY-REPI2 Internal ABAP System Field - 내부 사용
SY-RTITL Name of Print Program (Print Parameters) - 출력프로그램명
SY-PRREC Recipient (Print Parameters) - 수신
SY-PRTXT Text for Cover Page (Print Parameters) - 표지 텍스트
SY-PRABT Department on Cover Page (Print Parameters) -
SY-LPASS Internal ABAP System Field - 내부 사용
SY-NRPAG Internal ABAP System Field - 내부 사용
SY-PAART Print Format (Print Parameters) - 프린트 포맷
SY-PRCOP Number of Copies (Print Parameters) - 출력 수
SY-BATZS Obsolete ABAP System Field - 폐기된 시스템 필드
SY-BSPLD Obsolete ABAP System Field - 폐기된 시스템 필드
SY-BREP4 Obsolete ABAP System Field - 폐기된 시스템 필드
SY-BATZO Obsolete ABAP System Field - 폐기된 시스템 필드
SY-BATZD Obsolete ABAP System Field - 폐기된 시스템 필드
SY-BATZW Obsolete ABAP System Field - 폐기된 시스템 필드
SY-BATZM Obsolete ABAP System Field - 폐기된 시스템 필드
SY-CTABL Obsolete ABAP System Field - 폐기된 시스템 필드
SY-DBSYS Central Database System - 중앙 데이터베이스 시스템
SY-DCSYS Obsolete ABAP System Field - 폐기된 시스템 필드
SY-MACDB Obsolete ABAP System Field - 폐기된 시스템 필드
SY-SYSID Name of the SAP System - SAP SYSTEM 명(LogIn SYSTEM 명. ex) 'PRD'(운영), 'DEV' 개발 등...)
SY-OPSYS Operating System of Application Server - 어플리케이션의 운영체제
SY-PFKEY Current GUI Status - 현재 PF-STATUS 이름
SY-SAPRL Release Status of SAP System - 최신버전상태( ex> ECC 6.0 은 700 으로 표시됨)
SY-TCODE Current Transaction Code - 현재 실행중인 트랜잭션 코드
SY-UCOMM Function code that PAI triggered - F-CODE
SY-CFWAE Internal ABAP System Field - 내부 사용
SY-CHWAE Internal ABAP System Field - 내부 사용
SY-SPONO Spool Number of List Print - 스풀 번호
SY-SPONR Obsolete ABAP System Field - 폐기된 시스템 필드
SY-WAERS Obsolete ABAP System Field - 폐기된 시스템 필드
SY-CDATE Obsolete ABAP System Field - 폐기된 시스템 필드
SY-DATUM Current Date of Application Server - 오늘은?
SY-SLSET Used Selection Screen Variant - SUBMIT 등 SELECTION-SET 을 사용할 경우
SY-SUBTY Internal ABAP System Field - 내부 사용
SY-SUBCS Internal ABAP System Field - 내부 사용
SY-GROUP Internal ABAP System Field - 내부 사용
SY-FFILE Internal ABAP System Field - 내부 사용
SY-UZEIT Current Time of Application Server - 지금 시간이...?
SY-DSNAM Internal ABAP System Field - 내부 사용
SY-TABID Internal ABAP System Field - 내부 사용
SY-TFDSN Obsolete ABAP System Field - 폐기된 시스템 필드
SY-UNAME User Name - LogIn 한 사람의 ID
SY-LSTAT Obsolete ABAP System Field - 폐기된 시스템 필드
SY-ABCDE Latin Alphabet - 알파벳대문자(A~Z)
SY-MARKY Obsolete ABAP System Field - 폐기된 시스템 필드
SY-SFNAM Obsolete ABAP System Field - 폐기된 시스템 필드
SY-TNAME Obsolete ABAP System Field - 폐기된 시스템 필드
SY-MSGLI Obsolete ABAP System Field - 폐기된 시스템 필드
SY-TITLE Contents of Title Line - 타이틀
SY-ENTRY Internal ABAP System Field - 내부 사용
SY-LISEL Contents of a Selected List Line - 더블클릭등 이벤트시 선택된 라인의 문자열
SY-ULINE Horizontal Line - '-'
SY-XCODE Internal ABAP System Field - 내부 사용
SY-CPROG Calling Program - 현재 프로그램
SY-XPROG Internal ABAP System Field - 내부 사용
SY-XFORM Internal ABAP System Field - 내부 사용
SY-LDBPG Database Program of a Logial Database
SY-TVAR0 Text Variable for Placeholders in List Headers - 실행시간에 헤더의 문자열을 동적으로 구성하도록 지원함(0 ~ 9)
SY-TVAR1 Text Variable for Placeholders in List Headers - [사용방법]
SY-TVAR2 Text Variable for Placeholders in List Headers - 1. 메뉴->이동->리스트헤딩에서 열헤딩에 &0 ~ &9 까지 설정
SY-TVAR3 Text Variable for Placeholders in List Headers - 2. 프로그램에서 SY-TVAR0 = '텍스트 0', ... , SY-TVAR9 = '텍스트 9' 처럼
SY-TVAR4 Text Variable for Placeholders in List Headers -    텍스트를 설정함.
SY-TVAR5 Text Variable for Placeholders in List Headers - 3. 리스트 헤딩에 설정한 값이 출력될 것임.
SY-TVAR6 Text Variable for Placeholders in List Headers
SY-TVAR7 Text Variable for Placeholders in List Headers
SY-TVAR8 Text Variable for Placeholders in List Headers
SY-TVAR9 Text Variable for Placeholders in List Headers
SY-MSGID Message Class - 메세지 클래스
SY-MSGTY Message Type  - 메세지 ID
SY-MSGNO Message Number - 메세지 번호
SY-MSGV1 Message Variable - 메세지 텍스트 1
SY-MSGV2 Message Variable - 메세지 텍스트 2
SY-MSGV3 Message Variable - 메세지 텍스트 3
SY-MSGV4 Message Variable - 메세지 텍스트 4
SY-ONCOM Internal ABAP System Field - 내부 사용
SY-VLINE Vertical Line - '|'
SY-WINSL Obsolete ABAP System Field - 폐기된 시스템 필드
SY-STACO First List Column Displayed - START COLUMN
SY-STARO Top Displayed Line - START ROW
SY-DATAR Selection for Screen Field Input - 'X' : 화면에 입력가능 필드에 값이 입력되었습니다
SY-HOST Name of Current Application Server - 호스트이름
SY-LOCDB Obsolete ABAP System Field - 폐기된 시스템 필드
SY-LOCOP Obsolete ABAP System Field - 폐기된 시스템 필드
SY-DATLO Local Date for Current User - 날짜
SY-TIMLO Local Time of Current User - 시간
SY-ZONLO Time Zone of Current User

헉헉 많다.. @_@

2009년 8월 10일 월요일

숫자인지 체크하는 함수

  DATA : LV_VALUE(4)    TYPE C,
        LV_VALTYPE(
4)  TYPE C.



        CALL FUNCTION 'NUMERIC_CHECK'
         EXPORTING
          STRING_IN       = LV_VALUE
       
IMPORTING
*         STRING_OUT       =
          HTYPE            = LV_VALTYPE.



LV_VALUE에 값을 넣으면

LV_VALTYPE에 숫자면 NUMC이 나온다.



이때 LV_VALUE ',' '.' 들어가도 문자로 인식하므로,

REPLACE ALL OCCURRENCES OF ',' IN LS_MOD_CELLS-VALUE WITH ''. 요거 해주는센스~

 

Blog를 시작하다!!!

Blog를 시작할려고 생각만 한지 벌서 3년은 된거 같다..

여러 가지 이유가 있었겠지만..

딱히 맘에 드는 Blog를 찾지 못했다는게 가장 큰 이유 일 것이다.

그리고.. 2009년 8월 10일

드디어 시작해본다.!!

경축!!!!!!!