# 프론트에서 크리스탈레포트 연동방법

> ## Crystal Report + Front 연동방법

1\. 아래와 같이 이미 작업된 양식의 rpt파일이 존재한다면 해당 rpt파일에서 필요한 필드들을 확인합니다.

[![image.png](https://manual.dabory.com/uploads/images/gallery/2025-02/scaled-1680-/K2Kimage.png)](https://manual.dabory.com/uploads/images/gallery/2025-02/K2Kimage.png)

1-1 위와 같이 작성된 rpt 파일이 존재하지 않는다면 C:\\ReCrystallizeServer\\Reports\\standard 경로로 이동후 필요한 양식과 가장 흡사한 양식을 찾아 복사해줍니다.

2\. 확인한 필드를 토대로 쿼리를 작성합니다.

```sql
-- opticalpos::federated/crystal/adjustment/subqry/insert1.sql

SELECT
    UNIX_TIMESTAMP() as created_on,
    2 as list_token,
    'head-foot' as position,
    -- 발행매장
    tax_no as c1,             -- 사업자등록번호
    tel_no as c2,             -- 전화번호
    branch_name as c3,        -- 상호명
    branch_manager as c4,     -- 대표자
    -- 고객정보
    company_no as c5,         -- 고객번호
    company_name as c6,       -- 고객명


    0 as d1,  -- dummy
    0 as d2,  -- dummy
    0 as d3,  -- dummy
    0 as d4,  -- dummy
    0 as d5,  -- dummy
    0 as d6,  -- dummy
    0 as d7,  -- dummy
    0 as d8,  -- dummy
    0 as d9,  -- dummy
    0 as d10  -- dummy


from dbr_company as mx
inner join dbr_sorder on mx.id = dbr_sorder.buyer_id
inner join dbr_branch on dbr_sorder.branch_id = dbr_branch.id


-- @where
group by mx.id
-- @order



-- opticalpos::federated/crystal/adjustment/subqry/insert2.sql

SELECT
    UNIX_TIMESTAMP() as created_on,
	2 as list_token,
	'body' as position,
	sorder_date as c1,                      -- 주문일자
    ccard_amt as c2,                        -- 카드 사용금액
    cash_amt as c3,                         -- 현금 사용금액
    coupon_amt as c4,                       -- 쿠폰 사용금액
    reward_use_amt as c5,                   -- 적립금 사용금액
    discount_amt as c6,                     -- 할인금 사용금액
    sum(sorder_sum) - ccard_amt - cash_amt - coupon_amt - reward_use_amt as c7, -- 외상 금액
    sum(ccard_amt) as c8,                   -- 해당일의 총 카드 사용금액
    sum(cash_amt) as c9,                    -- 해당일의 총 현금 사용금액
    sum(sorder_sum) as c10,                  -- 해당일의 총 사용금액
    sum(sum(sorder_sum)) OVER () as c11,     -- 해당고객의 토탈 사용금액
	0 as d1,  -- dummy
    0 as d2,  -- dummy
    0 as d3,  -- dummy
    0 as d4,  -- dummy
    0 as d5,  -- dummy
    0 as d6,  -- dummy
    0 as d7,  -- dummy
    0 as d8,  -- dummy
    0 as d9,  -- dummy
    0 as d10  -- dummy

from
	dbr_sorder
	inner join
		( select
	    buyer_id, dbr_company.id as id
    from
	    dbr_company
	    inner join dbr_sorder on dbr_company.id = dbr_sorder.buyer_id
    group by buyer_id
	 ) as mx
	on mx.buyer_id = dbr_sorder.buyer_id

inner join dbr_sorder_bd on dbr_sorder.id = dbr_sorder_bd.sorder_id

-- @where
group by sorder_no
-- HAVING SUM(sorder_sum) - ccard_amt - cash_amt - coupon_amt - reward_use_amt <> SUM(sorder_sum)
-- @order

```

<div id="bkmrk-list-token-%3A-positio"><div>list-token :</div><div>position : rpt 파일에서 사용할 데이터필드의 섹션을 명시합니다.</div><div>c1 ~ c6 : head-foot section에 치환될 데이터들을 차례대로 작성합니다.</div><div>d1~d10 : 필요하다면 d1~d10까지 사용하여 데이터 필드를 채워줍니다.</div></div><div id="bkmrk--2">  
</div><div id="bkmrk--3">  
</div><div id="bkmrk-3.-crystal-report%EB%A5%BC-%EC%82%AC">3. crystal report를 사용하는 메뉴의 파라메터에 PrintVars를 추가합니다.  
</div><div id="bkmrk--4">  
</div>```json
"PrintVars": {
        "QueryName": "opticalpos::federated/crystal/adjustment",
        "ReportPath": "standard/adjustment/adjustment.rpt",
        "ExportFmt": "PDF",
        "ServerPrinter": "",
        "CustomCode": "adjustment"
    },
```

QueryName : 위에서 작성했던 query를 입력해줍니다.

ReportPath : winodw server에서 rpt 파일을 저장했던 위치입니다.

ExportFmt : 레포트 출력시 파일의 형식입니다.

ServerPrinter : ""

CustomCode : 해당 커스텀을 구분할 수 있는 code입니다.

4\. env(설정파일)에 REPORT\_SERVER\_URL 변수를 확인합니다.