Delphi-Projects
552 строки · 13.6 Кб
1unit PlatBlank;
2
3interface
4
5uses
6Windows, Messages, SysUtils, StrUtils, Classes, Graphics, Controls, Forms, Dialogs,
7IniFiles, Printers, ExtCtrls, CustomBlank;
8
9const
10Title = 'Банк-Клиент ЗАО "Сити Инвест Банк"';
11BIC1 = '044030702';
12Bank1 = 'ЗАО "СИТИ ИНВЕСТ БАНК"';
13Place1 = 'Г.САНКТ-ПЕТЕРБУРГ';
14KS1 = '30101810600000000702';
15VOP = '01';
16
17LineFeed = #13#10;
18
19type
20TPlatBlank = class(TCustomBlank)
21private
22{ Private declarations }
23protected
24{ Protected declarations }
25public
26{ Public declarations }
27DocNo: string;
28DocDate: string;
29Sum: string;
30Delivery: string;
31
32INN: string;
33Name: string;
34LS: string;
35BIC: string;
36Bank: string;
37Place: string;
38KS: string;
39
40INN2: string;
41Name2: string;
42LS2: string;
43BIC2: string;
44Bank2: string;
45Place2: string;
46KS2: string;
47
48Prior: string;
49Details: string;
50Sign1: string;
51Sign2: string;
52
53//since 01.06.2003
54KPP, KPP2: string;
55SS: string;
56NAL1, NAL2, NAL3, NAL4, NAL5, NAL6, NAL7: string;
57
58procedure DrawPage;
59procedure LoadFromFile(const FileName: string);
60constructor Create; overload; override;
61constructor Create(const FileName: string); overload;
62published
63{ Published declarations }
64end;
65
66implementation
67
68uses
69SumFuncs, Russian;
70
71{ TPlatBlank }
72
73constructor TPlatBlank.Create;
74begin
75inherited Create;
76TopMargin := 15;
77LeftMargin := 20;
78//Height := 205;
79
80DocDate := DateToStr(Now);
81BIC := BIC1;
82Bank := Bank1;
83Place := Place1;
84KS := KS1;
85end;
86
87constructor TPlatBlank.Create(const FileName: string);
88begin
89Create;
90LoadFromFile(FileName);
91end;
92
93procedure TPlatBlank.DrawPage;
94
95function NormalizeTax(const S: string): string;
96const
97TaxChar = '!';
98LineFeed = #10;
99begin
100Result := AnsiReplaceStr(S, ' ' + TaxChar, TaxChar);
101Result := AnsiReplaceStr(Result, TaxChar + ' ', TaxChar);
102Result := AnsiReplaceStr(Result, TaxChar, LineFeed);
103end;
104
105begin
106ResetFont('', 9);
107TV(160, 0, 178, 5, '0401060');
108RL(160, 0, 178, 5);
109RL(171, 13, 178, 20);
110
111TL( 5, 5, 'Поступ. в банк плат.');
112TL( 60, 5, 'Списано со сч. плат.');
113TL( 1, -35, 'Сумма');
114TL( 1, 35, 'прописью');
115TL( 1, -45, 'ИНН');
116TL( 51, -45, 'КПП');
117TL( 1, -70, 'Плательщик');
118TL( 1, -85, 'Банк плательщика');
119TL( 1,-100, 'Банк получателя');
120TL( 1,-105, 'ИНН');
121TL( 51,-105, 'КПП');
122TL( 1,-130, 'Получатель');
123TL( 1,-165, 'Назначение платежа');
124TC( 85, 20, 120, 'Дата');
125TC(125, 20, 160, 'Вид платежа');
126TL(101, -45, 'Сумма');
127TL(101, -60, 'Сч.№');
128TL(101, -75, 'БИК');
129TL(101, -80, 'Сч.№');
130TL(101, -90, 'БИК');
131TL(101, -95, 'Сч.№');
132TL(101,-105, 'Сч.№');
133TL(101,-120, 'Вид оп.');
134TL(101,-125, 'Наз.пл.');
135TL(101,-130, 'Код');
136TL(136,-120, 'Срок плат.');
137TL(136,-125, 'Очер.плат.');
138TL(136,-130, 'Рез.поле');
139TL( 71,-170, 'Подписи');
140TL(141,-170, 'Отметки банка');
141TL( 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
198ResetFont('', 11, '');
199TL( 1, -75, 99, Bank);
200TL( 1, -80, 99, Place);
201TL( 1, -90, 99, Bank2);
202TL( 1, -95, 99, Place2);
203
204ResetFont('', 12, '');
205TV(171, 13, 178, 20, SS);
206TL( 61, -20, DocNo);
207TC( 85, -20, 120, DocDate);
208// TC(125, -20, 160, Delivery);
209TB( 21, -35, 178, 40, RCurrToText(RStrToCurr(Sum)));
210TL(116, -46, RCurrToStr(RStrToCurr(Sum), '-'));
211
212TL( 11, -45, INN);
213TL( 61, -45, KPP);
214TB( 1, -50, 99, 65, NormalizeTax(Name));
215TL(116, -60, LS);
216TL(116, -75, BIC);
217TL(116, -80, KS);
218
219TL( 11,-105, INN2);
220TL( 61,-105, KPP2);
221TB( 1,-110, 99, 125, NormalizeTax(Name2));
222TL(116,-105, LS2);
223TL(116, -90, BIC2);
224TL(116, -95, KS2);
225
226//TL(156,-120, Srok);
227TL(156,-125, Prior);
228
229//TV( 0, 130, 45, 135, NAL1);
230TL( 1, -135, NAL1);
231TV( 45, 130, 75, 135, NAL2);
232TV( 75, 130, 85, 135, NAL3);
233TV( 85, 130, 110, 135, NAL4);
234TV(110, 130, 145, 135, NAL5);
235TV(145, 130, 170, 135, NAL6);
236TV(170, 130, 178, 135, NAL7);
237
238TB( 1,-140, 178, 160, NormalizeTax(Details));
239// TL( 51,-180, Sign1);
240// TL( 51,-195, Sign2);
241TL(116,-120, VOP);
242
243
244
245
246
247ResetFont('', 12, '');
248TL( 1, -20, 'ПЛАТЕЖНОЕ ПОРУЧЕНИЕ №');
249
250HL( 0, 5, 35);
251HL( 55, 5, 90);
252HL( 0, 40, 178);
253HL( 0, 45, 100);
254HL( 0, 70, 115);
255HL( 0, 85, 178);
256HL( 0, 100, 115);
257HL( 0, 105, 100);
258HL( 0, 130, 178);
259HL( 0, 135, 178);
260HL( 0, 165, 178);
261HL( 85, 20, 120);
262HL(125, 20, 160);
263HL(100, 55, 178);
264HL(100, 75, 115);
265HL(100, 90, 115);
266HL(100, 115, 178);
267HL(100, 120, 115);
268HL(100, 125, 115);
269HL(135, 120, 155);
270HL(135, 125, 155);
271HL( 50, 180, 110);
272HL( 50, 195, 110);
273
274VL( 20, 25, 40);
275VL( 50, 40, 45);
276VL(100, 40, 130);
277VL( 50, 100, 105);
278VL(115, 40, 130);
279VL(135, 115, 130);
280VL(155, 115, 130);
281VL( 45, 130, 135);
282VL( 75, 130, 135);
283VL( 85, 130, 135);
284VL(110, 130, 135);
285VL(145, 130, 135);
286VL(170, 130, 135);
287
288//DrawRulers;
289end;
290
291procedure TPlatBlank.LoadFromFile(const FileName: string);
292var
293PFile: TMemIniFile;
294Is866: Boolean;
295SL: TStringList;
296I: Integer;
297Ver: Integer;
298s: string;
299
300function NormalizeText(const S, S1, S2, S3, S4: string): string;
301begin
302if Length(S) > 0 then
303Result := S
304else if Length(S1) > 0 then
305begin
306if S1[1] = '^' then
307begin
308Result := Copy(S1, 2, 53) + Copy(S2, 2, 53) +
309Copy(S3, 2, 53) + Copy(S4, 2, 53);
310if Result[106] = Result[107] then //BUG correction!
311Delete(Result, 106, 1);
312end
313{else if Ver > 7 then //last releases only!
314Result = S1 + ' ' + S2 + ' ' + S3 + ' ' + S4
315}
316else begin
317if Length(S1) = 53 then
318Result := S1 + S2
319else
320Result := S1 + ' ' + S2;
321
322if Length(S2) = 53 then
323begin
324if (Length(S3) > 1) and (S2[53] = S3[1]) then //BUG correction!
325Delete(Result, Length(Result) - 1, 1);
326end
327else
328Result := Result + ' ';
329
330if Length(S3) = 53 then
331Result := Result + S3 + S4
332else
333Result := Result + S3 + ' ' + S4;
334end;
335end
336else
337Result := '';
338Result := Trim(Result);
339while Pos(' ', Result) > 0 do
340Delete(Result, Pos(' ', Result), 1);
341if Is866 then
342RDosToWin(Result);
343end;
344
345begin
346if ExtractFileDir(FileName) = '' then
347PFile := TMemIniFile.Create('.\' + FileName)
348else
349PFile := TMemIniFile.Create(FileName);
350try
351with PFile do
352begin
353Is866 := ReadString('File', 'CP', '866') = '866';
354Ver := ReadInteger('File', 'Ver', 0);
355
356DocNo := ReadString('Payment', 'No', '1');
357DocDate := RStrToDateStr(ReadString('Payment', 'Date',
358DateToStr(Date)));
359Sum := ReadString('Payment', 'Sum', '0-00');
360Prior := ReadString('Payment', 'Queue', '6');
361Details := NormalizeText(
362ReadString('Payment', 'Text', ''),
363ReadString('Payment', 'Text1', ''),
364ReadString('Payment', 'Text2', ''),
365ReadString('Payment', 'Text3', ''),
366ReadString('Payment', 'Text4', ''));
367
368//Sign1 := ReadString('From', 'Sign1', '');
369//Sign2 := ReadString('From', 'Sign2', '');
370INN := ReadString('From', 'INN', '');
371Name := ReadString('From', 'Name', '');
372LS := ReadString('From', 'LS', '');
373//BIC
374//Bank
375//Place
376//KS
377INN2 := ReadString('To', 'INN2', '');
378Name2 := ReadString('To', 'Name2', '');
379LS2 := ReadString('To', 'LS2', '');
380BIC2 := ReadString('To', 'BIC2', '');
381Bank2 := ReadString('To', 'Bank2', '');
382Place2 := ReadString('To', 'Place2', '');
383KS2 := ReadString('To', 'KS2', '');
384
385if Is866 then
386begin
387RDosToWin(Sign1);
388RDosToWin(Sign2);
389RDosToWin(INN);
390RDosToWin(Name);
391//Bank
392//Place
393RDosToWin(INN2);
394RDosToWin(Name2);
395RDosToWin(Bank2);
396RDosToWin(Place2);
397end;
398
399
400//since 01.06.2003
401if Ver >= 11 then
402begin
403KPP := ReadString('From', 'KPP', '0');
404KPP2 := ReadString('To', 'KPP2', '0');
405end
406else
407begin
408if AnsiLeftStr(Name, 3) = 'КПП' then
409begin
410SL := TStringList.Create;
411try
412SL.Text := AnsiReplaceStr(Name, ' ', LineFeed);
413if SL[0] = 'КПП' then
414begin
415KPP := SL[1];
416Name := '';
417for I := 2 to SL.Count - 1 do
418Name := Name + SL[I] + ' ';
419Name := Trim(Name);
420end;
421finally
422SL.Free;
423end;
424end;
425if AnsiLeftStr(Name2, 3) = 'КПП' then
426begin
427SL := TStringList.Create;
428try
429SL.Text := AnsiReplaceStr(Name2, ' ', LineFeed);
430if SL[0] = 'КПП' then
431begin
432KPP2 := SL[1];
433Name2 := '';
434for I := 2 to SL.Count - 1 do
435Name2 := Name2 + SL[I] + ' ';
436Name2 := Trim(Name2);
437end
438finally
439SL.Free;
440end;
441end;
442end;
443
444if Ver >= 11 then
445begin
446SS := ReadString('To', 'SS', '');
447if Length(SS) = 2 then
448begin
449NAL1 := ReadString('To', 'NAL1', '0');
450NAL2 := ReadString('To', 'NAL2', '0');
451NAL3 := RWin(ReadString('To', 'NAL3', '0'));
452NAL4 := RWin(ReadString('To', 'NAL4', '0'));
453NAL5 := RWin(ReadString('To', 'NAL5', '0'));
454NAL6 := ReadString('To', 'NAL6', '0');
455NAL7 := RWin(ReadString('To', 'NAL7', '0'));
456end;
457end
458else
459begin
460I := Pos(';', Details);
461if (Details[1] = '0') and (I = 3) then
462begin
463SL := TStringList.Create;
464try
465SL.Text := AnsiReplaceStr(Details, ';', LineFeed);
466I := 0;
467SS := SL[I]; Inc(I);
468NAL1 := SL[I]; Inc(I);
469NAL2 := SL[I]; Inc(I);
470NAL3 := SL[I]; Inc(I);
471NAL4 := SL[I]; Inc(I);
472NAL5 := SL[I]; Inc(I);
473NAL6 := SL[I]; Inc(I);
474NAL7 := SL[I]; Inc(I);
475Details := '';
476for I := I to SL.Count - 1 do
477Details := Details + SL[I] + ';';
478I := Length(Details);
479if Details[I] = ';' then
480Delete(Details, I, 1);
481finally
482SL.Free;
483end;
484end
485else if (I > 1) and (I < 20) then
486begin
487SL := TStringList.Create;
488try
489SL.Text := AnsiReplaceStr(Details, ';', LineFeed);
490I := 0;
491SS := '01'; /////////////////////////////////////////
492NAL1 := SL[I]; Inc(I);
493NAL2 := SL[I]; Inc(I);
494NAL3 := SL[I]; Inc(I);
495NAL4 := SL[I]; Inc(I);
496NAL5 := SL[I]; Inc(I);
497NAL6 := SL[I]; Inc(I);
498NAL7 := SL[I]; Inc(I);
499Details := '';
500for I := I to SL.Count - 1 do
501Details := Details + SL[I] + ';';
502I := Length(Details);
503if Details[I] = ';' then
504Delete(Details, I, 1);
505finally
506SL.Free;
507end;
508end;
509if SS = '' then /////////////////////////////////////////
510begin
511NAL1 := '';
512NAL2 := '';
513NAL3 := '';
514NAL4 := '';
515NAL5 := '';
516NAL6 := '';
517NAL7 := '';
518end
519else
520begin
521if NAL1 = '' then NAL1 := '0';
522if NAL2 = '' then NAL2 := '0';
523if NAL3 = '' then NAL3 := '0';
524if NAL4 = '' then NAL4 := '0';
525if NAL5 = '' then NAL5 := '0';
526if NAL6 = '' then NAL6 := '0';
527if NAL7 = '' then NAL7 := '0';
528end;
529end;
530end;
531
532//1C
533s := INN + '/' + KPP + ' ';
534if AnsiStartsText(s, Name) then
535Name := AnsiMidStr(Name, Length(s) + 1, 160);
536s := INN + '\' + KPP + ' ';
537if AnsiStartsText(s, Name) then
538Name := AnsiMidStr(Name, Length(s) + 1, 160);
539
540s := INN2 + '/' + KPP2 + ' ';
541if AnsiStartsText(s, Name2) then
542Name2 := AnsiMidStr(Name2, Length(s) + 1, 160);
543s := INN2 + '\' + KPP2 + ' ';
544if AnsiStartsText(s, Name2) then
545Name2 := AnsiMidStr(Name2, Length(s) + 1, 160);
546
547finally
548PFile.Free;
549end;
550end;
551
552end.
553