티스토리 툴바


밑에 글 수정할까 하다가 새로운 글로 다시 올립니다. MBEW, MBEWH 테이블의 속성을 더 파악해보니, 아래 쏘스는 틀렸습니다. MBEWH 해당월 데이타가 없으면, MBEWH의 전월을 Copy해서 해당월 데이타로 인식했는데, 그게 아니더라구요. 새로운 쏘스 참고하시기 바랍니다.

REPORT ytest_han_002.


*---- variables -------------------------------------------------------*
TABLES : mbew.  "General Material Data

TYPES  : BEGIN OF ty_val,
           matnr TYPE matnr,
           bwkey TYPE bwkey,
           lfgja TYPE lfgja,
           lfmon TYPE lfmon,
           meins TYPE meins,
           waers TYPE waers,
           lbkum TYPE lbkum,
           salk3 TYPE salk3,
         END OF ty_val.

DATA   : it_val_cur TYPE TABLE OF ty_val WITH HEADER LINE,
         it_val_his TYPE TABLE OF ty_val WITH HEADER LINE,
         it_val_ins TYPE TABLE OF ty_val WITH HEADER LINE.

DATA   : cur_lfgja TYPE lfgja,
         cur_lfmon TYPE lfmon,
         cal_lfgja TYPE lfgja,
         cal_lfmon TYPE lfmon,
         to_lfgja  TYPE lfgja,
         to_lfmon  TYPE lfmon.

DATA   : l_stop    TYPE c.

*---- initial screen --------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_matnr FOR mbew-matnr,
                 s_bwkey FOR mbew-bwkey.
SELECTION-SCREEN END OF BLOCK b1.


*---- select data -----------------------------------------------------*
START-OF-SELECTION.
*---- 01. current stock
  SELECT w~matnr w~bwkey w~lfgja w~lfmon
         m~meins c~waers w~lbkum w~salk3
    INTO CORRESPONDING FIELDS OF TABLE it_val_cur
    FROM mbew AS w INNER JOIN mara  AS m ON w~matnr EQ m~matnr
                   INNER JOIN t001k AS k ON w~bwkey EQ k~bwkey
                   INNER JOIN t001  AS c ON k~bukrs EQ c~bukrs
   WHERE w~matnr IN s_matnr
     AND w~bwkey IN s_bwkey.
*---- 02. closed(history) stock
  SELECT w~matnr w~bwkey w~lfgja w~lfmon
         m~meins c~waers w~lbkum w~salk3
    INTO CORRESPONDING FIELDS OF TABLE it_val_his
    FROM mbewh AS w INNER JOIN mara  AS m ON w~matnr EQ m~matnr
                    INNER JOIN t001k AS k ON w~bwkey EQ k~bwkey
                    INNER JOIN t001  AS c ON k~bukrs EQ c~bukrs
   WHERE w~matnr IN s_matnr
     AND w~bwkey IN s_bwkey.
*---- 03. sort
  SORT it_val_cur BY matnr bwkey.
  SORT it_val_his BY matnr bwkey lfgja lfmon.

*---- 04. to date setting
  to_lfgja = sy-datum(4).
  to_lfmon = sy-datum+4(2).

*---- 05. logic : insert month data which were omitted in history
  LOOP AT it_val_cur.
    CLEAR l_stop.
    CLEAR it_val_his.
    " finds 1st closed(history) data
    READ TABLE it_val_his WITH KEY matnr = it_val_cur-matnr
                                   bwkey = it_val_cur-bwkey
                          BINARY SEARCH.
    cur_lfgja = it_val_his-lfgja.
    cur_lfmon = it_val_his-lfmon.
    DO.  " loop from 1st history to current month
      IF cur_lfmon = '13'.
        cur_lfgja = cur_lfgja + 1.
        cur_lfmon = '01'.
      ELSE.
        "
      ENDIF.
*---- 06. read history
      READ TABLE it_val_his WITH KEY matnr = it_val_cur-matnr
                                     bwkey = it_val_cur-bwkey
                                     lfgja = cur_lfgja
                                     lfmon = cur_lfmon
                            BINARY SEARCH.
      IF sy-subrc NE 0.
        " copy month data if omitted
        CLEAR : cal_lfgja, cal_lfmon.
        cal_lfgja = cur_lfgja.
        cal_lfmon = cur_lfmon + 1.
        DO.
          IF cal_lfmon = '13'.
            cal_lfgja = cal_lfgja + 1.
            cal_lfmon = '01'.
          ELSE.
            "
          ENDIF.
          IF cal_lfgja = to_lfgja AND
             cal_lfmon = to_lfmon.
*---- 07. read mbew historical current
            READ TABLE it_val_cur WITH KEY matnr = it_val_cur-matnr
                                           bwkey = it_val_cur-bwkey
                                  BINARY SEARCH.
*---- 08. repeat to current period
            DO.  "
              IF cur_lfmon = '13'.
                cur_lfgja = cur_lfgja + 1.
                cur_lfmon = '01'.
              ELSE.
                "
              ENDIF.
              it_val_cur-lfgja = cur_lfgja.
              it_val_cur-lfmon = cur_lfmon.
              MOVE-CORRESPONDING it_val_cur TO it_val_ins.
              APPEND it_val_ins.
              " if current, get current data
              IF cur_lfgja = to_lfgja AND
                 cur_lfmon = to_lfmon.
                EXIT.
              ENDIF.
              l_stop = 'X'.
              cur_lfmon = cur_lfmon + 1.
            ENDDO.
            EXIT.
          ENDIF.
*---- 09. read history(+1)
          READ TABLE it_val_his WITH KEY matnr = it_val_cur-matnr
                                         bwkey = it_val_cur-bwkey
                                         lfgja = cal_lfgja
                                         lfmon = cal_lfmon
                                BINARY SEARCH.
          IF sy-subrc EQ 0.
            it_val_his-lfgja = cur_lfgja.
            it_val_his-lfmon = cur_lfmon.
            MOVE-CORRESPONDING it_val_his TO it_val_ins.
            APPEND it_val_ins.  CLEAR it_val_ins.
            EXIT.
          ELSE.
            cal_lfmon = cal_lfmon + 1.
          ENDIF.
        ENDDO.
      ELSE.
        "
      ENDIF.
      " if current, get current data
      IF cur_lfgja = to_lfgja AND
         cur_lfmon = to_lfmon.
        EXIT.
      ENDIF.
      IF l_stop = 'X'.
        EXIT.
      ENDIF.
      cur_lfmon = cur_lfmon + 1.
    ENDDO.
  ENDLOOP.


*---- 10. merge
  APPEND LINES OF it_val_ins TO it_val_his.
  SORT it_val_his BY matnr bwkey lfgja lfmon.


*---- output ----------------------------------------------------------*
END-OF-SELECTION.
  LOOP AT it_val_his.
    WRITE : /1 it_val_his-matnr,
               it_val_his-bwkey,
               it_val_his-lfgja,
               it_val_his-lfmon,
               it_val_his-meins,
               it_val_his-waers,
               it_val_his-lbkum UNIT it_val_his-waers,
               it_val_his-salk3 CURRENCY it_val_his-waers.
  ENDLOOP.
저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/12 관련글 쓰기

댓글을 달아 주세요

구축된 시스템마다 조금씩 틀릴 수 있겠지만, 일반적인 플랜트 재고 History를 알아내는 프로그램입니다. 로직은 MBEW, MBEWH를 찾아서 기간로직을 구현하면 됩니다.



REPORT ytest_han_002.


*---- variables -------------------------------------------------------*
TABLES : mbew.  "General Material Data

TYPES  : BEGIN OF ty_val,
           matnr TYPE matnr,
           bwkey TYPE bwkey,
           lfgja TYPE lfgja,
           lfmon TYPE lfmon,
           meins TYPE meins,
           waers TYPE waers,
           lbkum TYPE lbkum,
           salk3 TYPE salk3,
         END OF ty_val.

DATA   : it_val_cur TYPE TABLE OF ty_val WITH HEADER LINE,
         it_val_his TYPE TABLE OF ty_val WITH HEADER LINE,
         it_val_ins TYPE TABLE OF ty_val WITH HEADER LINE.

DATA   : cur_lfgja TYPE lfgja,
         cur_lfmon TYPE lfmon.


*---- initial screen --------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
SELECT-OPTIONS : s_matnr FOR mbew-matnr,
                 s_bwkey FOR mbew-bwkey.
SELECTION-SCREEN END OF BLOCK b1.


*---- select data -----------------------------------------------------*
START-OF-SELECTION.
*---- 1. current stock
  SELECT w~matnr w~bwkey w~lfgja w~lfmon
         m~meins c~waers w~lbkum w~salk3
    INTO CORRESPONDING FIELDS OF TABLE it_val_cur
    FROM mbew AS w INNER JOIN mara  AS m ON w~matnr EQ m~matnr
                   INNER JOIN t001k AS k ON w~bwkey EQ k~bwkey
                   INNER JOIN t001  AS c ON k~bukrs EQ c~bukrs
   WHERE w~matnr IN s_matnr
     AND w~bwkey IN s_bwkey.
*---- 2. closed(history) stock
  SELECT w~matnr w~bwkey w~lfgja w~lfmon
         m~meins c~waers w~lbkum w~salk3
    INTO CORRESPONDING FIELDS OF TABLE it_val_his
    FROM mbewh AS w INNER JOIN mara  AS m ON w~matnr EQ m~matnr
                    INNER JOIN t001k AS k ON w~bwkey EQ k~bwkey
                    INNER JOIN t001  AS c ON k~bukrs EQ c~bukrs
   WHERE w~matnr IN s_matnr
     AND w~bwkey IN s_bwkey.
*---- 3. sort
  SORT it_val_cur BY matnr bwkey.
  SORT it_val_his BY matnr bwkey lfgja lfmon.
*---- 4. logic : insert month data which were omitted in history
  LOOP AT it_val_cur.
    CLEAR it_val_his.
    " finds 1st closed(history) data
    READ TABLE it_val_his WITH KEY matnr = it_val_cur-matnr
                                   bwkey = it_val_cur-bwkey
                          BINARY SEARCH.
    cur_lfgja = it_val_his-lfgja.
    cur_lfmon = it_val_his-lfmon.
    DO.  " loop from 1st history to current month
      
IF cur_lfmon = '13'.
        cur_lfgja = cur_lfgja + 
1.
        cur_lfmon = 
'01'.
      
ELSE.
        
"
      
ENDIF.
      
" if current, get current data
      
IF cur_lfgja = it_val_cur-lfgja AND
         cur_lfmon = it_val_cur-lfmon.
        
EXIT.
      
ENDIF.
      
READ TABLE it_val_his WITH KEY matnr = it_val_cur-matnr
                                     bwkey = it_val_cur-bwkey
                                     lfgja = cur_lfgja
                                     lfmon = cur_lfmon
                            
BINARY SEARCH.
      
IF sy-subrc NE 0.
        
" copy month before data if omitted
        it_val_his-lfgja = cur_lfgja.
        it_val_his-lfmon = cur_lfmon.
        
MOVE-CORRESPONDING it_val_his TO it_val_ins.
        
APPEND it_val_ins.  CLEAR it_val_ins.
      
ENDIF.
      cur_lfmon = cur_lfmon + 
1.
    
ENDDO.
    
MOVE-CORRESPONDING it_val_cur TO it_val_ins.
    
APPEND it_val_ins.  CLEAR it_val_ins.
  ENDLOOP.
*---- 5. merge
  APPEND LINES OF it_val_ins TO it_val_his.
  SORT it_val_his BY matnr bwkey lfgja lfmon.


*---- output ----------------------------------------------------------*
END-OF-SELECTION.
  LOOP AT it_val_his.
    WRITE : /1 it_val_his-matnr,
               it_val_his-bwkey,
               it_val_his-lfgja,
               it_val_his-lfmon,
               it_val_his-meins,
               it_val_his-waers,
               it_val_his-lbkum UNIT it_val_his-waers,
               it_val_his-salk3 CURRENCY it_val_his-waers.
  ENDLOOP.
저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/11 관련글 쓰기

댓글을 달아 주세요

배부 로직

분류없음 2009/11/19 10:48
101을 100개에 고르게 나눠줄려면? 전기세를 각 코스트센터의 매출 비율에 따라 나눠줄려면? 이처럼 전기세, 전화비, 수돗세, 광열비 등을 각 부서에 합리적으로 할당하는 걸 배부라 하죠. 이때 배부를 하다보면 나머지 금액이 생기면 어쩔거냐란 질문이 꼬리표처럼 나오는데, 다음 로직은 그와 같은 질문에 대한 아주 표준적인 답입니다.

REPORT  ytest_syh_003.

*---- screen
PARAMETERS : p_dvend TYPE i DEFAULT 101,
             p_opera TYPE c DEFAULT '%',
             p_dvsor TYPE i DEFAULT 100.

*---- variables
TYPES      : BEGIN OF ty_distributed,
               id  TYPE char10,
               val TYPE i,
             END OF ty_distributed.
DATA       : it_distributed TYPE TABLE OF ty_distributed WITH HEADER LINE.

DATA       : v_accumulated TYPE i.

*---- make internal table
DO p_dvsor TIMES.
  it_distributed-id = sy-index.  APPEND it_distributed.
ENDDO.
SORT it_distributed BY id.

*---- normal distribution logic
LOOP AT it_distributed.
  it_distributed-val = ( p_dvend - v_accumulated ) / p_dvsor.
  v_accumulated = v_accumulated + it_distributed-val.
  p_dvsor = p_dvsor - 
1.
  
MODIFY it_distributed.  CLEAR it_distributed.
ENDLOOP.

*---- output
LOOP AT it_distributed.
  WRITE : /01 it_distributed-id,
           11 it_distributed-val.
ENDLOOP.
저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/10 관련글 쓰기

댓글을 달아 주세요

가령 2008.11.17 ~ 2009.08.23 사이에 존재하는 회계월 구해서 어쩌구 저쩌구 해달라는 업무지시를 받고 회계월을 일단 구해보자는 생각으로 테스트 프로그램을 만들었습니다.

혹시라도 이런 필요가 생기면 참고하세요.

REPORT  ytest_syh_002.

*---- screen
PARAMETERS : l_frdate TYPE sydatum,
             l_todate TYPE sydatum.

TYPES      : BEGIN OF ty_period,
               spmon TYPE spmon,
               qty   TYPE dzmeng,
               uom   TYPE dzieme,
             END OF ty_period.

DATA       : it_period TYPE TABLE OF ty_period WITH HEADER LINE.
DATA       : l_initial_01 TYPE sydatum,
             l_ending_01  TYPE sydatum,
             l_interim_01 TYPE sydatum.

*---- step 0.
CONCATENATE l_frdate(6'01' INTO l_initial_01.
CONCATENATE l_todate(6'01' INTO l_ending_01.

CLEAR : it_period, it_period[].
CLEAR : l_interim_01.

*---- step 1.
it_period-spmon = l_initial_01(6).
APPEND it_period.  CLEAR it_period.

*---- step 2.
DO.
  CALL FUNCTION 'RP_CALC_DATE_IN_INTERVAL'
    EXPORTING
      date      = l_initial_01
      days      = '00'
      months    = '01'
      signum    = '+'
      years     = '00'
    IMPORTING
      calc_date = l_interim_01.
  IF l_interim_01 < l_ending_01.
    it_period-spmon = l_interim_01(6).
    APPEND it_period.  CLEAR it_period.
    l_initial_01 = l_interim_01.
  ELSE.
    EXIT.
  ENDIF.
ENDDO.

*---- step 3.
it_period-spmon = l_ending_01(6).
APPEND it_period.  CLEAR it_period.

*---- output
LOOP AT it_period.
  WRITE : /1 it_period-spmon.
ENDLOOP.
저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/9 관련글 쓰기

댓글을 달아 주세요

그동안 해보지 못한 메세지타입이어서 문서를 남깁니다. 회계전표(FI) 전송 활용에 참고할 수 있습니다.


저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/8 관련글 쓰기

댓글을 달아 주세요

이렇게 템플릿 모방한 기술내용 없는 자료를 발표해도 되는걸까? =3= 3= 3


저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/7 관련글 쓰기

댓글을 달아 주세요

GAL3 티코드에서 전표를 롤업하면 글로벌회사코드에 논리시스템을 넣으라는 메세지를 볼 수 있습니다. 이때, 별다른 세팅이 있는 게 아니고, 분배모델에서 글로벌회사코드만 필터링해주어야 합니다.


메세지타입만 있을 때는 "필터가 없습니다."란 문구만 출력되는데, 이 문구를 더블클릭해서 필터링 설정하실 수 있구요. 근데, 이렇게 보냈더니, 전표의 코스트센터 정보가 누락된 채로 전송됩니다. 더 확인할 게 있을 수 있답니다. 참고하시길.
저작자 표시
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/6 관련글 쓰기

댓글을 달아 주세요

에이엑스 이사회에 드립니다.

엊그제 홍병준 부장과 한상열 부장 둘은 미래에 대해 얘기를 나누던 중, 에이엑스의 비지니스를 생각하게 되었습니다. 사실 몇 달 전부터 홍부장 등은 이와 관련한 아이디어 모색을 위해 정기적으로 만나고 있었거든요. 그런데, 기발한 아이디어 상품, 부동산, 게임 등 이제까지 안 해본 사업도 모색해야 하지만, 여전히 우리에게 중요한 비지니스인 IT컨설팅을 보다 더 잘 해야 한다는 데엔 이견이 있을 수 없었습니다.

나름대로 얻은 것은 다시 한 번 원점으로 돌아가자는 것입니다. 업 자체의 본질이라 할 수 있는 서비스 제공능력은 지식정보의 축적을 기반해야 합니다. 에이엑스컨설팅의 장기적인 발전과 구성원의 행복을 위해서 지식경영의 체계가 절실히 필요합니다. 지식경영을 하기 위해서는 적절한 보상체계, 지식자산의 축적, 구성원 누구나 항시 이용할 수 있는 개방성을 확보해야 합니다.

현재 : 1 일처리 시간에 너무 많은 시간을 소모하여 개인의 행복을 추구할 시간이 없습니다. 2 회사발전을 위한 고민을 모아야 함에도 그럴 시간이 없습니다. 3 신입인력에서 고급인력으로 성장할 수 있는 참고자료가 부족합니다. 4 회사 고직인력들의 중장기 비젼이 없습니다.

비전 : 1 직원들의 실제 일처리 시간을 단축하여 취미/자기개발 시간이 늘어납니다. 2 항상 준비된 기술을 바탕으로 최고의 IT 서비스를 제공할 수 있습니다. 3 신입인력들도 축적된 지식을 바탕으로 서비스를 제공할 수 있어 회사의 단가경쟁력이 높아집니다. 4 나아가서 서비스의 질을 개인의 자질보다는 회사의 축척된 지식으로 보장할 수 있어 회사의 신뢰를 구축할 수 있습니다.

목적 :  개인이 습득한 기술과 지식을 회사자산으로 축적하고 언제든 활용가능한 상태를 유지하여
           필요한 사원에게 공유 또는 교육할 수 있는 시스템(환경)을 만든다.
 
전략 : 1단계. 지식경영을 하기 위한 정책수립 및 시스템 구축
                   - 지식을 축적하기 위한 방안수립 ( 지식제공자에게 보상 등.)
                   - 지식검증 절차수립
                   - 축적된 지식활용 방안수립
                   등등..
         2단계. 기술 및 지식 축적
                   - 시행기간 설정, 보상방안 마련
         3단계. 지식활용
                   - 활용자에게 보상 (마일리지 정책)
                   - 점차 KMS를 통해 검증된 지식이나 기술을 활용하도록 정책마련
         ... 등등등

방안1 : 회사인력을 동원하여 에이엑스 지식정보시스템 구축
방안2 : 적당한 지식정보 패키지 구입 및 구축
방안3 : 개인블로그와 까페, 트위터 등을 이용한 지식정보 관계 구축

이에 대한 심도 깊은 토의 시간을 마련해 주십시오.


2009.09.25
한상열 부장, 홍병준 부장
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/5 관련글 쓰기

댓글을 달아 주세요


Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/4 관련글 쓰기

댓글을 달아 주세요

조 노세라(Joe Nocera)는 <<뉴욕 타임즈>>에 실린 '기대에 못 미치는 스마트폰 업계'라는 제목의 글에서 스마트폰 업계에서 진행되는 경쟁의 양상을 훌륭히 요약했다.

팜(Palm)은 스케쥴 관리기기 가운데 널리 성공했다. 그 후 그들은 스케쥴 관리뿐만 아니라 전화도 할 수 있다는 '트레오(Treo)를 출시했지만 이는 그다지 놀랍지도 않을 뿐더러 신되도 가지 않았다. 소비자 가전기기 전문 웹사이트인 엔가겟닷컴(Engadget.com)의 편집장인 라이언 블론(Ryan Block)이 이야기한 것처럼 '팜은 방향을 잃었다.' 그리고 이처럼 방향을 잃은 기업은 비단 그들만이 아니었다.

블랙베리즈(BlackBerrys)는 이메일 기능은 훌륭했으나 전화기 기능은 별로였다. 모토로라 Q(Motorola Q)는 트레오만큼이나 실패를 맛보았다. 애플의 아이폰(iPhone)은 음악이나 동영상을 보기에는 완벽했지만 이메일이나 전화 통화 기능은 엉망이었다. 기업들은 마케팅을 이유로 더 많은 기능을 더 얇고 더 매끈한 용기에 밀어 넣으면서 그 와중에 배터리 작동시간까지 더 길게 만들려는 등의 노력을 하고 있다. 이런 식으로 무분별하게 기능을 통합하다 보면 결국 몇몇 기능은 제대로 작동하지 않을 수 밖에 없다.

출발점의 문제도 있다. 모든 대형 스마트폰 회사들은 서로 다른 출발점에서 시작했다. 모토로라는 그 뿌리가 휴대폰에 있었으니 모토로라 Q에서 어떤 기능이 가장 좋았을지는 안 봐도 뻔한 일이다. 애플사의 아이폰은 컴퓨터를 유산으로 물려받았기 때문에 음악과 동영상 기능은 당연히 좋았을 것이다. 블랙베리즈는 이동식 이메일 회사에서 시작하였으니 다른 업체들에 비해 이메일 기능이 훨씬 더 나을 수밖에 없다.

- 마케팅, 명쾌함으로 승부하라, 잭 트라우트
Posted by 한상열

트랙백 주소 :: http://erpsarang.tistory.com/trackback/3 관련글 쓰기

댓글을 달아 주세요

이전페이지 1 2 다음페이지

태그목록

사이드바 열기