Q&A

  • [퀵레포트] 세금계산서 출력 (도와줘요) 고수님


안녕하세요

퀵레포트의 고수님들...



세금계산서를 퀵레포트로 출력하려고하는데



업체마다 물품이 여러개가 있더라구요



세금계산서 (공급자)

공급자 공급받는자

상호: 이름: 상호: 이름:

업대: 종목: 업태: 종목:



월/일 품명/ 코드 수량 금액 .....

01/01

. ========> 어떻게 해야되죠..????

. ========> 어떻게 해야되죠..????

. ========> 어떻게 해야되죠..????

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



세금계산서 (공급받는자)

공급자 공급받는자

상호: 이름: 상호: 이름:

업대: 종목: 업태: 종목:



월/일 품명/ 코드 수량 금액 .....

01/01

. ========> 어떻게 해야되죠..????

. ========> 어떻게 해야되죠..????

. ========> 어떻게 해야되죠..????



얄려주시면 어떻게든 사례할께요..









3  COMMENTS
  • Profile
    김성수 2000.11.14 21:08
    발행하는 방식은 크게 두가지가 있는데

    첫번째는 2pcs로 한장만을 인쇄하는 경우이고

    두번째는 A4지의 상하를 나누어서 발행하는 경우가 있는데

    질문의 내용으로 봐서 두번째인것 같군요.



    발행하기전 한 거래처의 세금계산서를 sql로 조회하여 각각의 필드에 해당하는 값을 변수로 설정하여 퀵리포트에 move합니다.

    퀵리포트는 page header에 공급자용,공급받는자요을 모두 정의하시구요.

    물품이 여러가지가 있는 경우에 쿼리사용은

    <예>

    var i:integer;



    select * from 세금계산서 where 거래처 =:거래처



    i := 0;

    while not query1.eof do

    begin

    i := i +1;

    case i of

    1: //첫번째 라인

    begin

    v1 := query1.fieldbyName('v1').asstring;

    v2 := query1.fieldbyName('v2').asstring;

    end;

    2: //두번째 라인

    begin

    v1 := query1.fieldbyName('v1').asstring;

    v2 := query1.fieldbyName('v2').asstring;

    end;

    end;//case end..

    query1.next;

    end;







    오병주 wrote:

    >

    > 안녕하세요

    > 퀵레포트의 고수님들...

    >

    > 세금계산서를 퀵레포트로 출력하려고하는데

    >

    > 업체마다 물품이 여러개가 있더라구요

    >

    > 세금계산서 (공급자)

    > 공급자 공급받는자

    > 상호: 이름: 상호: 이름:

    > 업대: 종목: 업태: 종목:

    >

    > 월/일 품명/ 코드 수량 금액 .....

    > 01/01

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    >

    > 세금계산서 (공급받는자)

    > 공급자 공급받는자

    > 상호: 이름: 상호: 이름:

    > 업대: 종목: 업태: 종목:

    >

    > 월/일 품명/ 코드 수량 금액 .....

    > 01/01

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    >

    > 얄려주시면 어떻게든 사례할께요..

    >

    >

    >

    >

  • Profile
    nilriri 2000.11.14 04:23
    꼭 퀵레포트로만 출력해야 하나요?



    전 이렇게 했는데...

    프린터 포트로 직접 텍스트를 보내서...



    이렇게 처리하셔도 상관 없으시다면 연락주십시오...



    제가 했던 방법을 알려드리죠..







    오병주 wrote:

    >

    > 안녕하세요

    > 퀵레포트의 고수님들...

    >

    > 세금계산서를 퀵레포트로 출력하려고하는데

    >

    > 업체마다 물품이 여러개가 있더라구요

    >

    > 세금계산서 (공급자)

    > 공급자 공급받는자

    > 상호: 이름: 상호: 이름:

    > 업대: 종목: 업태: 종목:

    >

    > 월/일 품명/ 코드 수량 금액 .....

    > 01/01

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    >

    > 세금계산서 (공급받는자)

    > 공급자 공급받는자

    > 상호: 이름: 상호: 이름:

    > 업대: 종목: 업태: 종목:

    >

    > 월/일 품명/ 코드 수량 금액 .....

    > 01/01

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    > . ========> 어떻게 해야되죠..????

    >

    > 얄려주시면 어떻게든 사례할께요..

    >

    >

    >

    >

  • Profile
    nilriri 2000.11.15 03:20
    답변을 올릴려구 소스를 뒤지다 보니...

    원하시는 방식과 좀 거리가 있겠더군요..

    저는 폼지에 인쇄를 하는 방식을 이용해서...

    도움이 안될수도 있겠다는 생각이 드는군요...정말 죄송합니다.



    저두 델파이를 얼마안해보고 지금은 또 파빌을 하고 있어서...

    ...



    procedure Ttax202f.btn_printClick(Sender: TObject);

    begin

    printer.Printers[printer.printerindex];



    //프린터설정-세로방향설정, 페이지수, 글꼴크기

    Printer.Orientation := poPortrait;

    printer.Canvas.Font.Name := '굴림체';

    Printer.Canvas.Font.Size := 9;



    // 인쇄시 한행의 높이

    rowHeight := Printer.Canvas.TextHeight('0');

    colwidth := printer.canvas.textwidth('0');



    // 한페이지당 행의 갯수

    linesPerPage := Printer.PageHeight div rowHeight;



    // 물리적인 page의 폭을 구한다(physical page size)

    Escape(Printer.Handle, GETPHYSPAGESIZE, 0, nil, @PhysSize);



    // 물리적인 page에서 실제 인쇄가 시작되는 곳의 offset을 구한다

    Escape(Printer.Handle, GETPRINTINGOFFSET, 0, nil, @PrintOffset);



    // 물리적인 page의 폭 - Printer object의 page 폭 - offset

    rOffset := PhysSize.x - Printer.PageWidth - PrintOffset.x;



    if rOffset > PrintOffset.x then

    begin

    offset := rOffset - PrintOffset.x;

    adjPhysWidth := Printer.PageWidth - offset;

    end else

    begin

    offset := 0;

    adjPhysWidth := Printer.PageWidth - (PrintOffset.x - rOffset);

    end;

    // pageWidth는 한 page의 폭(전체 화면의 폭이 아님)

    pageWidth := adjPhysWidth ;

    // 한페이지당 문자의 갯수

    charsPerLine := (pageWidth div Printer.Canvas.TextWidth('0')) - 2;



    printer.BeginDoc;

    WritePages;

    //발행횟수를 1증가기시키는 루틴 추가할것







    printer.EndDoc;

    DM_tax.qry_ptmp.close;

    end;



    procedure Ttax202f.WritePages;

    begin



    havePrinted := False;

    pageNum := 0;

    tempcreate2click(tempcreate2);

    printer.Title := '세금계산서';



    while not DM_tax.qry_ptmp.Eof do

    begin

    if havePrinted then Printer.NewPage;

    havePrinted := False;



    detailcount(dm_tax.qry_ptmp.fieldbyname('regdate').asString,

    dm_tax.qry_ptmp.fieldbyname('customer').asString,

    copy(dm_tax.qry_ptmp.fieldbyname('bookno').asString,1,6));



    DoLayout;



    //전역변수초기화

    kong := 0;

    tax := 0;

    total := 0;

    dcount := 0;

    end;



    if havePrinted then Printer.NewPage;



    end;



    procedure Ttax202f.DoLayout;

    const

    blanks : string = ' ';

    var

    s, blank : string;

    i, row, col, sumrow : integer;

    begin

    col := offset;

    row := rowHeight * 3;

    inc(pageNum, 1);

    with dm_tax.qry_ptmp do

    begin

    s := copy(fieldbyname('bookno').asString,1,2);

    Printer.Canvas.TextOut(col + colwidth * 98, row, s);

    Printer.Canvas.TextOut(col + colwidth * 98, row + rowHeight * 43, s);

    s := copy(fieldbyname('bookno').asString,3,4);

    Printer.Canvas.TextOut(col + colwidth * 104, row, s);

    Printer.Canvas.TextOut(col + colwidth * 104, row + rowHeight * 43, s);

    inc(row, rowHeight * 4);



    s := fieldbyname('saupjano').asString;

    s := formatmasktext('###-##-#####;0;',s);

    Printer.Canvas.Font.Size := 15;

    Printer.Canvas.TextOut(col + colwidth * 72, row, s);

    Printer.Canvas.TextOut(col + colwidth * 72, row + rowHeight * 43, s);

    Printer.Canvas.Font.Size := 9;

    inc(row, rowHeight * 4);

    //거래처명, 대표자성명

    s := fieldbyname('name').asString;

    if length(s) > 27 then

    begin

    Printer.Canvas.TextOut(col + colwidth * 66, row-30, copy(s,1,27));

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43-30, copy(s,1,27));

    Printer.Canvas.TextOut(col + colwidth * 66, row+20, copy(s,27,length(s)));

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43+20, copy(s,27,length(s)));

    end else

    begin

    Printer.Canvas.TextOut(col + colwidth * 66, row, s);

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43, s);

    end;



    s := fieldbyname('daepyo').asString;

    Printer.Canvas.TextOut(col + colwidth * 98, row, s);

    Printer.Canvas.TextOut(col + colwidth * 98, row + rowHeight * 43, s);

    inc(row, rowHeight * 3);



    s := fieldbyname('juso').asString;

    if length(s) > 43 then

    begin

    Printer.Canvas.TextOut(col + colwidth * 66, row-30, copy(s,1,43));

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43-30, copy(s,1,43));

    Printer.Canvas.TextOut(col + colwidth * 66, row+15, copy(s,43,length(s)));

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43+15, copy(s,43,length(s)));

    end else

    begin

    Printer.Canvas.TextOut(col + colwidth * 66, row, s);

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43, s);

    end;



    inc(row, rowHeight * 3);



    s := fieldbyname('uptae').asString;

    Printer.Canvas.TextOut(col + colwidth * 66, row-30, s);

    Printer.Canvas.TextOut(col + colwidth * 66, row + rowHeight * 43-30, s);

    s := fieldbyname('jongmok').asString;

    Printer.Canvas.TextOut(col + colwidth * 88, row-30, s);

    Printer.Canvas.TextOut(col + colwidth * 88, row + rowHeight * 43-30, s);

    inc(row, rowHeight * 5);



    s := copy(fieldbyname('regdate').asString,1,4);

    Printer.Canvas.TextOut(col + colwidth * 18, row, s);

    Printer.Canvas.TextOut(col + colwidth * 18, row + rowHeight * 43, s);

    s := copy(fieldbyname('regdate').asString,5,2);

    Printer.Canvas.TextOut(col + colwidth * 26, row, s);

    Printer.Canvas.TextOut(col + colwidth * 26, row + rowHeight * 43, s);

    s := copy(fieldbyname('regdate').asString,7,2);

    Printer.Canvas.TextOut(col + colwidth * 32, row, s);

    Printer.Canvas.TextOut(col + colwidth * 32, row + rowHeight * 43, s);



    case length(floattostr(kong)) of

    1: blank := '⑨';

    2: blank := '⑧';

    3: blank := '⑦';

    4: blank := '⑥';

    5: blank := '⑤';

    6: blank := '④';

    7: blank := '③';

    8: blank := '②';

    9: blank := '①';

    else blank := 'ⓞ';

    end;



    //공란수, 공급가액, 세액합계

    Printer.Canvas.Font.Size := 15;

    Printer.Canvas.TextOut(col + colwidth * 37, row-20, blank);

    Printer.Canvas.TextOut(col + colwidth * 37, row + rowHeight * 43-20, blank);

    s := formatfloat('#,##0',kong );

    s := copy(blanks,1,10 - length(s)) + s;

    //공급가액합계와 세액합계

    // Printer.Canvas.Font.Size := 9;

    Printer.Canvas.Font.Size := 10;

    Printer.Canvas.TextOut(col + colwidth * 42 + 10, row-20, s);

    Printer.Canvas.TextOut(col + colwidth * 42 + 10, row + rowHeight * 43-20, s);

    s := formatfloat('#,##0',tax );

    s := copy(blanks,1,9 - length(s)) + s;

    Printer.Canvas.TextOut(col + colwidth * 58 + 10, row-20, s);

    Printer.Canvas.TextOut(col + colwidth * 58 + 10, row + rowHeight * 43-20, s);

    // Printer.Canvas.Font.Size := 9;

    inc(row, rowHeight * 4);



    sumrow := row;

    for i := 1 to dcount do

    begin

    s := copy(fieldbyname('regdate').asString,5,2);

    Printer.Canvas.TextOut(col + colwidth * 15, row, s);

    Printer.Canvas.TextOut(col + colwidth * 15, row + rowHeight * 43, s);

    s := copy(fieldbyname('regdate').asString,7,2);

    Printer.Canvas.TextOut(col + colwidth * 18, row, s);

    Printer.Canvas.TextOut(col + colwidth * 18, row + rowHeight * 43, s);



    s := fieldbyname('goodname').asString;

    Printer.Canvas.TextOut(col + colwidth * 21, row, s);

    Printer.Canvas.TextOut(col + colwidth * 21, row + rowHeight * 43, s);

    s := fieldbyname('rule').asString;

    Printer.Canvas.TextOut(col + colwidth * 40, row, s);

    Printer.Canvas.TextOut(col + colwidth * 40, row + rowHeight * 43, s);

    s := fieldbyname('quantity').asString;

    // Printer.Canvas.Font.Size := 13;

    s := formatfloat('#,###',strtofloat(s));

    s := copy(blanks,1,7 - length(s)) + s;

    Printer.Canvas.TextOut(col + colwidth * 51, row, s);

    Printer.Canvas.TextOut(col + colwidth * 51, row + rowHeight * 43, s);

    s := fieldbyname('price').asString;

    s := formatfloat('#,###',strtofloat(s));

    s := copy(blanks,1,9 - length(s)) + s;

    Printer.Canvas.TextOut(col + colwidth * 62, row, s);

    Printer.Canvas.TextOut(col + colwidth * 62, row + rowHeight * 43, s);

    s := fieldbyname('kong').asString;

    s := formatfloat('#,##0',strtofloat(s));

    s := copy(blanks,1,10 - length(s)) + s;

    Printer.Canvas.TextOut(col + colwidth * 76, row, s);

    Printer.Canvas.TextOut(col + colwidth * 76, row + rowHeight * 43, s);

    s := fieldbyname('tax').asString;

    s := formatfloat('#,##0',strtofloat(s));

    s := copy(blanks,1,9 - length(s)) + s;

    Printer.Canvas.TextOut(col + colwidth * 92, row, s);

    Printer.Canvas.TextOut(col + colwidth * 92, row + rowHeight * 43, s);

    // Printer.Canvas.Font.Size := 9;

    inc(row, rowHeight * 2);

    next

    end;



    sumrow := sumrow + rowHeight * 10;

    //합계금액인쇄

    s := formatfloat('₩##,###,###,###',total );

    s := copy(blanks,1,16 - length(s)) + s;

    // Printer.Canvas.Font.Size := 10;

    Printer.Canvas.TextOut(col + colwidth * 13, sumrow-10, s);

    Printer.Canvas.TextOut(col + colwidth * 13, sumrow + rowHeight * 43, s);

    s := formatfloat('₩##,###,###,###',total );

    s := copy(blanks,1,16 - length(s)) + s;

    Printer.Canvas.TextOut(col + colwidth * 67, sumrow-10, s);

    Printer.Canvas.TextOut(col + colwidth * 67, sumrow + rowHeight * 43, s);

    // Printer.Canvas.Font.Size := 9;



    havePrinted := True; // 한줄이라도 인쇄되었다를 표시

    end;

    end;





    nilriri wrote:

    > 꼭 퀵레포트로만 출력해야 하나요?

    >

    > 전 이렇게 했는데...

    > 프린터 포트로 직접 텍스트를 보내서...

    >

    > 이렇게 처리하셔도 상관 없으시다면 연락주십시오...

    >

    > 제가 했던 방법을 알려드리죠..

    >

    >

    >

    > 오병주 wrote:

    > >

    > > 안녕하세요

    > > 퀵레포트의 고수님들...

    > >

    > > 세금계산서를 퀵레포트로 출력하려고하는데

    > >

    > > 업체마다 물품이 여러개가 있더라구요

    > >

    > > 세금계산서 (공급자)

    > > 공급자 공급받는자

    > > 상호: 이름: 상호: 이름:

    > > 업대: 종목: 업태: 종목:

    > >

    > > 월/일 품명/ 코드 수량 금액 .....

    > > 01/01

    > > . ========> 어떻게 해야되죠..????

    > > . ========> 어떻게 해야되죠..????

    > > . ========> 어떻게 해야되죠..????

    > > +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    > >

    > > 세금계산서 (공급받는자)

    > > 공급자 공급받는자

    > > 상호: 이름: 상호: 이름:

    > > 업대: 종목: 업태: 종목:

    > >

    > > 월/일 품명/ 코드 수량 금액 .....

    > > 01/01

    > > . ========> 어떻게 해야되죠..????

    > > . ========> 어떻게 해야되죠..????

    > > . ========> 어떻게 해야되죠..????

    > >

    > > 얄려주시면 어떻게든 사례할께요..

    > >

    > >

    > >

    > >