<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hyunm1n-o.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Thu, 15 Oct 2026 07:53:41 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hyunm1n-o.log</title>
            <url>https://velog.velcdn.com/images/hyunm1n-o/profile/eed17905-3391-4893-a418-30fd88967940/image.jpeg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hyunm1n-o.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/hyunm1n-o" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[CALL _______]]></title>
            <link>https://velog.io/@hyunm1n-o/CALL</link>
            <guid>https://velog.io/@hyunm1n-o/CALL</guid>
            <pubDate>Thu, 15 Oct 2026 07:53:41 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>Call statement starts transactions, opens dialogs and prints reports.</p>
</blockquote>
<h2 id="1-call-dialog">1. CALL DIALOG</h2>
<ul>
<li>다이얼로그 (화면/팝업) 띄울 때 사용<pre><code class="language-sql">/* 기본 호출 */
CALL DIALOG IDBCT001;
</code></pre>
</li>
</ul>
<p>/* 위치 및 크기 지정 */
CALL DIALOG IDBCT001 WITH LOCATION 20, 20 SIZE 608, 512;</p>
<pre><code>

## 2. CALL TRANSACTION
- 트랜잭션 실행 / 백그라운드(서버)에서 배치 형태로 돌릴 때 사용
- 백그라운드 실행 시, 발생하는 메시지/에러는 `SYSBATCHMESSAGES` 테이블에 기록
- 동기 사용 시, 호출한 트랜잭션이 끝날 때까지 클라이언트 대기하며
실행결과를 변수로 받아옴
```sql
/* 기본 호출, 파라미터 전달 */
CALL TRANSACTION BAST02(P1, P2, P3, P4);

/* 서버 백그라운드 실행 */
CALL TRANSACTION BAST02 INSERVER(P1, P2, P3, P4);

/* 동기 대기 및 결과 수신 */
CALL TRANSACTION DEVT08(STRINGVAR1, STRINGVAR2) WITH WAIT(RESULT1, RESULT2);
</code></pre><h2 id="3-call-report">3. CALL REPORT</h2>
<ul>
<li>화면, 프린터, 파일로 출력할 때 사용</li>
</ul>
<pre><code class="language-sql">/* TO SCREEN: 화면에 미리보기 팝업창으로 출력 */
CALL REPORT BAST02R001 TO SCREEN LANGU SYS_LANGU;

/* TO PRINTER: 연결된 프린터로 즉시 인쇄*/
CALL REPORT BAST02R001 TO PRINTER LANGU SYS_LANGU

/* TO TEXT {variable}: 리포트 결과를 텍스트 변수에 저장 */
CALL REPORT BAST02R001 TO TEXT {variable} LANGU SYS_LANGU</code></pre>
<p>추가 옵션 설명</p>
<ul>
<li>LANGU {language}: 리포트 출력 언어 지정 (SYS_LANGU 등)</li>
<li>SAVE {file_path}: 출력 결과를 파일로 저장</li>
<li>ATCHFILE / ATCHDESC / ATCHMIMETYPE: 생성되는 리포트에 첨부파일(XML 등) 동봉</li>
<li>SILENT: 화면에 띄우거나 전송하지 않고 백그라운드에서 파일로만 생성할 때 사용</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[자재 복사에 대한 고찰...]]></title>
            <link>https://velog.io/@hyunm1n-o/%EC%9E%90%EC%9E%AC-%EB%B3%B5%EC%82%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0</link>
            <guid>https://velog.io/@hyunm1n-o/%EC%9E%90%EC%9E%AC-%EB%B3%B5%EC%82%AC%EC%97%90-%EB%8C%80%ED%95%9C-%EA%B3%A0%EC%B0%B0</guid>
            <pubDate>Wed, 14 Oct 2026 08:30:32 GMT</pubDate>
            <description><![CDATA[<p>자재마스터 분석 중 자재 복사 버튼을 먼저 뜯어보는데
회사 기준 복사? 플랜트 기준 복사? 이해가 안 돼서 정리 해보기</p>
<hr>
<h3 id="1-플랜트란-plant">1. 플랜트란? (Plant)</h3>
<p>물건을 만들거나 보관하는 물리적인 공장이나 물류창고
: 회사는 하나지만, 그 회사 밑에 여러개의 플랜트가 있을 수 있음</p>
<h3 id="2-자재-복사하는-이유">2. 자재 복사하는 이유</h3>
<p>ERP에서 자재(부품, 원자재, 제품 등) 하나를 새로 등록하려면 입력해야 할 설정값이 50~100개가 넘고, <code>(자재명, 단위, 무게, 구매처, 계정 과목, 재고 평가 방식, 안전재고량 등)</code></p>
<p>새로운 자재를 만들 때마다 그 많은 항목을 손으로 일일이 다 입력하면 시간도 너무 오래 걸리고 오타(실수)가 엄청 많이 남.</p>
<p>그래서 &quot;기존에 잘 만들어둔 &#39;A 볼트&#39;의 설정값을 그대로 싹 복사해 와서 이름만 &#39;B 볼트&#39;로 바꿔서 새로 만들자!&quot; 하고 쓰는 기능이 바로 <strong>자재 복사(Material Copy)</strong></p>
<h3 id="3-회사기준플랜트기준-나누는-이유-엥">3. 회사기준/플랜트기준 나누는 이유 (엥.)</h3>
<p>ERP 에서는 자재 정보가 2Layer로 나누어져 관리 됨</p>
<p><strong>1. 회사 기준 정보 (모든 공장 공통)</strong></p>
<ul>
<li>자재명, 자재 코드, 기본 단위(EA, KG), 자재 그룹 등</li>
<li>특징: 서울공장에서 보든 부산공장에서 보든 변하지 않는 절대적인 스펙입니다. 
(예: &#39;나사 A&#39;의 크기와 이름은 어느 공장에 가도 똑같음)</li>
</ul>
<p><strong>2. 플랜트 기준 정보 (공장별 개별 설정)</strong></p>
<ul>
<li>안전재고량, 최소 주문 수량, 공장별 구매 담당자, 조달 방식(자체생산 vs 외주구매) 등</li>
<li>특징: 공장(플랜트)마다 운영하는 방식이 완전히 다를 수 있습니다.<blockquote>
<p>ex1) 똑같은 &#39;나사 A&#39;라도 서울공장에서는 외부에서 사서 쓰고(구매), 부산공장에서는 직접 만들어서(생산) 쓸 수 있습니다.
.
ex2) 서울공장은 창고가 넓어서 안전재고를 1,000개 쌓아두지만, 부산공장은 100개만 쌓아둘 수 있습니다.</p>
</blockquote>
</li>
</ul>
<h3 id="4-실제-코드로-이해-bast03-참고링크">4. 실제 코드로 이해 (BAST03) <a href="https://velog.io/@hyunm1n-o/%EB%B2%84%ED%8A%BC-%EC%98%86%EC%97%90-%EB%93%9C%EB%A1%AD%EB%8B%A4%EC%9A%B4-%EB%8B%AC%EA%B8%B0">참고링크</a></h3>
<ul>
<li><p><code>CASE -1, 0 (회사 기준 복사)</code></p>
<ul>
<li>다른 회사(타 법인)로 자재를 복사할 때 사용</li>
<li>이 자재의 기본 스펙부터 시작해서 모든 공장(플랜트)에 공통으로 쓰도록 싹 다 복사</li>
<li>그래서 모든 공장 목록(FETCHLIKE(&#39;%&#39;, &#39;%&#39;))을 다 끌어왔던 것</li>
</ul>
</li>
<li><p><code>CASE 1 (플랜트 기준 복사)</code></p>
<ul>
<li>같은 회사 안의 다른 플랜트(공장) 간에 복사할 때 사용</li>
<li>이미 자재 기본 정보는 등록되어 있으니까, 내가 지정한 &#39;특정 공장(플랜트)&#39;에서 사용할 수 있도록 그 공장 전용 설정값만 복사</li>
<li>그래서 내가 선택한 특정 회사의 공장 목록(FETCHLIKE(IASMATBASICLIST_COMPANY, &#39;%&#39;))만 끌어온 것</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[버튼 옆에 드롭다운 달기]]></title>
            <link>https://velog.io/@hyunm1n-o/%EB%B2%84%ED%8A%BC-%EC%98%86%EC%97%90-%EB%93%9C%EB%A1%AD%EB%8B%A4%EC%9A%B4-%EB%8B%AC%EA%B8%B0</link>
            <guid>https://velog.io/@hyunm1n-o/%EB%B2%84%ED%8A%BC-%EC%98%86%EC%97%90-%EB%93%9C%EB%A1%AD%EB%8B%A4%EC%9A%B4-%EB%8B%AC%EA%B8%B0</guid>
            <pubDate>Wed, 14 Oct 2026 07:38:08 GMT</pubDate>
            <description><![CDATA[<h4 id="구현하고-싶은-것">구현하고 싶은 것</h4>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/5687bac4-e89d-432a-9214-299cbc336698/image.png" alt=""></p>
<h4 id="방법">방법</h4>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/e231e060-815c-48e8-a3ec-3feab9627dde/image.png" alt=""></p>
<p>제어하고 싶을 때에는</p>
<pre><code>SWITCH SYS_SUBMENU
    CASE -1: 
    // 전체 설정

    CASE 0:
    //첫번째 옵션(회사 기준으로)

    CASE 1:
    // 두번째 옵션 (플랜트 기준으로)
    ...</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[AFTER 에서 MODI 번호(0, 1, 2)]]></title>
            <link>https://velog.io/@hyunm1n-o/AFTER-%EC%97%90%EC%84%9C-MODI-%EB%B2%88%ED%98%B80-1-2</link>
            <guid>https://velog.io/@hyunm1n-o/AFTER-%EC%97%90%EC%84%9C-MODI-%EB%B2%88%ED%98%B80-1-2</guid>
            <pubDate>Wed, 14 Oct 2026 06:33:58 GMT</pubDate>
            <description><![CDATA[<pre><code>LOCAL :
    INTEGER MODITMP;
MODITMP = CNKMEMBERINFO8100REC.GETMODI();
SWITCH MODITMP 
    CASE 0 :
        // 생성

    CASE 1 :
        // 수정

    CASE 2 :
        // 상세조회


    DEFAULT :        
ENDSWITCH;</code></pre><hr>
<h3 id="저장버튼-비활성화">저장버튼 비활성화</h3>
<p><code>After</code> 내 Case에 <code>SET SAVE TO DISABLE</code>;</p>
<h3 id="컴포넌트-내-기본값-설정">컴포넌트 내 기본값 설정</h3>
<p><code>After</code> 내 Case에 <code>NKMEMBERINFO8100_JOINDATE = SYS_CURRENTDATE;</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[리포트쿼리에 Zoom 달기 ]]></title>
            <link>https://velog.io/@hyunm1n-o/%EB%A6%AC%ED%8F%AC%ED%8A%B8%EC%BF%BC%EB%A6%AC%EC%97%90-Zoom-%EB%8B%AC%EA%B8%B0</link>
            <guid>https://velog.io/@hyunm1n-o/%EB%A6%AC%ED%8F%AC%ED%8A%B8%EC%BF%BC%EB%A6%AC%EC%97%90-Zoom-%EB%8B%AC%EA%B8%B0</guid>
            <pubDate>Wed, 14 Oct 2026 02:17:02 GMT</pubDate>
            <description><![CDATA[<blockquote>
<ol>
<li>도메인 설정 후 테이블 컬럼에 적용</li>
<li>리포트 쿼리(SYST92) 에서 그 컬럼 적용</li>
</ol>
</blockquote>
<ol>
<li>도메인 설정
: 기존과 같이 설정하되, 줌 다이얼로그 선택 (리포트쿼리에 Zoom 이 필요한 곳)
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/cb101d80-efec-4ecc-b2d8-8533627fde69/image.png" alt=""></li>
<li>테이블에 도메인 등록 (DEVT01)
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/45901a52-0195-4443-92b4-fd649245317a/image.png" alt=""></li>
<li>성공
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/288007a1-e151-4434-a512-aaa46da4e0a5/image.png" alt=""></li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[공통코드 사용법(BAST001NK/DEVT001NK)]]></title>
            <link>https://velog.io/@hyunm1n-o/%EA%B3%B5%ED%86%B5%EC%BD%94%EB%93%9C-%EC%82%AC%EC%9A%A9%EB%B2%95BAST001NKDEVT001NK</link>
            <guid>https://velog.io/@hyunm1n-o/%EA%B3%B5%ED%86%B5%EC%BD%94%EB%93%9C-%EC%82%AC%EC%9A%A9%EB%B2%95BAST001NKDEVT001NK</guid>
            <pubDate>Tue, 13 Oct 2026 08:10:48 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>공통코드는 회사 내에서 만드려고 신규 개발한 기능</p>
</blockquote>
<ol>
<li><p>공통코드를 등록하고 싶은 <code>TextField</code> &gt; Properties 에 들어가서 
Zoom Dialog &gt; <code>BASZOOMCMBNK</code> 입력,
Read Only &gt; <code>Zoom Only</code> 체크
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/f5ac05cc-f3ec-40dc-9c06-457518f7aea0/image.png" alt=""></p>
</li>
<li><p>Zoom 설정한 텍스트 필드의 <code>ZoomBefore</code></p>
<pre><code>OBJECT: 
STRING TMPDIALOGCAPTION,
STRING STRBIZCOMPID;
</code></pre></li>
</ol>
<p>STRBIZCOMPID = &#39;L_EDU801&#39;;
TMPDIALOGCAPTION = SYSCOMMONNK.SETZOOMDIALOGCAPTION(STRBIZCOMPID);
SYSCOMMONNK.ZOOMLISTING(SCCOMPANY,STRBIZCOMPID);</p>
<pre><code>: 여기서 우리가 설정해야 할 것은 1차적으로 `STRBIZCOMPID = &#39;L_EDU801&#39;;`
&gt; ⚠️ BEFORE에서 변수 선언 잊지 말기
`OBJECT: 
 SYSCOMMONNK SYSCOMMONNK;` 

 3. `BAST001NK` 접속 후 아래 사진과 같이 생성
 (일단 테스트해보고자 간단하게 설정, 추후 더 다른 기능은 알아봐야할듯!)
 ![](https://velog.velcdn.com/images/hyunm1n-o/post/164e9b29-bf89-4f7a-b37b-8dad54d2184e/image.png)

4. `DEVT001NK` 접속 후 아래 사진과 같이 생성
![](https://velog.velcdn.com/images/hyunm1n-o/post/ee7ea304-f153-47eb-9ed5-81b994e7cc68/image.png)
참고: 잘린 쿼리 부분
`WHERE 
CLIENT = &#39;[CLIENT]&#39;
AND COMPANY = &#39;[COMPANY]&#39;
AND GROUP_CODE = &#39;EDU801&#39;`

5. 완성
![](https://velog.velcdn.com/images/hyunm1n-o/post/27a210ce-fc5a-4814-88ec-a414903262bb/image.png)


---
아래는 예전에 코드 분석하면서 이해한 것
&gt;BAST001NK에서 유형분류 ZOOM 을 누른다
BASZOOMCMB 가 열림 &gt; BASZOOMCMB는 껍데기고 다른 곳에서 값을 넣어주면 불러오는 공용컴포넌트 느낌
BAST001NK의 ZOOMBEFORE에서 ZOOMLISTING 값에 비즈니스 코드 들어감
ZOOMLISTING 내에서 그 비즈니스 코드를 가지고
DBOBIZCOMPONENT  내 QUERYBODY, QUERYWHERE 을 읽어옴
그러면 이제 그 ZOOM 했을 때 뜨는 모달 화면이 착 뜸
++ DBOBIZCOMPONENT 는 기존에 있던 테이블
++ DBOBIZCOMPONENT 내 정보들 (QUERYBODY, 컴포넌트 ID 등) 은 DEVT01NK에서 넣어줌</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[다이얼로그 내 그리드 행추가 버튼 안 눌릴 때]]></title>
            <link>https://velog.io/@hyunm1n-o/%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EB%82%B4-%EA%B7%B8%EB%A6%AC%EB%93%9C-%ED%96%89%EC%B6%94%EA%B0%80-%EB%B2%84%ED%8A%BC-%EC%95%88-%EB%88%8C%EB%A6%B4-%EB%95%8C</link>
            <guid>https://velog.io/@hyunm1n-o/%EB%8B%A4%EC%9D%B4%EC%96%BC%EB%A1%9C%EA%B7%B8-%EB%82%B4-%EA%B7%B8%EB%A6%AC%EB%93%9C-%ED%96%89%EC%B6%94%EA%B0%80-%EB%B2%84%ED%8A%BC-%EC%95%88-%EB%88%8C%EB%A6%B4-%EB%95%8C</guid>
            <pubDate>Tue, 13 Oct 2026 05:26:37 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/a884a4d7-3d4d-4ad3-9b66-d525e762b0e9/image.png" alt="">
이 부분이 동작하지 않을 때,</p>
<p> IDE 내에서 테이블 클릭 &gt; Properties &gt; Table Options &gt; Keys Enabled &gt; true로 변경</p>
<p> <img src="https://velog.velcdn.com/images/hyunm1n-o/post/c991b86b-40a6-4744-ab30-173c00470faa/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[이미지 추가하기]]></title>
            <link>https://velog.io/@hyunm1n-o/%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@hyunm1n-o/%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%B6%94%EA%B0%80%ED%95%98%EA%B8%B0</guid>
            <pubDate>Mon, 12 Oct 2026 05:04:16 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>참고화면: BASHCMT172NK</p>
</blockquote>
<h4 id="1-picture-컨트롤-배치">1. Picture 컨트롤 배치</h4>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/cbfd4f76-d8d1-4333-8d63-1f030d2b39ab/image.png" alt=""></p>
<h4 id="2-이벤트-받는-곳-정하기">2. 이벤트 받는 곳 정하기</h4>
<pre><code>a. Picture 내 Click 이벤트
b. 버튼으로 따로 주기 (난이걸로)</code></pre><h4 id="3-항상-before-에-사용할-변수-선언">3. 항상 <code>BEFORE</code> 에 사용할 변수 선언</h4>
<pre><code>```
OBJECT :
    SYSCOMMONNK SYSCOMMONNK,
    STRING ZOOMCOL,
    STRING PICTUREPATH,
    STRING STRSUBFIX;
```</code></pre><h3 id="이미지-업로드-하기">이미지 업로드 하기</h3>
<h4 id="1-버튼-클릭">1. 버튼 클릭</h4>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/0f25b5a6-3c3e-42d0-8ef8-2084bb337043/image.png" alt=""></p>
<ul>
<li>도서 ID로 검색하는 이유: 나중에 도서 ID로 경로 설정해서 저장할 것이기 때문에, Key 를 주는 것</li>
<li>추가로 필요한 메서드 <code>GETPHOTO()</code>, <code>LOADPHOTO()</code></li>
</ul>
<h4 id="2-사진-가져오기">2. 사진 가져오기</h4>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/2ee3c7b5-dc93-4f64-9f8a-652b55ba06da/image.png" alt=""></p>
<ul>
<li><code>CHECKPICTUREPATH</code>: 경로 맞는지 검사용</li>
<li><code>EDUT803D001NK</code>: 사진 경로 업로드용 다이얼로그</li>
<li>로컬에서 서버에 올리기, 엑셀과 비슷한 원리</li>
</ul>
<h4 id="3-사진-불러오기">3. 사진 불러오기</h4>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/8ded780d-e949-40c3-89ba-7ee93ac6968c/image.png" alt=""></p>
<ul>
<li><code>LOADBITMAP</code> : NULL 로 1차 초기화, 2로 이미지 띄우기</li>
</ul>
<hr>
<h1 id="이">이</h1>
<h3 id="렇게-되면">렇게 되면....</h3>
<p>저장은 어떻게 할까요</p>
<ol>
<li>DB에 경로값을 넣나? </li>
<li>상세조회/수정 시 마다 가져오는 건가</li>
</ol>
<p>2번을 봤고, 2번을 참고하기로 함</p>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/f847c246-297d-4062-a52b-a17ed43602e3/image.png" alt=""></p>
<p>생성 시에는 이미지가 없어야 한다고 판단 (참조생성 포함)
그래서 <code>AFTER()</code> 단에 사진 불러오는 메서드 넣기~
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/ca756a76-ba09-4e6d-94ed-22e0a0e4923d/image.png" alt=""></p>
<hr>
<p>근데 사진이 없는 경우의 &#39;NO IMAGE DATA&#39; 레이블을 추가해줬으나,
이미지 컨트롤이랑 사진이 잘 맞지 않음
<code>LOADBITMAP</code> 옵션에 WITH SIZE 가 있길래 해봤는데
뜨지 않음... 이후 해결해보겠습니다</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[엑셀 업로드/다운로드]]></title>
            <link>https://velog.io/@hyunm1n-o/%EC%97%91%EC%85%80%EC%97%B0%EC%8A%B5</link>
            <guid>https://velog.io/@hyunm1n-o/%EC%97%91%EC%85%80%EC%97%B0%EC%8A%B5</guid>
            <pubDate>Thu, 08 Oct 2026 07:48:51 GMT</pubDate>
            <description><![CDATA[<h3 id="1-서버에-양식-샘플-업로드">1. 서버에 양식 샘플 업로드</h3>
<ol>
<li>코드 내 경로에 엑셀 파일 생성</li>
<li>DEVT30 접속</li>
<li>아래 코드 실행<pre><code>OBJECT:
STRING LVPATHSERVER,/*서버 폴더 위치*/
STRING LVPATHLOCAL;/*로컬  폴더 위치*/
</code></pre></li>
</ol>
<p>LVPATHSERVER = STRSUBFIX + &#39;FILEUPLOAD/TEMPLATE/EDUT804NK/&#39; + &#39;EDUT804NK_SAMPLE_BOOK_DOC.xlsx&#39;; 
/<em>[FILEUPLOAD/TEMPLATE/EDUT804NK/EDUT804NK_SAMPLE_BOOK_DOC.xlsx]</em>/</p>
<p>LVPATHLOCAL = &#39;*&#39; + GETUSERINFO(&#39;user.home&#39;) + GETUSERINFO(&#39;file.separator&#39;) + &#39;Downloads&#39; + GETUSERINFO(&#39;file.separator&#39;) + &#39;EDUT804NK_SAMPLE_BOOK_DOC.xlsx&#39;; </p>
<p>/<em>[*C:\Users\hmoh\Downloads\EDUT804NK_SAMPLE_BOOK_DOC.xlsx]</em>/</p>
<p>COPYFILE LVPATHLOCAL INTO LVPATHSERVER;</p>
<pre><code>: 서버 위치 지정 후, 로컬 위치 명시
그리고 `COPYFILE` 로 서버에 파일 저장 

### 2. 버튼 설정
![](https://velog.velcdn.com/images/hyunm1n-o/post/9da8b183-90a0-4514-b6a9-3b93f88557e2/image.png)

#### 다운로드 버튼
`BTNDL.Click()`</code></pre><p>GLOBAL:
    STRING MSGTEXT,
    STRING STRSUBFIX,
    STRING S1,
    STRING S2;</p>
<p>MESSAGE DEV C9999 WITH &#39;양식을 다운로드 하시겠습니까?&#39;;</p>
<p>IF CONFIRM == &#39;NO&#39; THEN
    RETURN;
ENDIF;</p>
<p>STRSUBFIX = SYSCOMMONNK.GETFILEPATH(SYSCOMMONNK.SESSIONINFO(&#39;COMP_CODE&#39;), &#39;FILE_ROOT&#39;);
S1 = STRSUBFIX + &#39;EDUT804NK_SAMPLE_BOOK_DOC.xlsx&#39;;
S2 = &#39;*&#39; + GETUSERINFO(&#39;user.home&#39;) + GETUSERINFO(&#39;file.separator&#39;) + &#39;Downloads&#39; + GETUSERINFO(&#39;file.separator&#39;) + &#39;EDUT804NK/EDUT804NK_SAMPLE_BOOK_DOC.xlsx&#39;;</p>
<p>COPYFILE S1 INTO S2;</p>
<p>MSGTEXT = &#39; 엑셀 파일이 생성되었습니다.&#39; + TOCHAR(10) + &#39;Path : &#39; + S2;</p>
<p>MESSAGE DEV I9999 WITH MSGTEXT;</p>
<pre><code>핵심코드
- `STRSUBFIX = SYS..`
: 회사 코드와 FILE_ROOT 정보를 이용해서 서버에 있는 파일 저장 기본 경로를 가져옴

 : `Errors: can not invoke class method:SESSIONINFO` 에러 발생,
BEFORE 에 변수 선언 해줘야함
`GLOBAL:
    SYSCOMMONNK SYSCOMMONNK;`
---    
#### 업로드 버튼
1. 업로드 할 수 있는 다이얼로그 호출</code></pre><p>CALL DIALOG EDUT804F003NK WITH LOCATION 1050,50 SIZE 400,95;
SET NKRENTITEM8100 TO RESIZE;</p>
<pre><code>
#### 파일 ㄹㅇ 업로드버튼
2. `BEFORE` (EDUT804F003NK)</code></pre><p>SELECT *
    FROM NKRENTITEM3100
    WHERE 1 = 2
    INTO TMPRENTITEM;</p>
<pre><code>: `NKRENTITEM8100` 하고 동일한 구조의 임시테이블 생성

3. `READEXCELFILE` (EDUT804F003NK)
- `ROWCOUNT = 2;` : 헤더 제외 2번쨰 줄부터 읽기
- while로 무한반복 주다가 빈값(끝)을만나면 반복 종료
- `ACCESSXLS FILENAME READ..` 로 읽어오고,
그 값 `APPEND ROW TO TMPRENTITEM;` 로 추가하고...
- 그리고 매핑</code></pre><p>ACCESSXLS FILENAME READ SHEET 1 &#39;A&#39; ROWCOUNT VALUE TMPRENTITEM_BOOKID;
ACCESSXLS FILENAME READ SHEET 1 &#39;B&#39; ROWCOUNT VALUE TMPRENTITEM_RENTAMOUNT;
ACCESSXLS FILENAME READ SHEET 1 &#39;C&#39; ROWCOUNT VALUE TMPRENTITEM_RETURNEXPECTEDDATE;
ACCESSXLS FILENAME READ SHEET 1 &#39;D&#39; ROWCOUNT VALUE TMPRENTITEM_RETURNDATE;
ACCESSXLS FILENAME READ SHEET 1 &#39;E&#39; ROWCOUNT VALUE TMPRENTITEM_STATUS;
ACCESSXLS FILENAME READ SHEET 1 &#39;F&#39; ROWCOUNT VALUE TMPRENTITEM_OVERDUEAMOUNT;
ACCESSXLS FILENAME READ SHEET 1 &#39;G&#39; ROWCOUNT VALUE TMPRENTITEM_DAMAGEDAMOUNT;</p>
<pre><code>4. OK버튼</code></pre><p>IF TRIM(FILEPATH) == &#39;&#39; THEN
    MESSAGE DEV E9999 WITH &#39;파일을 선택해주세요.&#39;;
    RETURN;
ENDIF;</p>
<p>THIS.READEXCELFILE(SCCOMPANY,FILEPATH); </p>
<p>CLEAR ALL NKRENTITEM8100;
LOOP AT TMPRENTITEM
BEGIN
    APPEND ROW TO NKRENTITEM8100;
    MOVE-CORRESPONDING TMPRENTITEM TO NKRENTITEM8100;
ENDLOOP;</p>
<p>SHUTDOWN;</p>
<pre><code>---
끝 이러면 넘어옴

요약해보기
엑셀 파일 서버에 올리기 &gt; 양식다운로드 끝
엑셀로 값 채우기 &gt; 임시테이블 구조만 복사해서 생성 &gt; 엑셀값 반복문으로 임시테이블 채우기 &gt; 그 임시테이블 진짜 테이블에 집어 넣기</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[LINK-설정법]]></title>
            <link>https://velog.io/@hyunm1n-o/LINK-%EC%84%A4%EC%A0%95%EB%B2%95</link>
            <guid>https://velog.io/@hyunm1n-o/LINK-%EC%84%A4%EC%A0%95%EB%B2%95</guid>
            <pubDate>Wed, 07 Oct 2026 08:10:28 GMT</pubDate>
            <description><![CDATA[<h4 id="버튼에-링크-걸기">버튼에 링크 걸기</h4>
<ol>
<li>링크를 걸 트랜잭션 화면에 가서 다이얼로그에 버튼 추가 후 Click 메서드
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/0fe822b1-5bcb-435a-9e3e-b381780eb695/image.png" alt=""></li>
</ol>
<ol start="2">
<li>기본적인 로직은 
a. <code>IASLINKS</code> 클래스의 인스턴스 변수 선언
b. <code>SETPARAMETERS</code>와 <code>ADDCOLVALUE</code>로 값 넘겨주기
c. <code>CREATELINK()</code> 로 링크 생성</li>
</ol>
<p>-&gt;-&gt;-&gt;
d. 링크 대상 트랜잭션의 <code>TransCalled</code> 
e. 값 넘겨준 거 받아서 활용</p>
<hr>
<h3 id="상세-코드-설명">상세 코드 설명</h3>
<p><a href="https://velog.io/@hyunm1n-o/SETPARAMETERS">SETPARAMETERS 참고 </a>
801</p>
<pre><code>/* IASLINKS 클래스의 인스턴스 변수 생성 */
GLOBAL: 
    IASLINKS LINKREC;

/* 선택된 행의 MEMBERID가 존재하는지 확인 후 실행 */
IF NKMEMBERINFO8100LIST_SELECTED == 1 THEN

    LINKREC.SETPARAMETERS(&#39;NKMEMBERINFO8100&#39;, &#39;NKMEMBERINFO8100LIST&#39;, &#39;&#39;, &#39;&#39;, &#39;EDUT804NK&#39;, &#39;&#39;, &#39;0&#39;);
    LINKREC.ADDCOLVALUE(&#39;COMPANY&#39;, NKMEMBERINFO8100LIST_COMPANY);
    LINKREC.ADDCOLVALUE(&#39;MEMBERID&#39;, NKMEMBERINFO8100LIST_MEMBERID);

    SYS_LINK = LINKREC.CREATELINK();
    LINKREC.EXECUTELINK(SYS_LINK);

ELSE
    /* 선택된 행이 없는 경우 안내 */
    MESSAGE BAS E2000 WITH &#39;선택된 회원이 없습니다.&#39;;
ENDIF;</code></pre><p>804</p>
<pre><code>GLOBAL:
    IASLINKS LINKEXC;

LOCAL:
    STRING SCCOMPANY,
    STRING SCMEMBERID;

REPGROUP = GETFORMREPORTGROUP();
QUERYID = GETFORMQUERY();
QITEMS = SEARCHHEADER00039.GETREPORTTABLE();

IF SYS_LINK != &#39;&#39; THEN

    IF LINKEXC.PARSELINK(SYS_LINK) THEN
        SCCOMPANY = LINKEXC.GETCOLVALUE(&#39;COMPANY&#39;);
        SCMEMBERID = LINKEXC.GETCOLVALUE(&#39;MEMBERID&#39;);

        /* 1. 다이얼로그 구조를 QITEMS에 먼저 로드 */        
        GETSEARCHCRITERIA DIALOG SYS_CURRENTDIALOG TO QITEMS;

        /* 2. 로드된 QITEMS의 파라미터 값 변경 */        
        REPQUERY00039REC.SETPARAMVALUES(REPGROUP, QUERYID, QITEMS, &#39;NKRENTHEADER8100&#39;, &#39;COMPANY&#39;, SCCOMPANY);
        REPQUERY00039REC.SETPARAMVALUES(REPGROUP, QUERYID, QITEMS, &#39;NKRENTHEADER8100&#39;, &#39;MEMBERID&#39;, SCMEMBERID);

        THIS.SEARCH();

        IF NKRENTHEADER8100LIST_ROWCOUNT == 1 THEN
            MOVE 1 TO NKRENTHEADER8100LIST_SELECTED;
        ENDIF;

        IF NKRENTHEADER8100LIST_SELECTED THEN
            CNKRENTHEADER8100REC.SETMODI(2);
            THIS.CALLDETAIL();
        ELSE
            MESSAGE BAS E2000 WITH &#39;대여정보가 존재하지 않습니다&#39;;
        ENDIF;

    ENDIF;
ENDIF;
</code></pre><hr>
<h3 id="주의해야할점">주의해야할점</h3>
<ul>
<li>SCCOMPANY 넘겨줄 때 변수 선언 하기</li>
<li>REPGROUP = GETFORMREPORTGROUP();</li>
<li>QUERYID = GETFORMQUERY();</li>
<li>GETSEARCHCRITERIA DIALOG SYS_CURRENTDIALOG TO QITEMS; 설정</li>
</ul>
<p>나머지는 그 이후 동작 설정</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SETPARAMETERS  ]]></title>
            <link>https://velog.io/@hyunm1n-o/SETPARAMETERS</link>
            <guid>https://velog.io/@hyunm1n-o/SETPARAMETERS</guid>
            <pubDate>Wed, 07 Oct 2026 04:39:48 GMT</pubDate>
            <description><![CDATA[<p>PTABLE
: 기준 DB 테이블명</p>
<p>PTMPTABLE
: 그리드에 올라와있는 테이블명</p>
<p>PMODE
: 작업모드(별로안씀)</p>
<p>PSECTION
: 다이얼로그명</p>
<p>PTRANSACTION
: 호출한 트랜잭션 코드</p>
<p>PVARIATION
: 바리에이션 구분값</p>
<p>PWITHWAIT
: 동기/비동기 플래그 (대기: 1, 비동기: 2)</p>
<p>PWITHRETURN
: 호출한 트랜잭션 종료 후, 호출화면에서 결과값 가져올지 말지</p>
<hr>
<p>EX.
<code>LINKREC.SETPARAMETERS(&#39;IASACCOUNT&#39;,&#39;FINTOSITEM&#39;,&#39;&#39;,&#39;&#39;,&#39;FINT61&#39;,&#39;DLISTING&#39;,&#39;0&#39;);</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[리포트 쿼리에 Zoom 넣기 (f. Domain)]]></title>
            <link>https://velog.io/@hyunm1n-o/%EB%A6%AC%ED%8F%AC%ED%8A%B8-%EC%BF%BC%EB%A6%AC%EC%97%90-Zoom-%EB%84%A3%EA%B8%B0-f.-Domain</link>
            <guid>https://velog.io/@hyunm1n-o/%EB%A6%AC%ED%8F%AC%ED%8A%B8-%EC%BF%BC%EB%A6%AC%EC%97%90-Zoom-%EB%84%A3%EA%B8%B0-f.-Domain</guid>
            <pubDate>Wed, 07 Oct 2026 01:10:36 GMT</pubDate>
            <description><![CDATA[<h3 id="목적">목적</h3>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/b89fe8f9-7592-46ce-994c-17275b1f0daa/image.png" alt="">
여기 보이는 리포트 쿼리 내 회원 ID 에 Zoom 을 넣어서 
선택하게 만들고 싶음</p>
<h3 id="방법">방법</h3>
<ol>
<li><p>도메인을 만든다 - (DEVT10)
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/e92fb382-0ecf-4f96-a572-32b36d9500f5/image.png" alt=""></p>
</li>
<li><p>아래와 같이 설정한다
a. 내역, 필드명, 필드유형/길이: 알아서 알맞게 설정
b. 줌 다이얼로그: <strong>줌으로 가져올 화면</strong>
c. 줌필드: <strong>줌을 걸 필드</strong>
d. 기본 제어 유형: Editbox - (Zoom)
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/80552356-682a-41b1-8c48-e14efdc99d9a/image.png" alt=""></p>
</li>
<li><p>DEVT01 에 들어가 줌을 걸 필드가 있는 테이블 수정
도메인을 걸어준다
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/bcf666f4-9587-467c-b579-d5571bcdec88/image.png" alt=""></p>
</li>
<li><p>적용 완료
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/570f45bb-625f-45e7-b75e-93ae2d837446/image.png" alt=""></p>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[테이블 초기화/빈 테이블 가져오기]]></title>
            <link>https://velog.io/@hyunm1n-o/%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B4%88%EA%B8%B0%ED%99%94%EB%B9%88-%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@hyunm1n-o/%ED%85%8C%EC%9D%B4%EB%B8%94-%EC%B4%88%EA%B8%B0%ED%99%94%EB%B9%88-%ED%85%8C%EC%9D%B4%EB%B8%94-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Wed, 30 Sep 2026 02:19:01 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-sql">SELECT * 
  FROM COMCODEMASTER 
 WHERE 1=2 
  INTO TMPTABLE;</code></pre>
<hr>
<p>WHERE 1=2 는 무조건 거짓 조건,
따라서 컬럼목록만 가져오게 됨</p>
<p>빈 그리드를 준비해야하거나
테이블 초기화 해야할 때 사용</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[@-변수 동적참조 (변수명으로 할당된 값 꺼내오기)]]></title>
            <link>https://velog.io/@hyunm1n-o/%EB%B3%80%EC%88%98%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C-%EA%B0%92-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</link>
            <guid>https://velog.io/@hyunm1n-o/%EB%B3%80%EC%88%98%EC%9D%B4%EB%A6%84%EC%9C%BC%EB%A1%9C-%EA%B0%92-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0</guid>
            <pubDate>Wed, 30 Sep 2026 01:30:25 GMT</pubDate>
            <description><![CDATA[<pre><code class="language-sql">OBJECT:
    STRING FIELDNAME1,
    STRING FIELDNAME2,
    STRING STRVARNAME,
    STRING RESULT;

FIELDNAME1 = &#39;삼성전자&#39;;
FIELDNAME2 = &#39;현대자동차&#39;;

/* 1번 변수의 이름을 문자열로 지정 */
STRVARNAME = &#39;FIELDNAME1&#39;;

/* @STRVARNAME 은 FIELDNAME1 의 실제 값인 &#39;삼성전자&#39;를 가져옴 */
RESULT = @STRVARNAME; /* RESULT 값: &#39;삼성전자&#39; */

/* 변수명을 동적으로 변경 */
STRVARNAME = &#39;FIELDNAME2&#39;;
RESULT = @STRVARNAME; /* RESULT 값: &#39;현대자동차&#39; */</code></pre>
<p>이게 동적 참조임</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[⭐ TROIA-help (기능 모르겠을 때)]]></title>
            <link>https://velog.io/@hyunm1n-o/TROIA</link>
            <guid>https://velog.io/@hyunm1n-o/TROIA</guid>
            <pubDate>Tue, 29 Sep 2026 08:38:12 GMT</pubDate>
            <description><![CDATA[<h3 id="selectedrowcount"><code>SELECTEDROWCOUNT()</code></h3>
<p>💡 핵심 요약
기능: 테이블 변수 내에서 SELECTED = 1로 설정되거나 사용자가 UI 테이블에서 선택한 행(Row)의 총 개수를 반환합니다 </p>
<p>구문: SELECTEDROWCOUNT({테이블명}) </p>
<p>장점: 전체 테이블을 LOOP문으로 순회하지 않고 한 줄로 선택 수량을 파악할 수 있어 코드가 간결해지고 성능이 향상됩니다 </p>
<pre><code class="language-sql">-- 여러개 썼는지 확인하고 싶을 때
IF SELECTEDROWCOUNT(TMPLIST) &gt; 1 THEN
    MESSAGE SYS E998 WITH &#39;하나의 그룹코드만 선택하세요.&#39;;
    RETURN;
ENDIF;</code></pre>
<h3 id="begintran">BEGINTRAN;</h3>
<p>트랜잭션 시작: 
데이터베이스 트랜잭션의 시작을 선언합니다 </p>
<p>이 명령어 이후에 실행되는 데이터 변경 작업(INSERT, UPDATE, DELETE 등)은 하나의 트랜잭션 단위로 묶입니다 </p>
<h3 id="committran">COMMITTRAN;</h3>
<p>트랜잭션 확정:
BEGINTRAN 실행 이후 작업한 모든 데이터베이스 변경 사항을 <strong>최종적으로 DB에 영구 반영(Commit)</strong>하고 트랜잭션을 정상 종료합니다</p>
<h3 id="rollbacktran">ROLLBACKTRAN;</h3>
<p>트랜잭션 취소: 
로직 수행 중 에러가 발생했거나 조건에 맞지 않을 때, BEGINTRAN 시점 이후에 변경된 모든 데이터베이스 작업을 취소하고 이전 상태로 되돌립니다(Rollback)</p>
<h3 id="append-row-to">APPEND ROW TO</h3>
<p>💻 코드 작성 예시</p>
<pre><code class="language-sql">/* 1. 메모리 테이블에 새 행 추가 */
APPEND ROW TO TMPCOMCODEMASTER;

/* 2. 추가된 새 행(Active Row)의 각 컬럼에 값 세팅 */
TMPCOMCODEMASTER_COMPANY = SYS_COMPANY;
TMPCOMCODEMASTER_COMCODE = &#39;C001&#39;;
TMPCOMCODEMASTER_COMNAME = &#39;공통코드명&#39;;</code></pre>
<h3 id="append-columnappend-domaincolumn">APPEND COLUMN/APPEND DOMAINCOLUMN</h3>
<p><code>APPEND DOMAINCOLUMN {컬럼명}, {도메인명} TO {가상 테이블};</code>
가상 테이블(Virtual Table)에 새로운 컬럼을 추가하는 것,
새 컬럼을 만들면서 지정한 도메인의 타입과 길이 정보를 사용하는 것</p>
<p><code>APPEND COLUMN</code>과 <code>APPEND DOMAINCOLUMN</code>의 차이점</p>
<table>
<thead>
<tr>
<th>구분</th>
<th><code>APPEND COLUMN</code></th>
<th><code>APPEND DOMAINCOLUMN</code></th>
</tr>
</thead>
<tbody><tr>
<td>컬럼명</td>
<td>직접 지정</td>
<td>직접 지정</td>
</tr>
<tr>
<td>데이터 타입</td>
<td>직접 지정</td>
<td>도메인에서 가져옴</td>
</tr>
<tr>
<td>컬럼 길이</td>
<td>직접 지정</td>
<td>도메인에서 가져옴</td>
</tr>
<tr>
<td>예시</td>
<td><code>STRING, 50</code></td>
<td><code>STEXT</code></td>
</tr>
<tr>
<td>사용 목적</td>
<td>타입과 길이를 직접 설정하여 컬럼 생성</td>
<td>기존 도메인의 정의를 활용하여 컬럼 생성</td>
</tr>
</tbody></table>
<p><strong>예시 코드</strong></p>
<p><code>APPEND COLUMN</code>은 데이터 타입과 길이를 직접 지정합니다.</p>
<pre><code class="language-troia">APPEND COLUMN NEWNAME, STRING, 50 TO TABLEX;</code></pre>
<p><code>APPEND DOMAINCOLUMN</code>은 지정한 도메인에 정의된 타입과 길이를 사용합니다.</p>
<pre><code class="language-troia">APPEND DOMAINCOLUMN NEWNAME, STEXT TO TABLEX;</code></pre>
<ul>
<li>실제 DB에 컬럼 추가할 때는 <code>INSERT</code><h3 id="sys_indbtransaction">SYS_INDBTRANSACTION</h3>
현재 활성화된 데이터베이스 상에서 <strong>트랜잭션이 진행 중인지 여부(Boolean: 1 또는 0)</strong>를 반환하는 시스템 변수</li>
</ul>
<h3 id="메서드에-parameter-넣는-법">메서드에 parameter 넣는 법</h3>
<pre><code class="language-sql">PARAMETERS : 
 INTEGER COLUMNORDER;

 -- 그리고 사용법
 THIS.METHODNAME(1);
</code></pre>
<h3 id="selected">SELECTED</h3>
<p>💡 기본 속성
데이터 타입: INTEGER (선택됨: 1, 선택 안 됨: 0)
동작 방식: 사용자가 UI 테이블 화면에서 체크박스나 클릭으로 행을 선택하면 시스템이 자동으로 1로 세팅되며, 개발자가 TROIA 코드로 직접 1 또는 0을 대입하여 제어할 수도 있습니다</p>
<ol start="2">
<li>주요 코드 작성 예시
현재 행(Active Row) 선택 처리:
TMPTABLE_SELECTED = 1; /* 현재 활성 행을 선택 상태로 변경 <em>/
특정 행(Index) 선택 처리:
TMPTABLE[1]_SELECTED = 1; /</em> 3번째 행을 선택 상태로 변경 */</li>
</ol>
<pre><code class="language-sql">-- 선택되지 않았다면 RETURN
IF TMPCOMCODEMASTER_SELECTED == 0 THEN
    RETURN;
ENDIF;</code></pre>
<h3 id="syscommonnk-아마도">SYSCOMMONNK (아마도)</h3>
<p>공통 줌(Zoom) 처리 및 시스템 공통 로직을 담당하는 클래스 인스턴스(표준 SYSCOMMON을 NK 구분을 붙여 커스터마이징한 클래스)입니다.</p>
<h3 id="zoomlisting">ZOOMLISTING</h3>
<p><code>SYSCOMMONNK.ZOOMLISTING(SCCOMPANY,STRBIZCOMPID);</code>
특정 비즈니스 컴포넌트의 Zoom(검색 팝업 / F4 돋보기) 목록 다이얼로그를 실행하는 핵심 메소드</p>
<p>💡 주요 역할 및 작동 방식</p>
<p>검색 팝업 창(Zoom Dialog) 실행:
자재, 거래처, 사원, 부서 등 지정된 <strong>비즈니스 컴포넌트(STRBIZCOMPID)</strong> 에 연결된 데이터 검색/선택 팝업 다이얼로그를 화면에 모달(Modal) 형태로 호출합니다</p>
<p>회사 및 조건별 데이터 목록 제공:
첫 번째 파라미터인 회사 코드(SCCOMPANY) 조건에 맞춰 해당 회사의 가용 기준 데이터 목록을 팝업창에 조회합니다 </p>
<p>선택한 데이터 리턴:
사용자가 팝업창에서 원하는 행(Row)을 클릭하여 선택하면, 해당 코드 값(예: 자재코드, 거래처코드)이 호출한 원본 화면의 입력 필드로 전달됩니다</p>
<p>🔍 연관 이벤트 (Zoom Events)
ZOOMBEFORE:
Zoom 팝업창이 열리기 바로 직전에 실행되는 이벤트 
팝업이 열리기 전 특정 검색 파라미터나 Zoom Filter 조건을 동적으로 전달할 때 작성합니다</p>
<p>ZOOMAFTER:
사용자가 Zoom 팝업에서 선택을 완료하고 데이터가 리턴된 직후 실행되는 이벤트 
리턴된 코드값으로 관련 명칭, 규격, 단가 등을 자동 재조회하여 화면을 갱신할 때 작성합니다</p>
<h3 id="move-to">MOVE TO</h3>
<p>변수에 값을 복사할 때 사용하는 대입 명령어</p>
<pre><code>MOVE &#39;Hello World&#39; TO STRINGVAR1;  /* 문자열 대입 */
MOVE STRINGVAR1 TO STRINGVAR2;     /* 변수 대입 */
MOVE 3 TO INTEGERVAR1;             /* 숫자 대입 */</code></pre><h3 id="move-corresponding">MOVE-CORRESPONDING</h3>
<p>테이블 간 데이터 복사 
두 테이블의 구조가 완전히 일치하지 않아도, 이름이 같은 컬럼들만 자동으로 매핑하여 활성화된 행(ACTIVEROW)의 데이터를 채워줌</p>
<pre><code>MOVE-CORRESPONDING SOURCETABLE TO TARGETTABLE;</code></pre><h3 id="criteria-columns">CRITERIA COLUMNS</h3>
<p>테이블 반복문(LOOP) 돌릴 때,
조건에 맞는 특정 컬럼만 빠르게 필터링 순회</p>
<pre><code>LOOP AT [테이블명] CRITERIA COLUMNS [컬럼1, 컬럼2] VALUES [값1, 값2] [NOTCASESENSITIVE]
BEGIN
    /* 조건에 맞는 행에서만 실행될 로직 */
ENDLOOP;</code></pre><p><strong><code>WHERE</code> 대신 <code>CRITERIA COLUMNS</code> 쓰는 이유</strong></p>
<ol>
<li>속도 빠름: 직접 일치하는 행만 검사 (JAVA 엔진 레이어에서)</li>
<li>행 상태 플래그(Row Flag) 조건 지정 가능: 
ex) <code>LOOP AT IASMATBASICLIST CRITERIA COLUMNS SELECTED VALUES 1</code></li>
</ol>
<h3 id="runfile">RUNFILE</h3>
<p><code>RUNFILE {filepathonclient};</code>
경로 지정해주면,
default application 프로그램 자동 실행 (ex. Chrome, Excel 등)</p>
<h3 id="call-dialogscreenreport">CALL DIALOG/SCREEN/REPORT</h3>
<p><a href="https://velog.io/@hyunm1n-o/CALL">원본 링크</a></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[MM 부문 T-Code]]></title>
            <link>https://velog.io/@hyunm1n-o/MM-%EB%B6%80%EB%AC%B8-T-Code</link>
            <guid>https://velog.io/@hyunm1n-o/MM-%EB%B6%80%EB%AC%B8-T-Code</guid>
            <pubDate>Tue, 29 Sep 2026 02:17:11 GMT</pubDate>
            <description><![CDATA[<h3 id="1️⃣-자재-기준정보-bas---basic-data">1️⃣ 자재 기준정보 (BAS - Basic Data)</h3>
<ul>
<li><strong>BAST01 / BAST03</strong>: 자재 마스터 관리 (Material Master)
: 자재 코드, 자재 유형(원자재/반제품/완제품), 단위, 기본 마스터 정보 등록 및 조회</li>
<li><strong>BAST02</strong>: 자재 유형 및 그룹 관리 (Material Types &amp; Groups)</li>
</ul>
<h3 id="2️⃣-구매-관리-pur---purchasing">2️⃣ 구매 관리 (PUR - Purchasing)</h3>
<ul>
<li><strong>PURT01</strong>: 구매 요청 (Purchase Requisition)</li>
<li><strong>PURT02</strong>: 구매 발주 (Purchase Order)</li>
<li><strong>PURT03</strong>: 구매 견적 및 단가 관리 (Purchase Quotation / Offers)</li>
<li><strong>PURT04</strong>: 구매 단가 계약 (Purchase Contracts / Agreements)</li>
</ul>
<h3 id="3️⃣-재고-관리-inv---inventory-management">3️⃣ 재고 관리 (INV - Inventory Management)</h3>
<ul>
<li><strong>INVT01</strong>: 재고 입출고 및 이동 (Stock Movements)
: 구매 입고, 생산 출고/입고, 기타 입출고 처리</li>
<li><strong>INVT02</strong>: 재고 현황 및 수량/금액 조회 (Inventory Overview)</li>
<li><strong>INVT05</strong>: 재고 실사 및 수량 조정 (Stock Counting &amp; Adjustment)</li>
</ul>
<h3 id="4️⃣-자재명세서-bom---bill-of-materials">4️⃣ 자재명세서 (BOM - Bill of Materials)</h3>
<ul>
<li><strong>BOMT01</strong>: BOM 등록 및 계층 구조 관리 (Bill of Materials)
: 완제품/반제품의 자재 구성 및 투입 구조 관리</li>
</ul>
<h3 id="5️⃣-자재-소요량-계획-mrp---material-requirements-planning">5️⃣ 자재 소요량 계획 (MRP - Material Requirements Planning)</h3>
<ul>
<li><strong>MRPT01</strong>: MRP 수급 계획 실행 (MRP Planning Run)</li>
<li><strong>MRPT02</strong>: MRP 소요량 결과 조회 및 구매요청/생산지시 전환</li>
</ul>
<h3 id="6️⃣-매입-송장-검증-ver---invoice-verification">6️⃣ 매입 송장 검증 (VER - Invoice Verification)</h3>
<ul>
<li><strong>VERT01</strong>: 구매 매입 송장 검증 (Purchase Invoice Verification)
: 구매 발주, 입고 내역과 공급업체 송장 대조</li>
</ul>
<h3 id="7️⃣-재고-이송-tro---transfer-management">7️⃣ 재고 이송 (TRO - Transfer Management)</h3>
<ul>
<li><strong>TROT01</strong>: 창고/공장 간 재고 이송 요청 및 관리 (Transfer Orders)</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[REC/Control 등등...이게뭐지]]></title>
            <link>https://velog.io/@hyunm1n-o/RECControl-%EB%93%B1%EB%93%B1...%EC%9D%B4%EA%B2%8C%EB%AD%90%EC%A7%80</link>
            <guid>https://velog.io/@hyunm1n-o/RECControl-%EB%93%B1%EB%93%B1...%EC%9D%B4%EA%B2%8C%EB%AD%90%EC%A7%80</guid>
            <pubDate>Tue, 29 Sep 2026 02:13:17 GMT</pubDate>
            <description><![CDATA[<h3 id="1--rec--클래스-인스턴스-변수">1. ( REC ) 클래스 인스턴스 변수</h3>
<ul>
<li><code>IASLINKSREC</code>, <code>REPQUERY00047REC</code>, <code>CIASMATBASICREC</code></li>
<li>Class의 Instance를 만들 때 뒤에 REC 붙임</li>
</ul>
<h3 id="2-다이얼로그-내-컴포넌트">2. 다이얼로그 내 컴포넌트</h3>
<ul>
<li><code>NKRENTHEADER8100_COMPANY</code>, <code>IASMATBASIC_MATTYPE</code>, <code>TXTMEMBERID</code></li>
<li>자동으로 연결되는 전역 변수</li>
<li>⭐ 다이얼로그에 컨트롤 배치 시, <strong>컨트롤 이름 그대로 변수 자동 생성 (선언 필요 X)</strong></li>
</ul>
<h3 id="3-프레임워크-표준-모듈-클래스">3. 프레임워크 표준 모듈 클래스</h3>
<ul>
<li><code>IASLINKS</code>: 문서/파일 첨부 및 레코드 링크 관리 공통 클래스</li>
<li><code>REPQUERY00047</code>: 리포트 쿼리 및 조건 파라미터 수집 클래스 </li>
<li><code>CIASMATBASIC / BAST03*</code>: 자재 마스터 기본 정보 처리 클래스/다이얼로그</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[트랜잭션 안에서 각 필드명 보는 법]]></title>
            <link>https://velog.io/@hyunm1n-o/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%95%88%EC%97%90%EC%84%9C-%EA%B0%81-%ED%95%84%EB%93%9C%EB%AA%85-%EB%B3%B4%EB%8A%94-%EB%B2%95</link>
            <guid>https://velog.io/@hyunm1n-o/%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98-%EC%95%88%EC%97%90%EC%84%9C-%EA%B0%81-%ED%95%84%EB%93%9C%EB%AA%85-%EB%B3%B4%EB%8A%94-%EB%B2%95</guid>
            <pubDate>Tue, 29 Sep 2026 00:45:23 GMT</pubDate>
            <description><![CDATA[<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/ad9cc070-043a-48dd-bc78-8dfa1e4f7154/image.png" alt="">
<img src="https://velog.velcdn.com/images/hyunm1n-o/post/084e5ac2-6e38-4652-bd65-f0994a9b2516/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/hyunm1n-o/post/c24a830c-1057-45c4-bb42-85fec9fae396/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[SQL 피드백]]></title>
            <link>https://velog.io/@hyunm1n-o/SQL-%ED%94%BC%EB%93%9C%EB%B0%B1</link>
            <guid>https://velog.io/@hyunm1n-o/SQL-%ED%94%BC%EB%93%9C%EB%B0%B1</guid>
            <pubDate>Tue, 29 Sep 2026 00:38:54 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p><code>SQL Server 기본SQL문 교육 - 0203.Second Level SQL(QUIZ02).sql</code>
결과는 틀리지 않았으나 드라이빙 테이블 선정은 중요합니다.
CUSTOMERS 에서부터 데이터가 시작하니 드라이빙 테이블은 CUSTOMERS 가 되어야 합니다.</p>
</blockquote>
<p>⭐ 문제에서 요구하는 테이블부터 조인하기
: 누구부터 조회하지? 생각 후 대상 테이블을 생각하기</p>
<hr>
<blockquote>
<p>11.Orders테이블에서 OrderDate가 1996년7월부터 1996년 12월까지의 데이터를 대상으로
   Orders와 [Order Details]와 연결하고(OrderID사용)
   Orders와 Employees를 연결해서(EmployeeID사용)
   EmployeeID의 Title별로, 각 월별 OrderAmount를 구하시오
   OrderAmount = [Order Details].UnitPrice * [Order Details].Quanty</p>
</blockquote>
<pre><code class="language-sql">SELECT    E.Title,
        ISNULL(SUM(CASE WHEN O.OrderDate &gt;= &#39;1996-07-01&#39; AND O.OrderDate &lt; &#39;1996-08-01&#39; THEN D.UnitPrice * D.Quantity END), 0) AS OrderAmount_07,
        ISNULL(SUM(CASE WHEN O.OrderDate &gt;= &#39;1996-08-01&#39; AND O.OrderDate &lt; &#39;1996-09-01&#39; THEN D.UnitPrice * D.Quantity END), 0) AS OrderAmount_08,
        ISNULL(SUM(CASE WHEN O.OrderDate &gt;= &#39;1996-09-01&#39; AND O.OrderDate &lt; &#39;1996-10-01&#39; THEN D.UnitPrice * D.Quantity END), 0) AS OrderAmount_09,
        ISNULL(SUM(CASE WHEN O.OrderDate &gt;= &#39;1996-10-01&#39; AND O.OrderDate &lt; &#39;1996-11-01&#39; THEN D.UnitPrice * D.Quantity END), 0) AS OrderAmount_10,
        ISNULL(SUM(CASE WHEN O.OrderDate &gt;= &#39;1996-11-01&#39; AND O.OrderDate &lt; &#39;1996-12-01&#39; THEN D.UnitPrice * D.Quantity END), 0) AS OrderAmount_11,
        ISNULL(SUM(CASE WHEN O.OrderDate &gt;= &#39;1996-12-01&#39; AND O.OrderDate &lt; &#39;1997-01-01&#39; THEN D.UnitPrice * D.Quantity END), 0) AS OrderAmount_12
FROM    Orders O
        INNER JOIN [Order Details] D 
            ON O.OrderID = D.OrderID
        INNER JOIN Employees E
            ON O.EmployeeID = E.EmployeeID
WHERE    O.OrderDate &gt;= &#39;1996-07-01&#39; 
        AND O.OrderDate &lt; &#39;1997-01-01&#39;
GROUP BY E.Title
ORDER BY E.Title</code></pre>
<p>답본 </p>
<pre><code class="language-sql">SELECT T3.Title,
SUM(CASE WHEN DATEPART(month, T1.OrderDate) = 7 THEN T2.UnitPrice * T2.Quantity ELSE 0 END) OrderAmount_07,
SUM(CASE WHEN DATEPART(month, T1.OrderDate) = 8 THEN T2.UnitPrice * T2.Quantity ELSE 0 END) OrderAmount_08,
SUM(CASE WHEN DATEPART(month, T1.OrderDate) = 9 THEN T2.UnitPrice * T2.Quantity ELSE 0 END) OrderAmount_09,
SUM(CASE WHEN DATEPART(month, T1.OrderDate) = 10 THEN T2.UnitPrice * T2.Quantity ELSE 0 END) OrderAmount_10,
SUM(CASE WHEN DATEPART(month, T1.OrderDate) = 11 THEN T2.UnitPrice * T2.Quantity ELSE 0 END) OrderAmount_11,
SUM(CASE WHEN DATEPART(month, T1.OrderDate) = 12 THEN T2.UnitPrice * T2.Quantity ELSE 0 END) OrderAmount_12

FROM Orders T1

INNER JOIN [Order Details] T2
ON T1.OrderID = T2.OrderID
INNER JOIN Employees T3
ON T3.EmployeeID = T1.EmployeeID

WHERE T1.OrderDate &gt;= &#39;1996-07-01&#39;
AND T1.OrderDate &lt; &#39;1997-01-01&#39;

GROUP BY T3.Title</code></pre>
<p>⭐ 월별로 집계 해야할 때
: <code>O.OrderDate &gt;= &#39;1996-07-01&#39; AND O.OrderDate &lt; &#39;1996-08-01&#39;</code>
대신 <code>DATEPART(month, T1.OrderDate) = 7</code> 사용하기</p>
<p>⭐ISNULL 최소한으로 사용하기
: <code>ISNULL(SUM(CASE WHEN ... THEN 금액 END), 0)</code>
대신 <code>SUM(CASE WHEN ... THEN 금액 ELSE 0 END)</code>
ELSE를 이용하기</p>
<hr>
<blockquote>
<p><strong>요일 표현</strong>
<code>SELECT datename(dw, T1.OrderDate) Weekday, COUNT(*) OrderCount</code></p>
</blockquote>
<p>⭐ DATENAME(<strong>weekday</strong>, variable) DATENAME(<strong>dw</strong>, variable)
: 둘 다 같은 표현</p>
<hr>
<blockquote>
<p><code>COUNT(CASE DATEPART(qq, OrderDate) WHEN 1 THEN 1 END) as First_Quarter</code></p>
</blockquote>
<p>⭐ COUNT 를 할 때는 THEN 부분에 1 사용하기 (가시성)</p>
<blockquote>
<p><code>CONVERT(nchar(6), T1.OrderDate, 112)</code></p>
</blockquote>
<p>⭐ LEFT 대신 CONVERT 만 사용
:<code>LEFT(CONVERT(nchar(8), OrderDate, 112)</code> 
대신 <code>CONVERT(nchar(6), T1.OrderDate, 112)</code></p>
<hr>
<pre><code class="language-sql">SELECT T1.DataType, T1.EmployeeID, T1.OrderDate, T1.Freight

FROM (

SELECT 0 DATA_ORDER, &#39;Data&#39; DataType, T1.EmployeeID, T1.OrderDate, T1.Freight
FROM Orders T1
WHERE T1.OrderDate &gt;= &#39;1996-07-01&#39;
AND T1.OrderDate &lt; &#39;1996-08-01&#39;

UNION ALL

SELECT 1 DATA_ORDER, &#39;Sub TTL&#39; DataType, T1.EmployeeID, NULL OrderDate, SUM(T1.Freight) Freight
FROM Orders T1
WHERE T1.OrderDate &gt;= &#39;1996-07-01&#39;
AND T1.OrderDate &lt; &#39;1996-08-01&#39;

GROUP BY T1.EmployeeID

) T1

ORDER BY T1.EmployeeID, T1.DATA_ORDER, T1.OrderDate</code></pre>
<p>⭐정렬값을 따로 할당하여 정렬하기
: <code>0 DATA_ORDER,  1 DATA_ORDER</code> 을 통해서 정렬함
인라인뷰에서 가상으로 설정한 값을 이용해 정렬 
-&gt; 하지만 SELECT 하지 않아 보이지 않게 설정</p>
<hr>
<p>⭐ 소수점이 안 나올 때,
: <code>CONVERT(numeric(18,2), VAR)</code></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Tips-Hotkey 정리]]></title>
            <link>https://velog.io/@hyunm1n-o/CANIAS-ERP-Client-%EB%8B%A8%EC%B6%95%ED%82%A4-%EC%A0%95%EB%A6%AC</link>
            <guid>https://velog.io/@hyunm1n-o/CANIAS-ERP-Client-%EB%8B%A8%EC%B6%95%ED%82%A4-%EC%A0%95%EB%A6%AC</guid>
            <pubDate>Mon, 21 Sep 2026 02:02:46 GMT</pubDate>
            <description><![CDATA[<h2 id="1-table-관련-단축키">1. Table 관련 단축키</h2>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td><code>Ctrl + Q</code></td>
<td>검색 조건을 즐겨찾기로 저장</td>
<td>Create Favourites for Search Criteria</td>
</tr>
<tr>
<td><code>Ctrl + F</code></td>
<td>테이블 내부 검색</td>
<td>Search inside the table</td>
</tr>
<tr>
<td><code>Insert</code></td>
<td>새로운 행 추가</td>
<td>Add a new row</td>
</tr>
<tr>
<td><code>Delete</code> / <code>Backspace</code></td>
<td>필드 값 삭제</td>
<td>Clear field</td>
</tr>
<tr>
<td><code>Ctrl + Shift + V</code></td>
<td>클립보드 열기</td>
<td>Open clipboard</td>
</tr>
</tbody></table>
<hr>
<h2 id="2-text-field--date-chooser">2. Text Field / Date Chooser</h2>
<p>날짜 입력 필드나 Text Field에서 사용할 수 있는 단축키입니다.</p>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td><code>Ctrl + 5</code></td>
<td>선택한 문자열 앞뒤에 <code>%</code> 추가</td>
<td>Add <code>%</code> sign beginning and end of selected string</td>
</tr>
<tr>
<td><code>Ctrl + T</code></td>
<td>오늘 날짜 / 현재 시간으로 이동</td>
<td>Go to today/now</td>
</tr>
<tr>
<td><code>Ctrl + N</code></td>
<td>오늘 날짜 / 현재 시간으로 이동</td>
<td>Go to today/now</td>
</tr>
<tr>
<td><code>Ctrl + ↑</code></td>
<td>최대 날짜로 이동</td>
<td>Go to the max. day</td>
</tr>
<tr>
<td><code>Ctrl + ↓</code></td>
<td>최소 날짜로 이동</td>
<td>Go to the min. day</td>
</tr>
<tr>
<td><code>Ctrl + ←</code></td>
<td>이전 달로 이동</td>
<td>Go to the previous month</td>
</tr>
<tr>
<td><code>Ctrl + →</code></td>
<td>다음 달로 이동</td>
<td>Go to the next month</td>
</tr>
<tr>
<td><code>↑</code></td>
<td>해당 월의 마지막 날로 이동</td>
<td>Go to the last day of the month</td>
</tr>
<tr>
<td><code>↓</code></td>
<td>해당 월의 첫 번째 날로 이동</td>
<td>Go to the first day of the month</td>
</tr>
<tr>
<td><code>Page Up</code></td>
<td>해당 연도의 마지막 날로 이동</td>
<td>Go to the last day of the year</td>
</tr>
<tr>
<td><code>Page Down</code></td>
<td>해당 연도의 첫 번째 날로 이동</td>
<td>Go to the first day of the year</td>
</tr>
<tr>
<td><code>Delete</code> / <code>Backspace</code></td>
<td>필드 값 삭제</td>
<td>Clear field</td>
</tr>
</tbody></table>
<h3 id="ctrl--5-예시">Ctrl + 5 예시</h3>
<p>검색어를 선택한 상태에서 <code>Ctrl + 5</code>를 누르면 선택한 문자열의 앞뒤에 <code>%</code>가 추가됩니다.</p>
<pre><code class="language-text">ABC
↓
%ABC%</code></pre>
<p>따라서 SQL의 <code>LIKE</code> 검색과 함께 사용할 때 유용합니다.</p>
<pre><code class="language-sql">WHERE NAME LIKE &#39;%ABC%&#39;</code></pre>
<hr>
<h2 id="3-dialog--화면-관련-단축키">3. Dialog / 화면 관련 단축키</h2>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td><code>Alt + ↓</code></td>
<td>CANIAS 최소화</td>
<td>Minimize CANIAS</td>
</tr>
<tr>
<td><code>Alt + ←</code></td>
<td>화면 왼쪽에 CANIAS 배치</td>
<td>Docks CANIAS on the left half of a screen</td>
</tr>
<tr>
<td><code>Alt + →</code></td>
<td>화면 오른쪽에 CANIAS 배치</td>
<td>Docks CANIAS on the right half of a screen</td>
</tr>
<tr>
<td><code>Alt + ↑</code></td>
<td>CANIAS 최대화</td>
<td>Maximize CANIAS</td>
</tr>
<tr>
<td><code>Alt + 밑줄 문자</code></td>
<td>해당 버튼 활성화</td>
<td>Activates this button</td>
</tr>
<tr>
<td><code>Alt + C</code></td>
<td>CANIAS 메뉴 열기</td>
<td>Open CANIAS menu</td>
</tr>
<tr>
<td><code>Alt + A</code></td>
<td>선택한 행을 조회 모드로 열기</td>
<td>Open row in show mode</td>
</tr>
<tr>
<td><code>Alt + I</code></td>
<td>신규 입력</td>
<td>New entry</td>
</tr>
<tr>
<td><code>Alt + Shift + P</code></td>
<td>스크린샷</td>
<td>Screenshot</td>
</tr>
<tr>
<td><code>Ctrl + PageDown</code></td>
<td>이전 Dialog 탭</td>
<td>Previous Dialog Tab</td>
</tr>
<tr>
<td><code>Ctrl + PageUp</code></td>
<td>다음 Dialog 탭</td>
<td>Next Dialog Tab</td>
</tr>
<tr>
<td><code>Ctrl + Tab</code></td>
<td>Transaction 탭 전환</td>
<td>Switch Between Transaction Tab</td>
</tr>
<tr>
<td><code>Ctrl + E</code></td>
<td>CANIAS 확장 기능</td>
<td>CANIAS Extensions</td>
</tr>
<tr>
<td><code>Ctrl + Alt + M</code></td>
<td>왼쪽 메뉴 열기/닫기</td>
<td>Open/Close CANIAS Left Menu</td>
</tr>
<tr>
<td><code>Ctrl + T</code></td>
<td>CANIAS 홈페이지 표시</td>
<td>Show CANIAS Homepage</td>
</tr>
<tr>
<td><code>Ctrl + L</code></td>
<td>세션 잠금</td>
<td>Locks session</td>
</tr>
<tr>
<td><code>Esc</code></td>
<td>현재 Transaction / Dialog 닫기</td>
<td>Close active Transaction/Dialog</td>
</tr>
</tbody></table>
<hr>
<h2 id="4-function-key">4. Function Key</h2>
<p>CANIAS에서 자주 사용하는 <code>F1 ~ F10</code> 단축키입니다.</p>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
<th>기능</th>
</tr>
</thead>
<tbody><tr>
<td><code>F1</code></td>
<td>도움말</td>
<td>Help Files</td>
</tr>
<tr>
<td><code>F2</code></td>
<td>Dialog 닫기</td>
<td>Close Dialog</td>
</tr>
<tr>
<td><code>F3</code></td>
<td>검색 시작</td>
<td>Start Search</td>
</tr>
<tr>
<td><code>F4</code></td>
<td>인쇄</td>
<td>Print</td>
</tr>
<tr>
<td><code>F5</code></td>
<td>저장</td>
<td>Save</td>
</tr>
<tr>
<td><code>F6</code></td>
<td>새로고침</td>
<td>Refresh</td>
</tr>
<tr>
<td><code>F7</code></td>
<td>수정 모드로 열기</td>
<td>Open in edit mode</td>
</tr>
<tr>
<td><code>F8</code></td>
<td>조회 모드로 열기</td>
<td>Open in show mode</td>
</tr>
<tr>
<td><code>F9</code></td>
<td>상세 정보 열기</td>
<td>Open details</td>
</tr>
<tr>
<td><code>F10</code></td>
<td>모든 검색 조건 초기화</td>
<td>Reset all search criteria</td>
</tr>
</tbody></table>
<hr>
<h2 id="5-실무에서-자주-사용할-단축키">5. 실무에서 자주 사용할 단축키</h2>
<h3 id="🔍-검색">🔍 검색</h3>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>F3</code></td>
<td>검색</td>
</tr>
<tr>
<td><code>F10</code></td>
<td>검색 조건 초기화</td>
</tr>
<tr>
<td><code>Ctrl + F</code></td>
<td>테이블 내부 검색</td>
</tr>
<tr>
<td><code>Ctrl + Q</code></td>
<td>검색 조건 즐겨찾기</td>
</tr>
</tbody></table>
<h3 id="✏️-입력--수정">✏️ 입력 / 수정</h3>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>Insert</code></td>
<td>새 행 추가</td>
</tr>
<tr>
<td><code>Alt + I</code></td>
<td>신규 입력</td>
</tr>
<tr>
<td><code>F7</code></td>
<td>수정 모드</td>
</tr>
<tr>
<td><code>F5</code></td>
<td>저장</td>
</tr>
<tr>
<td><code>Delete</code></td>
<td>필드 값 삭제</td>
</tr>
</tbody></table>
<h3 id="👀-조회">👀 조회</h3>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>F8</code></td>
<td>조회 모드</td>
</tr>
<tr>
<td><code>F9</code></td>
<td>상세 정보</td>
</tr>
</tbody></table>
<h3 id="🖥️-화면">🖥️ 화면</h3>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>Esc</code></td>
<td>현재 화면 닫기</td>
</tr>
<tr>
<td><code>F2</code></td>
<td>Dialog 닫기</td>
</tr>
<tr>
<td><code>Ctrl + Tab</code></td>
<td>Transaction 탭 전환</td>
</tr>
<tr>
<td><code>Ctrl + L</code></td>
<td>세션 잠금</td>
</tr>
</tbody></table>
<h3 id="📅-날짜">📅 날짜</h3>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>Ctrl + T</code></td>
<td>오늘 날짜 / 현재 시간</td>
</tr>
<tr>
<td><code>Ctrl + N</code></td>
<td>오늘 날짜 / 현재 시간</td>
</tr>
<tr>
<td><code>Ctrl + ←</code></td>
<td>이전 달</td>
</tr>
<tr>
<td><code>Ctrl + →</code></td>
<td>다음 달</td>
</tr>
<tr>
<td><code>Ctrl + ↑</code></td>
<td>최대 날짜</td>
</tr>
<tr>
<td><code>Ctrl + ↓</code></td>
<td>최소 날짜</td>
</tr>
</tbody></table>
<hr>
<h2 id="6-처음에-외워두면-좋은-핵심-단축키">6. 처음에 외워두면 좋은 핵심 단축키</h2>
<table>
<thead>
<tr>
<th>단축키</th>
<th>설명</th>
</tr>
</thead>
<tbody><tr>
<td><code>F3</code></td>
<td>🔍 검색</td>
</tr>
<tr>
<td><code>F5</code></td>
<td>💾 저장</td>
</tr>
<tr>
<td><code>F6</code></td>
<td>🔄 새로고침</td>
</tr>
<tr>
<td><code>F7</code></td>
<td>✏️ 수정</td>
</tr>
<tr>
<td><code>F8</code></td>
<td>👀 조회</td>
</tr>
<tr>
<td><code>F9</code></td>
<td>📋 상세</td>
</tr>
<tr>
<td><code>F10</code></td>
<td>🧹 검색 조건 초기화</td>
</tr>
<tr>
<td><code>Ctrl + F</code></td>
<td>🔎 테이블 검색</td>
</tr>
<tr>
<td><code>Insert</code></td>
<td>➕ 행 추가</td>
</tr>
<tr>
<td><code>Esc</code></td>
<td>❌ 현재 화면 닫기</td>
</tr>
</tbody></table>
<hr>
<h2 id="참고">참고</h2>
<p>CANIAS Client의 Hot Key는 사용 환경이나 설정에 따라 다르게 지정될 수 있습니다.</p>
<p>특히 <code>Ctrl + T</code>처럼 <strong>사용하는 화면이나 입력 영역에 따라 기능이 달라질 수 있는 단축키</strong>가 있으므로 실제 Client에서 동작을 확인하는 것이 좋습니다.</p>
]]></description>
        </item>
    </channel>
</rss>