Delphi Programming / Object Pascal
サイトのトップページへ リンクのページへ ロゴマーク
[掲載 2005年01月22日] [更新 2013年11月05日] Delphi サンプルプログラム集
拙作のコンポーネント類を使用したサンプル
T200_所得税源泉徴収票 ( 給与支払報告書 ) の台紙
動作確認等 Windows 7 U64(SP1) + Delphi XE Pro
以下の拙作のコンポーネント類が必要
TplSetPrinter, TplPrev
T200_GensenSheet.zip [801 KB] 2013年11月05日版 (EXE 同梱)



  • 2013年11月05日
  • Windows 7 U64(SP1) + Delphi XE Proで動作確認




所得税源泉徴収票 ( 給与支払報告書 ) の台紙


いわゆる源泉用紙の印刷プログラムのための台紙を描画するコードです.印刷位置の確認用に使用できます.3 種類の台紙に対応しています.本当は業務アプリで作成したもののうち,汎用的なものは公開したいところですが,公開するには,ある程度体裁も必要と考えます.これはやはり手数がかかりますので,ご容赦下さい.

拙作の印刷プレビュー関係のコンポーネントは,この例の様に,ゴリゴリコードを書く方に向いています.帳票をコードで書く手間が大変という意見もありますが,どんな帳票作成ツールであっても,結局は,位置やサイズを設定しなければならないのは同じです.

なお,コンピュータ関係の帳票類の多くは,一般にインチサイズとなっています.一方,印刷プレビュー関係コンポーネントでは,寸法を 0.1 mm 単位で扱っていますので,実際の描画位置には微妙なズレが生じることになります.


図1
テストプログラムの設計時画面
  • 以下の 3 種類の用紙用
  • 連続用紙用
  • ヒサゴの 938 用
  • ヒサゴの 1159 用
  • 印刷プレビュー制御コンポは用紙ごと
図2
連続用紙の場合
図3
ヒサゴの 938 用紙の場合
  • A4 用紙に 4 枚分印刷
  • 印刷後にミシン目を切取って使用
  • プリンタの用紙セットは縦方向用
図4
ヒサゴの 1195 用紙の場合
  • A4 用紙に 4 枚分印刷
  • 印刷後にミシン目を切り取って使用
  • プリンタの用紙セットは横方向用

リスト1
所得税源泉徴収票の台紙を印刷するサンプルコード (気合いです!!)
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, plPrev, ExtCtrls, Buttons;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BitBtn3: TBitBtn;   
    plPrev1: TplPrev;
    plPrev2: TplPrev;
    plPrev3: TplPrev;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
    procedure plPrev1NoPrintDraw(Sender: TObject; Page: Integer);
    procedure plPrev2NoPrintDraw(Sender: TObject; Page: Integer);
    procedure plPrev3NoPrintDraw(Sender: TObject; Page: Integer);
  private
    { Private 宣言 }
    procedure DrawGensenBaseSheet(PV: TplPrev; Xl,Yt: Integer;Kind: Integer );
    procedure PutDataToGensenSheet(PV: TplPrev; Xl,Yt: Integer );
  public
    { Public 宣言 }
    Kind : Integer;  //用紙の種類番号
    procedure Test1;
    procedure Test2;
    procedure Test3;
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

//=============================================================================
//  給与支払報告書(個人明細書) 連続用紙(ドットインパクトプリンタ)用
//  連続用紙は横171.45mm縦101.6mmの穴あき(ファンフォールト)用紙
//             (6 3/4inch) (4inch)
//
//  設計時のプリンタはEPSON VP-1800
//  該当用紙がないので15×4 inchの連続用紙に設定して表示をプロパティViewWidth,
//  ViewHeightで指定
//=============================================================================
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  Kind := 1;
  plPrev1.PageCount := 1;

  //連続用紙の表示サイズを指定
  plPrev1.ViewHeight := 1016;
  plPrev1.ViewWidth  := 1715;
  plPrev1.ViewClip   := False;

  //描画用の手続きを指定
  plPrev1.ProcName := Test1;

  plPrev1.FormHeight   := 600;
  plPrev1.FormWidth    := 800;
  plPrev1.FormPosition := poDesktopCenter;
  plPrev1.ShowModal;
end;

//=============================================================================
//  給与支払報告書(個人明細書) ヒサゴOP938R,OP938,GB938用
//  938はプリンタに用紙をセットするのが縦のものに向いている
//
//  設計時のプリンタは A4 印刷の向きは横
//=============================================================================
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
  Kind := 2;
  plPrev2.PageCount := 1;
  plPrev2.ViewClip  := True;

  //描画用の手続きを指定
  plPrev2.ProcName := Test2;

  plPrev2.FormHeight := 600;
  plPrev2.FormWidth  := 800;
  plPrev2.FormPosition := poDesktopCenter;
  plPrev2.ShowModal;
end;

//=============================================================================
//  給与支払報告書(個人明細書) ヒサゴOP1195R,OP1195,GB1195用
//  1195はプリンタに用紙をセットするのが横のものに向いている
//
//  設計時のプリンタは A4 印刷の向きは横
//=============================================================================
procedure TForm1.BitBtn3Click(Sender: TObject);
begin
  Kind := 3;
  plPrev3.PageCount := 1;

  plPrev3.ViewClip  :=True;
  //描画用の手続きを指定
  plPrev3.ProcName := Test3;

  plPrev3.FormHeight   := 600;
  plPrev3.FormWidth    := 800;
  plPrev3.FormPosition := poDesktopCenter;
  plPrev3.ShowModal;
end;

//=============================================================================
//  給与支払報告書(個人明細書) 連続用紙用テスト
//=============================================================================
procedure TForm1.Test1;
begin
  //実際のデータの描画
  PutDataToGensenSheet(plPrev1, 225, 20);
end;

//=============================================================================
//  給与支払報告書(個人明細書) ヒサゴ938(A4用紙)用テスト
//=============================================================================
procedure TForm1.Test2;
begin
  //実際のデータの描画
  PutDataToGensenSheet(plPrev2, 1530,   90);
  PutDataToGensenSheet(plPrev2, 1530, 1110);
  PutDataToGensenSheet(plPrev2,   80,   90);
  PutDataToGensenSheet(plPrev2,   80, 1110);
end;

//=============================================================================
//  給与支払報告書(個人明細書) ヒサゴ1195(A4用紙)用テスト
//=============================================================================
procedure TForm1.Test3;
begin
  //実際のデータの描画
  PutDataToGensenSheet(plPrev3, 1530,   20);
  PutDataToGensenSheet(plPrev3, 1530, 1040);
  PutDataToGensenSheet(plPrev3,   80,   20);
  PutDataToGensenSheet(plPrev3,   80, 1040);
end;

//=============================================================================
//  印刷しないコードを描画するためのイベント内で台紙コードを描画
//  台紙の描画はクリップしないで実際のデータの描画をクリップすることで,設定
//  したプリンタで印刷可能(印刷が欠けない)かどうかを判定することができる.
//=============================================================================
procedure TForm1.plPrev1NoPrintDraw(Sender: TObject; Page: Integer);
begin
  DrawGensenBaseSheet(plPrev1, 225, 20, 1);
end;

//=============================================================================
//  印刷しないコードを描画するためのイベント内で台紙コードを描画
//  台紙の描画はクリップしないで実際のデータの描画をクリップすることで,設定
//  したプリンタで印刷可能(印刷が欠けない)かどうかを判定することができる.
//=============================================================================
procedure TForm1.plPrev2NoPrintDraw(Sender: TObject; Page: Integer);
begin
  DrawGensenBaseSheet(plPrev2, 1530,   90, 1);
  DrawGensenBaseSheet(plPrev2, 1530, 1110, 2);
  DrawGensenBaseSheet(plPrev2,   80,   90, 3);
  DrawGensenBaseSheet(plPrev2,   80, 1110, 4);
end;

//=============================================================================
//  印刷しないコードを描画するためのイベント内で台紙コードを描画
//  台紙の描画はクリップしないで実際のデータの描画をクリップすることで,設定
//  したプリンタで印刷可能(印刷が欠けない)かどうかを判定することができる.
//=============================================================================
procedure TForm1.plPrev3NoPrintDraw(Sender: TObject; Page: Integer);
begin
  DrawGensenBaseSheet(plPrev3, 1530,   20, 1);
  DrawGensenBaseSheet(plPrev3, 1530, 1040, 2);
  DrawGensenBaseSheet(plPrev3,   80,   20, 3);
  DrawGensenBaseSheet(plPrev3,   80, 1040, 4);
end;

//=============================================================================
//  印刷コードの例
//=============================================================================
procedure TForm1.PutDataToGensenSheet(PV: TplPrev; Xl, Yt: Integer);
var
  TempStr : String;
begin
  PV.PenColor(clBlack);
  PV.FontName('MS 明朝');
  PV.FontColor(clBlack);

  //氏名とフリガナ
  PV.FontSize  (10);
  PV.TextRectLC(Xl+845, Xl+1363, Yt+150, Yt+230, '鵬翔 太郎');
  PV.FontSize  (8);
  PV.TextRectLC(Xl+845, Xl+1363, Yt+103, Yt+145, 'ホウショウ タロウ');

  //住所を出力
  PV.FontSize(10);
  PV.TextRectLC(Xl+135, Xl+725, Yt+115, Yt+163, '埼玉県さいたま市南群馬1-2-3');
  PV.TextRectLC(Xl+135, Xl+725, Yt+163, Yt+225, '高級マンション505');
  PV.TextRectCC(Xl+3,   Xl+245, Yt+280, Yt+360, '給与・賞与');

  //払金額を書式を整えて出力
  TempStr := FormatFloat('##,##0', 3500000);
  PV.TextRectRC(Xl+245, Xl+499, Yt+280, Yt+360, TempStr);
  //税額を書式を整えて出力
  TempStr := FormatFloat('#,##0', 175000);
  PV.TextRectRC(Xl+1083, Xl+1337, Yt+280, Yt+360, TempStr);
  //適用欄
  PV.TextRectCC(Xl+5, Xl+931, Yt+540, Yt+660, '普通徴収  第三営業部 庶務課');
  //乙欄の丸印
  PV.PenWidth(5);
  PV.Canvas.Ellipse(Xl+105, Yt+752, Xl+105+30, Yt+752+30);

  //平成
  PV.Circle(Xl+1100, Yt+765, 25);
  //生年月日
  PV.TextRectCC(Xl+1130, Xl+1205, Yt+745, Yt+785, '15');
  PV.TextRectCC(Xl+1205, Xl+1285, Yt+745, Yt+785, '11');
  PV.TextRectCC(Xl+1285, Xl+1355, Yt+745, Yt+785, '15');

  PV.TextOutLC(Xl+283, Yt+830, '東京都板豊区西池袋1-1-1');
  PV.TextOutLC(Xl+283, Yt+910, '板豊株式会社 板豊 次郎');
  //電話番号
  PV.TextOutLC(Xl+905, Yt+930, '03-111-1234');
end;

//=============================================================================
//  「給与支払報告書(個人別明細書)-給与所得の源泉徴収票 台紙
//  用紙は1999.1.14現在のもの
//
//   複写連続用紙(ファンフォールト用紙)
//    横171.45mm(6 3/4inch)縦101.6mm(4inch)の複写用紙
//  HISAGO OP938R 所得税源泉徴収票(A4版 297×210mm)
//  切取り後のサイズは145×102mm
//
//
//  PV        : 印刷プレビューコンポーネント
//              タックシール印刷コンポで使用する時はTplPrev(plTackPrev1)のよ
//              うにキャストして指定する
//  Xl        : 用紙左端から最初の縦線までの距離(X座標値)
//  Yt        : 用紙上端から一番上の横罫線まで高さ(Y座標値)
//              (個人別明細書用紙の上端横罫線)
//  ViewColor : 罫線と文字の色
//  Kind      : 1 給与支払報告書(個人別明細書)  青
//              2 給与支払報告書(個人別明細書) 緑
//              3 給与所得の源泉徴収票 黒
//              4 給与所得の源泉徴収票 黒
//              3,4は現在のところ同じ台紙
//=============================================================================
procedure TForm1.DrawGensenBaseSheet(PV: TplPrev; Xl,Yt: Integer;Kind: Integer );
var
  Xr        : Integer;
  Yb        : Integer;
  i         : Integer;
  Y1        : Integer;
  Y2        : Integer;
  Y3        : Integer;
  BoldLine  : Integer;
  ViewColor : TColor;
begin
  Xr := Xl+1365;
  Yb := Yt+955;
  if (Kind = 1) or (Kind = 2) then begin
    BoldLine := 5;
  end else begin
    BoldLine := 1;
  end;

  case Kind of
    1: ViewColor := $00BAAD72;//$00EAD2A2;
    2: ViewColor := $00A8E6B6;
    3: ViewColor := clSilver;
    4: ViewColor := clSilver;
  else
    ViewColor := clBlack;
  end;

  PV.PenColor(ViewColor);
  PV.FontColor(ViewColor);
  PV.FontName('MS 明朝');
  PV.FontSize(7.0);

  PV.LineStyle(psSolid);
  if (Kind = 1) or (Kind = 2) then begin
    PV.LineWidth(3);
    PV.RectLine(Xl, Xr, Yt, Yb); //外枠
    //右側の太線
    if Kind = 1 then begin
      PV.LineWidth(10);
      PV.RectLine( Xr, Xr, Yt-20, Yt+996);
    end;

    PV.LineWidth(1);
    //17個の四角
    for i := 1 to 16 do begin
      PV.Line (Xl+i*38, Xl+i*38, Yt+20, Yt+62);
    end;

    //一番上の行の種別左縦}
    PV.Line (Xl+645, Xl+645, Yt, Yt+62);
    //整理番号左
    PV.Line (Xl+810, Xl+810, Yt, Yt+62);
    //*の左
    PV.Line (Xl+1103, Xl+1103, Yt, Yt+62);
    PV.FontSize(5.4);
    PV.TextRectLC (Xl+648,  Xl+810,  Yt, Yt+20, '* 種    別');
    PV.TextRectLC (Xl+813,  Xl+1113, Yt, Yt+20, '*      整 理 番 号');
    PV.TextRectLC (Xl+1116, Xr,      Yt, Yt+20, '*');
    //20は上から2行目の上
    PV.Line (Xl,Xr,Yt+20,Yt+20);
  end else begin
    PV.LineWidth(3);
    PV.RectLine(Xl,Xr,Yt+62,Yb);
    PV.LineWidth(1);
  end;

  PV.RectLine( Xl,    Xr,     Yt+62, Yt+230); //62は上から2行目の下
  PV.Line    ( Xl+75, Xl+75,  Yt+62, Yt+230); //230は住所の下

  if (Kind = 1) or (Kind = 2) then begin
    PV.Line ( Xl+75,  Xl+735, Yt+105, Yt+105); //105は区分下
    PV.Line ( Xl+180, Xl+180, Yt+62,  Yt+105); //180は区分右
    PV.Line ( Xl+125, Xl+125, Yt+105, Yt+230); //125は住所右
  end else begin
    PV.Line ( Xl+125, Xl+125, Yt+62, Yt+230); //125は住所右
  end;

  PV.Line    ( Xl+735, Xl+735,Yt+62, Yt+230); //735は氏名左
  PV.Line    ( Xl+785, Xl+785,Yt+62, Yt+230); //785は氏名右
  PV.PenStyle(psDot);
  PV.Line    (Xl+785,  Xr, Yt+105, Yt+105); //105はフリガナ上
  PV.PenStyle(psSolid);
  PV.Line    (Xl+785,  Xr, Yt+148, Yt+148); //148は役職名上
  PV.FontSize(6.0);

  if (Kind = 1) or (Kind = 2) then begin
    PV.TextRectJust(Xl+75, Xl+180, Yt+62, Yt+105, ' *区分 ');
  end;
  PV.TextRectJust(Xl+2, Xl+70, Yt+80,  Yt+110, '支払');
  PV.TextRectJust(Xl+2, Xl+70, Yt+130, Yt+160, 'を受け');
  PV.TextRectJust(Xl+2, Xl+70, Yt+190, Yt+220, 'る者');

  PV.FontName   ('MS 明朝');
  PV.TextRectJustTate( Xl+735, Xl+785, Yt+80, Yt+230,' 氏  名 ');
  if (Kind = 1) or (Kind = 2) then begin
    PV.TextRectJustTate( Xl+75, Xl+125, Yt+105, Yt+230,' 住   所 ');
  end else begin
    PV.TextRectJustTate( Xl+75, Xl+125, Yt+62+10, Yt+230-10, '住所又は居所');
  end;

  PV.FontName   ('MS 明朝');
  PV.FontSize   (4.8);
  PV.TextOutLT  (Xl+785, Yt+62,' (受給者番号)');
  PV.TextOutLT  (Xl+785,Yt+105,' (フリガナ)');
  PV.TextOutLT  (Xl+785,Yt+148,' (役職名)');

  PV.FontSize    (6.0);
  PV.RectLine    ( Xr,      Xl,      Yt+275, Yt+358);  //295は種別項目名下
  PV.RectLine    ( Xr,      Xl+245,  Yt+230, Yt+358);  //245は種別右
  PV.Line        ( Xl+515,  Xl+515,  Yt+230, Yt+358);  //515は支払金額右
  PV.Line        ( Xl+795,  Xl+795,  Yt+230, Yt+358);  //795控除後の金額の右
  PV.Line        ( Xl+1075, Xl+1075, Yt+230, Yt+358);  //1075は源泉徴収税額の左
  PV.LineWidth   (BoldLine);
  PV.RectLine    ( Xl+245,  Xl+795,  Yt+275, Yt+358);
  PV.Line        ( Xl+515,  Xl+515,  Yt+275, Yt+358);
  PV.TextRectJust( Xl+45,   Xl+195,  Yt+230, Yt+275, '種別');
  PV.TextRectJust( Xl+285,  Xl+475,  Yt+230, Yt+275, '支払金額');
  PV.TextRectJust( Xl+520,  Xl+790,  Yt+230, Yt+275, '給与所得控除後の金額');
  PV.TextRectJust( Xl+805,  Xl+1065, Yt+230, Yt+275, '所得控除の額の合計額');
  PV.TextRectJust( Xl+1105, Xl+1335, Yt+230, Yt+275, '源泉徴収額');

  PV.LineWidth(1);                                 //配偶者特別控除など分開始
  PV.RectLine ( Xr,      Xl,      Yt+450, Yt+535); //535摘要欄上450上横線
  PV.Line     ( Xl+130,  Xl+130,  Yt+358, Yt+535); //縦線.左から
  PV.Line     ( Xl+280,  Xl+280,  Yt+358, Yt+535);
  PV.Line     ( Xl+610,  Xl+610,  Yt+358, Yt+535);
  PV.Line     ( Xl+735,  Xl+735,  Yt+358, Yt+535);
  PV.Line     ( Xl+915,  Xl+915,  Yt+358, Yt+535);
  PV.Line     ( Xl+1070, Xl+1070, Yt+358, Yt+535);
  PV.Line     ( Xl+1195, Xl+1195, Yt+358, Yt+535);
  PV.RectLine ( Xl+280,  Xl+735,  Yt+425, Yt+535); //扶養親族の数の細長い四角
  PV.RectLine ( Xl+100,  Xl+130,  Yt+405, Yt+535); //老人の枠
  PV.Line     ( Xl+380,  Xl+380,  Yt+425, Yt+535); //縦線開始
  PV.Line     ( Xl+510,  Xl+510,  Yt+425, Yt+535);
  PV.Line     ( Xl+685,  Xl+685,  Yt+425, Yt+535);
  PV.Line     ( Xl+25,   Xl+25,   Yt+450, Yt+535);
  PV.Line     ( Xl+50,   Xl+50,   Yt+450, Yt+535);
  PV.Line     ( Xl+75,   Xl+75,   Yt+450, Yt+535);

  PV.PenStyle (psDot);
  PV.Line     ( Xl+405, Xl+405, Yt+450, Yt+535);
  PV.Line     ( Xl+645, Xl+645, Yt+450, Yt+535);

  PV.PenStyle   (psSolid);
  PV.PenWidth   (BoldLine);                          //太線
  PV.RectLine   ( Xl,      Xl+50,   Yt+450, Yt+535); //一番左
  PV.RectLine   ( Xl+100,  Xl+330,  Yt+450, Yt+535); //老人左から特定右
  PV.Line       ( Xl+130,  Xl+130,  Yt+450, Yt+535); //
  PV.Line       ( Xl+280,  Xl+280,  Yt+450, Yt+535); //
  PV.RectLine   ( Xl+380,  Xl+470,  Yt+450, Yt+535); //次の老人左から
  PV.RectLine   ( Xl+510,  Xl+560,  Yt+450, Yt+535); //その他
  PV.RectLine   ( Xl+610,  Xl+1195, Yt+450, Yt+535); //一番右の太枠
  PV.Line       ( Xl+735,  Xl+735,  Yt+450, Yt+535); //縦線
  PV.Line       ( Xl+915,  Xl+915,  Yt+450, Yt+535); //
  PV.Line       ( Xl+1070, Xl+1070, Yt+450, Yt+535); //

  PV.LineWidth(1);
  PV.Line (Xl,Xl+100,Yt+485,Yt+485);

  Y1:=Yt+358;
  Y2:=Yt+405;
  Y3:=Yt+450;
  PV.TextRectJust    (Xl+5,       Xl+130,     Y1,    Y2,    '控除対象配偶');
  PV.TextRectJust    (Xl+5,       Xl+100,     Y2,    Y3,    '者の有無等');
  PV.TextRectJustTate(Xl+100,     Xl+130,     Y2+2,  Y3-2,  '老人');
  PV.TextRectJust    (Xl+130+10,  Xl+280-10,  Y1,    Y2,    '配偶者特別');
  PV.TextRectJust    (Xl+130+10,  Xl+280-10,  Y2,    Y3,    '控除の額)');
  PV.TextRectJust    (Xl+280+50,  Xl+610-50,  Y1,    Y2-10, '扶養家族の数');
  PV.TextRectJust    (Xl+280+50,  Xl+610-50,  Y2-20, Y3-10, '(配偶者を除く)');
  PV.TextRectJust    (Xl+610+3,   Xl+735-3,   Y1,    Y2-10, '障害者の数');
  PV.TextRectJust    (Xl+610+3,   Xl+735-3,   Y2-20, Y3-10, '(本人を除く)');
  PV.TextRectJust    (Xl+735+10,  Xl+915-10,  Y1,    Y2,    '社会保険料');
  PV.TextRectJust    (Xl+735+10,  Xl+915-10,  Y2,    Y3,    '等の金額');
  PV.TextRectJust    (Xl+915+10,  Xl+1070-10, Y1,    Y2,    '生命保険料');
  PV.TextRectJust    (Xl+915+10,  Xl+1070-10, Y2,    Y3,    'の控除額');
  PV.TextRectJust    (Xl+1070+10, Xl+1195-10, Y1,    Y2,    '損害保険料');
  PV.TextRectJust    (Xl+1070+10, Xl+1195-10, Y2,    Y3,    'の控除額');
  PV.TextRectJust    (Xl+1195+10, Xr-10,      Y1,    Y2,    '住宅借入金等');
  PV.TextRectJust    (Xl+1195+10, Xr-10,      Y2,    Y3,    '特別控除の額');

  PV.FontSize(5.4);
  PV.TextRectJustTate ( Xl,    Xl+25,  Yt+450+2, Yt+485-2, ' 有');
  PV.TextRectJustTate ( Xl+25, Xl+50,  Yt+450+2, Yt+485-2, ' 無');
  PV.TextRectJustTate ( Xl+50, Xl+75,  Yt+450+2, Yt+485-2, '従有');
  PV.TextRectJustTate ( Xl+75, Xl+100 ,Yt+450+2, Yt+485-2, '従無');

  Y1:=Yt+450-20;
  Y2:=Yt+450;
  PV.TextRectJust ( Xl+280+20, Xl+380-20, Y1, Y2, '特定');
  PV.TextRectJust ( Xl+380+25, Xl+510-25, Y1, Y2, '老人');
  PV.TextRectJust ( Xl+510+18, Xl+610-18, Y1, Y2, 'その他');
  PV.TextRectJust ( Xl+610+10, Xl+685-10, Y1, Y2, '特別');
  PV.TextRectJust ( Xl+685+3,  Xl+735-3,  Y1, Y2, 'その他');

  PV.FontSize (6.0);
  PV.LineWidth(1);                         //摘要の行の分開始
  PV.Line(Xl+925,Xl+925, Yt+535, Yt+660);  //摘要の右側の縦線
  PV.Line(Xl+925,Xr,     Yt+575, Yt+575);  //個人年金保険料の金額の上の横線
  PV.Line(Xl+925,Xr,     Yt+620, Yt+620);  //...の下の横線

  PV.LineWidth(BoldLine);
  PV.RectLine(Xl+1125, Xr, Yt+535, Yt+660);  //摘要の行の最右側3行分の太線
  PV.TextOutLT(Xl+5,Yt+540,'(摘要)');
                                                //乙欄などのある行の分開始
  PV.RectLine( Xl,     Xl+90,  Yt+660, Yt+790); //今度は太枠から開始
  PV.RectLine( Xl+148, Xl+497, Yt+660, Yt+790);
  PV.RectLine( Xl+650, Xl+925, Yt+660, Yt+790);

  PV.LineWidth(1);
  PV.Line( Xl+40,   Xl+40,   Yt+660, Yt+790); //縦線
  PV.Line( Xl+250,  Xl+250,  Yt+660, Yt+790);
  PV.Line( Xl+148,  Xl+250,  Yt+683, Yt+683); //小さな横線
  PV.Line( Xl+200,  Xl+200,  Yt+683, Yt+790); //その中間の縦線
  PV.Line( Xl+300,  Xl+300,  Yt+660, Yt+790);
  PV.Line( Xl+300,  Xl+400,  Yt+683, Yt+683); //小さな横線
  PV.Line( Xl+350,  Xl+350,  Yt+683, Yt+790);
  PV.Line( Xl+400,  Xl+400,  Yt+660, Yt+790);
  PV.Line( Xl+450,  Xl+450,  Yt+660, Yt+790);
  PV.Line( Xl+550,  Xl+550,  Yt+660, Yt+790); //死亡退職の右
  PV.Line( Xl+600,  Xl+600,  Yt+660, Yt+790); //災害者の右
  PV.Line( Xl+650,  Xr,      Yt+705, Yt+705); //中途~受給者生年月日の右の横線
  PV.Line( Xl+700,  Xl+700,  Yt+705, Yt+790); //就職の右
  PV.Line( Xl+750,  Xl+750,  Yt+705, Yt+790); //退職の右
  PV.Line( Xl+813,  Xl+813,  Yt+705, Yt+790); //年の右
  PV.Line( Xl+865,  Xl+865,  Yt+705, Yt+790); //月の右.日の右は1140
  PV.Line( Xl+975,  Xl+975,  Yt+705, Yt+790); //明の右
  PV.Line( Xl+1025, Xl+1025, Yt+705, Yt+790); //大の右
  PV.Line( Xl+1075, Xl+1075, Yt+705, Yt+790); //昭の右
  PV.Line( Xl+1125, Xl+1125, Yt+705, Yt+790); //平の右
  PV.Line( Xl+1205, Xl+1205, Yt+705, Yt+790); //年の右
  PV.Line( Xl+1280, Xl+1280, Yt+705, Yt+790); //月の右
  PV.FontSize(5.4);
  PV.TextRectJUst (Xl+148+2,  Xl+250-2,  Yt+660, Yt+682,'本人が障害者');
  PV.TextRectJUst (Xl+300+14, Xl+400-14, Yt+660, Yt+682,'募夫');

  //これらの記入欄の右端はXr
  PV.FontSize(6.0);
  PV.TextRectJUst (Xl+915+20, Xl+1125-10, Yt+530, Yt+575, '配偶者の合計所得');
  PV.TextRectJUst (Xl+915+20, Xl+1125-10, Yt+575, Yt+620, '個人年金保険料の金額');
  PV.TextRectJUst (Xl+915+20, Xl+1125-10, Yt+620, Yt+660, '長期損害保険料の金額');

  //これらの記入欄の上は740下は780
  PV.TextRectJustTate( Xl,     Xl+40,  Yt+660+3, Yt+740-2, '夫あり');
  PV.TextRectJustTate( Xl+40,  Xl+90,  Yt+660+3, Yt+740-2, '未成年者');
  PV.TextRectJustTate( Xl+90,  Xl+148, Yt+660+3, Yt+740-2, '乙   欄');
  PV.TextRectJustTate( Xl+148, Xl+200, Yt+682+3, Yt+740-2, '特別');
  PV.TextRectJustTate( Xl+200, Xl+250, Yt+682+3, Yt+740-2, 'その他');
  PV.TextRectJustTate( Xl+250, Xl+300, Yt+660+3, Yt+740-2, '老年者');
  PV.TextRectJustTate( Xl+300, Xl+350, Yt+682+3, Yt+740-2, '一般');
  PV.TextRectJustTate( Xl+350, Xl+400, Yt+682+3, Yt+740-2, '特別');
  PV.TextRectJustTate( Xl+400, Xl+450, Yt+660+3, Yt+740-2, '募夫');
  PV.TextRectJustTate( Xl+450, Xl+500, Yt+660+3, Yt+740-2, '勤労学生');
  PV.TextRectJustTate( Xl+500, Xl+550, Yt+660+3, Yt+740-2, '死亡退職');
  PV.TextRectJustTate( Xl+550, Xl+600, Yt+660+3, Yt+740-2, '災害者');
  PV.TextRectJustTate( Xl+600, Xl+650, Yt+660+3, Yt+740-2, '外国人');

  //これらの記入欄の上は740下は780
  PV.TextRectJust ( Xl+650+50, Xl+915-50, Yt+660, Yt+705, '中途就・退職');
  PV.TextRectJust ( Xl+650+2,  Xl+700-2,  Yt+705, Yt+740, '就職');
  PV.TextRectJust ( Xl+700+2,  Xl+750-2,  Yt+705, Yt+740, '退職');
  PV.TextRectCC   ( Xl+750,    Xl+813,    Yt+705, Yt+740, '年');
  PV.TextRectCC   ( Xl+813,    Xl+865,    Yt+705, Yt+740, '月');
  PV.TextRectCC   ( Xl+865,    Xl+915,    Yt+705, Yt+740, '日');

  //これらの記入欄の上は740下は780
  PV.TextRectJust (Xl+1025, Xl+1255, Yt+660, Yt+705, '受給者生年月日');
  PV.TextRectCC   (Xl+925,  Xl+975,  Yt+705, Yt+740, '明');
  PV.TextRectCC   (Xl+975,  Xl+1025, Yt+705, Yt+740, '大');
  PV.TextRectCC   (Xl+1025, Xl+1075, Yt+705, Yt+740, '昭');
  PV.TextRectCC   (Xl+1075, Xl+1125, Yt+705, Yt+740, '平');
  PV.TextRectCC   (Xl+1125, Xl+1205, Yt+705, Yt+740, '年');
  PV.TextRectCC   (Xl+1205, Xl+1280, Yt+705, Yt+740, '月');
  PV.TextRectCC   (Xl+1280, Xr,      Yt+705, Yt+740, '日');

  PV.RectLine     ( Xr,     Xl,     Yt+745, Yt+790); //790は支払者の住所の上
  PV.RectLine     ( Xr,     Xl,     Yt+660, Yt+790); //790は乙欄のある下
  PV.Line         ( Xl+55,  Xl+55,  Yt+790, Yb);     //55は支払者右
  PV.Line         ( Xl+55,  Xr,     Yt+870, Yt+870); //870は支払者氏名の上
  PV.Line         ( Xl+230, Xl+230, Yt+790, Yb);     //氏名の右

  PV.FontName        ('MS 明朝');
  PV.TextRectJustTate( Xl, Xl+50, Yt+780, Yt+950, ' 支払者 ');
  PV.FontName        ('MS 明朝');
  //支払者住所の記入欄は横方向235-1355,縦方向760-840
  PV.TextRectJust    (Xl+75, Xl+215, Yt+790, Yt+830, '住所(居所)');
  PV.TextRectJust    (Xl+75, Xl+215, Yt+830, Yt+870, '又は所在地');
  //支払者氏名等の記入欄は横方向235-1344,縦方向840-930
  PV.TextRectJust    (Xl+75,  Xl+215, Yt+870, Yt+912, '氏名又は');
  PV.TextRectJust    (Xl+75,  Xl+215, Yt+913, Yt+955, '名称');
  PV.TextOutLB       (Xl+795, Yt+950, '(電話)');

  PV.FontName ('MS ゴシック');
  PV.FontSize (15);
  if (Kind = 1) or (Kind = 2) then begin
    PV.TextRectJustTate(Xl-65, Xl-5,Yt+240, Yt+730, '給与支払報告書(個人別明細書)');
  end else begin
    PV.TextRectCB(Xl, Xr, Yt, Yt+62-5, '給与所得の源泉徴収票');
  end;
end;

end.