Delphi-Projects

Форк
0
/
PlatBlank.pas 
552 строки · 13.6 Кб
1
unit PlatBlank;
2

3
interface
4

5
uses
6
  Windows, Messages, SysUtils, StrUtils, Classes, Graphics, Controls, Forms, Dialogs,
7
  IniFiles, Printers, ExtCtrls, CustomBlank;
8

9
const
10
  Title = 'Банк-Клиент ЗАО "Сити Инвест Банк"';
11
  BIC1 = '044030702';
12
  Bank1 = 'ЗАО "СИТИ ИНВЕСТ БАНК"';
13
  Place1 = 'Г.САНКТ-ПЕТЕРБУРГ';
14
  KS1 = '30101810600000000702';
15
  VOP = '01';
16

17
  LineFeed = #13#10;
18

19
type
20
  TPlatBlank = class(TCustomBlank)
21
  private
22
    { Private declarations }
23
  protected
24
    { Protected declarations }
25
  public
26
    { Public declarations }
27
    DocNo: string;
28
    DocDate: string;
29
    Sum: string;
30
    Delivery: string;
31

32
    INN: string;
33
    Name: string;
34
    LS: string;
35
    BIC: string;
36
    Bank: string;
37
    Place: string;
38
    KS: string;
39

40
    INN2: string;
41
    Name2: string;
42
    LS2: string;
43
    BIC2: string;
44
    Bank2: string;
45
    Place2: string;
46
    KS2: string;
47

48
    Prior: string;
49
    Details: string;
50
    Sign1: string;
51
    Sign2: string;
52

53
    //since 01.06.2003
54
    KPP, KPP2: string;
55
    SS: string;
56
    NAL1, NAL2, NAL3, NAL4, NAL5, NAL6, NAL7: string;
57

58
    procedure DrawPage;
59
    procedure LoadFromFile(const FileName: string);
60
    constructor Create; overload; override;
61
    constructor Create(const FileName: string); overload;
62
  published
63
    { Published declarations }
64
  end;
65

66
implementation
67

68
uses
69
  SumFuncs, Russian;
70

71
{ TPlatBlank }
72

73
constructor TPlatBlank.Create;
74
begin
75
  inherited Create;
76
  TopMargin := 15;
77
  LeftMargin := 20;
78
  //Height := 205;
79

80
  DocDate := DateToStr(Now);
81
  BIC := BIC1;
82
  Bank := Bank1;
83
  Place := Place1;
84
  KS := KS1;
85
end;
86

87
constructor TPlatBlank.Create(const FileName: string);
88
begin
89
  Create;
90
  LoadFromFile(FileName);
91
end;
92

93
procedure TPlatBlank.DrawPage;
94

95
function NormalizeTax(const S: string): string;
96
const
97
  TaxChar = '!';
98
  LineFeed = #10;
99
begin
100
  Result := AnsiReplaceStr(S, ' ' + TaxChar, TaxChar);
101
  Result := AnsiReplaceStr(Result, TaxChar + ' ', TaxChar);
102
  Result := AnsiReplaceStr(Result, TaxChar, LineFeed);
103
end;
104

105
begin
106
  ResetFont('', 9);
107
  TV(160,   0, 178, 5, '0401060');
108
  RL(160,   0, 178, 5);
109
  RL(171,  13, 178, 20);
110

111
  TL(  5,   5, 'Поступ. в банк плат.');
112
  TL( 60,   5, 'Списано со сч. плат.');
113
  TL(  1, -35, 'Сумма');
114
  TL(  1,  35, 'прописью');
115
  TL(  1, -45, 'ИНН');
116
  TL( 51, -45, 'КПП');
117
  TL(  1, -70, 'Плательщик');
118
  TL(  1, -85, 'Банк плательщика');
119
  TL(  1,-100, 'Банк получателя');
120
  TL(  1,-105, 'ИНН');
121
  TL( 51,-105, 'КПП');
122
  TL(  1,-130, 'Получатель');
123
  TL(  1,-165, 'Назначение платежа');
124
  TC( 85,  20, 120, 'Дата');
125
  TC(125,  20, 160, 'Вид платежа');
126
  TL(101, -45, 'Сумма');
127
  TL(101, -60, 'Сч.№');
128
  TL(101, -75, 'БИК');
129
  TL(101, -80, 'Сч.№');
130
  TL(101, -90, 'БИК');
131
  TL(101, -95, 'Сч.№');
132
  TL(101,-105, 'Сч.№');
133
  TL(101,-120, 'Вид оп.');
134
  TL(101,-125, 'Наз.пл.');
135
  TL(101,-130, 'Код');
136
  TL(136,-120, 'Срок плат.');
137
  TL(136,-125, 'Очер.плат.');
138
  TL(136,-130, 'Рез.поле');
139
  TL( 71,-170, 'Подписи');
140
  TL(141,-170, 'Отметки банка');
141
  TL( 11,-185, 'М.П.');
142

143

144

145

146

147

148

149
//    //below obsolete since 01.06.2003
150
//  ResetFont('', 12);
151
//    TL( 61, -20, DocNo);
152
//    TC( 85, -20, 120, DocDate);
153
//    TC(125, -20, 160, Delivery);
154
//    TB( 21, -35, 178, 40, RCurrToText(RStrToCurr(Sum)));
155
//    TL(116, -45, Sum);
156
//
157
//    TL( 11, -45, INN);
158
//    TB(  1, -50, 99, 65, Name);
159
//    TL(116, -60, LS);
160
//    // TL(  1, -75, 99, Bank);
161
//    // TL(  1, -80, 99, Place);
162
//    TL(116, -75, BIC);
163
//    TL(116, -80, KS);
164
//
165
//    TL( 11,-105, INN2);
166
//    TB(  1,-110, 99, 125, Name2);
167
//    TL(116,-105, LS2);
168
//    // TL(  1, -90, 99, Bank2);
169
//    // TL(  1, -95, 99, Place2);
170
//    TL(116, -90, BIC2);
171
//    TL(116, -95, KS2);
172
//
173
//    TL(156,-125, Prior);
174
//    TB(  1,-140, 178, 160, NormalizeTax(Details));
175
//    // TL( 51,-175, Sign1);
176
//    // TL( 51,-190, Sign2);
177
//    TL(116,-120, VOP);
178
//
179
//    ResetFont('', 11);
180
//    {
181
//    TL(  1, -75, 99, Bank);
182
//    TL(  1, -80, 99, Place);
183
//    TL(  1, -90, 99, Bank2);
184
//    TL(  1, -95, 99, Place2);
185
//    }
186
//    TB(  1, -75, 99, 80, Bank);
187
//    TL( 30, -85, 99, Place);
188
//    TB(  1, -90, 99, 95, Bank2);
189
//    TL( 30,-100, 99, Place2);
190
//
191
//    ResetFont('', 11, 'I');
192
//    TL( 51,-175, Sign1);
193
//    TL( 51,-190, Sign2);
194
//    //above obsolete since 01.06.2003
195

196

197

198
  ResetFont('', 11, '');
199
  TL(  1, -75, 99, Bank);
200
  TL(  1, -80, 99, Place);
201
  TL(  1, -90, 99, Bank2);
202
  TL(  1, -95, 99, Place2);
203

204
  ResetFont('', 12, '');
205
  TV(171,  13, 178, 20, SS);
206
  TL( 61, -20, DocNo);
207
  TC( 85, -20, 120, DocDate);
208
//  TC(125, -20, 160, Delivery);
209
  TB( 21, -35, 178, 40, RCurrToText(RStrToCurr(Sum)));
210
  TL(116, -46, RCurrToStr(RStrToCurr(Sum), '-'));
211

212
  TL( 11, -45, INN);
213
  TL( 61, -45, KPP);
214
  TB(  1, -50, 99, 65, NormalizeTax(Name));
215
  TL(116, -60, LS);
216
  TL(116, -75, BIC);
217
  TL(116, -80, KS);
218

219
  TL( 11,-105, INN2);
220
  TL( 61,-105, KPP2);
221
  TB(  1,-110, 99, 125, NormalizeTax(Name2));
222
  TL(116,-105, LS2);
223
  TL(116, -90, BIC2);
224
  TL(116, -95, KS2);
225

226
  //TL(156,-120, Srok);
227
  TL(156,-125, Prior);
228

229
  //TV(  0, 130,  45, 135, NAL1);
230
  TL(  1, -135, NAL1);
231
  TV( 45, 130,  75, 135, NAL2);
232
  TV( 75, 130,  85, 135, NAL3);
233
  TV( 85, 130, 110, 135, NAL4);
234
  TV(110, 130, 145, 135, NAL5);
235
  TV(145, 130, 170, 135, NAL6);
236
  TV(170, 130, 178, 135, NAL7);
237

238
  TB(  1,-140, 178, 160, NormalizeTax(Details));
239
//  TL( 51,-180, Sign1);
240
//  TL( 51,-195, Sign2);
241
  TL(116,-120, VOP);
242

243

244

245

246

247
  ResetFont('', 12, '');
248
  TL(  1, -20, 'ПЛАТЕЖНОЕ ПОРУЧЕНИЕ №');
249

250
  HL(  0,   5,  35);
251
  HL( 55,   5,  90);
252
  HL(  0,  40, 178);
253
  HL(  0,  45, 100);
254
  HL(  0,  70, 115);
255
  HL(  0,  85, 178);
256
  HL(  0, 100, 115);
257
  HL(  0, 105, 100);
258
  HL(  0, 130, 178);
259
  HL(  0, 135, 178);
260
  HL(  0, 165, 178);
261
  HL( 85,  20, 120);
262
  HL(125,  20, 160);
263
  HL(100,  55, 178);
264
  HL(100,  75, 115);
265
  HL(100,  90, 115);
266
  HL(100, 115, 178);
267
  HL(100, 120, 115);
268
  HL(100, 125, 115);
269
  HL(135, 120, 155);
270
  HL(135, 125, 155);
271
  HL( 50, 180, 110);
272
  HL( 50, 195, 110);
273

274
  VL( 20,  25,  40);
275
  VL( 50,  40,  45);
276
  VL(100,  40, 130);
277
  VL( 50, 100, 105);
278
  VL(115,  40, 130);
279
  VL(135, 115, 130);
280
  VL(155, 115, 130);
281
  VL( 45, 130, 135);
282
  VL( 75, 130, 135);
283
  VL( 85, 130, 135);
284
  VL(110, 130, 135);
285
  VL(145, 130, 135);
286
  VL(170, 130, 135);
287

288
  //DrawRulers;
289
end;
290

291
procedure TPlatBlank.LoadFromFile(const FileName: string);
292
var
293
  PFile: TMemIniFile;
294
  Is866: Boolean;
295
  SL: TStringList;
296
  I: Integer;
297
  Ver: Integer;
298
  s: string;
299

300
function NormalizeText(const S, S1, S2, S3, S4: string): string;
301
begin
302
  if Length(S) > 0 then
303
    Result := S
304
  else if Length(S1) > 0 then
305
  begin
306
    if S1[1] = '^' then
307
    begin
308
      Result := Copy(S1, 2, 53) + Copy(S2, 2, 53) +
309
        Copy(S3, 2, 53) + Copy(S4, 2, 53);
310
      if Result[106] = Result[107] then //BUG correction!
311
        Delete(Result, 106, 1);
312
    end
313
    {else if Ver > 7 then //last releases only!
314
      Result = S1 + ' ' + S2 + ' ' + S3 + ' ' + S4
315
    }
316
    else begin
317
      if Length(S1) = 53 then
318
        Result := S1 + S2
319
      else
320
        Result := S1 + ' ' + S2;
321

322
      if Length(S2) = 53 then
323
      begin
324
        if (Length(S3) > 1) and (S2[53] = S3[1]) then //BUG correction!
325
          Delete(Result, Length(Result) - 1, 1);
326
      end
327
      else
328
        Result := Result + ' ';
329

330
      if Length(S3) = 53 then
331
        Result := Result + S3 + S4
332
      else
333
        Result := Result + S3 + ' ' + S4;
334
    end;
335
  end
336
  else
337
    Result := '';
338
  Result := Trim(Result);
339
  while Pos('  ', Result) > 0 do
340
    Delete(Result, Pos('  ', Result), 1);
341
  if Is866 then
342
    RDosToWin(Result);
343
end;
344

345
begin
346
  if ExtractFileDir(FileName) = '' then
347
    PFile := TMemIniFile.Create('.\' + FileName)
348
  else
349
    PFile := TMemIniFile.Create(FileName);
350
  try
351
    with PFile do
352
    begin
353
      Is866   := ReadString('File', 'CP', '866') = '866';
354
      Ver     := ReadInteger('File', 'Ver', 0);
355

356
      DocNo   := ReadString('Payment', 'No', '1');
357
      DocDate := RStrToDateStr(ReadString('Payment', 'Date',
358
                        DateToStr(Date)));
359
      Sum     := ReadString('Payment', 'Sum', '0-00');
360
      Prior   := ReadString('Payment', 'Queue', '6');
361
      Details := NormalizeText(
362
                   ReadString('Payment', 'Text', ''),
363
                   ReadString('Payment', 'Text1', ''),
364
                   ReadString('Payment', 'Text2', ''),
365
                   ReadString('Payment', 'Text3', ''),
366
                   ReadString('Payment', 'Text4', ''));
367

368
      //Sign1   := ReadString('From', 'Sign1', '');
369
      //Sign2   := ReadString('From', 'Sign2', '');
370
      INN     := ReadString('From', 'INN', '');
371
      Name    := ReadString('From', 'Name', '');
372
      LS      := ReadString('From', 'LS', '');
373
      //BIC
374
      //Bank
375
      //Place
376
      //KS
377
      INN2     := ReadString('To', 'INN2', '');
378
      Name2    := ReadString('To', 'Name2', '');
379
      LS2      := ReadString('To', 'LS2', '');
380
      BIC2     := ReadString('To', 'BIC2', '');
381
      Bank2    := ReadString('To', 'Bank2', '');
382
      Place2   := ReadString('To', 'Place2', '');
383
      KS2      := ReadString('To', 'KS2', '');
384

385
      if Is866 then
386
      begin
387
        RDosToWin(Sign1);
388
        RDosToWin(Sign2);
389
        RDosToWin(INN);
390
        RDosToWin(Name);
391
        //Bank
392
        //Place
393
        RDosToWin(INN2);
394
        RDosToWin(Name2);
395
        RDosToWin(Bank2);
396
        RDosToWin(Place2);
397
      end;
398

399

400
      //since 01.06.2003
401
      if Ver >= 11 then
402
      begin
403
        KPP := ReadString('From', 'KPP', '0');
404
        KPP2 := ReadString('To', 'KPP2', '0');
405
      end
406
      else
407
      begin
408
        if AnsiLeftStr(Name, 3) = 'КПП' then
409
        begin
410
          SL := TStringList.Create;
411
          try
412
            SL.Text := AnsiReplaceStr(Name, ' ', LineFeed);
413
            if SL[0] = 'КПП' then
414
            begin
415
              KPP := SL[1];
416
              Name := '';
417
              for I := 2 to SL.Count - 1 do
418
                Name := Name + SL[I] + ' ';
419
              Name := Trim(Name);
420
            end;
421
          finally
422
            SL.Free;
423
          end;
424
        end;
425
        if AnsiLeftStr(Name2, 3) = 'КПП' then
426
        begin
427
          SL := TStringList.Create;
428
          try
429
            SL.Text := AnsiReplaceStr(Name2, ' ', LineFeed);
430
            if SL[0] = 'КПП' then
431
            begin
432
              KPP2 := SL[1];
433
              Name2 := '';
434
              for I := 2 to SL.Count - 1 do
435
                Name2 := Name2 + SL[I] + ' ';
436
              Name2 := Trim(Name2);
437
            end
438
          finally
439
            SL.Free;
440
          end;
441
        end;
442
      end;
443

444
      if Ver >= 11 then
445
      begin
446
        SS := ReadString('To', 'SS', '');
447
        if Length(SS) = 2 then
448
        begin
449
          NAL1 := ReadString('To', 'NAL1', '0');
450
          NAL2 := ReadString('To', 'NAL2', '0');
451
          NAL3 := RWin(ReadString('To', 'NAL3', '0'));
452
          NAL4 := RWin(ReadString('To', 'NAL4', '0'));
453
          NAL5 := RWin(ReadString('To', 'NAL5', '0'));
454
          NAL6 := ReadString('To', 'NAL6', '0');
455
          NAL7 := RWin(ReadString('To', 'NAL7', '0'));
456
        end;
457
      end
458
      else
459
      begin
460
        I := Pos(';', Details);
461
        if (Details[1] = '0') and (I = 3) then
462
        begin
463
          SL := TStringList.Create;
464
          try
465
            SL.Text := AnsiReplaceStr(Details, ';', LineFeed);
466
            I := 0;
467
            SS := SL[I]; Inc(I);
468
            NAL1 := SL[I]; Inc(I);
469
            NAL2 := SL[I]; Inc(I);
470
            NAL3 := SL[I]; Inc(I);
471
            NAL4 := SL[I]; Inc(I);
472
            NAL5 := SL[I]; Inc(I);
473
            NAL6 := SL[I]; Inc(I);
474
            NAL7 := SL[I]; Inc(I);
475
            Details := '';
476
            for I := I to SL.Count - 1 do
477
              Details := Details + SL[I] + ';';
478
            I := Length(Details);
479
            if Details[I] = ';' then
480
              Delete(Details, I, 1);
481
          finally
482
            SL.Free;
483
          end;
484
        end
485
        else if (I > 1) and (I < 20) then
486
        begin
487
          SL := TStringList.Create;
488
          try
489
            SL.Text := AnsiReplaceStr(Details, ';', LineFeed);
490
            I := 0;
491
            SS := '01'; /////////////////////////////////////////
492
            NAL1 := SL[I]; Inc(I);
493
            NAL2 := SL[I]; Inc(I);
494
            NAL3 := SL[I]; Inc(I);
495
            NAL4 := SL[I]; Inc(I);
496
            NAL5 := SL[I]; Inc(I);
497
            NAL6 := SL[I]; Inc(I);
498
            NAL7 := SL[I]; Inc(I);
499
            Details := '';
500
            for I := I to SL.Count - 1 do
501
              Details := Details + SL[I] + ';';
502
            I := Length(Details);
503
            if Details[I] = ';' then
504
              Delete(Details, I, 1);
505
          finally
506
            SL.Free;
507
          end;
508
        end;
509
        if SS = '' then /////////////////////////////////////////
510
        begin
511
          NAL1 := '';
512
          NAL2 := '';
513
          NAL3 := '';
514
          NAL4 := '';
515
          NAL5 := '';
516
          NAL6 := '';
517
          NAL7 := '';
518
        end
519
        else
520
        begin
521
          if NAL1 = '' then NAL1 := '0';
522
          if NAL2 = '' then NAL2 := '0';
523
          if NAL3 = '' then NAL3 := '0';
524
          if NAL4 = '' then NAL4 := '0';
525
          if NAL5 = '' then NAL5 := '0';
526
          if NAL6 = '' then NAL6 := '0';
527
          if NAL7 = '' then NAL7 := '0';
528
        end;
529
      end;
530
    end;
531

532
    //1C
533
    s := INN + '/' + KPP + ' ';
534
    if AnsiStartsText(s, Name) then
535
      Name := AnsiMidStr(Name, Length(s) + 1, 160);
536
    s := INN + '\' + KPP + ' ';
537
    if AnsiStartsText(s, Name) then
538
      Name := AnsiMidStr(Name, Length(s) + 1, 160);
539

540
    s := INN2 + '/' + KPP2 + ' ';
541
    if AnsiStartsText(s, Name2) then
542
      Name2 := AnsiMidStr(Name2, Length(s) + 1, 160);
543
    s := INN2 + '\' + KPP2 + ' ';
544
    if AnsiStartsText(s, Name2) then
545
      Name2 := AnsiMidStr(Name2, Length(s) + 1, 160);
546

547
  finally
548
    PFile.Free;
549
  end;
550
end;
551

552
end.
553

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.