<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>zzangyi.log</title>
        <link>https://velog.io/</link>
        <description>有志竟成</description>
        <lastBuildDate>Wed, 11 Nov 2020 13:20:29 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <copyright>Copyright (C) 2019. zzangyi.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/liah--" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[PROJECT(7)]]></title>
            <link>https://velog.io/@liah--/PROJECT7</link>
            <guid>https://velog.io/@liah--/PROJECT7</guid>
            <pubDate>Wed, 11 Nov 2020 13:20:29 GMT</pubDate>
            <description><![CDATA[<p>드디어 프로젝트 완성후! 글을 게시한다.</p>
<p><img src="https://images.velog.io/images/liah--/post/38daab82-0bae-4afe-8c50-a922be59e806/image.png" alt=""></p>
<p>사원마스터에서 고등어씨 사원번호/비밀번호로 로그인 해봅니다..</p>
<p>&lt;로그인화면&gt;
<img src="https://images.velog.io/images/liah--/post/bd848370-7abf-4385-a692-cbc5e69f8e0c/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/liah--/post/54d26647-6450-490c-9a5e-70368ce8b109/image.png" alt=""></p>
<p>오른쪽 상단에 고등어 사원으로 로그인했다.</p>
<p><img src="https://images.velog.io/images/liah--/post/54136461-d400-47fb-a5ba-afaac4aa1b09/image.png" alt=""></p>
<p>내가만튼 경비입력 화면이다.
현재 진행중인 프로젝트만 띄우게 조건을 걸어놨는데,
종료일이 2달전에 끝난 것까지 포함된다.</p>
<p><strong>1) 프로젝트 Fragment</strong>
<img src="https://images.velog.io/images/liah--/post/c3ac8ca3-238d-4f3f-92ff-2ef6446690ef/image.png" alt=""></p>
<pre><code>TABLES : ZBMDT0030 .    &quot;프로젝트 마스터
    data:  l_date TYPE DATS.

CALL FUNCTION &#39;RP_CALC_DATE_IN_INTERVAL&#39; &quot;기준일자에 대해 일,월,년 이전 또는 이후 날짜 계산 펑션
  EXPORTING
    date            = SY-DATUM &quot;현재날짜로부터
    days            = &#39;0&#39;
    months          = &#39;2&#39; &quot;두달
   SIGNUM          = &#39;-&#39; &quot;전
    years           = &#39;0&#39;
 IMPORTING
   CALC_DATE       =  l_date 
          .
IF I_PCODE is INITIAL .
    SELECT * FROM ZBMDT0030
        INTO CORRESPONDING FIELDS OF TABLE TAB1
      WHERE ( edate &gt;=  l_date and &quot;종료일 &gt;= 2달전
      sdate &lt;= sy-datum ) &quot;시작일 &lt;= 현재일
      OR pcode = &#39;Z00&#39;. &quot;내근코드거나
ENDIF.

</code></pre><p>계정과목 테이블을 select해서 다 들고온다.</p>
<p>계정과목 Fragment</p>
<p><strong>2) 전표를 선택하지 않았을때 뜨는 오류메세지</strong>
<img src="https://images.velog.io/images/liah--/post/e42c2ba5-297e-417e-b897-303145be07ca/image.png" alt=""></p>
<p>*<em>3) 저장할때 오류메세지 *</em>
저장할때 프로젝트, 계정과목선택은 필수값이다.</p>
<p><img src="https://images.velog.io/images/liah--/post/6994c424-8cf6-4863-a20a-095b975518b8/image.png" alt=""></p>
<p><strong>4) 프로젝트에 맞게 승인자</strong></p>
<p>프로젝트 별로 승인자가 따로있는데, 프로젝트 선택 후 저장버튼을 누르면 승인자가 자동으로 조회된다.
<img src="https://images.velog.io/images/liah--/post/8426328a-7054-4891-ac33-dd32b9e610e0/image.png" alt=""></p>
<p><strong>5) 결제방법 ComboBox &amp; 영수증 발행일자 datePicker</strong>
<img src="https://images.velog.io/images/liah--/post/82426a83-2a83-4de5-b22f-a0230dd120c0/image.png" alt=""></p>
<p><strong>6) 영수증첨부</strong></p>
<p><img src="https://images.velog.io/images/liah--/post/e5514fa6-5a18-441c-8ef4-3e62bd6f83ac/image.png" alt=""></p>
<p>&lt;데이터 저장 로직&gt;</p>
<pre><code>
    WHEN &#39;B&#39;. &quot;저장
      LOOP AT tab1 INTO ls_tab1. 
        ls_tab1-jpdat = sy-datum. &quot;전표일자 = 오늘날짜
        ls_tab1-stcod = &#39;A&#39;. 상태코드 = &#39;저장&#39;
        ls_tab1-propr =  ls_tab1-propr / 100. =금액/100 (소숫점, 조회Rfc에서 *100 한다)
        ls_tab1-ZKRW = &#39;KRW&#39;. &quot;통화키 = &#39;KRW&#39;
        &quot;전표번호 생성
        IF ls_tab1-jpnum IS INITIAL. &quot;전표번호가 초기값이면
          CALL FUNCTION &#39;NUMBER_GET_NEXT&#39; &quot;채번펑션사용(저번에 포스팅함)
            EXPORTING
              nr_range_nr = &#39;1&#39;
              object      = &#39;ZJPNUM&#39;
            IMPORTING
              number      = ls_tab1-jpnum.
        ENDIF.
        MOVE-CORRESPONDING ls_tab1 TO ls_tab2.
        APPEND ls_tab2 TO lt_tab2.
      ENDLOOP.
      MODIFY zbext0010 FROM TABLE lt_tab2.</code></pre><p> 계정과목이 <strong>식대,유류대,교륙훈련비</strong>면 밑에 아이템뷰가 생성된다.</p>
<p> <img src="https://images.velog.io/images/liah--/post/e728dddc-991c-42a3-b8f5-4ecedaa5ca81/image.png" alt=""></p>
<p> 맨 끝에 상태필드 타입을 Link로 설정했는데, &#39;저장&#39; 버튼을 클릭하면 계정과목에 맞는 아이템 테이블이 나온다.</p>
<blockquote>
<p>식대일때</p>
</blockquote>
<p> 식대의 경비는 한 사람당 최대 8000\으로 정해져있다.
 아이템 뷰의 데이터가 없을경우, 헤더에선 8000\ 초과하는 금액은 아래와 같은 알람메세지를 띄운다.</p>
<p> <img src="https://images.velog.io/images/liah--/post/c003588b-5e2e-4a3b-9813-909172d33fa4/image.png" alt=""></p>
<p> 즉 8000\까지만 가능하고 15000이면, 적어도 한 명의 사원이 아이템 뷰에 설정되야함 !</p>
<p><img src="https://images.velog.io/images/liah--/post/46d415a1-fd4e-4ae7-b545-deb6f539bc23/image.png" alt=""></p>
<p> 아래 아이템뷰에서 <code>사원번호</code> 를 누르면  위와 같이 사원 조회 Fragment가 뜬다. 부서를 선택하고 조회를 누르면 그 부서에 맞는 사원들이 조회된다 !</p>
<blockquote>
<p>유류대일때</p>
</blockquote>
<p> <img src="https://images.velog.io/images/liah--/post/a7e70ec9-cb7b-48c8-96df-ce30087778b0/image.png" alt=""></p>
<p> 유류대일경우 차종,유류를 ComboBox로 선택가능하다. 이미지파일은 지도를 첨부하기로 했다. </p>
<blockquote>
<p>교육훈련비일때</p>
</blockquote>
<p> <img src="https://images.velog.io/images/liah--/post/f54cae80-b159-403f-8428-f66c674068cd/image.png" alt=""></p>
<p> 날짜를 선택하고 이미지엔 수료증을 첨부한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Function Spec]]></title>
            <link>https://velog.io/@liah--/Function-Spec</link>
            <guid>https://velog.io/@liah--/Function-Spec</guid>
            <pubDate>Wed, 11 Nov 2020 12:43:25 GMT</pubDate>
            <description><![CDATA[<h3 id="경비-조회입력-및-수정-승인요청">경비 조회/입력 및 수정/ 승인요청</h3>
<p><img src="https://images.velog.io/images/liah--/post/1ee8a550-f685-4b93-9576-4a85cf935456/image.png" alt=""></p>
<h4 id="상세-내역-정의-입력-view">상세 내역 정의 (입력 View)</h4>
<p>(1)날짜
필터링 할 날짜 (y-MM 형태의 캘린더)</p>
<p>(2)상태
필터링 할 승인상태 (저장/승인요청/승인완료/반려(승인)/지급완료/반려(지급) 상태
별로 콤보박스</p>
<p>(3) ROW 추가
데이터를 입력하기 위해 ROW 추가</p>
<p>(4) ROW 삭제
원하는 ROW를 선택하여 삭제한다.</p>
<p>(5) 저장
입력한 데이터를 저장하기 위한 버튼</p>
<p>(6) 승인요청
원하는 데이터를 승인요청 하기 위한 버튼</p>
<p>(7) 조회
 원하는 날짜/ 상태를 선택하여 조회하는 버튼</p>
<p>(8) 체크박스
저장/승인요청 내역 선택</p>
<p>(9) 프로젝트
 프로젝트 마스터에서 데이터를 가져오며, 팝업창을 띄워 프로젝트 코드, 프로젝트 
명을 띄우고, 선택한 프로젝트 이름이 입력된다.</p>
<p>(10) 계정과목
경비 계정 과목 마스터에서 데이터를 가져오며, 팝업창을 띄워 계정과목 코드, 계정과목 명을 띄우고, 선택한 계정과목이 입력된다.</p>
<p>(11) 세부사항
경비지출 상세 내역 입력</p>
<p>(12) 결제방법
콤보박스로 결제방법(카드/현금/상품권) 선택</p>
<p>(13) 금액
지출된 금액 입력</p>
<p>(14) 영수증 발행일자
캘린더 형식으로 구현되며, 영수증 발행 일자를 선택한다.</p>
<p>(15) 영수증 첨부
영수증 파일 첨부</p>
<p>(16) 승인자
프로젝트를 선택하면 해당 승인자 이름 자동 기입.</p>
<p>(17) 승인 요청일자
승인 버튼을 누르면 현재 일자기준으로 저장</p>
<p>(18) 상태
저장 버튼을 누르면 저장, 승인요청 버튼을 누르면 승인요청으로 상태변경.</p>
<h4 id="2-2-상세-내역-정의-임시-저장-메세지">2-2) 상세 내역 정의 (임시 저장 메세지)</h4>
<ul>
<li>저장 버튼을 누르면 ‘임시 저장하겠습니까?’ 라는 알람을 띄운다.</li>
<li>저장 버튼 클릭 시 임시 테이블에 데이터가 저장된다.</li>
<li>승인 요청 시 경비 테이블에 데이터가 저장된다.</li>
</ul>
<h3 id="경비입력-조회-function-spec">경비입력 조회 FUNCTION SPEC</h3>
<p><img src="https://images.velog.io/images/liah--/post/289f1950-a12f-4f8e-9093-d5c9a8c2941f/image.png" alt=""></p>
<h3 id="경비입력-저장승인요청">경비입력 저장/승인요청</h3>
<p><img src="https://images.velog.io/images/liah--/post/b5441d9f-2878-4ce0-a0de-af454e5ac778/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[FIELD SIMBOL]]></title>
            <link>https://velog.io/@liah--/FIELD-SIMBOL</link>
            <guid>https://velog.io/@liah--/FIELD-SIMBOL</guid>
            <pubDate>Mon, 21 Sep 2020 08:16:44 GMT</pubDate>
            <description><![CDATA[<p>FORM write_data .
  write &#39;subroutine Test&#39;.
ENDFORM.</p>
<p>&quot;파라미트 = subroutine 호출하는 구문, 호출받는 구문 사이에 주고받는 값
&quot; 썹루틴 내 data구문을 정의하는 일반적 local 변수가 =</p>
<p>call by value = 넘겨주는 변수와 받는 변수가 다른 메모리 영역</p>
<p>DATA: ahah TYPE c LENGTH 20 VALUE &#39;call by value test&#39;.</p>
<p>PERFORM  call_byvalue USING ahah.
FORM call_byvalue USING VALUE(p_val).
  WRITE p_val.
ENDFORM.</p>
<p>call by value test</p>
<p>call by reference -changing : 자신의 메모리를 가지고 있지 않음
USING 은 DATA전달. CHANGING 는 DATA전달 변경</p>
<p>data: AHAH TYPE c LENGTH 50 VALUE &#39;CALL BY REFERENCE TEST&#39;.
WRITE :/ AHAH.
PERFORM CALL_BYVREF CHANGING AHAH.
WRITE:/ AHAH.
FORM CALL_BYVREF CHANGING HEHE.
  HEHE = &#39;VALUE IS CHANGED&#39;.
  ENDFORM.</p>
<p>DATA: GV1 TYPE I VALUE 2,
      GV2 TYPE I VALUE 3,
      SUM TYPE I.</p>
<p>PERFORM SUM_DATA USING GV1 GV2
      CHANGING SUM.
WRITE :/ &#39;RESULT IS :&#39;, SUM.</p>
<p>FORM SUM_DATA USING VALUE(P_VAL1)
      VALUE(P_VAL2)
  CHANGING VALUE(P_SUM).</p>
<p>  P_SUM = P_VAL1 + P_VAL2.</p>
<p>  ENDFORM.</p>
<p>  ZA21.</p>
<p>DATA: AHAH TYPE C VALUE &#39;A&#39;. &quot;ahah = &#39;a&#39;
FIELD-SYMBOLS : <FS> TYPE C. &quot;필드 심볼 선언
ASSIGN AHAH TO <FS>. &quot;변수를 필드 심볼에
<FS> = &#39;B&#39;. &quot;필드 심볼에 변수 값을 할당
WRITE : &#39;ahah is : &#39; , ahah. &quot;값이 b로 변경됨.</p>
<p>data: vava TYPE c VALUE &#39;a&#39;.
FIELD-SYMBOLS : <fs> TYPE any.
assign vava to <fs>.
<fs> = &#39;b&#39;.
WRITE : &#39;vava is = &#39; , &#39;vava&#39;.</p>
<p>TYPES : BEGIN OF t_line,
  col1 TYPE c,
  col2 TYPE c,
  END OF t_line.
  data: gs_wa TYPE t_line,
       gt_itab TYPE HASHED TABLE OF line WITH UNIQUE KEY col1,
        key(4) TYPE c VALUE &#39;col1&#39;.
  FIELD-SYMBOLS <fs> TYPE any TABLE.
  ASSIGN gt_itab to <fs>.</p>
<p>DATA: BEGIN OF line,
        col1(12) VALUE &#39;abcdefghij&#39;,
      END OF line.</p>
<p>FIELD-SYMBOLS : <fs>.
ASSIGN line-col1+6(*) TO <fs>.
WRITE / <fs>.</p>
<p>ASSIGN line-col1+6(6) TO <fs>.
WRITE / <fs>.</p>
<p>ASSIGN line-col1+5(5) TO <fs>.
WRITE / <fs>.</p>
<p>예제 10-7
DATA: BEGIN OF gs_str,
coll TYPE char10 VALUE &#39;KOREA &#39;,
col2 TYPE char10 VALUE &#39;SEOUL&#39; ,
col3 TYPE char6 VALUE &#39;twhin&#39;,
END OF gs_str.</p>
<p>data: gv_fname TYPE c LENGTH 10,
      gv_idx TYPE n.</p>
<p>FIELD-SYMBOLS: <fsl> LIKE gs_str,
<fs2> TYPE ANY.</p>
<p>ASSIGN gs_str TO <fsl>.</p>
<p>DO 3 TIMES.
  clear : gv_fname.
  gv_idx = sy-index.
  gv_fname = &#39;col&#39;.
  CONCATENATE gv_fname gv_idx into gv_fname.
ASSIGN COMPONENT sy-index OF STRUCTURE <fsl> TO <fs2>.
WRITE <fs2>.
ENDDO.</p>
<p>예제 10-8</p>
<p>TYPES : BEGIN OF t_line,
  a TYPE char5,
  b TYPE char10,
  c TYPE char15,
  end of t_line.</p>
<p>  data: gv_addr(30) TYPE c VALUE &#39;maybe today is nice day&#39;.
  FIELD-SYMBOLS : <fs> TYPE t_line.
  ASSIGN gv_addr to <fs> casting.
  write : <fs>-a, <fs>-b, <fs>-c.</p>
<p>예제 10-9
*
data : gv_tname(10) TYPE c.
DATA : gt_itab TYPE STANDARD TABLE OF sflight.
FIELD-SYMBOLS <fs> TYPE STANDARD TABLE.</p>
<p>gv_tname = &#39;gt_itab&#39;.
ASSIGN (gv_tname) to <fs>.</p>
<p>data : BEGIN OF gs_data,
  var1 TYPE i,
  var2 TYPE i,
  var3 TYPE i,
  end of gs_data,
  gt_data like TABLE of gs_data.</p>
<p>  FIELD-SYMBOLS : <Fs_Tab> TYPE any table,
                 <fs_strc> like gs_data.</p>
<p>  clear : gs_data.
  gs_data-var1 = 10.
  gs_data-var2 = 20.
  gs_data-var3 = 30.</p>
<ul>
<li>append gs_data to gt_data.</li>
</ul>
<p>&quot;쭈니아밥퍼</p>
<p>  clear : gs_data.
  gs_data-var1 = 40.
  gs_data-var2 = 50.
  gs_data-var3 = 60.</p>
<ul>
<li>ASSIGN gt_data to <Fs_tab>.
append gs_data to gt_data.</li>
</ul>
<p>  clear : gs_data.
  gs_data-var1 = 70.
  gs_data-var2 = 80.
  gs_data-var3 = 90.</p>
<p> ASSIGN gt_data to <fs_tab>.</p>
<p>  loop at <fs_tab> ASSIGNING <fs_strc>.
    write :/ <fs_strc>-var1, <fs_strc>-var2,  <fs_strc>-var3.
    ENDLOOP.</p>
<p>아밥퍼 2
DATA: GV_VAL1 TYPE C VALUE &#39;A&#39;,
      GV_VAL2 TYPE C VALUE &#39;B&#39;,
      GV_VAL3 TYPE C VALUE &#39;C&#39;,
      GV_VAL4 TYPE C VALUE &#39;D&#39;,
      GV_VAL5 TYPE C VALUE &#39;E&#39;.</p>
<p>DATA: GV_FNAME TYPE CHAR20,
      GV_INDEX TYPE N.</p>
<p>FIELD-SYMBOLS <FS> type any.</p>
<p>DO 5 TIMES.
  CLEAR: GV_FNAME.
  GV_INDEX = SY-INDEX.
  CONCATENATE &#39;GV_VAL&#39; GV_INDEX INTO GV_FNAME. &quot;GV_VAL+GV_INDEX =&gt; GV_FNAME에 들어가서
  ASSIGN (GV_FNAME) TO <FS>.
  &quot;여기서 GV_FNAME은 CHAR20의 GV_FNAME이 아닌 위에 GV_VAL+GV_INDEX가 된다
  &quot;만약 1번째 줄이면 GV_FNAME은 GV_VAL1이 된다.
  WRITE: / GV_FNAME, &#39;:&#39;, <FS>.
ENDDO.</p>
<p>&quot;아밥퍼 3</p>
<p>DATA: BEGIN OF GS_DATA,
      VAR1 TYPE CHAR10,
      VAR2 TYPE CHAR10,
      VAR3 TYPE CHAR10,
      END OF GS_DATA,
      GT_DATA LIKE TABLE OF GS_DATA.</p>
<p>FIELD-SYMBOLS : <FS>,
                <FS_STRC> LIKE GS_DATA.</p>
<p>CLEAR: GS_DATA.
GS_DATA-VAR1 = 10.
GS_DATA-VAR2 = 20.
GS_DATA-VAR3 = 30.
APPEND GS_DATA TO GT_DATA.</p>
<p>CLEAR: GS_DATA.
GS_DATA-VAR1 = 40.
GS_DATA-VAR2 = 50.
GS_DATA-VAR3 = 60.
APPEND GS_DATA TO GT_DATA.</p>
<p>LOOP AT GT_DATA ASSIGNING <FS_STRC>..
  DO 3 TIMES.
    ASSIGN COMPONENT SY-INDEX OF STRUCTURE <FS_STRC> TO <FS>.
    &quot;1번째 INDEX면 FS_STRC의 첫번째줄이 해당
    WRITE: <FS>.
  ENDDO.
  WRITE: /.
ENDLOOP.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PROJECT(6)]]></title>
            <link>https://velog.io/@liah--/PROJECT6</link>
            <guid>https://velog.io/@liah--/PROJECT6</guid>
            <pubDate>Sun, 20 Sep 2020 06:31:33 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/liah--/post/56271d38-d27b-4273-80ac-bc5d49d6d0be/image.png" alt=""></p>
<p>테이블 헤더라인 텍스트를 center로 조정하는 법
금액필드를 환율에 맞게 필드 찍기</p>
<p>table coulmn에 <code>hAlign=&quot;Center&quot;</code>만 추가하면 된다.</p>
<p>환율필드도 view에 <code>xmlns:u=&quot;sap.ui.unified&quot;</code>을 추가하고
금액 필드에 아래 처럼 로직을 짜주었다.</p>
<pre><code>&lt;u:Currency
value=&quot;{PROPR}&quot; maxPrecision=&quot;0&quot; useSymbol=&quot;false&quot; currency=&quot;KRW&quot;/&gt;</code></pre><p><code>maxPrecision</code>은 소숫점 아래 숫자인데 한화는 소숫점이 없으니 0!
<code>useSymbol</code>은 </p>
<p>currency 적용은 한명만 만들면 되어서 내가 만들고 단톡방에 공유하였다 !</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PROJECT(5)]]></title>
            <link>https://velog.io/@liah--/PROJECT4</link>
            <guid>https://velog.io/@liah--/PROJECT4</guid>
            <pubDate>Thu, 17 Sep 2020 11:32:22 GMT</pubDate>
            <description><![CDATA[<p>전표번호는 <code>저장</code>버튼을 누를때 생성하는것인데, 아직 UI5로 입력 부분을 구현하지 못했다. UI5테이블 데이터를 ABAP으로 받아야하는데 아직 어떻게 하는지 몰라 승인요청, 조회를 먼저 하였다. 그래서 승인요청로직에 전표번호 펑션을 집어넣고 임시로 돌려보았다.</p>
<p><img src="https://images.velog.io/images/liah--/post/6fe99f66-2ea9-40d2-9990-eb7cf566b4c4/image.png" alt="">
Console.log창에서 펑션에 의한 전표번호가 자동으로 채번된것을 볼 수있다.
(  같은 데이터에 전표번호가 다 다르기때문에 modify한것이 계속 생성되었다 ㅋㅋㅋ)</p>
<p>영수증 발행일자 필드에 datapicker를 첨부하였다.
<img src="https://images.velog.io/images/liah--/post/2bd963c1-632f-4741-87a2-3e237fe161c6/image.png" alt=""></p>
<pre><code>&lt;DatePicker
id=&quot;DP1&quot; 
dateValue=&quot;{realDate}&quot;
change=&quot;handleChange&quot;/&gt;</code></pre><p>영수증 발행일자를 불러오기 위해 다음과 같은 로직을 짜주었다.</p>
<pre><code>var realDate = this.getView().byId(&quot;DP1&quot;).getDateValue(&quot;/REDATE&quot;);
![](https://images.velog.io/images/liah--/post/8682a72e-de11-42db-a457-45737755bf07/image.png)

for (var i = 0; i &lt; oResultData.TAB1.length; i++) {
  var realREDATE = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/REDATE&quot;);
  var realAPPDAT = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/APPDAT&quot;);
  var realRDATE = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/RDATE&quot;);
  var realACDAT = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/ACDAT&quot;);

if (oResultData.TAB1[i].REDATE) {var oDate = new Date(oResultData.TAB1[i].REDATE);
oModel.setProperty(&quot;/tableData/&quot; + i + &quot;/realDate&quot;, oDate);
    }
</code></pre><p><img src="https://images.velog.io/images/liah--/post/8682a72e-de11-42db-a457-45737755bf07/image.png" alt=""></p>
<h4 id="상태필드에-따른-경고창">상태필드에 따른 경고창</h4>
<pre><code>onSave: function() {
var comboData = this.getView().getModel().getProperty(&quot;/comboData&quot;);
if (comboData === &quot;B&quot; || comboData === &quot;C&quot; || comboData === &quot;E&quot; || comboData === &quot;F&quot;) { MessageBox.warning(&quot;상태필드를 확인해 주세요.&quot;);
ELSE { RFC호출 로직},</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[PROJECT(4)]]></title>
            <link>https://velog.io/@liah--/PROJECT3</link>
            <guid>https://velog.io/@liah--/PROJECT3</guid>
            <pubDate>Wed, 16 Sep 2020 13:48:39 GMT</pubDate>
            <description><![CDATA[<p><img src="https://images.velog.io/images/liah--/post/f88e5e3c-8900-4220-ac44-abf3e3b57f91/image.png" alt=""></p>
<h4 id="917">9.17</h4>
<p><strong>조회 펑션 모듈</strong></p>
<h4 id="데이터-선언">데이터 선언</h4>
<pre><code class="language-DATA:">        ls_tab1 LIKE zbexs0010,
        lt_tab2 LIKE TABLE OF zbext0020,
        lt_tab3 LIKE TABLE OF zbext0040,
        lt_tab4 LIKE TABLE OF zbext0050.</code></pre>
<pre><code>CASE i_mode.
WHEN &#39;A&#39;.
  SELECT *
    FROM zbext0010 AS a
    INNER JOIN zbmdt0030 AS b ON a~PCODE = b~PCODE
     INNER JOIN zbext0030 AS c ON a~codhc = c~codhc
     INNER JOIN zbmdt0010 AS d ON B~AUEMP = d~empno
    INTO CORRESPONDING FIELDS OF TABLE lt_tab1
   WHERE a~empno = i_empno AND
                 a~cumon = i_cumon AND
                 a~stcod = i_stcod .

  LOOP AT lt_tab1 INTO ls_tab1.
    MOVE-CORRESPONDING  ls_tab1 TO tab1.</code></pre><p>승인자 이름을 들고오기위해 프로젝트 마스터의 승인자 번호와 사원테이블을 조인함.</p>
<p><img src="https://images.velog.io/images/liah--/post/8b40d791-83c6-4cc5-bfe2-6138f9c900ae/image.png" alt=""></p>
<h4 id="승인-요청-function">승인 요청 FUNCTION</h4>
<pre><code>DATA: lt_tab1 LIKE TABLE OF zbexs0010,
ls_tab1 LIKE zbexs0010,
lt_tab2 like TABLE OF zbext0010.


  CASE i_mode.
     WHEN &#39;A&#39;.


        SELECT * from zbext0010  into CORRESPONDING FIELDS OF table lt_tab1
          where stcod = &#39;A&#39;
          AND empno = i_empno
          AND cumon = i_cumon
          AND JPNUM = I_JPNUM.
         LOOP AT lt_tab1 INTO ls_tab1.
         ls_tab1-JPDAT = sy-datum.
         ls_tab1-stcod = &#39;B&#39;.
         MODIFY lt_tab1 FROM ls_tab1.
       ENDLOOP.
           MOVE-CORRESPONDING  lt_Tab1 to lt_tab2.
           MODIFY zbext0010 from TABLE lt_tab2.
      IF sy-subrc = 0.
        e_message =  &#39;성공했습니다.&#39;.
      ELSE.
        e_message =  &#39;실패했습니다.&#39;.
      ENDIF.


  ENDCASE.
    ENDFUNCTION.</code></pre><h4 id="저장-function">저장 FUNCTION</h4>
<pre><code>DATA: lt_tab1 LIKE TABLE OF zbexs0010,
              ls_tab1 LIKE zbexs0010,
              lt_tab2 like TABLE OF zbext0010.


  CASE i_mode.
     WHEN &#39;A&#39;.


        SELECT * from zbext0010  into CORRESPONDING FIELDS OF table lt_tab1
          where stcod = &#39;&#39;
          AND empno = i_empno
          AND cumon = i_cumon
          AND JPNUM = I_JPNUM.
         LOOP AT lt_tab1 INTO ls_tab1.
         ls_tab1-stcod = &#39;A&#39;.

          CALL FUNCTION &#39;NUMBER_GET_NEXT&#39;
          EXPORTING
            nr_range_nr                   = &#39;1&#39;
            object                        = &#39;ZJPNUM&#39;
*           QUANTITY                      = &#39;1&#39;
*           SUBOBJECT                     = &#39; &#39;
*           TOYEAR                        = &#39;0000&#39;
*           IGNORE_BUFFER                 = &#39; &#39;
         IMPORTING
           NUMBER                        = ls_tab1-JPNUM
*           QUANTITY                      =
*           RETURNCODE                    =
*         EXCEPTIONS
*           INTERVAL_NOT_FOUND            = 1
*           NUMBER_RANGE_NOT_INTERN       = 2
*           OBJECT_NOT_FOUND              = 3
*           QUANTITY_IS_0                 = 4
*           QUANTITY_IS_NOT_1             = 5
*           INTERVAL_OVERFLOW             = 6
*           BUFFER_OVERFLOW               = 7
*           OTHERS                        = 8
                  .
        IF sy-subrc &lt;&gt; 0.
         ENDIF.
         MODIFY lt_tab1 FROM ls_tab1.
       ENDLOOP.

           MOVE-CORRESPONDING  lt_Tab1 to lt_tab2.
           MODIFY zbext0010 from TABLE lt_tab2.
      IF sy-subrc = 0.
        e_message =  &#39;성공했습니다.&#39;.
      ELSE.
        e_message =  &#39;실패했습니다.&#39;.
      ENDIF.


  ENDCASE.
    ENDFUNCTION.</code></pre><p>입력 저장 승인.. 승인요청 로직과 비슷하다. UI5상에서 입력하는 그 로직을 짜지 못해서 TEST해볼수 없다. 전표번호 OBJECT를 생성하긴 하였지만 저렇게 넣으면 RFC실행시 전표번호가 들어갈지 잘 모르겠다..</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[PROECT(3)]]></title>
            <link>https://velog.io/@liah--/PROECT2</link>
            <guid>https://velog.io/@liah--/PROECT2</guid>
            <pubDate>Wed, 16 Sep 2020 13:09:03 GMT</pubDate>
            <description><![CDATA[<h4 id="912">9.12</h4>
<p><img src="https://images.velog.io/images/liah--/post/1d482854-e89c-4598-9088-5ec756c332df/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/liah--/post/7a4b202e-1f3f-4d56-b7bf-f30cb6e1833b/image.png" alt=""></p>
<p>ROW추가 할때마다 프로젝트~영수증 첨부 필드는 INPUT필드로 보이게 바인딩걸어줬다.
해당년월 필드는 원래는 날짜필터링을 걸어주었으나, 테이블에 해당년월 필드를 만들어서 RFC로 연결하기 위해 바꿔주었다. 상태필드 또한 RFC로 변경할 예정 !</p>
<p><strong>상태필드 초기값</strong>
<code>this.getView().getModel().setProperty(&quot;/comboData&quot;, &quot;A&quot;);</code></p>
<p><strong>날짜 필드 초기값</strong></p>
<pre><code>var yyyy = oDate.getFullYear();
var mm = oDate.getMonth()+1;


//this.getView().getModel().setProperty(&quot;/dateData&quot;, yyyy+&quot;.&quot;+mm);
thivar oDate = new Date();
s.getView().getModel().setProperty(&quot;/dateData&quot;, yyyy+&quot;.&quot;+mm);</code></pre><p><strong>로우추가 FUNCTION</strong></p>
<pre><code> onRowAdd : function(){


         var rowTableData = this.getView().getModel().getProperty(&quot;/tableRow&quot;);

         var realtable = this.getView().getModel().getProperty(&quot;/tableData&quot;);
         realtable.push({
             PCODE : &quot;&quot;,
             CODHC : &quot;&quot;,
             NOTE : &quot;&quot;,
             PAYWANA : &quot;&quot;,
             PROPR : &quot;&quot;,
             REDATE : &quot;&quot;,
             REPHO : &quot;&quot;,
             ACCPE : &quot;&quot;,
             APPDAT : &quot;&quot;,
             STCODNA : &quot;&quot;,
             RDATE : &quot;&quot;,
             RETTEXT : &quot;&quot;,
             ACDAT : &quot;&quot;
         });
          this.getView().getModel().refresh();

         rowTableData += 1 ;
         this.getView().getModel().setProperty(&quot;/tableRow&quot;, rowTableData);</code></pre><p><strong>INPUT/조회필드</strong></p>
<pre><code>          if(comboData === &quot;A&quot; || comboData === &quot;F&quot; || comboData === &quot;D&quot;){
            this.getView().getModel().setProperty(&quot;/input&quot;, true);
            this.getView().getModel().setProperty(&quot;/text&quot;, false);
          }else{
            this.getView().getModel().setProperty(&quot;/input&quot;, false);
            this.getView().getModel().setProperty(&quot;/text&quot;, true);
          }</code></pre><h4 id="914">9.14</h4>
<p><strong>상태필드가 저장일때만 +버튼이 보이게 하기</strong></p>
<pre><code>      if(comboData === &quot;A&quot;){
                 oModel.setProperty(&quot;/realvisi&quot;, true);
             }else{
                 oModel.setProperty(&quot;/realvisi&quot;, false);</code></pre><h4 id="914--rfc-연동-성공-1">9.14 : RFC 연동 성공 !!!!!!!!!!!!!!!!!1</h4>
<p><img src="https://images.velog.io/images/liah--/post/389bfcfd-6a1d-4fe1-a158-909036c6d398/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/liah--/post/867ab0c8-59ae-499a-8c08-4eceff6addd1/image.png" alt="">
작성하지 않은 날짜 데이터가 입력이 되 빈칸으로 없애주었다.</p>
<p><strong>날짜필드 빈칸으로</strong></p>
<pre><code>             for(var i = 0 ; i &lt; oResultData.TAB1.length ; i++ ){
                 var realREDATE = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/REDATE&quot;);
                  var realAPPDAT = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/APPDAT&quot;);
                  var realRDATE = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/RDATE&quot;);
                  var realACDAT = oModel.getProperty(&quot;/tableData/&quot; + i + &quot;/ACDAT&quot;);

                  if(realREDATE === &quot;0000-00-00&quot;){
                      oModel.setProperty(&quot;/tableData/&quot; + i + &quot;/REDATE&quot;,&quot; &quot;);
                      }
                if(realAPPDAT === &quot;0000-00-00&quot;){
                      oModel.setProperty(&quot;/tableData/&quot; + i + &quot;/APPDAT&quot;,&quot; &quot;);
                      }
                  if(realRDATE === &quot;0000-00-00&quot;){
                      oModel.setProperty(&quot;/tableData/&quot; + i + &quot;/RDATE&quot;,&quot; &quot;);
                      }
                  if(realACDAT  === &quot;0000-00-00&quot;){
                      oModel.setProperty(&quot;/tableData/&quot; + i + &quot;/ACDAT&quot;,&quot; &quot;);
                  }
             }</code></pre><h4 id="조회-펑션모듈">조회 펑션모듈</h4>
<pre><code class="language-CASE">WHEN &#39;A&#39;.
  SELECT *
    FROM zbext0010 AS a
    INNER JOIN zbmdt0030 AS b ON a~PCODE = b~PCODE
     INNER JOIN zbext0030 AS c ON a~codhc = c~codhc
    INTO CORRESPONDING FIELDS OF TABLE lt_tab1
   WHERE a~empno = i_empno AND
                 a~cumon = i_cumon AND
                 a~stcod = i_stcod .</code></pre>
<h4 id="프로젝트상태필드-도메인-벨류-접근하기">프로젝트,상태필드 도메인 벨류 접근하기</h4>
<p>```</p>
<p>  LOOP AT lt_tab1 INTO ls_tab1.
    MOVE-CORRESPONDING  ls_tab1 TO tab1.</p>
<ul>
<li><p>상태코드명 .
  SELECT SINGLE ddtext INTO tab1-stcodna</p>
<pre><code>FROM dd07t WHERE domvalue_l = ls_tab1-stcod
             AND domname = &#39;ZBE_STCOD&#39;
             AND ddlanguage = sy-langu.</code></pre></li>
<li><p>결제방법명
  SELECT SINGLE ddtext INTO tab1-paywana
  FROM dd07t WHERE domvalue_l = ls_tab1-paywa</p>
<pre><code>       AND domname = &#39;ZBE_PAYWA&#39;
       AND ddlanguage = sy-langu.</code></pre><p>  APPEND tab1 TO tab1[].</p>
<p>ENDLOOP.</p>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[project(2)]]></title>
            <link>https://velog.io/@liah--/project</link>
            <guid>https://velog.io/@liah--/project</guid>
            <pubDate>Wed, 16 Sep 2020 12:59:36 GMT</pubDate>
            <description><![CDATA[<h4 id="97일">9.7일</h4>
<p><img src="https://images.velog.io/images/liah--/post/5873c3d9-38fb-459e-9a99-00a1909b63ac/image.png" alt=""></p>
<p>data.picker을 이용해 날짜필드를 만들고 button 3개를 만들어 저장,승인요청,조회 버튼을 만들었다. 테이블은 json 파일을 통해 값을 채워넣음 !
*<em>CONTROLELR *</em></p>
<pre><code>onInit : function(){
    1        var odata = {};
            var oModel = new JSONModel(odata);
            this.getView().setModel(oModel);
            // oninit setting
            this.getView().getModel().setProperty(&quot;/comboData&quot;,&quot;저장&quot;);
            this.getView().getModel().setProperty(&quot;/tableRow&quot;,6);
        },</code></pre><p><strong>VIEW</strong></p>
<pre><code> id=&quot;AppId&quot;
                selectionMode=&quot;MultiToggle&quot;
                rows=&quot;{products&gt;/ProductCollection}&quot;
                visibleRowCount=&quot;{/tableRow}&quot;
                selectionBehavior=&quot;Row&quot;
                rowSelectionChange=&quot;.rowSelection&quot;&gt;</code></pre><h4 id="99일">9.9일</h4>
<p><img src="https://images.velog.io/images/liah--/post/a64040e5-b3e8-4af6-a850-c8881c784239/image.png" alt=""></p>
<p>comboBox를 통해 상태필드를 첨부하였다. view의 table 에 <code>&lt;table:Column visible=&quot;{/input}&quot;</code>으로 input 필드를 만들어 주었다.</p>
<p><strong>날짜 필터링</strong></p>
<pre><code> if(startDate &amp;&amp; endDate){
               var sFromDate = new Date(startDate);
               var sToDate = new Date(endDate);

               var sFromYear = sFromDate.getFullYear();
               var sFromMonth = sFromDate.getMonth()+1 &gt;= 10 ? sFromDate.getMonth()+1 : &quot;0&quot;+(sFromDate.getMonth()+1);
               var sToYear = sToDate.getFullYear();
               var sToMonth = sToDate.getMonth()+1 &gt;= 10 ? sToDate.getMonth()+1 : &quot;0&quot;+(sToDate.getMonth()+1);
               var sToDate = sToDate.getDate() &gt;= 10 ? sToDate.getDate() : &quot;0&quot;+sToDate.getDate();

               var sFromDateInfo = sFromYear.toString()+sFromMonth.toString()+sFromDate.toString();
               var sToDateInfo = sToYear.toString()+sToMonth.toString()+sToDate.toString();
            }
</code></pre><p><strong>상태코드 필터링</strong></p>
<pre><code> if(comboData === &quot;저장&quot; || comboData === &quot;반려(지급)&quot; || comboData === &quot;반려(승인)&quot;){
            this.getView().getModel().setProperty(&quot;/input&quot;,true);
            this.getView().getModel().setProperty(&quot;/text&quot;,false);
          }else{
            this.getView().getModel().setProperty(&quot;/input&quot;,false);
            this.getView().getModel().setProperty(&quot;/text&quot;,true);
          }
</code></pre><p><strong>row추가</strong></p>
<pre><code>onRowAdd : function(){
            var rowTableData = this.getView().getModel().getProperty(&quot;/tableRow&quot;);
            rowTableData +=1;
            this.getView().getModel().setProperty(&quot;/tableRow&quot;,rowTableData);</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[PROJECT(1)]]></title>
            <link>https://velog.io/@liah--/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</link>
            <guid>https://velog.io/@liah--/%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8</guid>
            <pubDate>Sat, 05 Sep 2020 07:00:40 GMT</pubDate>
            <description><![CDATA[<p>TABLE, STRUCTURE, FUNCTION GROUP 만들기</p>
<p><img src="https://images.velog.io/images/liah--/post/75e8c407-ec2b-43a5-bd0e-c20acb12d85a/image.png" alt=""></p>
<p>펑션스펙에서 작성했던 필드를 기준으로 테이블과 구조를 만들었다.</p>
<p><img src="https://images.velog.io/images/liah--/post/36749f62-b7e6-4ace-a659-dc9479e77c26/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/liah--/post/3b53a9f1-4da4-4e3f-9354-f19b7953584d/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/liah--/post/2112a993-88aa-4d89-9cc2-4aaaeba636d5/image.png" alt=""></p>
<p><img src="https://images.velog.io/images/liah--/post/0696d359-9f98-4355-aac8-8d686c8c00b3/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Report program]]></title>
            <link>https://velog.io/@liah--/Report-program</link>
            <guid>https://velog.io/@liah--/Report-program</guid>
            <pubDate>Sun, 23 Aug 2020 13:09:53 GMT</pubDate>
            <description><![CDATA[<p>report program을 실행하였을때, 프로그램의 흐름은 각각의 이벤트를 통해 통제된다.
이벤트 블록은 사용자 액션에 의해 발생하는 이벤트에 의해 호출된다.</p>
<pre><code>DATA : gt_sflight TYPE TABLE OF sflight,
gs_sflight TYPE sflight.
SELECT-OPTIONS s_carrid FOR gs_sflight-carrid. &quot;data를 선언함.</code></pre><p><img src="https://images.velog.io/images/liah--/post/2b487ccc-97ae-40b1-8be9-7aed75da9e66/8.23-1.PNG" alt=""></p>
<p>▶값을 입력받을 수 있는 화면이 생성된다.</p>
<p><strong>SELECTION SCREEN</strong> : 조회 조건 값을 입력받을 수 있는 화면.
                    INPUT 필드와 같이 선택 조건을 입력할 수 있는 화면 제공.</p>
<p><strong>SELECT-OPTIONS</strong> : 2개의 INPUT 필드를 통해 다양한 조건 값을 입력받을 수 있다.
                    RANGE 변수와 같은 이터널 테이블을 가지고 있다.
                    인터널 테이블의 형태라 APPEND 구문으로 DATA를 추가시켜야한다.
                    <strong>DATA 할당과 APPEND는 같이 움직임</strong></p>
<p><strong>INITIALIZATION</strong> : SELECTION SCREEN 화면이 열리기 전에 화면 필드 값을 초기화 하는데 주로 사용.
필드는 초기화, DEFAULT, GUI STATUS, TITLEBAR 을 세팅</p>
<pre><code>INITIALIZATION.
P_1 = &#39;AA&#39;.</code></pre><p><strong>AT SELECTION-SCREEN</strong> : 사용자가 SELECTION SCREEN에 값을 입력하기 전/후에 작동된다.
                          사용자 액션에 대한 반응하고, 화면 필드를 조절한다.</p>
<p> ▶ 항공사 ID에 &#39;AA&#39;외의 값을 입력하면, 에러 메세지를 출력함.  </p>
<pre><code>TABLES : scarr. 
SELECT-OPTIONS ： s_carrid FOR scarr-carrid. 
AT SELECTION-SCREEN ON S_carrid.
IF s_carrid-low NE &#39;AA&#39; .
MESSAGE &#39;IT IS DDANG&#39; TYPE &#39;E&#39; 
ENDIF.</code></pre><p><strong>START-OF-SELECTION</strong> : 사용자가 실행버튼(F8)을 클릭하면 DB에서 값을 읽어온다.
                         일반적으로 SELECT 구문이 사용되는 블록이다. (SQL)</p>
<pre><code>SELECT carrid connid
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
WHERE carrid IN s_carrid.</code></pre><p><strong>END-OF-SELECTION</strong> : DATA를 읽은 후의 작업을 수행하는 블록이다.
                       화면에 WRITE하기 전에 수행된다.
                       인터널 테이블에 저장된 DATA들을 변형하는 작업.</p>
<pre><code>LOOP AT gt_sflight INTO gs_sflight.
WRITE: / gs_sflight-carrid, gs_sflight-connid.
ENDLOOP.</code></pre><pre><code>INITIALIZATION. &quot;이벤트
s_carrid-sign = &#39;I&#39;.
s_carrid-option = &#39;EQ&#39;.
s_carrid-low = &#39;AA&#39;.
APPEND s_carrid.

START-OF-SELECTION.
SELECT carrid connid
FROM sflight
INTO CORRESPONDING FIELDS OF TABLE gt_sflight
WHERE carrid IN s_carrid.

END-OF-SELECTION.
LOOP AT gt_sflight INTO gs_sflight.
WRITE: / gs_sflight-carrid, gs_sflight-connid.
ENDLOOP.</code></pre><p><img src="https://images.velog.io/images/liah--/post/c15efe17-d874-470b-af92-9316b2d29e3d/8.23-2.PNG" alt=""></p>
]]></description>
        </item>
    </channel>
</rss>