<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>boy0</title>
    <link>https://boy0.tistory.com/</link>
    <description>이곳은 boy0의 개인 블로그 입니다.
Web Dynpro ABAP (WDA)의 일을 주로 합니다.
업무연락은 링크드인으로 http://www.linkedin.com/in/boy0korea</description>
    <language>ko</language>
    <pubDate>Tue, 12 May 2026 07:01:18 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Derby</managingEditor>
    <image>
      <title>boy0</title>
      <url>https://t1.daumcdn.net/cfile/tistory/132514324CD77FA939</url>
      <link>https://boy0.tistory.com</link>
    </image>
    <item>
      <title>CONVERSION_EXIT 컨버전루틴 총정리 (feat. 알파컨버전)</title>
      <link>https://boy0.tistory.com/196</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;도메인 속성중에 컨버전루틴을 설정하는 곳이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Output Chracteristics 아래에 Routine.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;407&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKghEH/btsOIYFLk39/2v0nUl7AQ0QZYyVfxp51z1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKghEH/btsOIYFLk39/2v0nUl7AQ0QZYyVfxp51z1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKghEH/btsOIYFLk39/2v0nUl7AQ0QZYyVfxp51z1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKghEH%2FbtsOIYFLk39%2F2v0nUl7AQ0QZYyVfxp51z1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;650&quot; height=&quot;407&quot; data-origin-width=&quot;650&quot; data-origin-height=&quot;407&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ALPHA 처럼 5글자로 구성됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파컨버전은 대표적인 컨버전루틴(=컨버전엑싯)입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파컨버전이 걸려 있으면 내부값(디버깅에서볼때)은 앞에 0이 채워져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;외부표시(화면에서볼때)는 앞에 0이 지워져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 내부값은 '0000012345' 이고 외부표시는 '12345' 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 내부값과 외부표시를 다르게 사용하는걸 컨버전루틴이라고 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파컨버전은 왜 쓰는걸까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쓸모가 있습니다. 문자를 숫자처럼 정렬 하기 위해서 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 '9' 와 '10' 을 크기 비교하여 정렬한다고 하면 문자 기준으로는 '10' 다음 '9' 순서로 정렬이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 앞에 0을 채워서 같은 길이를 가진다면 '9' 다음 '10' 순서로 정렬이 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날짜와 시간 타입을 살펴 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인에는 컨버전루틴이 없습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lbrDe/btsOJIhHH4U/1xJAVNjXyyyZIu2pUwa7sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lbrDe/btsOJIhHH4U/1xJAVNjXyyyZIu2pUwa7sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lbrDe/btsOJIhHH4U/1xJAVNjXyyyZIu2pUwa7sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlbrDe%2FbtsOJIhHH4U%2F1xJAVNjXyyyZIu2pUwa7sk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;675&quot; height=&quot;404&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내부값이 '99991231' 이면 외부표시는 '9999.12.31' 로 나오는건 어떻게 된걸까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그이유는 User Profile의 Date Format 설정에 맞게 자동 컨버전되기 때문입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QIExF/btsOInTxNqL/neYn5d7P8c790zjtqAs53K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QIExF/btsOInTxNqL/neYn5d7P8c790zjtqAs53K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QIExF/btsOInTxNqL/neYn5d7P8c790zjtqAs53K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQIExF%2FbtsOInTxNqL%2FneYn5d7P8c790zjtqAs53K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;532&quot; height=&quot;310&quot; data-origin-width=&quot;532&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨버전루틴을 만드는 방법은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만드는 방법이 독특한데요. 규칙에 맞게 펑션 2개를 만들면 됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;69&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y6FmT/btsOG7YiZTQ/NZE9GkttfuUm7ZMt7RDYYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y6FmT/btsOG7YiZTQ/NZE9GkttfuUm7ZMt7RDYYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y6FmT/btsOG7YiZTQ/NZE9GkttfuUm7ZMt7RDYYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy6FmT%2FbtsOG7YiZTQ%2FNZE9GkttfuUm7ZMt7RDYYk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;636&quot; height=&quot;69&quot; data-origin-width=&quot;636&quot; data-origin-height=&quot;69&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파컨버젼은 위 2개 펑션으로 구성되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명명 규칙은 CONVERSION_EXIT_컨버전명_INPUT 과 CONVERSION_EXIT_컨버전명_OUTPUT 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;알파컨버전의 펑션을 복사하여 만드세요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkic4z/btsOKKtrjJS/G2GMxhtBZ8OvBIkPlW2xrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkic4z/btsOKKtrjJS/G2GMxhtBZ8OvBIkPlW2xrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkic4z/btsOKKtrjJS/G2GMxhtBZ8OvBIkPlW2xrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkic4z%2FbtsOKKtrjJS%2FG2GMxhtBZ8OvBIkPlW2xrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;692&quot; height=&quot;337&quot; data-origin-width=&quot;692&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;257&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAnpPq/btsOJMMjEUy/Hoxz4BcTW6maakt2N7vPi0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAnpPq/btsOJMMjEUy/Hoxz4BcTW6maakt2N7vPi0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAnpPq/btsOJMMjEUy/Hoxz4BcTW6maakt2N7vPi0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAnpPq%2FbtsOJMMjEUy%2FHoxz4BcTW6maakt2N7vPi0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;257&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;257&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도메인에 연결을 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;331&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SnBaO/btsOI9aoZYi/eUwINJKGbFUoTsNyy3s4OK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SnBaO/btsOI9aoZYi/eUwINJKGbFUoTsNyy3s4OK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SnBaO/btsOI9aoZYi/eUwINJKGbFUoTsNyy3s4OK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSnBaO%2FbtsOI9aoZYi%2FeUwINJKGbFUoTsNyy3s4OK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;626&quot; height=&quot;331&quot; data-origin-width=&quot;626&quot; data-origin-height=&quot;331&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 해보니 잘 되네요.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ch1dXx/btsOKiYx4yX/CFbfGKDrHjoKNI1OBQC2m1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ch1dXx/btsOKiYx4yX/CFbfGKDrHjoKNI1OBQC2m1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ch1dXx/btsOKiYx4yX/CFbfGKDrHjoKNI1OBQC2m1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fch1dXx%2FbtsOKiYx4yX%2FCFbfGKDrHjoKNI1OBQC2m1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;654&quot; height=&quot;712&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;40&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brrPDX/btsOKIJeMOJ/U89RPCyg6w92tAhxni3tq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brrPDX/btsOKIJeMOJ/U89RPCyg6w92tAhxni3tq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brrPDX/btsOKIJeMOJ/U89RPCyg6w92tAhxni3tq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbrrPDX%2FbtsOKIJeMOJ%2FU89RPCyg6w92tAhxni3tq0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;169&quot; height=&quot;40&quot; data-origin-width=&quot;169&quot; data-origin-height=&quot;40&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;712&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bubuRz/btsOKhyx55T/7Jins1AcephpaXukCCxHx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bubuRz/btsOKhyx55T/7Jins1AcephpaXukCCxHx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bubuRz/btsOKhyx55T/7Jins1AcephpaXukCCxHx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbubuRz%2FbtsOKhyx55T%2F7Jins1AcephpaXukCCxHx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;654&quot; height=&quot;712&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;712&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;43&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eLJW69/btsOKhZDz1s/ctbIn3HdNAMEk8EF6T8ol0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eLJW69/btsOKhZDz1s/ctbIn3HdNAMEk8EF6T8ol0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eLJW69/btsOKhZDz1s/ctbIn3HdNAMEk8EF6T8ol0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeLJW69%2FbtsOKhZDz1s%2FctbIn3HdNAMEk8EF6T8ol0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;166&quot; height=&quot;43&quot; data-origin-width=&quot;166&quot; data-origin-height=&quot;43&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/196</guid>
      <comments>https://boy0.tistory.com/196#entry196comment</comments>
      <pubDate>Fri, 20 Jun 2025 13:35:15 +0900</pubDate>
    </item>
    <item>
      <title>SAP ABAP Currency 총정리</title>
      <link>https://boy0.tistory.com/195</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;개념: &lt;br /&gt;ABAP에서&amp;nbsp;금액&amp;nbsp;필드(CURR:Currency&amp;nbsp;field)는&amp;nbsp;통화키&amp;nbsp;필드(CUKY:Currency&amp;nbsp;key)가&amp;nbsp;연결되어&amp;nbsp;있어야&amp;nbsp;합니다. &lt;br /&gt;각&amp;nbsp;통화에&amp;nbsp;따라&amp;nbsp;금액&amp;nbsp;필드의&amp;nbsp;소수점을&amp;nbsp;해석하는&amp;nbsp;방법이&amp;nbsp;다릅니다. &lt;br /&gt;예를&amp;nbsp;들어&amp;nbsp;금액&amp;nbsp;필드의&amp;nbsp;1.00&amp;nbsp;이라는&amp;nbsp;값을&amp;nbsp;USD&amp;nbsp;통화로는&amp;nbsp;1$로&amp;nbsp;해석하고&amp;nbsp;KRW&amp;nbsp;통화로는&amp;nbsp;100원으로&amp;nbsp;해석합니다. &lt;br /&gt;금액&amp;nbsp;필드의&amp;nbsp;값을&amp;nbsp;통화&amp;nbsp;없이&amp;nbsp;값&amp;nbsp;그대로&amp;nbsp;사용하게&amp;nbsp;되면&amp;nbsp;100원을&amp;nbsp;1원으로&amp;nbsp;보게&amp;nbsp;됩니다. &lt;br /&gt;금액에는&amp;nbsp;반드시&amp;nbsp;통화가&amp;nbsp;있어야&amp;nbsp;합니다. &lt;br /&gt;USD&amp;nbsp;통화일때는&amp;nbsp;무시해도&amp;nbsp;되는&amp;nbsp;함정이&amp;nbsp;있어서&amp;nbsp;USD만&amp;nbsp;테스트하는&amp;nbsp;실수를&amp;nbsp;주의해야&amp;nbsp;합니다. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;흔한&amp;nbsp;오류: &lt;br /&gt;USD는&amp;nbsp;잘&amp;nbsp;되는데&amp;nbsp;KRW&amp;nbsp;통화일때&amp;nbsp;1/100&amp;nbsp;으로&amp;nbsp;표시&amp;nbsp;또는&amp;nbsp;처리&amp;nbsp;되어서&amp;nbsp;곱하기&amp;nbsp;100&amp;nbsp;을&amp;nbsp;하도록&amp;nbsp;로직&amp;nbsp;작성한다. &lt;br /&gt;인터페이스&amp;nbsp;받아서&amp;nbsp;SAP에&amp;nbsp;저장하는데&amp;nbsp;KRW&amp;nbsp;통화일때&amp;nbsp;100배로&amp;nbsp;처리&amp;nbsp;되어서&amp;nbsp;나누기&amp;nbsp;100을&amp;nbsp;하도록&amp;nbsp;로직&amp;nbsp;작성한다. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;무엇이&amp;nbsp;문제인가: &lt;br /&gt;KRW인지&amp;nbsp;체크하여&amp;nbsp;곱하기&amp;nbsp;100,&amp;nbsp;나누기&amp;nbsp;100을&amp;nbsp;하면&amp;nbsp;안됩니다. &lt;br /&gt;표준적인&amp;nbsp;방법으로&amp;nbsp;통화를&amp;nbsp;적용하여&amp;nbsp;계산하세요. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;왜&amp;nbsp;이렇게&amp;nbsp;하나요: &lt;br /&gt;각&amp;nbsp;통화별로&amp;nbsp;금액의&amp;nbsp;최소&amp;nbsp;단위가&amp;nbsp;다르기&amp;nbsp;때문입니다. &lt;br /&gt;USD는&amp;nbsp;소수점&amp;nbsp;아래&amp;nbsp;2&amp;nbsp;자리까지&amp;nbsp;표시를&amp;nbsp;합니다.&amp;nbsp;0.01$(=1센트)&amp;nbsp;가&amp;nbsp;최소단위&amp;nbsp;입니다. &lt;br /&gt;KRW는&amp;nbsp;소수점이&amp;nbsp;없습니다.&amp;nbsp;1원이&amp;nbsp;최소단위&amp;nbsp;입니다.&amp;nbsp;소수점을&amp;nbsp;입력하면&amp;nbsp;안됩니다. &lt;br /&gt;이런&amp;nbsp;차이를&amp;nbsp;수용하기&amp;nbsp;위한&amp;nbsp;방법입니다. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;관련&amp;nbsp;테이블: &lt;br /&gt;통화&amp;nbsp;마스터&amp;nbsp;테이블&amp;nbsp;TCURC&amp;nbsp;별&amp;nbsp;내용&amp;nbsp;없음 &lt;br /&gt;통화별&amp;nbsp;소수점&amp;nbsp;자리수&amp;nbsp;테이블&amp;nbsp;TCURX&amp;nbsp;기본값&amp;nbsp;2인&amp;nbsp;경우&amp;nbsp;생략되어&amp;nbsp;있음. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;내부(SAP)&amp;nbsp;-&amp;gt;&amp;nbsp;외부: &lt;br /&gt;WRITE 구문 (추천)&lt;br /&gt;BAPI_CURRENCY_CONV_TO_EXTERNAL &lt;br /&gt;CURRENCY_AMOUNT_SAP_TO_DISPLAY &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;외부&amp;nbsp;-&amp;gt;&amp;nbsp;내부(SAP): &lt;br /&gt;BAPI_CURRENCY_CONV_TO_INTERNAL &lt;br /&gt;CURRENCY_AMOUNT_DISPLAY_TO_SAP &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;내부&amp;nbsp;외부&amp;nbsp;변환이&amp;nbsp;없어도&amp;nbsp;자동으로&amp;nbsp;적용되는&amp;nbsp;경우: &lt;br /&gt;스트럭쳐에서&amp;nbsp;통화필드가&amp;nbsp;연결되어&amp;nbsp;있는&amp;nbsp;금액&amp;nbsp;필드를&amp;nbsp;SAP&amp;nbsp;화면에&amp;nbsp;표시하면&amp;nbsp;자동&amp;nbsp;적용. &lt;br /&gt;&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;변환이&amp;nbsp;필요한&amp;nbsp;경우: &lt;br /&gt;고정된&amp;nbsp;통화라서&amp;nbsp;통화필드가&amp;nbsp;연결되지&amp;nbsp;않은&amp;nbsp;금액필드를&amp;nbsp;화면에&amp;nbsp;표시하는&amp;nbsp;경우. &lt;br /&gt;금액을&amp;nbsp;인터페이스로&amp;nbsp;다른&amp;nbsp;시스템에&amp;nbsp;주거나&amp;nbsp;받는&amp;nbsp;경우. &lt;br /&gt;BDC로&amp;nbsp;작성한&amp;nbsp;프로그램에서&amp;nbsp;금액&amp;nbsp;입력시&amp;nbsp;외부&amp;nbsp;값으로&amp;nbsp;바꿔야함. &lt;br /&gt;금액&amp;nbsp;필드를&amp;nbsp;숫자&amp;nbsp;필드로&amp;nbsp;타입&amp;nbsp;변환할때&amp;nbsp;외부&amp;nbsp;값으로&amp;nbsp;바꿔야함. &lt;br /&gt;숫자&amp;nbsp;필드로&amp;nbsp;입력&amp;nbsp;받아서&amp;nbsp;DB에는&amp;nbsp;금액필드로&amp;nbsp;저장하는&amp;nbsp;경우&amp;nbsp;내부&amp;nbsp;값으로&amp;nbsp;바꿔야함. &lt;/li&gt;
&lt;/ul&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/195</guid>
      <comments>https://boy0.tistory.com/195#entry195comment</comments>
      <pubDate>Fri, 15 Nov 2024 15:47:29 +0900</pubDate>
    </item>
    <item>
      <title>SY-DATUM 과 SY-DATLO 차이</title>
      <link>https://boy0.tistory.com/194</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;타임존이 시스템(서버) 기준:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날짜: &lt;span style=&quot;color: #ee2323;&quot;&gt;SY-DATUM&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간: SY-UZEIT&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존: 펑션 호출 GET_SYSTEM_TIMEZONE 또는 테이블 TTZCU&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존이 사용자(로컬) 기준:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날짜: &lt;span style=&quot;color: #ee2323;&quot;&gt;SY-DATLO&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간: SY-TIMLO&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;타임존:&lt;span&gt; &lt;/span&gt;&lt;/span&gt;SY-ZONLO&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존이 UTC(세계표준시) 기준:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날짜: GET TIME STAMP FIELD lv_ts. lv_ts(8)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시간: GET TIME STAMP FIELD lv_ts. lv_ts+8(6)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존: UTC&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존이 다른 경우의 변환 로직:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CONVERT&amp;nbsp;DATE&amp;nbsp;lv_date_from&amp;nbsp;TIME&amp;nbsp;lv_time_from&amp;nbsp;INTO&amp;nbsp;TIME&amp;nbsp;STAMP&amp;nbsp;lv_ts&amp;nbsp;TIME&amp;nbsp;ZONE&amp;nbsp;lv_tz_from. &lt;br /&gt;CONVERT&amp;nbsp;TIME&amp;nbsp;STAMP&amp;nbsp;lv_ts&amp;nbsp;TIME&amp;nbsp;ZONE&amp;nbsp;lv_tz_to&amp;nbsp;INTO&amp;nbsp;DATE&amp;nbsp;lv_date_to&amp;nbsp;TIME&amp;nbsp;lv_time_to. &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존에 대한 이해가 필요한 경우 아래 글 참고:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://boy0.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://boy0.tistory.com/181&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1704353363901&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;ABAP TIMESTAMP 총정리&quot; data-og-description=&quot;타임스탬프로 사용되는 타입은 두가지가 있습니다. TIMESTAMP : 15자리 YYYYMMDDhhmmss TIMESTAMPL : 21자리 YYYYMMDDhhmmss.ssssss 주로 사용하는 15자리 TIMESTAMP 를 기준으로 설명하겠습니다. 예를 들어 인천 에서 &quot; data-og-host=&quot;boy0.tistory.com&quot; data-og-source-url=&quot;https://boy0.tistory.com/181&quot; data-og-url=&quot;https://boy0.tistory.com/181&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ejGpIW/hyUXN5OXra/MA2U9Rat548pZSdJCAjQ11/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/AiHXD/hyUXL71b9y/S6uDmR6TFWmfqEfuez0Ti1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://boy0.tistory.com/181&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://boy0.tistory.com/181&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ejGpIW/hyUXN5OXra/MA2U9Rat548pZSdJCAjQ11/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/AiHXD/hyUXL71b9y/S6uDmR6TFWmfqEfuez0Ti1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;ABAP TIMESTAMP 총정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;타임스탬프로 사용되는 타입은 두가지가 있습니다. TIMESTAMP : 15자리 YYYYMMDDhhmmss TIMESTAMPL : 21자리 YYYYMMDDhhmmss.ssssss 주로 사용하는 15자리 TIMESTAMP 를 기준으로 설명하겠습니다. 예를 들어 인천 에서&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;boy0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/194</guid>
      <comments>https://boy0.tistory.com/194#entry194comment</comments>
      <pubDate>Thu, 4 Jan 2024 16:41:34 +0900</pubDate>
    </item>
    <item>
      <title>abap으로 open API (RESTful) 호출하기</title>
      <link>https://boy0.tistory.com/193</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;RESTful API 호출하는 예제 프로그램.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;*&amp;---------------------------------------------------------------------*
*&amp; Report ZRESTFUL_API
*&amp;---------------------------------------------------------------------*
*&amp;
*&amp;---------------------------------------------------------------------*
REPORT zrestful_api.

PARAMETERS: p_string TYPE string.

TYPES: BEGIN OF ts_req,
         BEGIN OF argument,
           type     TYPE string,
           question TYPE string,
         END OF argument,
       END OF ts_req,
       BEGIN OF ts_res_irinfo,
         wiki_title TYPE string,
         sent       TYPE string,
         url        TYPE string,
       END OF ts_res_irinfo,
       BEGIN OF ts_res_answerinfo,
         rank       TYPE i,
         answer     TYPE string,
         confidence TYPE i,
         url        TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
       END OF ts_res_answerinfo,
       BEGIN OF ts_res,
         result TYPE string,
         BEGIN OF return_object,
           BEGIN OF wikiinfo,
             irinfo     TYPE STANDARD TABLE OF ts_res_irinfo WITH DEFAULT KEY,
             answerinfo TYPE STANDARD TABLE OF ts_res_answerinfo WITH DEFAULT KEY,
           END OF wikiinfo,
         END OF return_object,
       END OF ts_res.

DATA: lv_url      TYPE string,
      ls_req      TYPE ts_req,
      lv_req_json TYPE string,
      lo_client   TYPE REF TO if_http_client,
      lv_message  TYPE string,
      lv_res_json TYPE string,
      ls_res      TYPE ts_res.

* 위키백과 QA API
* https://aiopen.etri.re.kr/guide/WikiQA
lv_url = |http://aiopen.etri.re.kr:8000/WikiQA|.
ls_req-argument-type = 'hybridqa'.
ls_req-argument-question = p_string.

&quot;REQ to json
/ui2/cl_json=&gt;serialize(
  EXPORTING
    data             = ls_req             &quot; Data to serialize
    pretty_name      = /ui2/cl_json=&gt;pretty_mode-low_case      &quot; Pretty Print property names
  RECEIVING
    r_json           = lv_req_json           &quot; JSON string
).

&quot;HTTP create
cl_http_client=&gt;create_by_url(
  EXPORTING
    url                    = lv_url             &quot; URL
  IMPORTING
    client                 = lo_client          &quot; HTTP Client Abstraction
  EXCEPTIONS
    argument_not_found     = 1               &quot; Communication parameter (host or service) not available
    plugin_not_active      = 2               &quot; HTTP/HTTPS communication not available
    internal_error         = 3               &quot; Internal error (e.g. name too long)
    pse_not_found          = 4               &quot; PSE not found
    pse_not_distrib        = 5               &quot; PSE not distributed
    pse_errors             = 6               &quot; General PSE error
    OTHERS                 = 7
).
IF sy-subrc &lt;&gt; 0.
  MESSAGE 'HTTP error' TYPE 'E'.
  RETURN.
ENDIF.

&quot; HTTP request
lo_client-&gt;request-&gt;set_method(
    method = if_http_request=&gt;co_request_method_post
).
lo_client-&gt;request-&gt;set_header_field(
  EXPORTING
    name  = 'Content-Type'
    value = 'application/json'
).
lo_client-&gt;request-&gt;set_header_field(
  EXPORTING
    name  = 'Authorization'
    value = 'cfd006b6-7766-42ca-88fc-3cd1e1c357f7'
).
lo_client-&gt;request-&gt;set_cdata(
  EXPORTING
    data   = lv_req_json
).

&quot;HTTP send
lo_client-&gt;send(
  EXCEPTIONS
    http_communication_failure = 1                  &quot; Communication Error
    http_invalid_state         = 2                  &quot; Invalid state
    http_processing_failed     = 3                  &quot; Error when processing method
    http_invalid_timeout       = 4                  &quot; Invalid Time Entry
    OTHERS                     = 5
).
IF sy-subrc &lt;&gt; 0.
  lo_client-&gt;get_last_error(
    IMPORTING
      message        = lv_message
  ).
  MESSAGE lv_message TYPE 'E'.
  RETURN.
ENDIF.

&quot;HTTP receive
lo_client-&gt;receive(
  EXCEPTIONS
    http_communication_failure = 1 &quot; Communication Error
    http_invalid_state         = 2 &quot; Invalid state
    http_processing_failed     = 3 &quot; Error when processing method
    OTHERS                     = 4
).
IF sy-subrc &lt;&gt; 0.
  lo_client-&gt;get_last_error(
    IMPORTING
      message        = lv_message
  ).
  MESSAGE lv_message TYPE 'E'.
  RETURN.
ENDIF.

&quot;HTTP response
IF lo_client-&gt;response IS NOT INITIAL.
  lv_res_json = lo_client-&gt;response-&gt;get_cdata( ).
ENDIF.

&quot;json to RES
/ui2/cl_json=&gt;deserialize(
  EXPORTING
    json             = lv_res_json             &quot; JSON string
  CHANGING
    data             = ls_res             &quot; Data to serialize
).
*BREAK-POINT.

IF ls_res-return_object-wikiinfo-answerinfo IS NOT INITIAL.
  cl_demo_output=&gt;display( ls_res-return_object-wikiinfo-answerinfo[ 1 ]-answer ).
ENDIF.
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/193</guid>
      <comments>https://boy0.tistory.com/193#entry193comment</comments>
      <pubDate>Wed, 20 Dec 2023 12:53:50 +0900</pubDate>
    </item>
    <item>
      <title>abap으로 ZIP 압축하기</title>
      <link>https://boy0.tistory.com/192</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;ZIP 압축하는 예제 프로그램.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report ZZIP
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp;
*&amp;amp;---------------------------------------------------------------------*
REPORT zzip.

DATA: lt_file_table TYPE filetable,
      ls_file_table TYPE file_table,
      lv_rc         TYPE i,
      lv_filename   TYPE string,
      lv_path       TYPE string,
      lv_fullpath   TYPE string,
      lv_filelength TYPE i,
      lt_temptable  TYPE w3mimetabtype,
      lv_xstring    TYPE xstring,
      lo_zip        TYPE REF TO cl_abap_zip.

cl_gui_frontend_services=&amp;gt;file_open_dialog(
  EXPORTING
*    window_title            =                  &quot; Title Of File Open Dialog
*    default_extension       =                  &quot; Default Extension
*    default_filename        =                  &quot; Default File Name
*    file_filter             =                  &quot; File Extension Filter String
*    with_encoding           =                  &quot; File Encoding
*    initial_directory       =                  &quot; Initial Directory
    multiselection          = abap_true                 &quot; Multiple selections poss.
  CHANGING
    file_table              = lt_file_table                 &quot; Table Holding Selected Files
    rc                      = lv_rc                 &quot; Return Code, Number of Files or -1 If Error Occurred
*    user_action             =                  &quot; User Action (See Class Constants ACTION_OK, ACTION_CANCEL)
*    file_encoding           =
  EXCEPTIONS
    file_open_dialog_failed = 1                &quot; &quot;Open File&quot; dialog failed
    cntl_error              = 2                &quot; Control error
    error_no_gui            = 3                &quot; No GUI available
    not_supported_by_gui    = 4                &quot; GUI does not support this
    OTHERS                  = 5
).
IF sy-subrc &amp;lt;&amp;gt; 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

CHECK: lt_file_table IS NOT INITIAL.
CREATE OBJECT lo_zip.
lo_zip-&amp;gt;support_unicode_names = abap_true.

LOOP AT lt_file_table INTO ls_file_table.
  CLEAR: lv_filename, lv_filelength, lt_temptable, lv_xstring.

  lv_filename = ls_file_table-filename.
  cl_gui_frontend_services=&amp;gt;gui_upload(
    EXPORTING
      filename                = lv_filename            &quot; Name of file
      filetype                = 'BIN'            &quot; File Type (ASCII, Binary)
*      has_field_separator     = space            &quot; Columns Separated by Tabs in Case of ASCII Upload
*      header_length           = 0                &quot; Length of Header for Binary Data
*      read_by_line            = 'X'              &quot; File Written Line-By-Line to the Internal Table
*      dat_mode                = space            &quot; Numeric and date fields are in DAT format in WS_DOWNLOAD
*      codepage                =                  &quot; Character Representation for Output
*      ignore_cerr             = abap_true        &quot; Ignore character set conversion errors?
*      replacement             = '#'              &quot; Replacement Character for Non-Convertible Characters
*      virus_scan_profile      =                  &quot; Virus Scan Profile
    IMPORTING
      filelength              = lv_filelength                  &quot; File Length
*      header                  =                  &quot; File Header in Case of Binary Upload
    CHANGING
      data_tab                = lt_temptable                 &quot; Transfer table for file contents
*      isscanperformed         = space            &quot; File already scanned
    EXCEPTIONS
      file_open_error         = 1                &quot; File does not exist and cannot be opened
      file_read_error         = 2                &quot; Error when reading file
      no_batch                = 3                &quot; Cannot execute front-end function in background
      gui_refuse_filetransfer = 4                &quot; Incorrect front end or error on front end
      invalid_type            = 5                &quot; Incorrect parameter FILETYPE
      no_authority            = 6                &quot; No upload authorization
      unknown_error           = 7                &quot; Unknown error
      bad_data_format         = 8                &quot; Cannot Interpret Data in File
      header_not_allowed      = 9                &quot; Invalid header
      separator_not_allowed   = 10               &quot; Invalid separator
      header_too_long         = 11               &quot; Header information currently restricted to 1023 bytes
      unknown_dp_error        = 12               &quot; Error when calling data provider
      access_denied           = 13               &quot; Access to file denied.
      dp_out_of_memory        = 14               &quot; Not enough memory in data provider
      disk_full               = 15               &quot; Storage medium is full.
      dp_timeout              = 16               &quot; Data provider timeout
      not_supported_by_gui    = 17               &quot; GUI does not support this
      error_no_gui            = 18               &quot; GUI not available
      OTHERS                  = 19
  ).
  IF sy-subrc &amp;lt;&amp;gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
    EXPORTING
      input_length = lv_filelength
*     first_line   = 0
*     last_line    = 0
    IMPORTING
      buffer       = lv_xstring
    TABLES
      binary_tab   = lt_temptable
    EXCEPTIONS
      failed       = 1
      OTHERS       = 2.
  IF sy-subrc &amp;lt;&amp;gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  CALL FUNCTION 'SO_SPLIT_FILE_AND_PATH'
    EXPORTING
      full_name     = ls_file_table-filename
    IMPORTING
      stripped_name = lv_filename
    EXCEPTIONS
      x_error       = 1
      OTHERS        = 2.
  IF sy-subrc &amp;lt;&amp;gt; 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
      WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  lo_zip-&amp;gt;add(
    EXPORTING
      name           = lv_filename
      content        = lv_xstring
*      compress_level = 6                &quot; Level of Compression
  ).

ENDLOOP.

lv_xstring = lo_zip-&amp;gt;save( ).

CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
  EXPORTING
    buffer        = lv_xstring
  IMPORTING
    output_length = lv_filelength
  TABLES
    binary_tab    = lt_temptable.

cl_gui_frontend_services=&amp;gt;file_save_dialog(
  EXPORTING
*    window_title              =                  &quot; Window Title
    default_extension         = 'ZIP'                 &quot; Default Extension
    default_file_name         = 'a.zip'                 &quot; Default File Name
*    with_encoding             =
    file_filter               = 'ZIP(*.ZIP)|*.ZIP'                 &quot; File Type Filter Table
*    initial_directory         =                  &quot; Initial Directory
*    prompt_on_overwrite       = 'X'
  CHANGING
    filename                  = lv_filename                 &quot; File Name to Save
    path                      = lv_path                 &quot; Path to File
    fullpath                  = lv_fullpath                 &quot; Path + File Name
*    user_action               =                  &quot; User Action (C Class Const ACTION_OK, ACTION_OVERWRITE etc)
*    file_encoding             =
  EXCEPTIONS
    cntl_error                = 1                &quot; Control error
    error_no_gui              = 2                &quot; No GUI available
    not_supported_by_gui      = 3                &quot; GUI does not support this
    invalid_default_file_name = 4                &quot; Invalid default file name
    OTHERS                    = 5
).
IF sy-subrc &amp;lt;&amp;gt; 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.

cl_gui_frontend_services=&amp;gt;gui_download(
  EXPORTING
    bin_filesize              = lv_filelength                     &quot; File length for binary files
    filename                  = lv_fullpath                     &quot; Name of file
    filetype                  = 'BIN'                &quot; File type (ASCII, binary ...)
*    append                    = space                &quot; Character Field of Length 1
*    write_field_separator     = space                &quot; Separate Columns by Tabs in Case of ASCII Download
*    header                    = '00'                 &quot; Byte Chain Written to Beginning of File in Binary Mode
*    trunc_trailing_blanks     = space                &quot; Do not Write Blank at the End of Char Fields
*    write_lf                  = 'X'                  &quot; Insert CR/LF at End of Line in Case of Char Download
*    col_select                = space                &quot; Copy Only Selected Columns of the Table
*    col_select_mask           = space                &quot; Vector Containing an 'X' for the Column To Be Copied
*    dat_mode                  = space                &quot; Numeric and date fields are in DAT format in WS_DOWNLOAD
*    confirm_overwrite         = space                &quot; Overwrite File Only After Confirmation
*    no_auth_check             = space                &quot; Switch off Check for Access Rights
*    codepage                  =                      &quot; Character Representation for Output
*    ignore_cerr               = abap_true            &quot; Ignore character set conversion errors?
*    replacement               = '#'                  &quot; Replacement Character for Non-Convertible Characters
*    write_bom                 = space                &quot; If set, writes a Unicode byte order mark
*    trunc_trailing_blanks_eol = 'X'                  &quot; Remove Trailing Blanks in Last Column
*    wk1_n_format              = space
*    wk1_n_size                = space
*    wk1_t_format              = space
*    wk1_t_size                = space
*    show_transfer_status      = 'X'                  &quot; Enables suppression of transfer status message
*    fieldnames                =                      &quot; Table Field Names
*    write_lf_after_last_line  = 'X'                  &quot; Writes a CR/LF after final data record
*    virus_scan_profile        = '/SCET/GUI_DOWNLOAD' &quot; Virus Scan Profile
*  IMPORTING
*    filelength                =                      &quot; Number of bytes transferred
  CHANGING
    data_tab                  = lt_temptable                     &quot; Transfer table
  EXCEPTIONS
    file_write_error          = 1                    &quot; Cannot write to file
    no_batch                  = 2                    &quot; Cannot execute front-end function in background
    gui_refuse_filetransfer   = 3                    &quot; Incorrect Front End
    invalid_type              = 4                    &quot; Invalid value for parameter FILETYPE
    no_authority              = 5                    &quot; No Download Authorization
    unknown_error             = 6                    &quot; Unknown error
    header_not_allowed        = 7                    &quot; Invalid header
    separator_not_allowed     = 8                    &quot; Invalid separator
    filesize_not_allowed      = 9                    &quot; Invalid file size
    header_too_long           = 10                   &quot; Header information currently restricted to 1023 bytes
    dp_error_create           = 11                   &quot; Cannot create DataProvider
    dp_error_send             = 12                   &quot; Error Sending Data with DataProvider
    dp_error_write            = 13                   &quot; Error Writing Data with DataProvider
    unknown_dp_error          = 14                   &quot; Error when calling data provider
    access_denied             = 15                   &quot; Access to file denied.
    dp_out_of_memory          = 16                   &quot; Not enough memory in data provider
    disk_full                 = 17                   &quot; Storage medium is full.
    dp_timeout                = 18                   &quot; Data provider timeout
    file_not_found            = 19                   &quot; Could not find file
    dataprovider_exception    = 20                   &quot; General Exception Error in DataProvider
    control_flush_error       = 21                   &quot; Error in Control Framework
    not_supported_by_gui      = 22                   &quot; GUI does not support this
    error_no_gui              = 23                   &quot; GUI not available
    OTHERS                    = 24
).
IF sy-subrc &amp;lt;&amp;gt; 0.
  MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/192</guid>
      <comments>https://boy0.tistory.com/192#entry192comment</comments>
      <pubDate>Tue, 17 Oct 2023 15:33:22 +0900</pubDate>
    </item>
    <item>
      <title>MDG staging table 가비지 데이터 삭제 처리 프로그램</title>
      <link>https://boy0.tistory.com/191</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;알 수 없는 이유로 데이터가 꼬여서 덤프 에러 Exception condition &quot;NO_KEY&quot; triggered 발생하곤 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가비지 데이터 정리 프로그램 만들어 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; Report ZMDP_ADJUST_STAGING
*&amp;amp;---------------------------------------------------------------------*
*&amp;amp; MDG staging table 가비지 데이터 삭제 처리 프로그램
*&amp;amp;---------------------------------------------------------------------*
REPORT zmdp_adjust_staging LINE-SIZE 250.

DATA : lt_message           TYPE usmd_t_message,
       ls_message           TYPE usmd_s_message,
       lt_model             TYPE TABLE OF usmd_model,
       lv_model             TYPE usmd_model,
       lo_model_gen_adapter TYPE REF TO if_usmd_model_gen_adapter,
       ls_log_phys_name     TYPE if_usmd_model_gen_adapter=&amp;gt;s_log_phys_name,
       lt_log_phys_name     TYPE if_usmd_model_gen_adapter=&amp;gt;t_log_phys_name,
       lv_entity            TYPE string,
       lv_select            TYPE string,
       lv_table             TYPE string,
       lv_key_field         TYPE string,
*       lt_range_key_value   TYPE RANGE OF usmd_tech_key,
       lt_key_value         TYPE TABLE OF usmd_tech_key,
       lv_key_value         TYPE usmd_tech_key,
       lv_usmd_value        TYPE usmd_value,
       lt_cr                TYPE TABLE OF usmd_crequest,
       lv_cr                TYPE usmd_crequest,
       lt_usmd1213          TYPE TABLE OF usmd1213,
       ls_usmd1213          TYPE usmd1213,
       lv_flag_del          TYPE flag,
       lv_where             TYPE string,
       lv_key_json          TYPE string,
       lr_data              TYPE REF TO data,
       lv_error             TYPE char1,
       lv_index             TYPE i.

FIELD-SYMBOLS: &amp;lt;lt_data&amp;gt; TYPE tabel,
               &amp;lt;ls_data&amp;gt; TYPE data,
               &amp;lt;lv_data&amp;gt; TYPE data.

*--------------------------------------------------------------------*
&quot; 모델 검색
SELECT-OPTIONS so_model FOR lv_model MATCHCODE OBJECT zmdph_model.



*--------------------------------------------------------------------*
START-OF-SELECTION.

*--------------------------------------
  &quot; 활성 상태의 모델정보 검색
  SELECT usmd_model
    INTO TABLE lt_model
    FROM usmd001c
   WHERE usmd_model IN so_model
     AND usmd_objstat = 'A'.
  &quot;
  IF sy-subrc NE 0.
    &quot; 레코드 검색 실패
    MESSAGE s000(oo) WITH 'Data not found.' DISPLAY LIKE 'E'.
    &quot; 작업 종료
    STOP.
  ENDIF.

*--------------------------------------
  &quot; 모델별 작업
  LOOP AT lt_model INTO lv_model.
    &quot;
    WRITE:/ ' *** ' , lv_model COLOR 7, ' *** '.

    &quot;*----------------------------
    &quot; 모델 정보로 활성된 테이블 정보 검색
    CALL METHOD cl_usmd_adapter_provider=&amp;gt;get_model_generation_adapter
      EXPORTING
        i_usmd_model         = lv_model
      IMPORTING
        eo_model_gen_adapter = lo_model_gen_adapter
        et_message           = lt_message.

    CLEAR lv_error.
    &quot;
    LOOP AT lt_message TRANSPORTING NO FIELDS WHERE msgty CA 'AEX'.
      &quot;*----------------------------
      &quot; 오륲 메세지 처리
      MESSAGE ID ls_message-msgid TYPE 'S' NUMBER ls_message-msgno DISPLAY LIKE ls_message-msgty
        WITH ls_message-msgv1 ls_message-msgv2 ls_message-msgv3 ls_message-msgv4.
      &quot; 오류 발생
      lv_error = abap_true.
    ENDLOOP.

    &quot;*----------------------------
    &quot; 오류 없을시 작업 진행
    CHECK lv_error IS INITIAL.

    &quot;*----------------------------
    &quot; 활성 테이블 정보 검색
    CALL METHOD lo_model_gen_adapter-&amp;gt;get_generated_objects
      EXPORTING
        if_mdf_hry_tab   = abap_false
      IMPORTING
        et_message       = lt_message
        et_log_phys_name = lt_log_phys_name.    &quot; 활성 테이블 정보

    &quot;*----------------------------
    &quot;
    LOOP AT lt_log_phys_name INTO ls_log_phys_name.

      CASE ls_log_phys_name-sub_kind.
        WHEN usmd1_cs_tabl_kind-check.
          &quot;
          lv_entity    = ls_log_phys_name-entity.
          lv_table     = ls_log_phys_name-phys_name.
          lv_key_field = 'USMDK' &amp;amp;&amp;amp; lv_model &amp;amp;&amp;amp; lv_entity.

          &quot;
          WRITE:/ '*', lv_entity, lv_table.

          TRY .
              &quot;*----------------------------
              &quot; 테이블 키 밸류 검색
              SELECT (lv_key_field)
                FROM (lv_table)
                INTO TABLE @lt_key_value.
            CATCH cx_sy_dynamic_osql_semantics.
              CONTINUE.
          ENDTRY.

          &quot;*----------------------------
          &quot; 키 중복 제거
          SORT lt_key_value.
          DELETE ADJACENT DUPLICATES FROM lt_key_value.

          &quot;*----------------------------
          &quot; 키 밸류별 작업
          LOOP AT lt_key_value INTO lv_key_value.
            &quot;
            CLEAR: lv_flag_del.
            &quot;
            lv_usmd_value = lv_key_value.

            &quot; 키에 매핑된 Change Request 정보 검색
            SELECT usmd_crequest
              INTO TABLE lt_cr
              FROM usmd1213
             WHERE usmd_entity     = lv_entity
               AND usmd_entity_obj = lv_entity
               AND usmd_value      = lv_usmd_value.
            IF sy-subrc &amp;lt;&amp;gt; 0.
              &quot; 삭제 대상 설정
              lv_flag_del = abap_true.
            ENDIF.

            &quot; Change Request 별 상태 검색
            LOOP AT lt_cr INTO lv_cr.
              SELECT SINGLE mandt
                INTO sy-mandt
                FROM usmd120c
               WHERE usmd_crequest = lv_cr
                 AND usmd_creq_status NOT IN (usmd0_cs_crequest_status-finally_approved,  &quot; 05: 승인완료
                                              usmd0_cs_crequest_status-finally_rejected). &quot; 06: 반려완료.
              IF sy-subrc &amp;lt;&amp;gt; 0.
                &quot; 삭제 대상 설정
                lv_flag_del = abap_true.
                &quot; 루프 종료
                EXIT.
              ENDIF.
            ENDLOOP. &quot; LOOP AT lt_cr INTO lv_cr.

            &quot;*----------------------------
            &quot; 삭제 대상인 경우
            IF lv_flag_del EQ abap_true.
              &quot;
              lv_where = |{ lv_key_field } = lv_key_value|.

*              lv_table = lt_log_phys_name[ entity   = lv_entity
*                                           sub_kind = usmd1_cs_tabl_kind-map ]-phys_name.
              READ TABLE lt_log_phys_name INTO ls_log_phys_name
               WITH KEY entity = lv_entity sub_kind = usmd1_cs_tabl_kind-map.
              lv_table = ls_log_phys_name-phys_name.
              &quot;
              CREATE DATA lr_data TYPE (lv_table).
              ASSIGN lr_data-&amp;gt;* TO &amp;lt;ls_data&amp;gt;.
              &quot;
              lv_key_json = lv_usmd_value.
              SELECT SINGLE * INTO &amp;lt;ls_data&amp;gt;
                FROM (lv_table)
               WHERE (lv_where).
              &quot;
              lv_key_json = /ui2/cl_json=&amp;gt;serialize( &amp;lt;ls_data&amp;gt; ).
              &quot;
              WRITE:/ lv_key_json.

              &quot;*----------------------------
              &quot; 테이블별 레코드 삭제
              &quot; 엔티티별 매핑 테이블이 아닌 테이블에 대해 작업
              LOOP AT lt_log_phys_name INTO ls_log_phys_name
                                      WHERE kind     = 'TABL'
                                        AND entity   = lv_entity
                                        AND sub_kind &amp;lt;&amp;gt; usmd1_cs_tabl_kind-map.
                &quot;*----------------------------
                &quot; 테이블 아이디 설정
                lv_table = ls_log_phys_name-phys_name.
                &quot;*----------------------------
                &quot; 테이블 레코드 삭제 처리
                DELETE FROM (lv_table) WHERE (lv_where).
              ENDLOOP.
            ENDIF.
          ENDLOOP. &quot; LOOP AT lt_key_value INTO lv_key_value.


        WHEN usmd1_cs_tabl_kind-map.
          &quot;
          lv_entity    = ls_log_phys_name-entity.
          lv_table     = ls_log_phys_name-phys_name.
          lv_key_field = 'USMDK' &amp;amp;&amp;amp; lv_model &amp;amp;&amp;amp; lv_entity.

          &quot;
          WRITE:/ '*', lv_entity, lv_table, 'USMD1213'.

          TRY .
              &quot;*----------------------------
              &quot; 테이블 키 밸류 검색
*              lv_select = |'I' AS SIGN, 'EQ' AS OPTION, { lv_key_field } AS LOW|.
              lv_select = lv_key_field.
              SELECT (lv_select)
                FROM (lv_table)
*                INTO TABLE @lt_range_key_value.
                INTO TABLE @lt_key_value.
              SORT lt_key_value.
            CATCH cx_sy_dynamic_osql_semantics.
              CONTINUE.
          ENDTRY.

          &quot; 키에 매핑 안된 Change Request 정보 검색
          SELECT *
            INTO TABLE lt_usmd1213
            FROM usmd1213
           WHERE usmd_entity     = lv_entity
             AND usmd_entity_obj = lv_entity.
*             AND usmd_value      NOT IN lt_range_key_value.

          LOOP AT lt_usmd1213 INTO ls_usmd1213.
            READ TABLE lt_key_value TRANSPORTING NO FIELDS WITH KEY table_line = ls_usmd1213-usmd_value BINARY SEARCH.
            IF sy-subrc EQ 0.
              DELETE lt_usmd1213.
            ELSE.
              lv_key_json = /ui2/cl_json=&gt;serialize( ls_usmd1213 ).
              WRITE:/ lv_key_json.
            ENDIF.
          ENDLOOP.

          DELETE usmd1213 FROM TABLE lt_usmd1213.

        WHEN OTHERS.
      ENDCASE.

    ENDLOOP. &quot; LOOP AT lt_log_phys_name INTO ls_log_phys_name

  ENDLOOP. &quot; LOOP AT lt_model INTO lv_model.

*--------------------------------------
  &quot; 커밋
  COMMIT WORK.
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP/MDG  기준정보</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/191</guid>
      <comments>https://boy0.tistory.com/191#entry191comment</comments>
      <pubDate>Thu, 15 Jun 2023 12:50:35 +0900</pubDate>
    </item>
    <item>
      <title>abap2json</title>
      <link>https://boy0.tistory.com/190</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;취미로 개발중인 프로그램...&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/abap2json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/boy0korea/abap2json&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1686277768286&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - boy0korea/abap2json: abap2json is convertor to export abap table data to json format&quot; data-og-description=&quot;abap2json is convertor to export abap table data to json format - GitHub - boy0korea/abap2json: abap2json is convertor to export abap table data to json format&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/boy0korea/abap2json&quot; data-og-url=&quot;https://github.com/boy0korea/abap2json&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/buueKI/hySVJdj8bW/CTWTkeLKVP1oQL89oqPRBK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/abap2json&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/boy0korea/abap2json&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/buueKI/hySVJdj8bW/CTWTkeLKVP1oQL89oqPRBK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - boy0korea/abap2json: abap2json is convertor to export abap table data to json format&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;abap2json is convertor to export abap table data to json format - GitHub - boy0korea/abap2json: abap2json is convertor to export abap table data to json format&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;abap2xlsx 를 패러디 하여 abap2json 으로 이름을 지었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블 내용을 json 포맷으로 저장합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발서버-품질서버-운영서버 간에 데이터를 복사할때도 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(서버간 데이터 복사는 RFC 펑션으로 전달되며 전송에 json 포맷이 사용됩니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;파일 생성 예&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;127&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eKXOte/btsjazjRmIw/ZXKmmomhmbf728VkqyRcyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eKXOte/btsjazjRmIw/ZXKmmomhmbf728VkqyRcyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eKXOte/btsjazjRmIw/ZXKmmomhmbf728VkqyRcyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeKXOte%2FbtsjazjRmIw%2FZXKmmomhmbf728VkqyRcyk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;809&quot; height=&quot;127&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;127&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;338&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tJdCG/btsi9R6ddSK/8qj9nIAbnFpCuWOQaKWXIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tJdCG/btsi9R6ddSK/8qj9nIAbnFpCuWOQaKWXIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tJdCG/btsi9R6ddSK/8qj9nIAbnFpCuWOQaKWXIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtJdCG%2Fbtsi9R6ddSK%2F8qj9nIAbnFpCuWOQaKWXIK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;826&quot; height=&quot;338&quot; data-origin-width=&quot;826&quot; data-origin-height=&quot;338&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a id=&quot;user-content-프로그램-zabap2json&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-zabap2json&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;프로그램 ZABAP2JSON&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;269&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmUdxN/btsjbKx7Te6/N8O4qKn3T9V2RN5Td3bCTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmUdxN/btsjbKx7Te6/N8O4qKn3T9V2RN5Td3bCTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmUdxN/btsjbKx7Te6/N8O4qKn3T9V2RN5Td3bCTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmUdxN%2FbtsjbKx7Te6%2FN8O4qKn3T9V2RN5Td3bCTK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;613&quot; height=&quot;269&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;269&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-import-zip&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#import-zip&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Import ZIP&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;가져오기 (*.json.zip)&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-comapre-zip&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#comapre-zip&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Comapre ZIP&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비교 (*.json.zip)&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-export-table&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#export-table&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Export Table&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내보내기 테이블 단위 TABLE.datetime.json.zip&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-export-package&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#export-package&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Export Package&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내보내기 패키지 단위 *.json.zip&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-comapre-table&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#comapre-table&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Comapre Table&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버간 테이블 내용 비교&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;a id=&quot;user-content-copy-table&quot; style=&quot;color: #000000;&quot; href=&quot;https://github.com/boy0korea/abap2json#copy-table&quot; aria-hidden=&quot;true&quot;&gt;&lt;/a&gt;Copy Table&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #1f2328; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;서버간 테이블 내용 복사&lt;/p&gt;</description>
      <category>ABAP/abapGit</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/190</guid>
      <comments>https://boy0.tistory.com/190#entry190comment</comments>
      <pubDate>Fri, 9 Jun 2023 11:33:03 +0900</pubDate>
    </item>
    <item>
      <title>search help exit 총정리</title>
      <link>https://boy0.tistory.com/189</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;DDIC 서치 헬프 만드는 방법에는 3가지가 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Selection Method 에 테이블 입력&lt;/li&gt;
&lt;li&gt;Search Help Exit 에 펑션 입력&lt;/li&gt;
&lt;li&gt;Selection Method와 Search Help Exit 둘다 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테이블을 입력해서 만드는건 가장 기초적인 작성법이니 쉽게 아실테고 Exit 펑션을 입력하여 만드는 방법이 난이도가 상당히 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발을 시작하는 방법은 우선 펑션모듈 F4IF_SHLP_EXIT_EXAMPLE 을 복사하여 펑션모듈을 하나 만듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 펑션에는 파라미터 4개가 있습니다. 이중 CALLCONTROL 과 SHLP 이 두 파라미터를 이용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exit 펑션은 CALLCONTROL-STEP 값이 변경되면서 여러번 호출 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;F4IF_SHLP_EXIT_EXAMPLE에 각 CALLCONTROL-STEP 에 따른 설명이 들어 있으니 참고 하시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 SELECT와 DISP 일때만 처리합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHLP-SELOPT : 검색조건 range. SELECT step 에서 변경 하면 화면에 반영됩니다. DISP step 에서는 변경 못합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;SHLP&lt;span&gt;-&lt;/span&gt;FIELDDESCR : 필드 명세. 예를 들어 필드 헤더 텍스트는 SCRTEXT_* 에 값을 변경하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SHLP-FIELDPROP: 필드 속성. 서치헬프 파라미터 부분에 설정한 내용을 변경 할 수 있습니다. 예를 들어 표시 순서는 SHLPLISPOS 에 값을 변경하면 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CALLCONTROL-STEP : step 조건. 예를 들어 값을 EXIT로 변경하면 서치헬프가 종료 됩니다. 자동으로 값을 리턴하는 방법도 있는데 RETURN 으로 변경하고 F4UT_PARAMETER_RESULTS_PUT 펑션을 이용하여 결과 값을 넘겨주면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CALLCONTROL&lt;span&gt;-&lt;/span&gt;SORTOFF : 'X'로 값을 주면 자동 정렬 끄기. 내맘대로 정렬 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CALLCONTROL&lt;span&gt;-&lt;/span&gt;MAXRECORDS : 최대 결과 수&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CALLCONTROL&lt;span&gt;-&lt;/span&gt;MAXEXCEED : 검색 결과가 최대 결과 수 초과 여부&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CALLCONTROL-TOP_SHLP : Collective search help 의 경우 지금 선택된 Elementary &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;search help&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;복잡한 코딩 예는 아래 프로젝트를 참고하시기 바랍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/ALL_ROUND_SEARCH_HELP&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/boy0korea/ALL_ROUND_SEARCH_HELP&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1682405594659&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - boy0korea/ALL_ROUND_SEARCH_HELP: All Round Search Help&quot; data-og-description=&quot;All Round Search Help. Contribute to boy0korea/ALL_ROUND_SEARCH_HELP development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/boy0korea/ALL_ROUND_SEARCH_HELP&quot; data-og-url=&quot;https://github.com/boy0korea/ALL_ROUND_SEARCH_HELP&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/idpS8/hySpHZQx3p/k4ckl8ENWFKtV0cV5RGV91/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/ALL_ROUND_SEARCH_HELP&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/boy0korea/ALL_ROUND_SEARCH_HELP&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/idpS8/hySpHZQx3p/k4ckl8ENWFKtV0cV5RGV91/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - boy0korea/ALL_ROUND_SEARCH_HELP: All Round Search Help&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;All Round Search Help. Contribute to boy0korea/ALL_ROUND_SEARCH_HELP development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 예제 코드는 이렇습니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;FUNCTION zmdp_hr_exit_usr_tel.
*&quot;--------------------------------------------------------------------
*&quot;*&quot;Local Interface:
*&quot;  TABLES
*&quot;      SHLP_TAB TYPE  SHLP_DESCT
*&quot;      RECORD_TAB STRUCTURE  SEAHLPRES
*&quot;  CHANGING
*&quot;     VALUE(SHLP) TYPE  SHLP_DESCR
*&quot;     VALUE(CALLCONTROL) LIKE  DDSHF4CTRL STRUCTURE  DDSHF4CTRL
*&quot;--------------------------------------------------------------------
  TYPES:
    BEGIN OF lty_stru_list,
*   add fields for the selection list here
      tel TYPE zmdpt_m_usr-tel,
    END OF lty_stru_list.
  DATA: lt_select_list TYPE STANDARD TABLE OF lty_stru_list,
        ls_select_list LIKE LINE OF lt_select_list,
        ls_selopt      TYPE ddshselopt,
        lv_keydate     TYPE datum,
        lt_range_tel   TYPE RANGE OF zmdpt_m_usr-tel,
        ls_range_tel   LIKE LINE OF lt_range_tel.

  CHECK: callcontrol-step EQ 'SELECT'.

  LOOP AT shlp-selopt INTO ls_selopt.
    CASE ls_selopt-shlpfield.
      WHEN 'TEL'.
        MOVE-CORRESPONDING ls_selopt TO ls_range_tel.
        REPLACE ALL OCCURRENCES OF REGEX '[^[:digit:]*+]' IN ls_range_tel-low WITH ''.
        REPLACE ALL OCCURRENCES OF REGEX '[^[:digit:]*+]' IN ls_range_tel-high WITH ''.
        APPEND ls_range_tel TO lt_range_tel.
      WHEN 'KEYDATE'.
        lv_keydate = ls_selopt-low.
    ENDCASE.
  ENDLOOP.

  IF lv_keydate IS INITIAL.
    lv_keydate = sy-datum.
    CLEAR: ls_selopt.
    ls_selopt-shlpfield = 'KEYDATE'.
    ls_selopt-sign = 'I'.
    ls_selopt-option = 'EQ'.
    ls_selopt-low = lv_keydate.
    APPEND ls_selopt TO shlp-selopt.
  ENDIF.


  SELECT DISTINCT tel
    INTO TABLE lt_select_list
    FROM zmdpt_m_usr
    WHERE tel_mc IN lt_range_tel
      AND begda &amp;lt;= lv_keydate
      AND endda &amp;gt;= lv_keydate.
  CHECK: lt_select_list IS NOT INITIAL.

  callcontrol-maxexceed = abap_false.
  IF callcontrol-maxrecords IS NOT INITIAL AND
     lines( lt_select_list ) &amp;gt; callcontrol-maxrecords.
    DELETE lt_select_list FROM callcontrol-maxrecords + 1.
    callcontrol-maxexceed = abap_true.
  ENDIF.

* map
  CALL FUNCTION 'F4UT_RESULTS_MAP'
    TABLES
      shlp_tab    = shlp_tab
      record_tab  = record_tab
      source_tab  = lt_select_list
    CHANGING
      shlp        = shlp
      callcontrol = callcontrol.

  callcontrol-step = 'DISP'.


ENDFUNCTION.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/189</guid>
      <comments>https://boy0.tistory.com/189#entry189comment</comments>
      <pubDate>Tue, 25 Apr 2023 15:57:28 +0900</pubDate>
    </item>
    <item>
      <title>엘프바(elfbar) 분해</title>
      <link>https://boy0.tistory.com/188</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2581&quot; data-origin-height=&quot;2110&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj01yW/btsar5q2JOa/uGPcdMgOSkIgNRi8aqZ1Vk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj01yW/btsar5q2JOa/uGPcdMgOSkIgNRi8aqZ1Vk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj01yW/btsar5q2JOa/uGPcdMgOSkIgNRi8aqZ1Vk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj01yW%2Fbtsar5q2JOa%2FuGPcdMgOSkIgNRi8aqZ1Vk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;2581&quot; height=&quot;2110&quot; data-origin-width=&quot;2581&quot; data-origin-height=&quot;2110&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;분해하는데 도구는 필요없고 쌔게 잡아댕기면 됩니다.&lt;br&gt;니코틴 먹은 스펀지와 배터리와 충전모듈 그리고 코일이 있네요.&lt;br&gt;배터리는 3.7v 650mAh 라고 써있습니다.&lt;/p&gt;</description>
      <category>enjoy</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/188</guid>
      <comments>https://boy0.tistory.com/188#entry188comment</comments>
      <pubDate>Mon, 17 Apr 2023 13:59:14 +0900</pubDate>
    </item>
    <item>
      <title>FUNCTION ZADD_1_ALPHANUM</title>
      <link>https://boy0.tistory.com/187</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;숫자와 영문자 순번 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10+26개 = 36진법&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;FUNCTION ZADD_1_ALPHANUM.
*&quot;----------------------------------------------------------------------
*&quot;*&quot;Local Interface:
*&quot;  IMPORTING
*&quot;     REFERENCE(IV_SKIP_CHAR) TYPE  CLIKE OPTIONAL
*&quot;     REFERENCE(IV_OFFSET) TYPE  I DEFAULT -1
*&quot;  CHANGING
*&quot;     REFERENCE(CV_DATA) TYPE  CLIKE
*&quot;----------------------------------------------------------------------
* 이 구현은 ECATT_INCREASE_ALPHANUM_ID 를 참고 하였습니다.
* overflow가 발생하면 000...0 으로 다시 돌아갑니다.
* 자리수가 자동으로 늘어나면서 앞에 1이 붙지는 않습니다.

  CONSTANTS: lc_trans TYPE char72 VALUE '0112233445566778899AABBCCDDEEFFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXXYYZZ0'.
  DATA: lv_c      TYPE char1,
        lv_offset TYPE i.

  IF iv_offset &amp;lt; 0.

    lv_offset = strlen( cv_data ) - 1.    &quot; 마지막 글자 위치.
    CALL FUNCTION 'ZADD_1_ALPHANUM'
      EXPORTING
        iv_skip_char = iv_skip_char
        iv_offset    = lv_offset
      CHANGING
        cv_data      = cv_data.

  ELSE.

    lv_c = cv_data+iv_offset(1).
    TRANSLATE cv_data+iv_offset(1) USING lc_trans.

    IF cv_data+iv_offset(1) EQ '0'.
*   자리수 올림은 재귀 호출로 처리한다.
      lv_offset = iv_offset - 1.    &quot; 앞 글자 위치.
      IF lv_offset &amp;gt;= 0.
        CALL FUNCTION 'ZADD_1_ALPHANUM'
          EXPORTING
            iv_skip_char = iv_skip_char
            iv_offset    = lv_offset
          CHANGING
            cv_data      = cv_data.
      ENDIF.
    ENDIF.

    IF iv_skip_char IS NOT INITIAL AND
       cv_data+iv_offset(1) CA iv_skip_char.
      CALL FUNCTION 'ZADD_1_ALPHANUM'
        EXPORTING
          iv_skip_char = iv_skip_char
          iv_offset    = iv_offset
        CHANGING
          cv_data      = cv_data.
    ENDIF.
  ENDIF.

ENDFUNCTION.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/187</guid>
      <comments>https://boy0.tistory.com/187#entry187comment</comments>
      <pubDate>Tue, 20 Dec 2022 15:19:56 +0900</pubDate>
    </item>
    <item>
      <title>HTML_FRAGMENT 를 이용한 JavaScript 넣기 꼼수</title>
      <link>https://boy0.tistory.com/186</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;웹딘프로 layout에 HTML_FRAGMENT를 하나 그려줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WDDOMODIFYVIEW 메소드에서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;IF first_time &lt;span&gt;EQ&amp;nbsp;&lt;/span&gt;abap_true. 으로 한번만 실행되도록 하고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;HTML_FRAGMENT 엘리먼트의 html 속성에 HTML tag를 하나 넣겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1654157142353&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;img src=&quot;/sap/public/bc/ur/nw5/1x1.gif&quot; style=&quot;display: none;&quot; onload=&quot;alert('script test');&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ABAP 코드는 이렇습니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;CAST cl_wd_html_fragment( io_view-&amp;gt;get_element( 'HTML_FRAGMENT' ) )-&amp;gt;set_html(
  `&amp;lt;img src=&quot;/sap/public/bc/ur/nw5/1x1.gif&quot; style=&quot;display: none;&quot; onload=&quot;alert('script test');&quot; /&amp;gt;`
).&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내용을 설명드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IMG tag를 이용해서 onload 시점에 실행할 JavaScript를 넣으면 됩니다. 예를 들어 아래 테스트 코드를 넣어 봤습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1654157567551&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alert('script test');&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IMG의 onload가 실행되는 시점은 웹브라우저가 화면을 그리고 src 속성의 파일을 읽어와서야 실행됩니다. 매우 나중에 실행되는 타이밍입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;좀 더 복잡한 스크립트가 들어간 예제를 보여드리겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 업로드 팝업인데 팝업이 뜨면 웹딘프로의 파일업로드 엘리먼트를 클릭하지 않아도 자동으로 클릭해서 파일 선택 창이 나오고 파일을 선택하면 자동으로 팝업의 OK 버튼을 눌러 닫힙니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;CAST cl_wd_html_fragment( io_view-&amp;gt;get_element( 'HTML_FRAGMENT' ) )-&amp;gt;set_html(
  `&amp;lt;img src=&quot;/sap/public/bc/ur/nw5/1x1.gif&quot; style=&quot;display: none;&quot; ` &amp;amp;&amp;amp;
  `onload=&quot;` &amp;amp;&amp;amp;
  `var el = this;` &amp;amp;&amp;amp;
  `while( !el.classList.contains('lsPopupWindow') ) {` &amp;amp;&amp;amp;                 &quot; popup div
  `  el = el.parentElement;` &amp;amp;&amp;amp;
  `}` &amp;amp;&amp;amp;
  `var file = el.querySelector('input[type=file]');` &amp;amp;&amp;amp;                   &quot; file input box
  `var ok = el.querySelector('.urPWFooterBottomLine .lsButton');` &amp;amp;&amp;amp;      &quot; ok button
  `file.oninput = function() { UCF_JsUtil.delayedCall( 200, ok, 'click' ); };` &amp;amp;&amp;amp;
  `file.click();` &amp;amp;&amp;amp;
  `&quot; /&amp;gt;`
).&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IMG tag를 이용한 onload에 스크립트 넣기 방식은 동일합니다. JavaScript만 가져와서 보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1654158336537&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var el = this;
while( !el.classList.contains('lsPopupWindow') ) {
  el = el.parentElement;
}
var file = el.querySelector('input[type=file]');
var ok = el.querySelector('.urPWFooterBottomLine .lsButton');
file.oninput = function() { UCF_JsUtil.delayedCall( 200, ok, 'click' ); };
file.click();&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음 4줄은 el 변수에 &lt;span style=&quot;color: #409d00;&quot;&gt;lsPopupWindow&lt;/span&gt; 이라는 class 속성을 가진 엘리먼트를 찾습니다. (웹딘프로 팝업의 태두리입니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5번째줄은 file 변수에 input tag의 type 속성이 file인 엘리먼트를 찾습니다. (웹딘프로 FILE_UPLOAD 엘리먼트에 해당합니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6번째줄은 ok 변수에 &lt;span style=&quot;color: #409d00;&quot;&gt;urPWFooterBottomLine&lt;/span&gt; 이라는 class 속성을 가진 엘리먼트 아래에 &lt;span style=&quot;color: #409d00;&quot;&gt;lsButton&lt;/span&gt; 이라는 class 속성을 가진 엘리먼트를 찾습니다. (웹딘프로 팝업의 아래쪽 OK 버튼에 해당합니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7번째줄은 파일 업로드 엘리먼트에 oninput 시점에 200ms 딜레이를 주고나서 OK 버튼을 click 하라는 뜻입니다. (이것은 파일 선택후 자동으로 팝업을 닫기 위한 코드 입니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8번째줄은 파일 업로드 엘리먼트를 click 하라는 뜻입니다. (파일 선택 창이 열립니다)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드는 아래 프로젝트에 포함되어 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/ABAP2XLSX_HELPER&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/boy0korea/ABAP2XLSX_HELPER&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1654157985724&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - boy0korea/ABAP2XLSX_HELPER: abap2xlsx helper&quot; data-og-description=&quot;abap2xlsx helper. Contribute to boy0korea/ABAP2XLSX_HELPER development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/boy0korea/ABAP2XLSX_HELPER&quot; data-og-url=&quot;https://github.com/boy0korea/ABAP2XLSX_HELPER&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/baKIi8/hyOCLToSFC/k1nnYrnCtOLPeNubh2oDT0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/ABAP2XLSX_HELPER&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/boy0korea/ABAP2XLSX_HELPER&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/baKIi8/hyOCLToSFC/k1nnYrnCtOLPeNubh2oDT0/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - boy0korea/ABAP2XLSX_HELPER: abap2xlsx helper&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;abap2xlsx helper. Contribute to boy0korea/ABAP2XLSX_HELPER development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ABAP/Web Dynpro ABAP(WDA)</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/186</guid>
      <comments>https://boy0.tistory.com/186#entry186comment</comments>
      <pubDate>Thu, 2 Jun 2022 17:40:36 +0900</pubDate>
    </item>
    <item>
      <title>/SCMTMS/CL_TOR_HELPER_COMMON=&amp;gt;GET_TOR_DATA 와 Secondary Key 활용</title>
      <link>https://boy0.tistory.com/185</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;사용법은 보통 이런식으로...&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_tor_helper_common=&amp;gt;get_tor_data(
  EXPORTING
    it_root_key      = lt_root_key
  IMPORTING
    et_all_items     = lt_all_items
).&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실행되는건 아래 코드와 같은 내용입니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;DATA(lo_srv_mgr) = /bobf/cl_tra_serv_mgr_factory=&amp;gt;get_service_manager( /scmtms/if_tor_c=&amp;gt;sc_bo_key ).
lo_srv_mgr-&amp;gt;retrieve_by_association(
  EXPORTING
    iv_node_key       = /scmtms/if_tor_c=&amp;gt;sc_node-root
    it_key            = lt_root_key
    iv_association    = /scmtms/if_tor_c=&amp;gt;sc_association-root-item_tr
    iv_fill_data      = abap_true
  IMPORTING
    et_data           = lt_all_items
).&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실용적인 코드 템플릿 &amp;gt;&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;DATA:
LT_ROOT_KEY TYPE /BOBF/T_FRW_KEY,
LT_ROOT	TYPE /SCMTMS/T_TOR_ROOT_K,
LT_ALL_ITEMS TYPE /SCMTMS/T_TOR_ITEM_TR_K,
LT_STOP	TYPE /SCMTMS/T_TOR_STOP_K,
LT_STOP_SUCC_ALL TYPE /SCMTMS/T_TOR_STOP_SUCC_K,
LT_DOC_REFERENCE TYPE /SCMTMS/T_TOR_DOCREF_K,
LT_EXEC TYPE /SCMTMS/T_TOR_EXEC_K,
LT_PARTY TYPE /SCMTMS/T_TOR_PARTY_K,

FIELD-SYMBOLS:
&amp;lt;LS_ROOT&amp;gt; TYPE /SCMTMS/S_TOR_ROOT_K,
&amp;lt;LS_ITEM&amp;gt; TYPE /SCMTMS/S_TOR_ITEM_TR_K,
&amp;lt;LS_STOP&amp;gt; TYPE /SCMTMS/S_TOR_STOP_K,
&amp;lt;LS_STOP_SUCC&amp;gt; TYPE /SCMTMS/S_TOR_STOP_SUCC_K,
&amp;lt;LS_DOC_REFERENCE&amp;gt; TYPE /SCMTMS/S_TOR_DOCREF_K,
&amp;lt;LS_EXEC&amp;gt; TYPE /SCMTMS/S_TOR_EXEC_K,
&amp;lt;LS_PARTY&amp;gt; TYPE /SCMTMS/S_TOR_PARTY_K,

&quot; Invalidate cache
/bobf/cl_tra_trans_mgr_factory=&amp;gt;get_transaction_manager( )-&amp;gt;cleanup( ).

&quot; Get TOR data
/scmtms/cl_tor_helper_common=&amp;gt;get_tor_data(
  EXPORTING
    it_root_key      = lt_root_key
  IMPORTING
    et_root          = lt_root
    et_all_items     = lt_all_items
    et_stop          = lt_stop
    et_stop_succ_all = lt_stop_succ_all
    et_doc_reference = lt_doc_reference
    et_exec          = lt_exec
    et_party         = lt_party
).&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/SCMTMS/T_TOR_ITEM_TR_K에&amp;nbsp;Secondary&amp;nbsp;Key&amp;nbsp;가&amp;nbsp;여러개&amp;nbsp;있습니다. &lt;br /&gt;Internal&amp;nbsp;Table&amp;nbsp;의&amp;nbsp;Secondary&amp;nbsp;Key&amp;nbsp;는&amp;nbsp;마치&amp;nbsp;DB&amp;nbsp;Index&amp;nbsp;와&amp;nbsp;비슷한&amp;nbsp;역할을&amp;nbsp;하여&amp;nbsp;검색&amp;nbsp;속도를&amp;nbsp;빠르게&amp;nbsp;해줍니다. &lt;br /&gt;차이점은&amp;nbsp;Secondary&amp;nbsp;Key&amp;nbsp;가&amp;nbsp;여러개&amp;nbsp;있어도&amp;nbsp;Insert&amp;nbsp;속도에&amp;nbsp;영향을&amp;nbsp;주지&amp;nbsp;않습니다. &lt;br /&gt;Secondary&amp;nbsp;Key&amp;nbsp;의&amp;nbsp;Indexing&amp;nbsp;생성&amp;nbsp;시기는&amp;nbsp;최초&amp;nbsp;사용시&amp;nbsp;입니다.&amp;nbsp;사용하지&amp;nbsp;않는&amp;nbsp;Secondary&amp;nbsp;Key&amp;nbsp;는&amp;nbsp;Indexing&amp;nbsp;하지&amp;nbsp;않습니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;
&quot; ITEM_CAT = 'AVR' (차량)
READ TABLE lt_all_items ASSIGNING &amp;lt;ls_item&amp;gt; WITH KEY root_itmcat COMPONENTS root_key = &amp;lt;ls_root&amp;gt;-key item_cat = 'AVR'.

&quot; ITEM_CAT = 'DRI' (드라이버)
READ TABLE lt_all_items ASSIGNING &amp;lt;ls_item&amp;gt; WITH KEY root_itmcat COMPONENTS root_key = &amp;lt;ls_root&amp;gt;-key item_cat = 'DRI'.

&quot; ITEM_CAT = 'PRD' (제품)
LOOP AT lt_all_items ASSIGNING &amp;lt;ls_item&amp;gt; USING KEY root_itmcat WHERE &amp;lt;ls_root&amp;gt;-key item_cat = 'PRD'.
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 Secondary Key 를 사용할때는 READ TABLE ... WITH KEY , LOOP AT ... USING KEY 구문을 쓰면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Item 노드 뿐만이 아니라 다른 노드에 대한 인터널 테이블도 모두 Secondary Key가 많이 있으니 찾아보고 활용해 보세요.&lt;/p&gt;</description>
      <category>ABAP/TM 물류운송관리</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/185</guid>
      <comments>https://boy0.tistory.com/185#entry185comment</comments>
      <pubDate>Thu, 2 Jun 2022 15:41:58 +0900</pubDate>
    </item>
    <item>
      <title>Search UIBB에 relative date(예: Today)를 기본값으로 넣는 방법</title>
      <link>https://boy0.tistory.com/184</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래 예는 Yesterday, Today, Tommorow 를 입력하는 코드 입니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;ev_search_criteria_changed = abap_true.
CLEAR: ls_fpm_search_criteria.
ls_fpm_search_criteria-search_attribute = 'DATE_FIELDNAME'.
ls_fpm_search_criteria-sign = if_fpm_guibb_search=&amp;gt;gc_sign-include_search_criteria.
ls_fpm_search_criteria-operator = if_fpm_guibb_search=&amp;gt;gc_operators-is.
ls_fpm_search_criteria-low = 'FPM_RD_FPM_DATE_YESTERDAY'.
APPEND ls_fpm_search_criteria TO ct_fpm_search_criteria.
ls_fpm_search_criteria-operator = if_fpm_guibb_search=&amp;gt;gc_operators-is.
ls_fpm_search_criteria-low = 'FPM_RD_FPM_DATE_TODAY'.
APPEND ls_fpm_search_criteria TO ct_fpm_search_criteria.
ls_fpm_search_criteria-operator = if_fpm_guibb_search=&amp;gt;gc_operators-is.
ls_fpm_search_criteria-low = 'FPM_RD_FPM_DATE_TOMORROW'.
APPEND ls_fpm_search_criteria TO ct_fpm_search_criteria.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FPM_RD_FPM_DATE_TODAY 라는 특별한 값을 주면 Today로 나타 납니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FPM_RD_ 와 FPM_DATE_TODAY 를 붙인 값입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CL_FPM_SEARCH_UIBB_SELOPT-&amp;gt;SET_SO_REL_DATES&amp;nbsp;에서&amp;nbsp;상수&amp;nbsp;GC_PREFIX_REL_DATE&amp;nbsp;=&amp;nbsp;'FPM_RD_'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CL_FPM_DATE_DEFAULT_TOKEN_PROV-&amp;gt;IF_FPM_TOKEN_PROVIDER~RESOLVE_TOKEN&amp;nbsp;에서&amp;nbsp;상수&amp;nbsp;GC_TOKEN_TODAY&amp;nbsp;=&amp;nbsp;'FPM_DATE_TODAY'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;relative date의 장점은 variant로 저장한 것을 불러 오더라도 저장할때의 고정된 날짜가 아니라 항상 날짜를 다시 계산 한다는 점입니다.&lt;/p&gt;</description>
      <category>ABAP/Floorplan Manager(FPM)</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/184</guid>
      <comments>https://boy0.tistory.com/184#entry184comment</comments>
      <pubDate>Thu, 2 Jun 2022 14:49:54 +0900</pubDate>
    </item>
    <item>
      <title>알리익스프레스 X 에이씨티앤코아 X 스마트택배 앱으로 배송 조회 알림</title>
      <link>https://boy0.tistory.com/183</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;스마트택배 앱의 해외배송추적 기능이 많이 좋아졌습니다.&lt;br&gt;&lt;br&gt;알리익스프레스 에서 구매한 물건을 배송 조회 등록하는 방법을 알려드리겠습니다.&lt;br&gt;&lt;br&gt;알리익스프레스 앱에서 배송 조회를 해서 송장번호를 복사합니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;1194&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDK7XM/btrCIGp3cEu/6eNmxPmKAVrfjhEI27KvvK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDK7XM/btrCIGp3cEu/6eNmxPmKAVrfjhEI27KvvK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDK7XM/btrCIGp3cEu/6eNmxPmKAVrfjhEI27KvvK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDK7XM%2FbtrCIGp3cEu%2F6eNmxPmKAVrfjhEI27KvvK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1078&quot; height=&quot;1194&quot; data-origin-width=&quot;1078&quot; data-origin-height=&quot;1194&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;N으로 시작하는거(saver shipping) 는 안되구요. 6이나 7로 시작하는 번호 됩니다.&lt;br&gt;&lt;br&gt;스마트택배 앱에 입력하도록 하죠. + 버튼 누르고 직접 등록 선택합니다.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1458&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drBZgR/btrCHObeLYJ/EqOHiRCsNsKf64TREZFuR1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drBZgR/btrCHObeLYJ/EqOHiRCsNsKf64TREZFuR1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drBZgR/btrCHObeLYJ/EqOHiRCsNsKf64TREZFuR1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdrBZgR%2FbtrCHObeLYJ%2FEqOHiRCsNsKf64TREZFuR1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1458&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1458&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;택배사를 선택하세요.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q4G6d/btrCH30jv5B/aY3ZOpnUc4EheXUH6l4HSk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q4G6d/btrCH30jv5B/aY3ZOpnUc4EheXUH6l4HSk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q4G6d/btrCH30jv5B/aY3ZOpnUc4EheXUH6l4HSk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ4G6d%2FbtrCH30jv5B%2FaY3ZOpnUc4EheXUH6l4HSk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1122&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;예전에는 국내택배-우체국 으로 등록했었는데....&lt;br&gt;이제 해외택배-에이씨티앤코아물류 선택하여 더 자세한 배송 정보를 받아볼 수 있습니다.&lt;br&gt;정렬이나 검색이 안되어서 좀 불편한데요. 중간쯤 내리면 있습니다.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1800&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cKHvsZ/btrCHrOqWli/t4oLpvkcMRy01SRlW51Fik/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cKHvsZ/btrCHrOqWli/t4oLpvkcMRy01SRlW51Fik/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cKHvsZ/btrCHrOqWli/t4oLpvkcMRy01SRlW51Fik/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKHvsZ%2FbtrCHrOqWli%2Ft4oLpvkcMRy01SRlW51Fik%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;1800&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;1800&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;통관 정보 추가 체크 해주시구요.&lt;br&gt;등록하면 됩니다.&lt;br&gt;&lt;br&gt;배송 상세화면에서 택배사에서 보기 누르면 아래 처럼 아주 자세한 정보를 추가로 확인할 수 있어요.&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2130&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DxpOk/btrCI18wwm4/fGDZcCNZYMsB6tNkHfIKE1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DxpOk/btrCI18wwm4/fGDZcCNZYMsB6tNkHfIKE1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DxpOk/btrCI18wwm4/fGDZcCNZYMsB6tNkHfIKE1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDxpOk%2FbtrCI18wwm4%2FfGDZcCNZYMsB6tNkHfIKE1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1080&quot; height=&quot;2130&quot; data-origin-width=&quot;1080&quot; data-origin-height=&quot;2130&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;</description>
      <category>enjoy</category>
      <category>알리익스프레스</category>
      <category>직구</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/183</guid>
      <comments>https://boy0.tistory.com/183#entry183comment</comments>
      <pubDate>Fri, 20 May 2022 19:04:49 +0900</pubDate>
    </item>
    <item>
      <title>/SCMTMS/CL_UI_NAVIGATION=&amp;gt;START_NAVIGATION</title>
      <link>https://boy0.tistory.com/182</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;메소드 파라미터가 매우 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필수는 없고 모든 파라미터가 선택사항이라 필요에 따라 조합하여 사용합니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 320px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot; colspan=&quot;3&quot;&gt;입력 파라미터 설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 200px;&quot; rowspan=&quot;10&quot;&gt;유형1:&amp;nbsp;BO&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_BO_KEY&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;BO&amp;nbsp;Key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_BO_NAME&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;BO Name. 입력시 내부에서 BO Key로 변환&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_BO_CATEGORY&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;BO Category. TOR,TRQ,FA 의 경우 필요함. 생략시 자동 찾음.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_CHANGE_MODE&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Mode (빈값: display, C: create, U: change)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_KEY&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;BO&amp;nbsp;데이터&amp;nbsp;Key&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_SRC_INST_KEY&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;create mode 에서 원본 데이터 키 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_TCM_TEMPLATE&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;scale,rate,tccs&amp;nbsp;에서&amp;nbsp;템플릿&amp;nbsp;사용시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_REF_CREATE_MODE&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;create&amp;nbsp;mode&amp;nbsp;에서&amp;nbsp;reference&amp;nbsp;mode&amp;nbsp;지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IT_BO_DATA&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Shared&amp;nbsp;Memory에&amp;nbsp;write&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_SKIP_INITIAL_SCREEN&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;Initial&amp;nbsp;Screen&amp;nbsp;건너뜀&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;유형2:&amp;nbsp;FPM&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_TARGET_APPL&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;FPM Appl.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_CONFIGURATIONID&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;FPM Config.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;유형3:&amp;nbsp;URL&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_EXTERNAL_URL&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;External&amp;nbsp;URL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 40px;&quot; rowspan=&quot;2&quot;&gt;공통&lt;/td&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IT_PARAMETERS&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;추가&amp;nbsp;파라미터&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 25%; height: 20px;&quot;&gt;IV_INPLACE_NAVIGATION&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;빈값:&amp;nbsp;새창으로,&amp;nbsp;X:&amp;nbsp;Inplace&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용 예&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 820px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style4&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px; background-color: #9b9b9b; color: #ffffff;&quot;&gt;사용 예&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;예제1:&amp;nbsp;TOR&amp;nbsp;Key로&amp;nbsp;조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 120px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 120px;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key      = /scmtms/if_tor_c=&amp;gt;sc_bo_key
    iv_bo_category = /scmtms/if_tor_const=&amp;gt;sc_tor_category-freight_unit
    iv_key         = lv_tor_key
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;예제2:&amp;nbsp;TOR&amp;nbsp;ID로&amp;nbsp;변경&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 140px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 140px;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key      = /scmtms/if_tor_c=&amp;gt;sc_bo_key
    iv_bo_category = /scmtms/if_tor_const=&amp;gt;sc_tor_category-freight_unit
    iv_key         = /scmtms/cl_tor_helper_root=&amp;gt;return_key_for_torid( lv_tor_id )
    iv_change_mode = /bofu/if_fbi_runtime_c=&amp;gt;sc_change_modes-change
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;예제3:&amp;nbsp;TRQ&amp;nbsp;생성&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 160px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 160px;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key          = /scmtms/if_trq_c=&amp;gt;sc_bo_key
    iv_bo_category     = /scmtms/if_trq_const=&amp;gt;c_trq_category-forwarding_order
    iv_change_mode     = /bofu/if_fbi_runtime_c=&amp;gt;sc_change_modes-create
    iv_src_inst_key    = lv_fwq_key
    iv_ref_create_mode = /scmtms/if_ui_trq_c=&amp;gt;sc_action_param-ref_create_mode-fwo_from_fwq
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;예제4: schedule Key로 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 100px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 100px;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key = /scmtms/if_fo_schedule_c=&amp;gt;sc_bo_key
    iv_key    = ls_item-sched_key
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;예제5: location ID로 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 140px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 140px;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key     = /scmtms/if_location_c=&amp;gt;sc_bo_key
    it_parameters = VALUE #(
      ( key = 'LOCATION' value = ls_stop-log_locid )
    )
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;예제6: resource ID로 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key     = /scmtms/if_resource_c=&amp;gt;sc_bo_key
    it_parameters = VALUE #(
      ( key = 'RESOURCE' value = ls_item-res_id )
    )
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;예제7: product(material) ID로 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key     = /scmtms/if_mat_c=&amp;gt;sc_bo_key
    it_parameters = VALUE #(
      ( key = 'PRODUCT' value = ls_item-product_id )
    )
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;예제8: BP ID로 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    iv_bo_key     = /bofu/if_bupa_constants=&amp;gt;sc_bo_key
    it_parameters = VALUE #(
      ( key = 'PARTNER' value = lv_bp_id )
      ( key = 'ROLE' value = lv_bp_role )
    )
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;예제9: order document 조회&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;/scmtms/cl_ui_navigation=&amp;gt;start_navigation(
  EXPORTING
    it_parameters = VALUE #(
      ( key = /scmtms/if_ui_cmn_c=&amp;gt;sc_wd_parameter-base_btd_tco
        value = ls_docref-btd_tco )
      ( key = /scmtms/if_ui_cmn_c=&amp;gt;sc_wd_parameter-base_btd_id
        value = ls_docref-btd_id )
    )
).&lt;/code&gt;&lt;/pre&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;예제10: 스탠다드 worklist(POWL) 참고&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 100%; height: 20px;&quot;&gt;/SCMTMS/CL_UI_ACTION_TOR-&amp;gt;HANDLE_ACTION&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>ABAP/TM 물류운송관리</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/182</guid>
      <comments>https://boy0.tistory.com/182#entry182comment</comments>
      <pubDate>Thu, 19 May 2022 15:56:19 +0900</pubDate>
    </item>
    <item>
      <title>ABAP TIMESTAMP 총정리</title>
      <link>https://boy0.tistory.com/181</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;타임스탬프로 사용되는 타입은 두가지가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TIMESTAMP : 15자리 YYYYMMDDhhmmss&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TIMESTAMPL : 21자리 YYYYMMDDhhmmss.ssssss&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주로 사용하는 15자리 TIMESTAMP 를 기준으로 설명하겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어 인천 에서 홍콩으로 가는 항공편의 출발시간, 도착시간을 보면서 타임스탬프의 필요성을 이해해 보도록 하게습니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;출발시간&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;도착시간&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;현지 시간&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;2022.01.01&amp;nbsp;09:00:00&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;2022.01.01&amp;nbsp;12:00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;타임존&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;UTC+9&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;UTC+8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;타임스탬프 (UTC 기준 시간)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2022.01.01&amp;nbsp;00:00:00&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;2022.01.01&amp;nbsp;04:00:00&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;출발지(UTC+9) 기준 시간&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;2022.01.01&amp;nbsp;09:00:00&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;2022.01.01 13:00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;도착지(UTC+8) 기준 시간&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;2022.01.01 08:00:00&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;2022.01.01&amp;nbsp;12:00:00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 표시할때는 현지 시간 + 타임존 으로 표시를 합니다. 그게 이해하기 쉬우니까요. 인천 9시 출발, 홍콩 12시 도착 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 비행시간을 계산하려면 어떻게 할까요? 12-9는 3시간 틀렸습니다. 타임존이 다르기 때문이죠.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비행시간을 계산하기 위해서는 출발 도착 둘다 같은 타임존을 가지도록 값을 변환해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 표에서 UTC 기준, 출발지 기준, 도착지 기준 3가지 모두 비행시간을 계산할때 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 저장할때는 어떤값을 저장하는게 효과적일까요?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정답은 타임스탬프(=UTC 기준 시간) 입니다. 다른경우와 다르게 타임존을 저장할 필요가 없기 때문에 더 작은 공간을 차지합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존은 출발지와 도착지 각 장소별로 저장하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제&amp;nbsp; ABAP 문법을 알아 보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 타임스탬프 가져오는 방법:&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;GET TIME STAMP FIELD lv_ts.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임스탬프를 날짜, 시간 두 필드로 변환하는 방법:&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;CONVERT TIME STAMP lv_ts TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;날짜,시간 두 필드를 타임스탬프로 변환하는 방법:&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;CONVERT DATE lv_date TIME lv_time INTO TIME STAMP lv_ts TIME ZONE sy-zonlo.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임스탬프를 글자표현(예: YYYY.MM.DD hh:mm:ss) 으로 변환하는 방법:&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;|{ lv_ts TIMEZONE = sy-zonlo }|&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;타임스탬프 관련 유용한 conversion routine 을 소개 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;'TSTLC' : 타임존 sy-zonlo 기준으로 표시합니다. 예를들어 데이터 엘리먼트는 EHFND_TIME_STAMP 가 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'TSTPS' : 타임존 UTC 기준으로 표시합니다. 예를들어 데이터 엘리먼트는 BCOS_TSTMP 가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타임존 sy-zonlo 기준으로 표시 할때의 장점:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sy-zonlo는 사용자의 타임존입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각자 티코드 SU3에서 변경 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 DB 테이블 마다 들어가는 생성날짜와 생성시간을 sy-datum 과 sy-uzeit 값을 넣어서 기록합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;국제화 시대에 맞춰 타임스탬프로 기록하면 시스템 타임존과 다른 타임존을 사용하는 사용자도 편하게 볼수있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 타임스탬프 값이 2022.01.01 00:00:00 이라면,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UTC+9 타임존 사용자는 2022.01.01 09:00:00 로 표시되고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;UTC+8 타임존 사용자는 2022.01.01 08:00:00 로 표시됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 DB 검색시 타임스탬프로 기록된 필드를 검색하는 방법 입니다.&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;FUNCTION zconvert_range_date2ts.
*&quot;----------------------------------------------------------------------
*&quot;*&quot;Local Interface:
*&quot;  IMPORTING
*&quot;     REFERENCE(IT_RANGE_DATE) TYPE  RANGE_DATE_T
*&quot;  EXPORTING
*&quot;     REFERENCE(ET_RANGE_TS) TYPE  CRMT_BUS_TIMESTAMP_RANGE_T
*&quot;----------------------------------------------------------------------
  CONSTANTS: lc_time_end TYPE uzeit VALUE '235959'.
  DATA: ls_range_date TYPE range_date,
        ls_range_ts   TYPE crmt_bus_timestamp_range.

  CLEAR: et_range_ts.

  LOOP AT it_range_date INTO ls_range_date.
    CLEAR: ls_range_ts.
    ls_range_ts-sign = ls_range_date-sign.
    ls_range_ts-option = ls_range_date-option.

    CASE ls_range_date-option.
      WHEN 'EQ'.
        ls_range_ts-option = 'BT'.
        CONVERT DATE ls_range_date-low INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
        CONVERT DATE ls_range_date-low TIME lc_time_end INTO TIME STAMP ls_range_ts-high TIME ZONE sy-zonlo.
      WHEN 'NE'.
        ls_range_ts-option = 'NB'.
        CONVERT DATE ls_range_date-low INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
        CONVERT DATE ls_range_date-low TIME lc_time_end INTO TIME STAMP ls_range_ts-high TIME ZONE sy-zonlo.
      WHEN 'BT'
        OR 'NB'.
        CONVERT DATE ls_range_date-low INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
        CONVERT DATE ls_range_date-high TIME lc_time_end INTO TIME STAMP ls_range_ts-high TIME ZONE sy-zonlo.
      WHEN 'GE'.
        CONVERT DATE ls_range_date-low INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
      WHEN 'GT'.
        CONVERT DATE ls_range_date-low TIME lc_time_end INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
      WHEN 'LE'.
        CONVERT DATE ls_range_date-low TIME lc_time_end INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
      WHEN 'LT'.
        CONVERT DATE ls_range_date-low INTO TIME STAMP ls_range_ts-low TIME ZONE sy-zonlo.
      WHEN OTHERS.
        CONTINUE.
    ENDCASE.

    APPEND ls_range_ts TO et_range_ts.
  ENDLOOP.

ENDFUNCTION.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ABAP</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/181</guid>
      <comments>https://boy0.tistory.com/181#entry181comment</comments>
      <pubDate>Mon, 27 Dec 2021 16:33:00 +0900</pubDate>
    </item>
    <item>
      <title>ZCL_MDP_READ_HELPER</title>
      <link>https://boy0.tistory.com/180</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;MDG read helper&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for BP model&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for MM model&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;CLASS zcl_mdp_read_helper DEFINITION
  PUBLIC
  CREATE PUBLIC .

  PUBLIC SECTION.

    TYPES ts_bp_key TYPE /mdgbp/_s_bp_ky_bp_header .
    TYPES:
      tt_bp_key TYPE SORTED TABLE OF /mdgbp/_s_bp_ky_bp_header WITH NON-UNIQUE KEY bp_header .
    TYPES ts_bp_bp_header TYPE mdg_bs_bp_bp_header .
    TYPES:
      tt_bp_bp_header TYPE SORTED TABLE OF mdg_bs_bp_bp_header WITH NON-UNIQUE KEY bp_header .
    TYPES ts_bp_ad_email TYPE mdg_bs_bp_ad_email .
    TYPES:
      tt_bp_ad_email TYPE SORTED TABLE OF mdg_bs_bp_ad_email WITH NON-UNIQUE KEY bp_header addrno ad_consno .
    TYPES ts_bp_ad_fax TYPE mdg_bs_bp_ad_fax .
    TYPES:
      tt_bp_ad_fax TYPE SORTED TABLE OF mdg_bs_bp_ad_fax WITH NON-UNIQUE KEY bp_header addrno ad_consno .
    TYPES ts_bp_ad_name_o TYPE mdg_bs_bp_ad_name_o .
    TYPES:
      tt_bp_ad_name_o TYPE SORTED TABLE OF mdg_bs_bp_ad_name_o WITH NON-UNIQUE KEY bp_header addrno ad_nation .
    TYPES ts_bp_ad_name_p TYPE mdg_bs_bp_ad_name_p .
    TYPES:
      tt_bp_ad_name_p TYPE SORTED TABLE OF mdg_bs_bp_ad_name_p WITH NON-UNIQUE KEY bp_header addrno ad_nation .
    TYPES ts_bp_ad_postal TYPE mdg_bs_bp_ad_postal .
    TYPES:
      tt_bp_ad_postal TYPE SORTED TABLE OF mdg_bs_bp_ad_postal WITH NON-UNIQUE KEY bp_header addrno ad_nation .
    TYPES ts_bp_ad_tel TYPE mdg_bs_bp_ad_tel .
    TYPES:
      tt_bp_ad_tel TYPE SORTED TABLE OF mdg_bs_bp_ad_tel WITH NON-UNIQUE KEY bp_header addrno ad_consno .
    TYPES ts_bp_ad_url TYPE mdg_bs_bp_ad_url .
    TYPES:
      tt_bp_ad_url TYPE SORTED TABLE OF mdg_bs_bp_ad_url WITH NON-UNIQUE KEY bp_header addrno ad_consno .
    TYPES ts_bp_address TYPE mdg_bs_bp_address .
    TYPES:
      tt_bp_address TYPE SORTED TABLE OF mdg_bs_bp_address WITH NON-UNIQUE KEY bp_header addrno .
    TYPES ts_bp_bp_addr TYPE mdg_bs_bp_bp_addr .
    TYPES:
      tt_bp_bp_addr TYPE SORTED TABLE OF mdg_bs_bp_bp_addr WITH NON-UNIQUE KEY bp_header addrno .
    TYPES ts_bp_bp_addusg TYPE mdg_bs_bp_bp_addusg .
    TYPES:
      tt_bp_bp_addusg TYPE SORTED TABLE OF mdg_bs_bp_bp_addusg WITH NON-UNIQUE KEY bp_header addrno bp_adrknd .
    TYPES ts_bp_bp_bkdtl TYPE mdg_bs_bp_bp_bkdtl .
    TYPES:
      tt_bp_bp_bkdtl TYPE SORTED TABLE OF mdg_bs_bp_bp_bkdtl WITH NON-UNIQUE KEY bp_header bank_id .
    TYPES ts_bp_bp_ccdtl TYPE mdg_bs_bp_bp_ccdtl .
    TYPES:
      tt_bp_bp_ccdtl TYPE SORTED TABLE OF mdg_bs_bp_bp_ccdtl WITH NON-UNIQUE KEY bp_header card_id .
    TYPES ts_bp_bp_centrl TYPE mdg_bs_bp_bp_centrl .
    TYPES:
      tt_bp_bp_centrl TYPE SORTED TABLE OF mdg_bs_bp_bp_centrl WITH NON-UNIQUE KEY bp_header .
    TYPES ts_bp_bp_idnum TYPE mdg_bs_bp_bp_idnum .
    TYPES:
      tt_bp_bp_idnum TYPE SORTED TABLE OF mdg_bs_bp_bp_idnum WITH NON-UNIQUE KEY bp_header bp_idtype bp_id_num .
    TYPES ts_bp_bp_indstr TYPE mdg_bs_bp_bp_indstr .
    TYPES:
      tt_bp_bp_indstr TYPE SORTED TABLE OF mdg_bs_bp_bp_indstr WITH NON-UNIQUE KEY bp_header bp_indsct bp_indsys .
    TYPES ts_bp_bp_role TYPE mdg_bs_bp_bp_role .
    TYPES:
      tt_bp_bp_role TYPE SORTED TABLE OF mdg_bs_bp_bp_role WITH NON-UNIQUE KEY bp_header bp_rol_id .
    TYPES ts_bp_bp_taxnum TYPE mdg_bs_bp_bp_taxnum .
    TYPES:
      tt_bp_bp_taxnum TYPE SORTED TABLE OF mdg_bs_bp_bp_taxnum WITH NON-UNIQUE KEY bp_header bp_tx_typ .
    TYPES ts_bp_bp_mlt_as TYPE /mdgbpx/_s_bp_pp_bp_mlt_as .
    TYPES:
      tt_bp_bp_mlt_as TYPE SORTED TABLE OF /mdgbpx/_s_bp_pp_bp_mlt_as WITH NON-UNIQUE KEY bp_header assgnm_id .
    TYPES ts_bp_bp_mlt_ad TYPE /mdgbpx/_s_bp_pp_bp_mlt_ad .
    TYPES:
      tt_bp_bp_mlt_ad TYPE SORTED TABLE OF /mdgbpx/_s_bp_pp_bp_mlt_ad WITH NON-UNIQUE KEY bp_header assgnm_id addrno .
    TYPES ts_bp_bp_cus_cc TYPE mdg_bs_cust_bp_cus_cc .
    TYPES:
      tt_bp_bp_cus_cc TYPE SORTED TABLE OF mdg_bs_cust_bp_cus_cc WITH NON-UNIQUE KEY bp_header assgnm_id company .
    TYPES ts_bp_bp_cuscla TYPE mdg_bs_cust_bp_cuscla .
    TYPES:
      tt_bp_bp_cuscla TYPE SORTED TABLE OF mdg_bs_cust_bp_cuscla WITH NON-UNIQUE KEY bp_header assgnm_id class classtype ecocntr .
    TYPES ts_bp_bp_cusddb TYPE mdg_bs_cust_bp_cusddb .
    TYPES:
      tt_bp_bp_cusddb TYPE SORTED TABLE OF mdg_bs_cust_bp_cusddb WITH NON-UNIQUE KEY bp_header assgnm_id cus_dokar cus_doknr cus_doktl cus_dokvr .
    TYPES ts_bp_bp_cusdun TYPE mdg_bs_cust_bp_cusdun .
    TYPES:
      tt_bp_bp_cusdun TYPE SORTED TABLE OF mdg_bs_cust_bp_cusdun WITH NON-UNIQUE KEY bp_header assgnm_id company maber .
    TYPES ts_bp_bp_cusfcn TYPE mdg_bs_cust_bp_cusfcn .
    TYPES:
      tt_bp_bp_cusfcn TYPE SORTED TABLE OF mdg_bs_cust_bp_cusfcn WITH NON-UNIQUE KEY bp_header assgnm_id spart vkorg vtweg parvw parza .
    TYPES ts_bp_bp_cusgen TYPE mdg_bs_cust_bp_cusgen .
    TYPES:
      tt_bp_bp_cusgen TYPE SORTED TABLE OF mdg_bs_cust_bp_cusgen WITH NON-UNIQUE KEY bp_header assgnm_id .
    TYPES ts_bp_bp_custax TYPE mdg_bs_cust_bp_custax .
    TYPES:
      tt_bp_bp_custax TYPE SORTED TABLE OF mdg_bs_cust_bp_custax WITH NON-UNIQUE KEY bp_header assgnm_id aland tatyp .
    TYPES ts_bp_bp_cusulp TYPE mdg_bs_cust_bp_cusulp .
    TYPES:
      tt_bp_bp_cusulp TYPE SORTED TABLE OF mdg_bs_cust_bp_cusulp WITH NON-UNIQUE KEY bp_header assgnm_id ablad .
    TYPES ts_bp_bp_cusval TYPE mdg_bs_cust_bp_cusval .
    TYPES:
      tt_bp_bp_cusval TYPE SORTED TABLE OF mdg_bs_cust_bp_cusval WITH NON-UNIQUE KEY bp_header assgnm_id charid classtype ecocntr valcnt .
    TYPES ts_bp_bp_cuswht TYPE mdg_bs_cust_bp_cuswht .
    TYPES:
      tt_bp_bp_cuswht TYPE SORTED TABLE OF mdg_bs_cust_bp_cuswht WITH NON-UNIQUE KEY bp_header assgnm_id company witht .
    TYPES ts_bp_bp_sales TYPE mdg_bs_cust_bp_sales .
    TYPES:
      tt_bp_bp_sales TYPE SORTED TABLE OF mdg_bs_cust_bp_sales WITH NON-UNIQUE KEY bp_header assgnm_id spart vkorg vtweg .
    TYPES ts_bp_cuscctxt TYPE mdg_bs_cust_cuscctxt .
    TYPES:
      tt_bp_cuscctxt TYPE SORTED TABLE OF mdg_bs_cust_cuscctxt WITH NON-UNIQUE KEY bp_header assgnm_id company cuslangu cus_tdid .
    TYPES ts_bp_cusgentxt TYPE mdg_bs_cust_cusgentxt .
    TYPES:
      tt_bp_cusgentxt TYPE SORTED TABLE OF mdg_bs_cust_cusgentxt WITH NON-UNIQUE KEY bp_header assgnm_id cuslangu cus_tdid .
    TYPES ts_bp_cussaltxt TYPE mdg_bs_cust_cussaltxt .
    TYPES:
      tt_bp_cussaltxt TYPE SORTED TABLE OF mdg_bs_cust_cussaltxt WITH NON-UNIQUE KEY bp_header assgnm_id spart vkorg vtweg cuslangu cus_tdid .
    TYPES ts_bp_bp_compny TYPE mdg_bs_suppl_bp_compny .
    TYPES:
      tt_bp_bp_compny TYPE SORTED TABLE OF mdg_bs_suppl_bp_compny WITH NON-UNIQUE KEY bp_header assgnm_id company .
    TYPES ts_bp_bp_dunn TYPE mdg_bs_suppl_bp_dunn .
    TYPES:
      tt_bp_bp_dunn TYPE SORTED TABLE OF mdg_bs_suppl_bp_dunn WITH NON-UNIQUE KEY bp_header assgnm_id company maber .
    TYPES ts_bp_bp_porg TYPE mdg_bs_suppl_bp_porg .
    TYPES:
      tt_bp_bp_porg TYPE SORTED TABLE OF mdg_bs_suppl_bp_porg WITH NON-UNIQUE KEY bp_header assgnm_id prch_org .
    TYPES ts_bp_bp_porg2 TYPE mdg_bs_suppl_bp_porg2 .
    TYPES:
      tt_bp_bp_porg2 TYPE SORTED TABLE OF mdg_bs_suppl_bp_porg2 WITH NON-UNIQUE KEY bp_header assgnm_id prch_org ltsnr werks_d .
    TYPES ts_bp_bp_taxgrp TYPE mdg_bs_suppl_bp_taxgrp .
    TYPES:
      tt_bp_bp_taxgrp TYPE SORTED TABLE OF mdg_bs_suppl_bp_taxgrp WITH NON-UNIQUE KEY bp_header assgnm_id koart taxgr .
    TYPES ts_bp_bp_vencla TYPE mdg_bs_suppl_bp_vencla .
    TYPES:
      tt_bp_bp_vencla TYPE SORTED TABLE OF mdg_bs_suppl_bp_vencla WITH NON-UNIQUE KEY bp_header assgnm_id class classtype ecocntr .
    TYPES ts_bp_bp_venddb TYPE mdg_bs_suppl_bp_venddb .
    TYPES:
      tt_bp_bp_venddb TYPE SORTED TABLE OF mdg_bs_suppl_bp_venddb WITH NON-UNIQUE KEY bp_header assgnm_id ven_dokar ven_doknr ven_doktl ven_dokvr .
    TYPES ts_bp_bp_venfcn TYPE mdg_bs_suppl_bp_venfcn .
    TYPES:
      tt_bp_bp_venfcn TYPE SORTED TABLE OF mdg_bs_suppl_bp_venfcn WITH NON-UNIQUE KEY bp_header assgnm_id prch_org ltsnr parvw parza werks_d .
    TYPES ts_bp_bp_vengen TYPE mdg_bs_suppl_bp_vengen .
    TYPES:
      tt_bp_bp_vengen TYPE SORTED TABLE OF mdg_bs_suppl_bp_vengen WITH NON-UNIQUE KEY bp_header assgnm_id .
    TYPES ts_bp_bp_vensub TYPE mdg_bs_suppl_bp_vensub .
    TYPES:
      tt_bp_bp_vensub TYPE SORTED TABLE OF mdg_bs_suppl_bp_vensub WITH NON-UNIQUE KEY bp_header assgnm_id ltsnr ven_langu .
    TYPES ts_bp_bp_venval TYPE mdg_bs_suppl_bp_venval .
    TYPES:
      tt_bp_bp_venval TYPE SORTED TABLE OF mdg_bs_suppl_bp_venval WITH NON-UNIQUE KEY bp_header assgnm_id charid classtype ecocntr valcnt .
    TYPES ts_bp_bp_whtax TYPE mdg_bs_suppl_bp_whtax .
    TYPES:
      tt_bp_bp_whtax TYPE SORTED TABLE OF mdg_bs_suppl_bp_whtax WITH NON-UNIQUE KEY bp_header assgnm_id company land_1 witht .
    TYPES ts_bp_vencctxt TYPE mdg_bs_suppl_vencctxt .
    TYPES:
      tt_bp_vencctxt TYPE SORTED TABLE OF mdg_bs_suppl_vencctxt WITH NON-UNIQUE KEY bp_header assgnm_id company venlangu ven_tdid .
    TYPES ts_bp_vengentxt TYPE mdg_bs_suppl_vengentxt .
    TYPES:
      tt_bp_vengentxt TYPE SORTED TABLE OF mdg_bs_suppl_vengentxt WITH NON-UNIQUE KEY bp_header assgnm_id venlangu ven_tdid .
    TYPES ts_bp_venpotxt TYPE mdg_bs_suppl_venpotxt .
    TYPES:
      tt_bp_venpotxt TYPE SORTED TABLE OF mdg_bs_suppl_venpotxt WITH NON-UNIQUE KEY bp_header assgnm_id prch_org venlangu ven_tdid .
    TYPES ts_mm_key TYPE /mdgmm/_s_mm_kf_material .
    TYPES:
      tt_mm_key TYPE SORTED TABLE OF /mdgmm/_s_mm_kf_material WITH NON-UNIQUE KEY material .
    TYPES ts_mm_txt TYPE /mdgmm/_st_mm_pp_material .
    TYPES:
      tt_mm_txt TYPE SORTED TABLE OF /mdgmm/_st_mm_pp_material WITH NON-UNIQUE KEY material langu .
    TYPES ts_mm_material TYPE /mdgmm/_s_mm_pp_material .
    TYPES:
      tt_mm_material TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_material WITH NON-UNIQUE KEY material .
    TYPES ts_mm_bscdattxt TYPE /mdgmm/_s_mm_pp_bscdattxt .
    TYPES:
      tt_mm_bscdattxt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_bscdattxt WITH NON-UNIQUE KEY material langucode .
    TYPES ts_mm_classasgn TYPE /mdgmm/_s_mm_pp_classasgn .
    TYPES:
      tt_mm_classasgn TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_classasgn WITH NON-UNIQUE KEY material changeno class classtype ecocntr guid .
    TYPES ts_mm_intcmnt TYPE /mdgmm/_s_mm_pp_intcmnt .
    TYPES:
      tt_mm_intcmnt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_intcmnt WITH NON-UNIQUE KEY material langucode .
    TYPES ts_mm_marapurch TYPE /mdgmm/_s_mm_pp_marapurch .
    TYPES:
      tt_mm_marapurch TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marapurch WITH NON-UNIQUE KEY material .
    TYPES ts_mm_maraqtmng TYPE /mdgmm/_s_mm_pp_maraqtmng .
    TYPES:
      tt_mm_maraqtmng TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_maraqtmng WITH NON-UNIQUE KEY material .
    TYPES ts_mm_marasales TYPE /mdgmm/_s_mm_pp_marasales .
    TYPES:
      tt_mm_marasales TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marasales WITH NON-UNIQUE KEY material .
    TYPES ts_mm_maraspm TYPE /mdgmm/_s_mm_pp_maraspm .
    TYPES:
      tt_mm_maraspm TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_maraspm WITH NON-UNIQUE KEY material .
    TYPES ts_mm_marastor TYPE /mdgmm/_s_mm_pp_marastor .
    TYPES:
      tt_mm_marastor TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marastor WITH NON-UNIQUE KEY material .
    TYPES ts_mm_marcatp TYPE /mdgmm/_s_mm_pp_marcatp .
    TYPES:
      tt_mm_marcatp TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcatp WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcbasic TYPE /mdgmm/_s_mm_pp_marcbasic .
    TYPES:
      tt_mm_marcbasic TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcbasic WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marccstng TYPE /mdgmm/_s_mm_pp_marccstng .
    TYPES:
      tt_mm_marccstng TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marccstng WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcfrcst TYPE /mdgmm/_s_mm_pp_marcfrcst .
    TYPES:
      tt_mm_marcfrcst TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcfrcst WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcfrgtr TYPE /mdgmm/_s_mm_pp_marcfrgtr .
    TYPES:
      tt_mm_marcfrgtr TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcfrgtr WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcfrpar TYPE /mdgmm/_s_mm_pp_marcfrpar .
    TYPES:
      tt_mm_marcfrpar TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcfrpar WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcmrpfc TYPE /mdgmm/_s_mm_pp_marcmrpfc .
    TYPES:
      tt_mm_marcmrpfc TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcmrpfc WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcmrpls TYPE /mdgmm/_s_mm_pp_marcmrpls .
    TYPES:
      tt_mm_marcmrpls TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcmrpls WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcmrpmi TYPE /mdgmm/_s_mm_pp_marcmrpmi .
    TYPES:
      tt_mm_marcmrpmi TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcmrpmi WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcmrppp TYPE /mdgmm/_s_mm_pp_marcmrppp .
    TYPES:
      tt_mm_marcmrppp TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcmrppp WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcmrpsp TYPE /mdgmm/_s_mm_pp_marcmrpsp .
    TYPES:
      tt_mm_marcmrpsp TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcmrpsp WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcprt TYPE /mdgmm/_s_mm_pp_marcprt .
    TYPES:
      tt_mm_marcprt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcprt WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcpurch TYPE /mdgmm/_s_mm_pp_marcpurch .
    TYPES:
      tt_mm_marcpurch TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcpurch WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcqtmng TYPE /mdgmm/_s_mm_pp_marcqtmng .
    TYPES:
      tt_mm_marcqtmng TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcqtmng WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcsales TYPE /mdgmm/_s_mm_pp_marcsales .
    TYPES:
      tt_mm_marcsales TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcsales WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcstore TYPE /mdgmm/_s_mm_pp_marcstore .
    TYPES:
      tt_mm_marcstore TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcstore WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_marcwrksd TYPE /mdgmm/_s_mm_pp_marcwrksd .
    TYPES:
      tt_mm_marcwrksd TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_marcwrksd WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_mardmrp TYPE /mdgmm/_s_mm_pp_mardmrp .
    TYPES:
      tt_mm_mardmrp TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mardmrp WITH NON-UNIQUE KEY material werks lgort .
    TYPES ts_mm_mardstor TYPE /mdgmm/_s_mm_pp_mardstor .
    TYPES:
      tt_mm_mardstor TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mardstor WITH NON-UNIQUE KEY material werks lgort .
    TYPES ts_mm_mbewactng TYPE /mdgmm/_s_mm_pp_mbewactng .
    TYPES:
      tt_mm_mbewactng TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mbewactng WITH NON-UNIQUE KEY material bwkey bwtar .
    TYPES ts_mm_mbewcstng TYPE /mdgmm/_s_mm_pp_mbewcstng .
    TYPES:
      tt_mm_mbewcstng TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mbewcstng WITH NON-UNIQUE KEY material bwkey .
    TYPES ts_mm_mbewmlac TYPE /mdgmm/_s_mm_pp_mbewmlac .
    TYPES:
      tt_mm_mbewmlac TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mbewmlac WITH NON-UNIQUE KEY material bwkey bwtar curtp .
    TYPES ts_mm_mbewmlval TYPE /mdgmm/_s_mm_pp_mbewmlval .
    TYPES:
      tt_mm_mbewmlval TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mbewmlval WITH NON-UNIQUE KEY material bwkey bwtar curtp .
    TYPES ts_mm_mbewvalua TYPE /mdgmm/_s_mm_pp_mbewvalua .
    TYPES:
      tt_mm_mbewvalua TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mbewvalua WITH NON-UNIQUE KEY material bwkey bwtar .
    TYPES ts_mm_mdmabasic TYPE /mdgmm/_s_mm_pp_mdmabasic .
    TYPES:
      tt_mm_mdmabasic TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mdmabasic WITH NON-UNIQUE KEY material werks berid .
    TYPES ts_mm_mean_gtin TYPE /mdgmm/_s_mm_pp_mean_gtin .
    TYPES:
      tt_mm_mean_gtin TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mean_gtin WITH NON-UNIQUE KEY material qteunit ean .
    TYPES ts_mm_mlanpurch TYPE /mdgmm/_s_mm_pp_mlanpurch .
    TYPES:
      tt_mm_mlanpurch TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mlanpurch WITH NON-UNIQUE KEY material aland .
    TYPES ts_mm_mlansales TYPE /mdgmm/_s_mm_pp_mlansales .
    TYPES:
      tt_mm_mlansales TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mlansales WITH NON-UNIQUE KEY material aland tatyp .
    TYPES ts_mm_mlgnstor TYPE /mdgmm/_s_mm_pp_mlgnstor .
    TYPES:
      tt_mm_mlgnstor TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mlgnstor WITH NON-UNIQUE KEY material lgnum .
    TYPES ts_mm_mlgtstor TYPE /mdgmm/_s_mm_pp_mlgtstor .
    TYPES:
      tt_mm_mlgtstor TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mlgtstor WITH NON-UNIQUE KEY material lgnum lgtyp .
    TYPES ts_mm_mpgdprodg TYPE /mdgmm/_s_mm_pp_mpgdprodg .
    TYPES:
      tt_mm_mpgdprodg TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mpgdprodg WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_mrptxt TYPE /mdgmm/_s_mm_pp_mrptxt .
    TYPES:
      tt_mm_mrptxt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mrptxt WITH NON-UNIQUE KEY material werks .
    TYPES ts_mm_mvkegrpng TYPE /mdgmm/_s_mm_pp_mvkegrpng .
    TYPES:
      tt_mm_mvkegrpng TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mvkegrpng WITH NON-UNIQUE KEY material vkorg vtweg .
    TYPES ts_mm_mvkesales TYPE /mdgmm/_s_mm_pp_mvkesales .
    TYPES:
      tt_mm_mvkesales TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_mvkesales WITH NON-UNIQUE KEY material vkorg vtweg .
    TYPES ts_mm_purchtxt TYPE /mdgmm/_s_mm_pp_purchtxt .
    TYPES:
      tt_mm_purchtxt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_purchtxt WITH NON-UNIQUE KEY material langucode .
    TYPES ts_mm_qinsptxt TYPE /mdgmm/_s_mm_pp_qinsptxt .
    TYPES:
      tt_mm_qinsptxt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_qinsptxt WITH NON-UNIQUE KEY material langucode .
    TYPES ts_mm_qmatbasic TYPE /mdgmm/_s_mm_pp_qmatbasic .
    TYPES:
      tt_mm_qmatbasic TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_qmatbasic WITH NON-UNIQUE KEY material werks art .
    TYPES ts_mm_salestxt TYPE /mdgmm/_s_mm_pp_salestxt .
    TYPES:
      tt_mm_salestxt TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_salestxt WITH NON-UNIQUE KEY material vkorg vtweg langucode .
    TYPES ts_mm_unitofmsr TYPE /mdgmm/_s_mm_pp_unitofmsr .
    TYPES:
      tt_mm_unitofmsr TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_unitofmsr WITH NON-UNIQUE KEY material qteunit .
    TYPES ts_mm_valuation TYPE /mdgmm/_s_mm_pp_valuation .
    TYPES:
      tt_mm_valuation TYPE SORTED TABLE OF /mdgmm/_s_mm_pp_valuation WITH NON-UNIQUE KEY material changeno charid classtype ecocntr guid valcnt .

    CLASS-DATA gv_debug_mode TYPE flag .

    CLASS-METHODS get_cr_from_key
      IMPORTING
        !iv_model       TYPE usmd_model
        !iv_main_entity TYPE usmd_entity
        !is_key         TYPE data
      RETURNING
        VALUE(rv_cr)    TYPE usmd_crequest .
    CLASS-METHODS get_t_sel_from_conv_api
      RETURNING
        VALUE(rt_sel) TYPE usmd_ts_sel .
    CLASS-METHODS read_entity
      IMPORTING
        !iv_entity TYPE clike
      EXPORTING
        !et_data   TYPE ANY TABLE .
    CLASS-METHODS read_bp
      IMPORTING
        !iv_key           TYPE bu_partner OPTIONAL
        !it_key           TYPE rpm_tt_bupa OPTIONAL
        !iv_read_inactive TYPE flag OPTIONAL
      EXPORTING
        !es_bp_header     TYPE ts_bp_bp_header
        !et_key           TYPE tt_bp_key
        !et_bp_header     TYPE tt_bp_bp_header
        !et_ad_email      TYPE tt_bp_ad_email
        !et_ad_fax        TYPE tt_bp_ad_fax
        !et_ad_name_o     TYPE tt_bp_ad_name_o
        !et_ad_name_p     TYPE tt_bp_ad_name_p
        !et_ad_postal     TYPE tt_bp_ad_postal
        !et_ad_tel        TYPE tt_bp_ad_tel
        !et_ad_url        TYPE tt_bp_ad_url
        !et_address       TYPE tt_bp_address
        !et_bp_addr       TYPE tt_bp_bp_addr
        !et_bp_addusg     TYPE tt_bp_bp_addusg
        !et_bp_bkdtl      TYPE tt_bp_bp_bkdtl
        !et_bp_ccdtl      TYPE tt_bp_bp_ccdtl
        !et_bp_centrl     TYPE tt_bp_bp_centrl
        !et_bp_idnum      TYPE tt_bp_bp_idnum
        !et_bp_indstr     TYPE tt_bp_bp_indstr
        !et_bp_role       TYPE tt_bp_bp_role
        !et_bp_taxnum     TYPE tt_bp_bp_taxnum
        !et_bp_mlt_as     TYPE tt_bp_bp_mlt_as
        !et_bp_mlt_ad     TYPE tt_bp_bp_mlt_ad
        !et_bp_cus_cc     TYPE tt_bp_bp_cus_cc
        !et_bp_cuscla     TYPE tt_bp_bp_cuscla
        !et_bp_cusddb     TYPE tt_bp_bp_cusddb
        !et_bp_cusdun     TYPE tt_bp_bp_cusdun
        !et_bp_cusfcn     TYPE tt_bp_bp_cusfcn
        !et_bp_cusgen     TYPE tt_bp_bp_cusgen
        !et_bp_custax     TYPE tt_bp_bp_custax
        !et_bp_cusulp     TYPE tt_bp_bp_cusulp
        !et_bp_cusval     TYPE tt_bp_bp_cusval
        !et_bp_cuswht     TYPE tt_bp_bp_cuswht
        !et_bp_sales      TYPE tt_bp_bp_sales
        !et_cuscctxt      TYPE tt_bp_cuscctxt
        !et_cusgentxt     TYPE tt_bp_cusgentxt
        !et_cussaltxt     TYPE tt_bp_cussaltxt
        !et_bp_compny     TYPE tt_bp_bp_compny
        !et_bp_dunn       TYPE tt_bp_bp_dunn
        !et_bp_porg       TYPE tt_bp_bp_porg
        !et_bp_porg2      TYPE tt_bp_bp_porg2
        !et_bp_taxgrp     TYPE tt_bp_bp_taxgrp
        !et_bp_vencla     TYPE tt_bp_bp_vencla
        !et_bp_venddb     TYPE tt_bp_bp_venddb
        !et_bp_venfcn     TYPE tt_bp_bp_venfcn
        !et_bp_vengen     TYPE tt_bp_bp_vengen
        !et_bp_vensub     TYPE tt_bp_bp_vensub
        !et_bp_venval     TYPE tt_bp_bp_venval
        !et_bp_whtax      TYPE tt_bp_bp_whtax
        !et_vencctxt      TYPE tt_bp_vencctxt
        !et_vengentxt     TYPE tt_bp_vengentxt
        !et_venpotxt      TYPE tt_bp_venpotxt .
    CLASS-METHODS read_mm
      IMPORTING
        !iv_key           TYPE matnr OPTIONAL
        !it_key           TYPE matnr_tab OPTIONAL
        !iv_read_inactive TYPE flag OPTIONAL
      EXPORTING
        !es_material      TYPE ts_mm_material
        !et_key           TYPE tt_mm_key
        !et_txt           TYPE tt_mm_txt
        !et_material      TYPE tt_mm_material
        !et_bscdattxt     TYPE tt_mm_bscdattxt
        !et_classasgn     TYPE tt_mm_classasgn
        !et_intcmnt       TYPE tt_mm_intcmnt
        !et_marapurch     TYPE tt_mm_marapurch
        !et_maraqtmng     TYPE tt_mm_maraqtmng
        !et_marasales     TYPE tt_mm_marasales
        !et_maraspm       TYPE tt_mm_maraspm
        !et_marastor      TYPE tt_mm_marastor
        !et_marcatp       TYPE tt_mm_marcatp
        !et_marcbasic     TYPE tt_mm_marcbasic
        !et_marccstng     TYPE tt_mm_marccstng
        !et_marcfrcst     TYPE tt_mm_marcfrcst
        !et_marcfrgtr     TYPE tt_mm_marcfrgtr
        !et_marcfrpar     TYPE tt_mm_marcfrpar
        !et_marcmrpfc     TYPE tt_mm_marcmrpfc
        !et_marcmrpls     TYPE tt_mm_marcmrpls
        !et_marcmrpmi     TYPE tt_mm_marcmrpmi
        !et_marcmrppp     TYPE tt_mm_marcmrppp
        !et_marcmrpsp     TYPE tt_mm_marcmrpsp
        !et_marcprt       TYPE tt_mm_marcprt
        !et_marcpurch     TYPE tt_mm_marcpurch
        !et_marcqtmng     TYPE tt_mm_marcqtmng
        !et_marcsales     TYPE tt_mm_marcsales
        !et_marcstore     TYPE tt_mm_marcstore
        !et_marcwrksd     TYPE tt_mm_marcwrksd
        !et_mardmrp       TYPE tt_mm_mardmrp
        !et_mardstor      TYPE tt_mm_mardstor
        !et_mbewactng     TYPE tt_mm_mbewactng
        !et_mbewcstng     TYPE tt_mm_mbewcstng
        !et_mbewmlac      TYPE tt_mm_mbewmlac
        !et_mbewmlval     TYPE tt_mm_mbewmlval
        !et_mbewvalua     TYPE tt_mm_mbewvalua
        !et_mdmabasic     TYPE tt_mm_mdmabasic
        !et_mean_gtin     TYPE tt_mm_mean_gtin
        !et_mlanpurch     TYPE tt_mm_mlanpurch
        !et_mlansales     TYPE tt_mm_mlansales
        !et_mlgnstor      TYPE tt_mm_mlgnstor
        !et_mlgtstor      TYPE tt_mm_mlgtstor
        !et_mpgdprodg     TYPE tt_mm_mpgdprodg
        !et_mrptxt        TYPE tt_mm_mrptxt
        !et_mvkegrpng     TYPE tt_mm_mvkegrpng
        !et_mvkesales     TYPE tt_mm_mvkesales
        !et_purchtxt      TYPE tt_mm_purchtxt
        !et_qinsptxt      TYPE tt_mm_qinsptxt
        !et_qmatbasic     TYPE tt_mm_qmatbasic
        !et_salestxt      TYPE tt_mm_salestxt
        !et_unitofmsr     TYPE tt_mm_unitofmsr
        !et_valuation     TYPE tt_mm_valuation .
  PROTECTED SECTION.
  PRIVATE SECTION.
ENDCLASS.



CLASS ZCL_MDP_READ_HELPER IMPLEMENTATION.


* &amp;lt;SIGNATURE&amp;gt;---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MDP_READ_HELPER=&amp;gt;GET_CR_FROM_KEY
* +-------------------------------------------------------------------------------------------------+
* | [---&amp;gt;] IV_MODEL                       TYPE        USMD_MODEL
* | [---&amp;gt;] IV_MAIN_ENTITY                 TYPE        USMD_ENTITY
* | [---&amp;gt;] IS_KEY                         TYPE        DATA
* | [&amp;lt;-()] RV_CR                          TYPE        USMD_CREQUEST
* +--------------------------------------------------------------------------------------&amp;lt;/SIGNATURE&amp;gt;
  METHOD get_cr_from_key.
    DATA: lt_crequest_id TYPE usmd_cr_ts_root_node_id.

*IV_OBJECT_TYPE	TYPE USMD_OBJECT
*IS_OBJECT_KEY  TYPE DATA
*IV_MODEL	TYPE USMD_MODEL
*value( RT_CREQUEST_ID )  TYPE USMD_CR_TS_ROOT_NODE_ID
    cl_usmd_cr_factory=&amp;gt;get_cr_service_provider( )-&amp;gt;if_usmd_cr_sp_query~retrieve_open_cr_by_object_key(
      EXPORTING
        iv_object_type = iv_main_entity
        is_object_key  = is_key
        iv_model       = iv_model
      RECEIVING
        rt_crequest_id = lt_crequest_id
    ).
*    CATCH cx_usmd_cr_root_no_model_insta. &quot; no model instance for model name
*    CATCH cx_usmd_cr_root_bad_entity_typ. &quot; Illegal entity typ
*    CATCH cx_usmd_cr_root_emp_entity_key. &quot; Initial entity key.

    CHECK: lt_crequest_id IS NOT INITIAL.
    rv_cr = lt_crequest_id[ 1 ]-usmd_crequest.

  ENDMETHOD.


* &amp;lt;SIGNATURE&amp;gt;---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MDP_READ_HELPER=&amp;gt;GET_T_SEL_FROM_CONV_API
* +-------------------------------------------------------------------------------------------------+
* | [&amp;lt;-()] RT_SEL                         TYPE        USMD_TS_SEL
* +--------------------------------------------------------------------------------------&amp;lt;/SIGNATURE&amp;gt;
  METHOD get_t_sel_from_conv_api.
    DATA: lo_conv_api             TYPE REF TO if_usmd_conv_som_gov_api,
          lt_object_list_db_style TYPE usmd_t_crequest_entity,
          ls_object_list_db_style TYPE usmd_s_crequest_entity,
          ls_sel                  TYPE usmd_s_sel.

    TRY.
        lo_conv_api = cl_usmd_conv_som_gov_api=&amp;gt;get_instance( ).
        lo_conv_api-&amp;gt;get_object_list(
          IMPORTING
            et_object_list_db_style = lt_object_list_db_style &quot; Change Request, Entity, Table Type
        ).
        ls_sel-sign = 'I'.
        ls_sel-option = 'EQ'.
        LOOP AT lt_object_list_db_style INTO ls_object_list_db_style WHERE usmd_entity = lo_conv_api-&amp;gt;mv_main_entity.
          ls_sel-fieldname = ls_object_list_db_style-usmd_entity_obj.
          ls_sel-low = ls_object_list_db_style-usmd_value.
          INSERT ls_sel INTO TABLE rt_sel.
        ENDLOOP.

      CATCH cx_usmd_gov_api.                &quot; General Processing Error GOV_API

    ENDTRY.

  ENDMETHOD.


* &amp;lt;SIGNATURE&amp;gt;---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MDP_READ_HELPER=&amp;gt;READ_BP
* +-------------------------------------------------------------------------------------------------+
* | [---&amp;gt;] IV_KEY                         TYPE        BU_PARTNER(optional)
* | [---&amp;gt;] IT_KEY                         TYPE        RPM_TT_BUPA(optional)
* | [---&amp;gt;] IV_READ_INACTIVE               TYPE        FLAG(optional)
* | [&amp;lt;---] ES_BP_HEADER                   TYPE        TS_BP_BP_HEADER
* | [&amp;lt;---] ET_KEY                         TYPE        TT_BP_KEY
* | [&amp;lt;---] ET_BP_HEADER                   TYPE        TT_BP_BP_HEADER
* | [&amp;lt;---] ET_AD_EMAIL                    TYPE        TT_BP_AD_EMAIL
* | [&amp;lt;---] ET_AD_FAX                      TYPE        TT_BP_AD_FAX
* | [&amp;lt;---] ET_AD_NAME_O                   TYPE        TT_BP_AD_NAME_O
* | [&amp;lt;---] ET_AD_NAME_P                   TYPE        TT_BP_AD_NAME_P
* | [&amp;lt;---] ET_AD_POSTAL                   TYPE        TT_BP_AD_POSTAL
* | [&amp;lt;---] ET_AD_TEL                      TYPE        TT_BP_AD_TEL
* | [&amp;lt;---] ET_AD_URL                      TYPE        TT_BP_AD_URL
* | [&amp;lt;---] ET_ADDRESS                     TYPE        TT_BP_ADDRESS
* | [&amp;lt;---] ET_BP_ADDR                     TYPE        TT_BP_BP_ADDR
* | [&amp;lt;---] ET_BP_ADDUSG                   TYPE        TT_BP_BP_ADDUSG
* | [&amp;lt;---] ET_BP_BKDTL                    TYPE        TT_BP_BP_BKDTL
* | [&amp;lt;---] ET_BP_CCDTL                    TYPE        TT_BP_BP_CCDTL
* | [&amp;lt;---] ET_BP_CENTRL                   TYPE        TT_BP_BP_CENTRL
* | [&amp;lt;---] ET_BP_IDNUM                    TYPE        TT_BP_BP_IDNUM
* | [&amp;lt;---] ET_BP_INDSTR                   TYPE        TT_BP_BP_INDSTR
* | [&amp;lt;---] ET_BP_ROLE                     TYPE        TT_BP_BP_ROLE
* | [&amp;lt;---] ET_BP_TAXNUM                   TYPE        TT_BP_BP_TAXNUM
* | [&amp;lt;---] ET_BP_MLT_AS                   TYPE        TT_BP_BP_MLT_AS
* | [&amp;lt;---] ET_BP_MLT_AD                   TYPE        TT_BP_BP_MLT_AD
* | [&amp;lt;---] ET_BP_CUS_CC                   TYPE        TT_BP_BP_CUS_CC
* | [&amp;lt;---] ET_BP_CUSCLA                   TYPE        TT_BP_BP_CUSCLA
* | [&amp;lt;---] ET_BP_CUSDDB                   TYPE        TT_BP_BP_CUSDDB
* | [&amp;lt;---] ET_BP_CUSDUN                   TYPE        TT_BP_BP_CUSDUN
* | [&amp;lt;---] ET_BP_CUSFCN                   TYPE        TT_BP_BP_CUSFCN
* | [&amp;lt;---] ET_BP_CUSGEN                   TYPE        TT_BP_BP_CUSGEN
* | [&amp;lt;---] ET_BP_CUSTAX                   TYPE        TT_BP_BP_CUSTAX
* | [&amp;lt;---] ET_BP_CUSULP                   TYPE        TT_BP_BP_CUSULP
* | [&amp;lt;---] ET_BP_CUSVAL                   TYPE        TT_BP_BP_CUSVAL
* | [&amp;lt;---] ET_BP_CUSWHT                   TYPE        TT_BP_BP_CUSWHT
* | [&amp;lt;---] ET_BP_SALES                    TYPE        TT_BP_BP_SALES
* | [&amp;lt;---] ET_CUSCCTXT                    TYPE        TT_BP_CUSCCTXT
* | [&amp;lt;---] ET_CUSGENTXT                   TYPE        TT_BP_CUSGENTXT
* | [&amp;lt;---] ET_CUSSALTXT                   TYPE        TT_BP_CUSSALTXT
* | [&amp;lt;---] ET_BP_COMPNY                   TYPE        TT_BP_BP_COMPNY
* | [&amp;lt;---] ET_BP_DUNN                     TYPE        TT_BP_BP_DUNN
* | [&amp;lt;---] ET_BP_PORG                     TYPE        TT_BP_BP_PORG
* | [&amp;lt;---] ET_BP_PORG2                    TYPE        TT_BP_BP_PORG2
* | [&amp;lt;---] ET_BP_TAXGRP                   TYPE        TT_BP_BP_TAXGRP
* | [&amp;lt;---] ET_BP_VENCLA                   TYPE        TT_BP_BP_VENCLA
* | [&amp;lt;---] ET_BP_VENDDB                   TYPE        TT_BP_BP_VENDDB
* | [&amp;lt;---] ET_BP_VENFCN                   TYPE        TT_BP_BP_VENFCN
* | [&amp;lt;---] ET_BP_VENGEN                   TYPE        TT_BP_BP_VENGEN
* | [&amp;lt;---] ET_BP_VENSUB                   TYPE        TT_BP_BP_VENSUB
* | [&amp;lt;---] ET_BP_VENVAL                   TYPE        TT_BP_BP_VENVAL
* | [&amp;lt;---] ET_BP_WHTAX                    TYPE        TT_BP_BP_WHTAX
* | [&amp;lt;---] ET_VENCCTXT                    TYPE        TT_BP_VENCCTXT
* | [&amp;lt;---] ET_VENGENTXT                   TYPE        TT_BP_VENGENTXT
* | [&amp;lt;---] ET_VENPOTXT                    TYPE        TT_BP_VENPOTXT
* +--------------------------------------------------------------------------------------&amp;lt;/SIGNATURE&amp;gt;
  METHOD read_bp.
    DATA: lo_model_ext TYPE REF TO if_usmd_model_ext,
          lt_sel       TYPE usmd_ts_sel,
          ls_sel       TYPE usmd_s_sel,
          lv_readmode  TYPE usmd_readmode_ext  VALUE if_usmd_model_ext=&amp;gt;gc_readmode_default,
          lv_key       LIKE LINE OF it_key.
    FIELD-SYMBOLS: &amp;lt;ls_key&amp;gt; LIKE LINE OF et_key.

    CLEAR: et_key, et_bp_header, es_bp_header.

    cl_usmd_model_ext=&amp;gt;get_instance(
      EXPORTING
        i_usmd_model = 'BP'
      IMPORTING
        eo_instance  = lo_model_ext
    ).
    CHECK: lo_model_ext IS NOT INITIAL.

    ls_sel-fieldname = 'BP_HEADER'.
    ls_sel-sign = 'I'.
    ls_sel-option = 'EQ'.

    IF iv_key IS NOT INITIAL.
      ls_sel-low = iv_key.
      INSERT ls_sel INTO TABLE lt_sel.
    ENDIF.

    IF it_key IS NOT INITIAL.
      LOOP AT it_key INTO lv_key.
        ls_sel-low = lv_key.
        INSERT ls_sel INTO TABLE lt_sel.
      ENDLOOP.
    ENDIF.

    IF lt_sel IS INITIAL.
      lt_sel = get_t_sel_from_conv_api( ).
    ENDIF.

    CHECK: lt_sel IS NOT INITIAL.

    IF iv_read_inactive EQ abap_true.
      lv_readmode = if_usmd_model_ext=&amp;gt;gc_readmode_no_act.

      lo_model_ext-&amp;gt;read_char_value(
        EXPORTING
          i_fieldname       = 'BP_HEADER'
          it_sel            = lt_sel
          i_readmode        = lv_readmode
        IMPORTING
          et_data           = et_key
      ).
      CHECK: et_key IS NOT INITIAL.
      IF lines( lt_sel ) &amp;lt;&amp;gt; lines( et_key ).
        CLEAR: lt_sel.
        LOOP AT et_key ASSIGNING &amp;lt;ls_key&amp;gt;.
          ls_sel-low = &amp;lt;ls_key&amp;gt;-bp_header.
          INSERT ls_sel INTO TABLE lt_sel.
        ENDLOOP.
      ENDIF.

      lv_readmode = if_usmd_model_ext=&amp;gt;gc_readmode_all_inact.
    ENDIF.

    lo_model_ext-&amp;gt;read_char_value(
      EXPORTING
        i_fieldname       = 'BP_HEADER'
        it_sel            = lt_sel
        i_readmode        = lv_readmode
      IMPORTING
        et_data           = et_bp_header
    ).
    CHECK: et_bp_header IS NOT INITIAL.
    READ TABLE et_bp_header INTO es_bp_header INDEX 1.
    MOVE-CORRESPONDING et_bp_header TO et_key.


*    IF et_bp_centrl IS SUPPLIED.
*      CLEAR: et_bp_centrl.
*      lo_model_ext-&amp;gt;read_char_value(
*        EXPORTING
*          i_fieldname       = 'BP_CENTRL'
*          it_sel            = lt_sel
*          i_readmode        = lv_readmode
*        IMPORTING
*          et_data           = et_bp_centrl
*      ).
*    ENDIF.
    DEFINE __read.
      IF gv_debug_mode EQ abap_true OR et_&amp;1 IS SUPPLIED.
        CLEAR: et_&amp;1.
        lo_model_ext-&amp;gt;read_char_value(
          EXPORTING
            i_fieldname       = '&amp;1'
            it_sel            = lt_sel
            i_readmode        = lv_readmode
          IMPORTING
            et_data           = et_&amp;1
        ).
      ENDIF.
    END-OF-DEFINITION.


    __read ad_email.
    __read ad_fax.
    __read ad_name_o.
    __read ad_name_p.
    __read ad_postal.
    __read ad_tel.
    __read ad_url.
    __read address.
    __read bp_addr.
    __read bp_addusg.
    __read bp_bkdtl.
    __read bp_ccdtl.
    __read bp_centrl.
    __read bp_idnum.
    __read bp_indstr.
    __read bp_role.
    __read bp_taxnum.
    __read bp_mlt_as.
    __read bp_mlt_ad.
    __read bp_cus_cc.
    __read bp_cuscla.
    __read bp_cusddb.
    __read bp_cusdun.
    __read bp_cusfcn.
    __read bp_cusgen.
    __read bp_custax.
    __read bp_cusulp.
    __read bp_cusval.
    __read bp_cuswht.
    __read bp_sales.
    __read cuscctxt.
    __read cusgentxt.
    __read cussaltxt.
    __read bp_compny.
    __read bp_dunn.
    __read bp_porg.
    __read bp_porg2.
    __read bp_taxgrp.
    __read bp_vencla.
    __read bp_venddb.
    __read bp_venfcn.
    __read bp_vengen.
    __read bp_vensub.
    __read bp_venval.
    __read bp_whtax.
    __read vencctxt.
    __read vengentxt.
    __read venpotxt.


    IF gv_debug_mode EQ abap_true.
      BREAK-POINT.
    ENDIF.
  ENDMETHOD.


* &amp;lt;SIGNATURE&amp;gt;---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MDP_READ_HELPER=&amp;gt;READ_ENTITY
* +-------------------------------------------------------------------------------------------------+
* | [---&amp;gt;] IV_ENTITY                      TYPE        CLIKE
* | [&amp;lt;---] ET_DATA                        TYPE        ANY TABLE
* +--------------------------------------------------------------------------------------&amp;lt;/SIGNATURE&amp;gt;
  METHOD read_entity.
    DATA: lo_mdg_api   TYPE REF TO if_usmd_conv_som_gov_api,
          lo_model_api TYPE REF TO if_usmd_model_ext,
          lt_sel       TYPE usmd_ts_sel.

    CLEAR: et_data.

    TRY.
        lo_mdg_api = cl_usmd_conv_som_gov_api=&amp;gt;get_instance( ).
      CATCH cx_usmd_gov_api.
        RETURN.
    ENDTRY.
    CHECK: lo_mdg_api IS NOT INITIAL.

    cl_usmd_model_ext=&amp;gt;get_instance(
      EXPORTING
        i_usmd_model = lo_mdg_api-&amp;gt;mv_model_name
      IMPORTING
        eo_instance  = lo_model_api
    ).
    CHECK: lo_model_api IS NOT INITIAL.

    lt_sel = get_t_sel_from_conv_api( ).

    lo_model_api-&amp;gt;read_char_value(
      EXPORTING
        i_fieldname       = CONV #( iv_entity )
        it_sel            = lt_sel
      IMPORTING
        et_data           = et_data
    ).
  ENDMETHOD.


* &amp;lt;SIGNATURE&amp;gt;---------------------------------------------------------------------------------------+
* | Static Public Method ZCL_MDP_READ_HELPER=&amp;gt;READ_MM
* +-------------------------------------------------------------------------------------------------+
* | [---&amp;gt;] IV_KEY                         TYPE        MATNR(optional)
* | [---&amp;gt;] IT_KEY                         TYPE        MATNR_TAB(optional)
* | [---&amp;gt;] IV_READ_INACTIVE               TYPE        FLAG(optional)
* | [&amp;lt;---] ES_MATERIAL                    TYPE        TS_MM_MATERIAL
* | [&amp;lt;---] ET_KEY                         TYPE        TT_MM_KEY
* | [&amp;lt;---] ET_TXT                         TYPE        TT_MM_TXT
* | [&amp;lt;---] ET_MATERIAL                    TYPE        TT_MM_MATERIAL
* | [&amp;lt;---] ET_BSCDATTXT                   TYPE        TT_MM_BSCDATTXT
* | [&amp;lt;---] ET_CLASSASGN                   TYPE        TT_MM_CLASSASGN
* | [&amp;lt;---] ET_INTCMNT                     TYPE        TT_MM_INTCMNT
* | [&amp;lt;---] ET_MARAPURCH                   TYPE        TT_MM_MARAPURCH
* | [&amp;lt;---] ET_MARAQTMNG                   TYPE        TT_MM_MARAQTMNG
* | [&amp;lt;---] ET_MARASALES                   TYPE        TT_MM_MARASALES
* | [&amp;lt;---] ET_MARASPM                     TYPE        TT_MM_MARASPM
* | [&amp;lt;---] ET_MARASTOR                    TYPE        TT_MM_MARASTOR
* | [&amp;lt;---] ET_MARCATP                     TYPE        TT_MM_MARCATP
* | [&amp;lt;---] ET_MARCBASIC                   TYPE        TT_MM_MARCBASIC
* | [&amp;lt;---] ET_MARCCSTNG                   TYPE        TT_MM_MARCCSTNG
* | [&amp;lt;---] ET_MARCFRCST                   TYPE        TT_MM_MARCFRCST
* | [&amp;lt;---] ET_MARCFRGTR                   TYPE        TT_MM_MARCFRGTR
* | [&amp;lt;---] ET_MARCFRPAR                   TYPE        TT_MM_MARCFRPAR
* | [&amp;lt;---] ET_MARCMRPFC                   TYPE        TT_MM_MARCMRPFC
* | [&amp;lt;---] ET_MARCMRPLS                   TYPE        TT_MM_MARCMRPLS
* | [&amp;lt;---] ET_MARCMRPMI                   TYPE        TT_MM_MARCMRPMI
* | [&amp;lt;---] ET_MARCMRPPP                   TYPE        TT_MM_MARCMRPPP
* | [&amp;lt;---] ET_MARCMRPSP                   TYPE        TT_MM_MARCMRPSP
* | [&amp;lt;---] ET_MARCPRT                     TYPE        TT_MM_MARCPRT
* | [&amp;lt;---] ET_MARCPURCH                   TYPE        TT_MM_MARCPURCH
* | [&amp;lt;---] ET_MARCQTMNG                   TYPE        TT_MM_MARCQTMNG
* | [&amp;lt;---] ET_MARCSALES                   TYPE        TT_MM_MARCSALES
* | [&amp;lt;---] ET_MARCSTORE                   TYPE        TT_MM_MARCSTORE
* | [&amp;lt;---] ET_MARCWRKSD                   TYPE        TT_MM_MARCWRKSD
* | [&amp;lt;---] ET_MARDMRP                     TYPE        TT_MM_MARDMRP
* | [&amp;lt;---] ET_MARDSTOR                    TYPE        TT_MM_MARDSTOR
* | [&amp;lt;---] ET_MBEWACTNG                   TYPE        TT_MM_MBEWACTNG
* | [&amp;lt;---] ET_MBEWCSTNG                   TYPE        TT_MM_MBEWCSTNG
* | [&amp;lt;---] ET_MBEWMLAC                    TYPE        TT_MM_MBEWMLAC
* | [&amp;lt;---] ET_MBEWMLVAL                   TYPE        TT_MM_MBEWMLVAL
* | [&amp;lt;---] ET_MBEWVALUA                   TYPE        TT_MM_MBEWVALUA
* | [&amp;lt;---] ET_MDMABASIC                   TYPE        TT_MM_MDMABASIC
* | [&amp;lt;---] ET_MEAN_GTIN                   TYPE        TT_MM_MEAN_GTIN
* | [&amp;lt;---] ET_MLANPURCH                   TYPE        TT_MM_MLANPURCH
* | [&amp;lt;---] ET_MLANSALES                   TYPE        TT_MM_MLANSALES
* | [&amp;lt;---] ET_MLGNSTOR                    TYPE        TT_MM_MLGNSTOR
* | [&amp;lt;---] ET_MLGTSTOR                    TYPE        TT_MM_MLGTSTOR
* | [&amp;lt;---] ET_MPGDPRODG                   TYPE        TT_MM_MPGDPRODG
* | [&amp;lt;---] ET_MRPTXT                      TYPE        TT_MM_MRPTXT
* | [&amp;lt;---] ET_MVKEGRPNG                   TYPE        TT_MM_MVKEGRPNG
* | [&amp;lt;---] ET_MVKESALES                   TYPE        TT_MM_MVKESALES
* | [&amp;lt;---] ET_PURCHTXT                    TYPE        TT_MM_PURCHTXT
* | [&amp;lt;---] ET_QINSPTXT                    TYPE        TT_MM_QINSPTXT
* | [&amp;lt;---] ET_QMATBASIC                   TYPE        TT_MM_QMATBASIC
* | [&amp;lt;---] ET_SALESTXT                    TYPE        TT_MM_SALESTXT
* | [&amp;lt;---] ET_UNITOFMSR                   TYPE        TT_MM_UNITOFMSR
* | [&amp;lt;---] ET_VALUATION                   TYPE        TT_MM_VALUATION
* +--------------------------------------------------------------------------------------&amp;lt;/SIGNATURE&amp;gt;
  METHOD read_mm.
    DATA: lo_model_ext TYPE REF TO if_usmd_model_ext,
          lt_sel       TYPE usmd_ts_sel,
          ls_sel       TYPE usmd_s_sel,
          lv_readmode  TYPE usmd_readmode_ext  VALUE if_usmd_model_ext=&amp;gt;gc_readmode_default,
          lv_key       LIKE LINE OF it_key.
    FIELD-SYMBOLS: &amp;lt;ls_key&amp;gt; LIKE LINE OF et_key.

    CLEAR: et_key, et_material, es_material.

    cl_usmd_model_ext=&amp;gt;get_instance(
      EXPORTING
        i_usmd_model = 'MM'
      IMPORTING
        eo_instance  = lo_model_ext
    ).
    CHECK: lo_model_ext IS NOT INITIAL.

    ls_sel-fieldname = 'MATERIAL'.
    ls_sel-sign = 'I'.
    ls_sel-option = 'EQ'.

    IF iv_key IS NOT INITIAL.
      ls_sel-low = iv_key.
      INSERT ls_sel INTO TABLE lt_sel.
    ENDIF.

    IF it_key IS NOT INITIAL.
      LOOP AT it_key INTO lv_key.
        ls_sel-low = lv_key.
        INSERT ls_sel INTO TABLE lt_sel.
      ENDLOOP.
    ENDIF.

    IF lt_sel IS INITIAL.
      lt_sel = get_t_sel_from_conv_api( ).
    ENDIF.

    CHECK: lt_sel IS NOT INITIAL.

    IF iv_read_inactive EQ abap_true.
      lv_readmode = if_usmd_model_ext=&amp;gt;gc_readmode_no_act.

      lo_model_ext-&amp;gt;read_char_value(
        EXPORTING
          i_fieldname       = 'MATERIAL'
          it_sel            = lt_sel
          i_readmode        = lv_readmode
        IMPORTING
          et_data           = et_key
      ).
      CHECK: et_key IS NOT INITIAL.
      IF lines( lt_sel ) &amp;lt;&amp;gt; lines( et_key ).
        CLEAR: lt_sel.
        LOOP AT et_key ASSIGNING &amp;lt;ls_key&amp;gt;.
          ls_sel-low = &amp;lt;ls_key&amp;gt;-material.
          INSERT ls_sel INTO TABLE lt_sel.
        ENDLOOP.
      ENDIF.

      lv_readmode = if_usmd_model_ext=&amp;gt;gc_readmode_all_inact.
    ENDIF.

    lo_model_ext-&amp;gt;read_char_value(
      EXPORTING
        i_fieldname       = 'MATERIAL'
        it_sel            = lt_sel
        i_readmode        = lv_readmode
      IMPORTING
        et_data           = et_material
    ).
    CHECK: et_material IS NOT INITIAL.
    READ TABLE et_material INTO es_material INDEX 1.
    MOVE-CORRESPONDING et_material TO et_key.

    IF et_txt IS SUPPLIED OR gv_debug_mode EQ abap_true.
      lo_model_ext-&amp;gt;read_char_value(
        EXPORTING
          i_fieldname       = 'MATERIAL'
          it_sel            = lt_sel
          i_readmode        = lv_readmode
        IMPORTING
          et_data           = et_txt
      ).
    ENDIF.



*    IF et_BSCDATTXT IS SUPPLIED.
*      CLEAR: et_BSCDATTXT.
*      lo_model_ext-&amp;gt;read_char_value(
*        EXPORTING
*          i_fieldname       = 'BSCDATTXT'
*          it_sel            = lt_sel
*          i_readmode        = lv_readmode
*        IMPORTING
*          et_data           = et_BSCDATTXT
*      ).
*    ENDIF.
    DEFINE __read.
      IF gv_debug_mode EQ abap_true OR et_&amp;1 IS SUPPLIED.
        CLEAR: et_&amp;1.
        lo_model_ext-&amp;gt;read_char_value(
          EXPORTING
            i_fieldname       = '&amp;1'
            it_sel            = lt_sel
            i_readmode        = lv_readmode
          IMPORTING
            et_data           = et_&amp;1
        ).
      ENDIF.
    END-OF-DEFINITION.



    __read bscdattxt.
    __read classasgn.
    __read intcmnt.
    __read marapurch.
    __read maraqtmng.
    __read marasales.
    __read maraspm.
    __read marastor.
    __read marcatp.
    __read marcbasic.
    __read marccstng.
    __read marcfrcst.
    __read marcfrgtr.
    __read marcfrpar.
    __read marcmrpfc.
    __read marcmrpls.
    __read marcmrpmi.
    __read marcmrppp.
    __read marcmrpsp.
    __read marcprt.
    __read marcpurch.
    __read marcqtmng.
    __read marcsales.
    __read marcstore.
    __read marcwrksd.
    __read mardmrp.
    __read mardstor.
    __read mbewactng.
    __read mbewcstng.
    __read mbewmlac.
    __read mbewmlval.
    __read mbewvalua.
    __read mdmabasic.
    __read mean_gtin.
    __read mlanpurch.
    __read mlansales.
    __read mlgnstor.
    __read mlgtstor.
    __read mpgdprodg.
    __read mrptxt.
    __read mvkegrpng.
    __read mvkesales.
    __read purchtxt.
    __read qinsptxt.
    __read qmatbasic.
    __read salestxt.
    __read unitofmsr.
    __read valuation.



    IF gv_debug_mode EQ abap_true.
      BREAK-POINT.
    ENDIF.
  ENDMETHOD.
ENDCLASS.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP/MDG  기준정보</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/180</guid>
      <comments>https://boy0.tistory.com/180#entry180comment</comments>
      <pubDate>Wed, 15 Dec 2021 14:08:52 +0900</pubDate>
    </item>
    <item>
      <title>MDG BP 생성/수정 CR 만드는 로직</title>
      <link>https://boy0.tistory.com/179</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;SAP의 가이드 문서 예제에는 Govenence API 를 사용했는데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FPM UI에서 주로 사용하는 Convenience API 로 만들어 보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;language-abap&quot;&gt;&lt;code&gt;FUNCTION ZMDP_CREATE_CR_SUPPL1P1.
*&quot;----------------------------------------------------------------------
*&quot;*&quot;Local Interface:
*&quot;  EXPORTING
*&quot;     REFERENCE(EV_CR) TYPE  USMD_CREQUEST
*&quot;     REFERENCE(EV_ERROR) TYPE  FLAG
*&quot;     REFERENCE(ET_MESSAGE) TYPE  BAPIRET2_TAB
*&quot;----------------------------------------------------------------------
  DATA: lo_mdg_api         TYPE REF TO if_usmd_conv_som_gov_api,
        lt_entity_data     TYPE usmd_gov_api_ts_ent_data,
        ls_entity_data     TYPE usmd_gov_api_s_ent_data,
        lo_cx_usmd_gov_api TYPE REF TO cx_usmd_gov_api,
        ls_message         TYPE bapiret2,
        lv_key_bp_header   TYPE /mdgbp/_s_bp_pp_bp_header-bp_header,
        lv_key_assgnm_id   TYPE /mdgbpx/_s_bp_pp_bp_mlt_as-assgnm_id,
        lv_key_addrno      TYPE /mdgbp/_s_bp_pp_bp_addr-addrno,
        lt_key_bp_header   TYPE TABLE OF /mdgbp/_s_bp_ky_bp_header,
        ls_key_bp_header   TYPE /mdgbp/_s_bp_ky_bp_header,
        lt_key_addrno      TYPE TABLE OF /mdgbp/_s_bp_ky_addrno,
        ls_key_addrno      TYPE /mdgbp/_s_bp_ky_addrno,
        lt_bp_header       TYPE TABLE OF /mdgbp/_s_bp_pp_bp_header,
        ls_bp_header       TYPE /mdgbp/_s_bp_pp_bp_header,
        lt_bp_role         TYPE TABLE OF /mdgbp/_s_bp_pp_bp_role,
        ls_bp_role         TYPE /mdgbp/_s_bp_pp_bp_role,
        lt_bp_mlt_as       TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_mlt_as,
        ls_bp_mlt_as       TYPE /mdgbpx/_s_bp_pp_bp_mlt_as,
        lt_bp_centrl       TYPE TABLE OF /mdgbp/_s_bp_pp_bp_centrl,
        ls_bp_centrl       TYPE /mdgbp/_s_bp_pp_bp_centrl,
        lt_bp_vengen       TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_vengen,
        ls_bp_vengen       TYPE /mdgbpx/_s_bp_pp_bp_vengen,
        lt_bp_porg         TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_porg,
        ls_bp_porg         TYPE /mdgbpx/_s_bp_pp_bp_porg,
        lt_bp_mlt_ad       TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_mlt_ad,
        ls_bp_mlt_ad       TYPE /mdgbpx/_s_bp_pp_bp_mlt_ad,
        lt_address         TYPE TABLE OF /mdgbp/_s_bp_pp_address,
        ls_address         TYPE /mdgbp/_s_bp_pp_address,
        lt_bp_addr         TYPE TABLE OF /mdgbp/_s_bp_pp_bp_addr,
        ls_bp_addr         TYPE /mdgbp/_s_bp_pp_bp_addr,
        lt_bp_addusg       TYPE TABLE OF /mdgbp/_s_bp_pp_bp_addusg,
        ls_bp_addusg       TYPE /mdgbp/_s_bp_pp_bp_addusg,
        lt_ad_name_o       TYPE TABLE OF /mdgbp/_s_bp_pp_ad_name_o,
        ls_ad_name_o       TYPE /mdgbp/_s_bp_pp_ad_name_o,
        lt_ad_postal       TYPE TABLE OF /mdgbp/_s_bp_pp_ad_postal,
        ls_ad_postal       TYPE /mdgbp/_s_bp_pp_ad_postal,
        lt_ad_tel          TYPE TABLE OF /mdgbp/_s_bp_pp_ad_tel,
        ls_ad_tel          TYPE /mdgbp/_s_bp_pp_ad_tel,
        lt_ad_fax          TYPE TABLE OF /mdgbp/_s_bp_pp_ad_fax,
        ls_ad_fax          TYPE /mdgbp/_s_bp_pp_ad_fax,
        lt_ad_url          TYPE TABLE OF /mdgbp/_s_bp_pp_ad_url,
        ls_ad_url          TYPE /mdgbp/_s_bp_pp_ad_url,
        lv_index           TYPE i.

  CLEAR: ev_cr, ev_error, et_message.

  TRY.
********************************************************************************************
* 초기화.
********************************************************************************************
      cl_usmd_conv_som_gov_api=&amp;gt;get_instance(
        EXPORTING
          iv_model_name = 'BP'
        RECEIVING
          ro_so_gov_api = lo_mdg_api
      ).

      lo_mdg_api-&amp;gt;refresh_buffers( ).
      lo_mdg_api-&amp;gt;set_environment(
        EXPORTING
          iv_crequest_type   = 'SUPPL1P1'
          iv_process         = 'SUP1'
          iv_create_crequest = abap_true
      ).
      lo_mdg_api-&amp;gt;set_crequest_attributes(
        EXPORTING
          iv_crequest_text   = |공급업체 생성 { sy-datum }|
      ).
      lo_mdg_api-&amp;gt;enqueue_crequest( iv_lock_mode = 'E' ).




********************************************************************************************
* BP_HEADER
********************************************************************************************
      lo_mdg_api-&amp;gt;create_entity_tmp_key(
        EXPORTING
          iv_entity = 'BP_HEADER'
        IMPORTING
          es_key    = ls_key_bp_header
      ).
      lv_key_bp_header = ls_key_bp_header-bp_header.

      CLEAR: ls_bp_header.
      ls_bp_header-bp_header = lv_key_bp_header.
      ls_bp_header-bp_guid = cl_system_uuid=&amp;gt;create_uuid_x16_static( ).
      ls_bp_header-bu_group = '0001'.
      ls_bp_header-bu_type = '2'.
      ls_bp_header-txtlg = 'test'.
      INSERT ls_bp_header INTO TABLE lt_bp_header.

      PERFORM write_entity USING lo_mdg_api 'BP_HEADER' lt_bp_header.

********************************************************************************************
* BP_ROLE
********************************************************************************************
      CLEAR: ls_bp_role.
      ls_bp_role-bp_header = lv_key_bp_header.
      ls_bp_role-bp_rol_id = 'FLVN01'.
      INSERT ls_bp_role INTO TABLE lt_bp_role.

      PERFORM write_entity USING lo_mdg_api 'BP_ROLE' lt_bp_role.

********************************************************************************************
* BP_MLT_AS
********************************************************************************************
      lv_key_assgnm_id = 1.
      CLEAR: ls_bp_mlt_as.
      ls_bp_mlt_as-bp_header = lv_key_bp_header.
      ls_bp_mlt_as-assgnm_id = lv_key_assgnm_id.
      ls_bp_mlt_as-as_type = 'SUPPL'.
      ls_bp_mlt_as-object_id = lv_key_bp_header.
      ls_bp_mlt_as-standard = abap_true.
      INSERT ls_bp_mlt_as INTO TABLE lt_bp_mlt_as.

      PERFORM write_entity USING lo_mdg_api 'BP_MLT_AS' lt_bp_mlt_as.

*********************************************************************************************
* ADDRNO
*********************************************************************************************
      lo_mdg_api-&amp;gt;create_entity_tmp_key(
        EXPORTING
          iv_entity = 'ADDRNO'
        IMPORTING
          es_key    = ls_key_addrno
      ).
      lv_key_addrno = ls_key_addrno-addrno.

      INSERT ls_key_addrno INTO TABLE lt_key_addrno.

      PERFORM write_entity USING lo_mdg_api 'ADDRNO' lt_key_addrno.

*********************************************************************************************
* BP_MLT_AD
*********************************************************************************************
      CLEAR: ls_bp_mlt_ad.
      ls_bp_mlt_ad-addrno = 'XXDEFAULT'.
      ls_bp_mlt_ad-assgnm_id = lv_key_assgnm_id.
      ls_bp_mlt_ad-bp_header = lv_key_bp_header.
      INSERT ls_bp_mlt_ad INTO TABLE lt_bp_mlt_ad.

      PERFORM write_entity USING lo_mdg_api 'BP_MLT_AD' lt_bp_mlt_ad.

*********************************************************************************************
* ADDRESS
*********************************************************************************************
      CLEAR: ls_address.
      ls_address-bp_header = lv_key_bp_header.
      ls_address-addrno = lv_key_addrno.
      ls_address-type = 1.
      INSERT ls_address INTO TABLE lt_address.

      PERFORM write_entity USING lo_mdg_api 'ADDRESS' lt_address.

*********************************************************************************************
* BP_ADDR
*********************************************************************************************
      CLEAR: ls_bp_addr.
      ls_bp_addr-bp_header = lv_key_bp_header.
      ls_bp_addr-addrno = lv_key_addrno.
      ls_bp_addr-addr_guid = cl_system_uuid=&amp;gt;create_uuid_x16_static( ).
      INSERT ls_bp_addr INTO TABLE lt_bp_addr.

      PERFORM write_entity USING lo_mdg_api 'BP_ADDR' lt_bp_addr.

*********************************************************************************************
* BP_ADDUSG
*********************************************************************************************
      CLEAR: ls_bp_addusg.
      ls_bp_addusg-bp_header = lv_key_bp_header.
      ls_bp_addusg-addrno = lv_key_addrno.
      ls_bp_addusg-bp_adrknd = 'XXDEFAULT'.
      INSERT ls_bp_addusg INTO TABLE lt_bp_addusg.

      PERFORM write_entity USING lo_mdg_api 'BP_ADDUSG' lt_bp_addusg.

*********************************************************************************************
* AD_POSTAL
*********************************************************************************************
      CLEAR: ls_ad_postal.
      ls_ad_postal-bp_header = lv_key_bp_header.
      ls_ad_postal-addrno = lv_key_addrno.
      ls_ad_postal-ref_posta = 'KR'.
      ls_ad_postal-langu_com = '3'.
      ls_ad_postal-post_cod1 = '12345'.
      ls_ad_postal-city1 = '주소1'.
      ls_ad_postal-street = '주소2'.
      INSERT ls_ad_postal INTO TABLE lt_ad_postal.

      PERFORM write_entity USING lo_mdg_api 'AD_POSTAL' lt_ad_postal.

*AD_URL 인터넷 주소
*AD_TEL 전화번호
*AD_FAX 팩스번호
*AD_EMAIL 전자메일 주소

********************************************************************************************
* BP_CENTRL
********************************************************************************************
      CLEAR: ls_bp_centrl.
      ls_bp_centrl-bp_header = lv_key_bp_header.
*      ls_bp_centrl-bpkind = 'P001'.
*      ls_bp_centrl-title_bp = '0003'.
      ls_bp_centrl-name_org1 = 'test'.
      INSERT ls_bp_centrl INTO TABLE lt_bp_centrl.

      PERFORM write_entity USING lo_mdg_api 'BP_CENTRL' lt_bp_centrl.

********************************************************************************************
* BP_VENGEN
********************************************************************************************
      CLEAR: ls_bp_vengen.
      ls_bp_vengen-assgnm_id = lv_key_assgnm_id.
      ls_bp_vengen-bp_header = lv_key_bp_header.
      ls_bp_vengen-lifnr = lv_key_bp_header.
      ls_bp_vengen-ktokk = 'A000'.
      INSERT ls_bp_vengen INTO TABLE lt_bp_vengen.

      PERFORM write_entity USING lo_mdg_api 'BP_VENGEN' lt_bp_vengen.

**********************************************************************
*BP_PORG
**********************************************************************
      CLEAR: ls_bp_porg.
      ls_bp_porg-assgnm_id = lv_key_assgnm_id.
      ls_bp_porg-bp_header = lv_key_bp_header.
      ls_bp_porg-prch_org = '1100'.
      INSERT ls_bp_porg INTO TABLE lt_bp_porg.

      CLEAR: ls_bp_porg.
      ls_bp_porg-assgnm_id = lv_key_assgnm_id.
      ls_bp_porg-bp_header = lv_key_bp_header.
      ls_bp_porg-prch_org = '1200'.
      INSERT ls_bp_porg INTO TABLE lt_bp_porg.

      PERFORM write_entity USING lo_mdg_api 'BP_PORG' lt_bp_porg.



*VENGENTXT 텍스트(공급업체 일반 데이터)
*BP_VENVAL 공급업체: 특징 값(분류)
*BP_VENSUB 공급업체 하위 범위
*BP_VENDDB 문서 링크에 대한 기본 데이터
*BP_VENCLA 공급업체: 클래스 지정(분류)
*BP_TAXGRP 세금 그룹화(공급업체)
*BP_COMPNY 회사 코드




********************************************************************************************
* 저장.
********************************************************************************************
      lo_mdg_api-&amp;gt;confirm_entity_data( ).
      lo_mdg_api-&amp;gt;check( ).
      IF lo_mdg_api-&amp;gt;mv_successfully_checked EQ abap_true.
        lo_mdg_api-&amp;gt;set_action( cl_usmd_crequest_action=&amp;gt;gc_draft_action-submit ).
        lo_mdg_api-&amp;gt;save( ).
        ev_cr = lo_mdg_api-&amp;gt;mv_crequest_id.
      ENDIF.

    CATCH cx_uuid_error.
    CATCH cx_usmd_gov_api INTO lo_cx_usmd_gov_api.
      ev_error = abap_true.
  ENDTRY.


  PERFORM get_message USING lo_mdg_api et_message.
  lo_mdg_api-&amp;gt;dequeue_entity_all( ).
  lo_mdg_api-&amp;gt;dequeue_crequest( ).
  lo_mdg_api-&amp;gt;refresh_buffers( ).


ENDFUNCTION.

FUNCTION ZMDP_CREATE_CR_SUPPL2P1.
*&quot;----------------------------------------------------------------------
*&quot;*&quot;Local Interface:
*&quot;  IMPORTING
*&quot;     REFERENCE(IV_BP_ID) TYPE  BU_BUSINESSPARTNER
*&quot;  EXPORTING
*&quot;     REFERENCE(EV_CR) TYPE  USMD_CREQUEST
*&quot;     REFERENCE(EV_ERROR) TYPE  FLAG
*&quot;     REFERENCE(ET_MESSAGE) TYPE  BAPIRET2_TAB
*&quot;----------------------------------------------------------------------
  DATA: lo_mdg_api         TYPE REF TO if_usmd_conv_som_gov_api,
        lo_usmd_model      TYPE REF TO if_usmd_model_ext,
        lt_sel             TYPE usmd_ts_sel,
        lo_cx_usmd_gov_api TYPE REF TO cx_usmd_gov_api,
        ls_message         TYPE bapiret2,
        lv_key_bp_header   TYPE /mdgbp/_s_bp_pp_bp_header-bp_header,
        lv_key_assgnm_id   TYPE /mdgbpx/_s_bp_pp_bp_mlt_as-assgnm_id,
        lv_key_addrno      TYPE /mdgbp/_s_bp_pp_bp_addr-addrno,
        lt_key_bp_header   TYPE TABLE OF /mdgbp/_s_bp_ky_bp_header,
        ls_key_bp_header   TYPE /mdgbp/_s_bp_ky_bp_header,
        lt_key_addrno      TYPE TABLE OF /mdgbp/_s_bp_ky_addrno,
        ls_key_addrno      TYPE /mdgbp/_s_bp_ky_addrno,
        lt_bp_header       TYPE TABLE OF /mdgbp/_s_bp_pp_bp_header,
        ls_bp_header       TYPE /mdgbp/_s_bp_pp_bp_header,
        lt_bp_role         TYPE TABLE OF /mdgbp/_s_bp_pp_bp_role,
        ls_bp_role         TYPE /mdgbp/_s_bp_pp_bp_role,
        lt_bp_mlt_as       TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_mlt_as,
        ls_bp_mlt_as       TYPE /mdgbpx/_s_bp_pp_bp_mlt_as,
        lt_bp_centrl       TYPE TABLE OF /mdgbp/_s_bp_pp_bp_centrl,
        ls_bp_centrl       TYPE /mdgbp/_s_bp_pp_bp_centrl,
        lt_bp_vengen       TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_vengen,
        ls_bp_vengen       TYPE /mdgbpx/_s_bp_pp_bp_vengen,
        lt_bp_porg         TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_porg,
        ls_bp_porg         TYPE /mdgbpx/_s_bp_pp_bp_porg,
        lt_bp_mlt_ad       TYPE TABLE OF /mdgbpx/_s_bp_pp_bp_mlt_ad,
        ls_bp_mlt_ad       TYPE /mdgbpx/_s_bp_pp_bp_mlt_ad,
        lt_address         TYPE TABLE OF /mdgbp/_s_bp_pp_address,
        ls_address         TYPE /mdgbp/_s_bp_pp_address,
        lt_bp_addr         TYPE TABLE OF /mdgbp/_s_bp_pp_bp_addr,
        ls_bp_addr         TYPE /mdgbp/_s_bp_pp_bp_addr,
        lt_bp_addusg       TYPE TABLE OF /mdgbp/_s_bp_pp_bp_addusg,
        ls_bp_addusg       TYPE /mdgbp/_s_bp_pp_bp_addusg,
        lt_ad_name_o       TYPE TABLE OF /mdgbp/_s_bp_pp_ad_name_o,
        ls_ad_name_o       TYPE /mdgbp/_s_bp_pp_ad_name_o,
        lt_ad_postal       TYPE TABLE OF /mdgbp/_s_bp_pp_ad_postal,
        ls_ad_postal       TYPE /mdgbp/_s_bp_pp_ad_postal,
        lt_ad_tel          TYPE TABLE OF /mdgbp/_s_bp_pp_ad_tel,
        ls_ad_tel          TYPE /mdgbp/_s_bp_pp_ad_tel,
        lt_ad_fax          TYPE TABLE OF /mdgbp/_s_bp_pp_ad_fax,
        ls_ad_fax          TYPE /mdgbp/_s_bp_pp_ad_fax,
        lt_ad_url          TYPE TABLE OF /mdgbp/_s_bp_pp_ad_url,
        ls_ad_url          TYPE /mdgbp/_s_bp_pp_ad_url,
        lv_index           TYPE i.

  CLEAR: ev_cr, ev_error, et_message.

  TRY.
********************************************************************************************
* 초기화.
********************************************************************************************
      cl_usmd_conv_som_gov_api=&amp;gt;get_instance(
        EXPORTING
          iv_model_name = 'BP'
        RECEIVING
          ro_so_gov_api = lo_mdg_api
      ).
      cl_usmd_model_ext=&amp;gt;get_instance(
        EXPORTING
          i_usmd_model = 'BP'
        IMPORTING
          eo_instance  = lo_usmd_model
      ).
      lv_key_bp_header = iv_bp_id.
      lt_sel = VALUE #( ( fieldname = 'BP_HEADER' sign = 'I' option = 'EQ' low = lv_key_bp_header ) ).

********************************************************************************************
* BP_HEADER
********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_HEADER' lt_sel lt_bp_header.
      IF lt_bp_header IS INITIAL.
        &quot; IV_BP_ID 에 해당하는 BP가 없음. 에러 처리.
        ev_error = abap_true.
        RETURN.
      ENDIF.

********************************************************************************************
* BP_MLT_AS
********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_MLT_AS' lt_sel lt_bp_mlt_as.
      READ TABLE lt_bp_mlt_as INTO ls_bp_mlt_as WITH KEY as_type = 'SUPPL'.
      IF sy-subrc EQ 0.
        lv_key_assgnm_id = ls_bp_mlt_as-assgnm_id.
      ELSE.
        &quot; C/V 유형 다름. 에러 처리.
        ev_error = abap_true.
        RETURN.
      ENDIF.


********************************************************************************************
* CR 생성
********************************************************************************************
      lo_mdg_api-&amp;gt;refresh_buffers( ).
      lo_mdg_api-&amp;gt;set_environment(
        EXPORTING
          iv_crequest_type   = 'SUPPL2P1'
          iv_process         = 'SUP2'
          iv_create_crequest = abap_true
      ).
      lo_mdg_api-&amp;gt;set_crequest_attributes(
        EXPORTING
          iv_crequest_text   = |공급업체 변경 { sy-datum }|
      ).
      lo_mdg_api-&amp;gt;enqueue_crequest( iv_lock_mode = 'E' ).

      ls_key_bp_header-bp_header = lv_key_bp_header.
      APPEND ls_key_bp_header TO lt_key_bp_header.
      lo_mdg_api-&amp;gt;enqueue_entity( VALUE #( ( entity = 'BP_HEADER' tabl = REF #( lt_key_bp_header ) ) ) ).

********************************************************************************************
* BP_ROLE
********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_ROLE' lt_sel lt_bp_role.
      PERFORM write_entity USING lo_mdg_api 'BP_ROLE' lt_bp_role.

*********************************************************************************************
* BP_ADDR
*********************************************************************************************

      PERFORM read_entity USING lo_usmd_model 'BP_ADDR' lt_sel lt_bp_addr.
      IF lt_bp_addr IS NOT INITIAL.
        READ TABLE lt_bp_addr INTO ls_bp_addr INDEX 1.
        lv_key_addrno = ls_bp_addr-addrno.
        ls_key_addrno-addrno = lv_key_addrno.
        INSERT ls_key_addrno INTO TABLE lt_key_addrno.
      ELSE.
        &quot; 기존에 주소가 없는 경우.
        lo_mdg_api-&amp;gt;create_entity_tmp_key(
          EXPORTING
            iv_entity = 'ADDRNO'
          IMPORTING
            es_key    = ls_key_addrno
        ).
        lv_key_addrno = ls_key_addrno-addrno.
        INSERT ls_key_addrno INTO TABLE lt_key_addrno.
        PERFORM write_entity USING lo_mdg_api 'ADDRNO' lt_key_addrno.

        CLEAR: ls_bp_addr.
        ls_bp_addr-bp_header = lv_key_bp_header.
        ls_bp_addr-addrno = lv_key_addrno.
        ls_bp_addr-addr_guid = cl_system_uuid=&amp;gt;create_uuid_x16_static( ).
        INSERT ls_bp_addr INTO TABLE lt_bp_addr.
        PERFORM write_entity USING lo_mdg_api 'BP_ADDR' lt_bp_addr.

        CLEAR: ls_bp_addusg.
        ls_bp_addusg-bp_header = lv_key_bp_header.
        ls_bp_addusg-addrno = lv_key_addrno.
        ls_bp_addusg-bp_adrknd = 'XXDEFAULT'.
        INSERT ls_bp_addusg INTO TABLE lt_bp_addusg.
        PERFORM write_entity USING lo_mdg_api 'BP_ADDUSG' lt_bp_addusg.

        CLEAR: ls_address.
        ls_address-bp_header = lv_key_bp_header.
        ls_address-addrno = lv_key_addrno.
        ls_address-type = 1.
        INSERT ls_address INTO TABLE lt_address.
        PERFORM write_entity USING lo_mdg_api 'ADDRESS' lt_address.

      ENDIF.

*********************************************************************************************
* BP_MLT_AD
*********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_MLT_AD' lt_sel lt_bp_mlt_ad.
      PERFORM write_entity USING lo_mdg_api 'BP_MLT_AD' lt_bp_mlt_ad.

*********************************************************************************************
* AD_POSTAL
*********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'AD_POSTAL' lt_sel lt_ad_postal.
      LOOP AT lt_ad_postal INTO ls_ad_postal.
        ls_ad_postal-ref_posta = 'KR'.
        MODIFY lt_ad_postal FROM ls_ad_postal.
      ENDLOOP.
      PERFORM write_entity USING lo_mdg_api 'AD_POSTAL' lt_ad_postal.

*AD_URL 인터넷 주소
*AD_TEL 전화번호
*AD_FAX 팩스번호
*AD_EMAIL 전자메일 주소

********************************************************************************************
* BP_CENTRL
********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_CENTRL' lt_sel lt_bp_centrl.
      PERFORM write_entity USING lo_mdg_api 'BP_CENTRL' lt_bp_centrl.

********************************************************************************************
* BP_VENGEN
********************************************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_VENGEN' lt_sel lt_bp_vengen.
      PERFORM write_entity USING lo_mdg_api 'BP_VENGEN' lt_bp_vengen.

**********************************************************************
*BP_PORG
**********************************************************************
      PERFORM read_entity USING lo_usmd_model 'BP_PORG' lt_sel lt_bp_porg.
      PERFORM write_entity USING lo_mdg_api 'BP_PORG' lt_bp_porg.



*VENGENTXT 텍스트(공급업체 일반 데이터)
*BP_VENVAL 공급업체: 특징 값(분류)
*BP_VENSUB 공급업체 하위 범위
*BP_VENDDB 문서 링크에 대한 기본 데이터
*BP_VENCLA 공급업체: 클래스 지정(분류)
*BP_TAXGRP 세금 그룹화(공급업체)
*BP_COMPNY 회사 코드




********************************************************************************************
* 저장.
********************************************************************************************
      lo_mdg_api-&amp;gt;confirm_entity_data( ).
      lo_mdg_api-&amp;gt;check( ).
      IF lo_mdg_api-&amp;gt;mv_successfully_checked EQ abap_true.
        lo_mdg_api-&amp;gt;set_action( cl_usmd_crequest_action=&amp;gt;gc_draft_action-submit ).
        lo_mdg_api-&amp;gt;save( ).
        ev_cr = lo_mdg_api-&amp;gt;mv_crequest_id.
      ENDIF.

    CATCH cx_uuid_error.
    CATCH cx_usmd_gov_api INTO lo_cx_usmd_gov_api.
      ev_error = abap_true.
  ENDTRY.


  PERFORM get_message USING lo_mdg_api et_message.
  lo_mdg_api-&amp;gt;dequeue_entity_all( ).
  lo_mdg_api-&amp;gt;dequeue_crequest( ).
  lo_mdg_api-&amp;gt;refresh_buffers( ).


ENDFUNCTION.


FUNCTION zmdp_conv_usmdmsg_to_bapiret2.
*&quot;----------------------------------------------------------------------
*&quot;*&quot;Local Interface:
*&quot;  IMPORTING
*&quot;     REFERENCE(IS_USMDMSG) TYPE  USMD_S_MESSAGE
*&quot;  EXPORTING
*&quot;     REFERENCE(ES_BAPIRET2) TYPE  BAPIRET2
*&quot;----------------------------------------------------------------------
  CLEAR: es_bapiret2.

  MESSAGE ID is_usmdmsg-msgid TYPE is_usmdmsg-msgty NUMBER is_usmdmsg-msgno
    WITH is_usmdmsg-msgv1 is_usmdmsg-msgv2 is_usmdmsg-msgv3 is_usmdmsg-msgv4
    INTO es_bapiret2-message.


  es_bapiret2-type = sy-msgty.
  es_bapiret2-id = sy-msgid.
  es_bapiret2-number = sy-msgno.
  es_bapiret2-message_v1 = sy-msgv1.
  es_bapiret2-message_v2 = sy-msgv2.
  es_bapiret2-message_v3 = sy-msgv3.
  es_bapiret2-message_v4 = sy-msgv4.
  es_bapiret2-row = is_usmdmsg-row.
  es_bapiret2-field = is_usmdmsg-fieldname.

ENDFUNCTION.



FORM write_entity USING io_mdg_api iv_entity it_data.
  DATA: lo_mdg_api     TYPE REF TO if_usmd_conv_som_gov_api,
        lt_entity_data TYPE usmd_gov_api_ts_ent_data,
        ls_entity_data TYPE usmd_gov_api_s_ent_data.

  lo_mdg_api = io_mdg_api.

  CLEAR: lt_entity_data, ls_entity_data.
  ls_entity_data-entity = iv_entity.
  ls_entity_data-entity_data = REF #( it_data ).
  APPEND ls_entity_data TO lt_entity_data.

  lo_mdg_api-&amp;gt;write_entity_data( it_entity_data = lt_entity_data ).
ENDFORM.
FORM read_entity USING io_usmd_model iv_entity it_sel et_data.
  DATA: lo_usmd_model  TYPE REF TO if_usmd_model_ext.

  lo_usmd_model = io_usmd_model.
  lo_usmd_model-&amp;gt;read_char_value(
    EXPORTING
      i_fieldname       = iv_entity
      it_sel            = it_sel
      if_no_flush       = abap_true
    IMPORTING
      et_data           = et_data
  ).
ENDFORM.
FORM get_message USING io_mdg_api TYPE REF TO if_usmd_conv_som_gov_api
                       et_message TYPE bapiret2_tab.
  DATA: lt_usmd_msg TYPE usmd_t_message,
        ls_usmd_msg TYPE usmd_s_message,
        ls_bapiret2 TYPE bapiret2.

  lt_usmd_msg = io_mdg_api-&amp;gt;get_messages( ).

  LOOP AT lt_usmd_msg INTO ls_usmd_msg.
    IF ls_usmd_msg-msgid EQ 'MDG_BS_BP' AND ls_usmd_msg-msgno EQ '057'.
      &quot; 필요 없는 메시지.
      CONTINUE.
    ENDIF.
    CALL FUNCTION 'ZMDP_CONV_USMDMSG_TO_BAPIRET2'
      EXPORTING
        is_usmdmsg  = ls_usmd_msg
      IMPORTING
        es_bapiret2 = ls_bapiret2.
    APPEND ls_bapiret2 TO et_message.
  ENDLOOP.

ENDFORM.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>ABAP/MDG  기준정보</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/179</guid>
      <comments>https://boy0.tistory.com/179#entry179comment</comments>
      <pubDate>Wed, 15 Dec 2021 09:28:44 +0900</pubDate>
    </item>
    <item>
      <title>abapGit 활용 - 패키지(개발클래스) 전체 삭제</title>
      <link>https://boy0.tistory.com/178</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;패키지를 내부 오브젝트 포함하여 한방에 삭제하는 방법이 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;abapGit을 사용하면 가능한데요.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;113&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqm6Dz/btq9Kvwh0sB/Pbag8dicKr7p5NqdehqgK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqm6Dz/btq9Kvwh0sB/Pbag8dicKr7p5NqdehqgK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqm6Dz/btq9Kvwh0sB/Pbag8dicKr7p5NqdehqgK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqm6Dz%2Fbtq9Kvwh0sB%2FPbag8dicKr7p5NqdehqgK1%2Fimg.png&quot; data-origin-width=&quot;467&quot; data-origin-height=&quot;113&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;349&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bJLoM2/btq9EhGAnFs/Os5E4wScN60YCgkqKGk3h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bJLoM2/btq9EhGAnFs/Os5E4wScN60YCgkqKGk3h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bJLoM2/btq9EhGAnFs/Os5E4wScN60YCgkqKGk3h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJLoM2%2Fbtq9EhGAnFs%2FOs5E4wScN60YCgkqKGk3h0%2Fimg.png&quot; data-origin-width=&quot;646&quot; data-origin-height=&quot;349&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;352&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0SWl8/btq9JLsF6tU/MGnCXjZl78KVJsduSaUhZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0SWl8/btq9JLsF6tU/MGnCXjZl78KVJsduSaUhZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0SWl8/btq9JLsF6tU/MGnCXjZl78KVJsduSaUhZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0SWl8%2Fbtq9JLsF6tU%2FMGnCXjZl78KVJsduSaUhZk%2Fimg.png&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;352&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>ABAP/abapGit</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/178</guid>
      <comments>https://boy0.tistory.com/178#entry178comment</comments>
      <pubDate>Thu, 15 Jul 2021 22:27:26 +0900</pubDate>
    </item>
    <item>
      <title>KR_POSTCODE : 한국주소입력 Version 2.0</title>
      <link>https://boy0.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/KR_POSTCODE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://github.com/boy0korea/KR_POSTCODE&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1625805938500&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;boy0korea/KR_POSTCODE&quot; data-og-description=&quot;South Korea Postal Code in ABAP &amp;amp; WDA &amp;amp; FPM. Contribute to boy0korea/KR_POSTCODE development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/boy0korea/KR_POSTCODE&quot; data-og-url=&quot;https://github.com/boy0korea/KR_POSTCODE&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/yfO38/hyKQuAizKQ/r8r0TgFlU45VabnF71ls31/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bgPbmv/hyKQqYYmmB/t3Fv1z8LhiDISUyKTDpPw1/img.png?width=605&amp;amp;height=342&amp;amp;face=0_0_605_342,https://scrap.kakaocdn.net/dn/crl0iw/hyKQmoJetA/I2BMbO09UxYitcj0oKs3J1/img.png?width=530&amp;amp;height=325&amp;amp;face=0_0_530_325&quot;&gt;&lt;a href=&quot;https://github.com/boy0korea/KR_POSTCODE&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/boy0korea/KR_POSTCODE&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/yfO38/hyKQuAizKQ/r8r0TgFlU45VabnF71ls31/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/bgPbmv/hyKQqYYmmB/t3Fv1z8LhiDISUyKTDpPw1/img.png?width=605&amp;amp;height=342&amp;amp;face=0_0_605_342,https://scrap.kakaocdn.net/dn/crl0iw/hyKQmoJetA/I2BMbO09UxYitcj0oKs3J1/img.png?width=530&amp;amp;height=325&amp;amp;face=0_0_530_325');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;boy0korea/KR_POSTCODE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;South Korea Postal Code in ABAP &amp;amp; WDA &amp;amp; FPM. Contribute to boy0korea/KR_POSTCODE development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;KR_POSTCODE 는 SAP용 주소입력 API 입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음주소API 화면을 ABAP(or WDA or FPM) 에서 호출 하고 결과를 받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스탠다드 주소 입력 부분을 enhnace 했기 때문에 KR 국가 선택시 서치헬프로 입력할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;342&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z4PKS/btq9eNxraGi/6QS4jE4iNNKlleymijGXKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z4PKS/btq9eNxraGi/6QS4jE4iNNKlleymijGXKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z4PKS/btq9eNxraGi/6QS4jE4iNNKlleymijGXKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ4PKS%2Fbtq9eNxraGi%2F6QS4jE4iNNKlleymijGXKk%2Fimg.png&quot; data-origin-width=&quot;605&quot; data-origin-height=&quot;342&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;325&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmCxAR/btq9cIRaxbP/0pt3DGlUVVRy998U0synb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmCxAR/btq9cIRaxbP/0pt3DGlUVVRy998U0synb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmCxAR/btq9cIRaxbP/0pt3DGlUVVRy998U0synb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmCxAR%2Fbtq9cIRaxbP%2F0pt3DGlUVVRy998U0synb1%2Fimg.png&quot; data-origin-width=&quot;530&quot; data-origin-height=&quot;325&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JPBXD/btq9cHY0YCP/jZutiIzqZmbCX1YT7XceO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JPBXD/btq9cHY0YCP/jZutiIzqZmbCX1YT7XceO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JPBXD/btq9cHY0YCP/jZutiIzqZmbCX1YT7XceO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJPBXD%2Fbtq9cHY0YCP%2FjZutiIzqZmbCX1YT7XceO0%2Fimg.png&quot; data-origin-width=&quot;604&quot; data-origin-height=&quot;335&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ABAP/abapGit</category>
      <author>Derby</author>
      <guid isPermaLink="true">https://boy0.tistory.com/177</guid>
      <comments>https://boy0.tistory.com/177#entry177comment</comments>
      <pubDate>Fri, 9 Jul 2021 13:46:49 +0900</pubDate>
    </item>
  </channel>
</rss>