기타

바코드 프린트 사용방법

바코드 라이브러리 적용방법

1. 라라벨 패키지 정보

"DNS1D": "Milon\\Barcode\\Facades\\DNS1DFacade",
                        "DNS2D": "Milon\\Barcode\\Facades\\DNS2DFacade"

 

 

  1. 바코드 print 사용방법

controller :  db에서 데이터 불러옴 ->

view :  불러온 데이터를 가져와서 DNS1D 클래스를 통해 바코드와 연동

padding, margin 등을 적용하여 바코드의 출력위치를 지정

 

 

크리스탈 레포트 사용방법

MacOS에서 크리스탈 레포트 사용 및 윈도우 서버 접근 방법

1. 크리스탈 레포트 개요

크리스탈 레포트(Crystal Reports)는 데이터를 자동으로 가져와 PDF, Excel, Word 등의 보고서를 생성 및 배포하는 역할을 합니다 일반적으로 기업용 ERP, 회계 시스템, CRM 등과 연동하여 사용되며, 이러한 이유로 윈도우 서버 환경에서 운영됩니다

2. MacOS에서 윈도우 서버 접근 방법

MacOS에서 윈도우 서버에서 실행 중인 크리스탈 레포트에 접근하려면 원격 데스크톱 연결을 사용해야 합니다

2.1 Microsoft 원격 데스크톱 앱 설치

MacOS에서는 RDP(Remote Desktop Protocol) 파일을 실행하여 원격 서버에 접속할 수 있으며, 이를 위해 Microsoft의 원격 데스크톱 앱이 필요합니다

 2.2 원격 데스크톱 연결 방법

  1. Microsoft Remote Desktop 앱을 실행합니다.

  2. 'Import from RDP File' 또는 **'새 연결 추가'**를 선택합니다.

  3. 제공받은 RDP 파일을 불러오거나 수동으로 서버 정보를 입력합니다.

  4. Username(사용자명)과 Password(비밀번호)를 입력하여 로그인합니다.

  5. 원격 데스크톱을 통해 윈도우 서버에 접속하면 크리스탈 레포트를 사용할 수 있습니다.

스크린샷 2025-02-14 오전 11.19.35.png


3. 크리스탈 레포트 실행

다음은 윈도우 서버 접속 후 .rpt 파일을 열어 크리스탈 리포트에서 보고서를 편집할 때, 자주 사용하는 기능들 입니다

스크린샷(19).png

🔹 1. 텍스트 상자 (Text Box)

📌 역할:

🔹 2. 라인(Line) 생성 도구

📌 역할:

🔹 3. DB 필드 (Database Fields) - 동적 데이터 바인딩

📌 역할:

4. 크리스탈 리포트에서 합계 자동 정렬 방법

📌 목표: ex) 연말정산에서 데이터 한줄 한줄 추가 될때 합계가 맨 아래에 위치하는 방법


📌 원리:

스크린샷(20).png

📌 설정 방법:
1️⃣ "Section Expert"에서 Report Footer 설정 조정

2️⃣ Suppress 조건 추가하여 Report Footer가 마지막에만 나오도록 설정

📌 예상 결과:

No 방문일 현금 카드 외상금액 합계
1 2024-11-10 10,000 50,000 0 60,000
2 2024-11-11 5,000 40,000 0 45,000
3 2024-11-12 8,000 35,000 0 43,000
  합계 23,000 125,000 0 148,000

데이터가 많아질수록 합계가 자동으로 맨 아래로 정렬됨

 

5. 크리스탈 리포트에서 Database Fields를 연동하여 데이터 치환하는 방법

📌 목표:
오른쪽 Database Fields에서 불러온 데이터를 원하는 위치에 배치하여 동적으로 치환하기


1. Database Fields에서 필요한 데이터 가져오기

📌 설정 방법:
1️⃣ 오른쪽 Field Explorer 창에서 "Database Fields" 선택
2️⃣ 필요한 데이터 필드를 찾음 (예: {c1}, {c2}, {c3} 등)
3️⃣ 각 필드를 드래그하여 보고서(Report) 디자인의 적절한 위치에 배치


2. 데이터 필드를 Header, Details, Footer에 적절히 배치하기

📌 배치 방법:
Header(헤더) 섹션:


3. 예제: Database Fields 배치하기

📝 Report 디자인에서 데이터 배치 예시

위치 Database Fields (예제) 설명
Header {c1} (사업자번호) 보고서 상단에 고정
Header {c2} (전화번호) 보고서 상단에 고정
Details {c3} (방문일) 데이터가 동적으로 반복됨
Details {c4} (현금) 데이터가 동적으로 반복됨
Details {c5} (카드) 데이터가 동적으로 반복됨
Details {c6} (합계) 데이터가 동적으로 반복됨
Footer {c7} (총합계) 마지막 행 아래에 위치

이제 데이터가 동적으로 추가될 때, 각 위치에 맞는 값이 자동으로 채워짐
합계도 마지막 행 아래에 자동으로 정렬됨


 


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

Crystal Report + Front 연동방법

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

image.png

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

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

-- 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
list-token :
position : rpt 파일에서 사용할  데이터필드의 섹션을 명시합니다.
c1 ~ c6  : head-foot section에 치환될 데이터들을 차례대로 작성합니다.
d1~d10 : 필요하다면 d1~d10까지 사용하여 데이터 필드를 채워줍니다.


3. crystal report를 사용하는 메뉴의 파라메터에 PrintVars를 추가합니다.

"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 변수를 확인합니다.