Один наш умница-программист сделал интерфейс импорта пп из текстового 1С-формата (ВТБ, СБРФ и т.п. банк-клиенты). Типы документов (переменная td) переопределите в зависимости от собственной БД. Пользуйтесь;)
Код: Выделить всё
VipInterface ImportSB Licensed (Free);
Interface ImportSB DoAccept;
var dd,nomer,summa,platsch1,platsch2,polsch1,polsch2,platinn,platname1,platbik,platbank,polinn,polname,polbik,polbank,nazn:string;
var statsost,platkpp,polkpp,kbk_,okato,pokosn,pokper,poknom,pokdat,poktip,vidopl,dd2,ochered:string;
var platrec,platbankrec,polrec,polbankrec:comp;
var s1,s2,s3,vid_:string;
var dat1,dat2,dat3:date;
var d1,d2,d3:double;
var i,j,k:integer;
var SourcePath,F_NAME:string;
var td:word;
var ifnext,ifend:boolean;
var str: array [1..37] of string;
Create view
as select * from plpor;
Create View Org
var inn: string
as select * from katorg
where ((inn==katorg.unn));
Create view bank
var bik,rs:string
as select * from katbank
where ((bik==katbank.mfo1 and rs==katbank.schet1));
Form Print_import( 'PrintImp.out' );
file hndFile;
Screen switch
Buttons
cmImport;
<<
<. Импорт .>
>>
end;
HandleEvent
cmInit:
{
}
cmImport:
{
nomer :='';
dd :='';
summa :='';
platsch1 :='';
platinn :='';
platname1 :='';
platbank :='';
platbik :='';
platsch2 :='';
polsch1 :='';
polinn :='';
polname :='';
polbank :='';
polbik :='';
polsch2 :='';
vidopl :='';
ochered :='';
nazn :='';
statsost :='';
platkpp :='';
polkpp :='';
kbk_ :='';
okato :='';
pokosn :='';
pokper :='';
poknom :='';
pokdat :='';
poktip :='';
td :=0;
ifnext :=true;
ifend :=false;
F_NAME := GetFileName('*.txt', 'Выберите файл');
if hndFile.OpenFile(F_NAME, stOpenRead) then
begin
message('Файл открыли');
while not hndFile.eof do
begin
while (s1<>OEM2ANSI('КонецРасчСчет'))and (ifnext=true) do hndFile.Readln(s1);
ifnext:=false;
j:=1;
while j<=37 do
begin
hndFile.Readln(s1);
if s1=oem2ansi('КонецФайла') then begin ifend:=true;break;end;
str[j]:=Ansi2oem(s1);
j:=j+1;
end;
j:=1;
while j<=37 do
begin
i:=pos('=',str[j]);
s2:=SubStr(str[j],1,i-1);
case s2 of
'Номер' :nomer :=Trim(Substr(str[j],i+1,255));
'Дата' :dd :=Trim(Substr(str[j],i+1,255));
'Сумма' :summa :=Trim(Substr(str[j],i+1,255));
'ПлательщикСчет' :platsch1 :=Trim(Substr(str[j],i+1,255));
'ПлательщикИНН' :platinn :=Trim(Substr(str[j],i+1,255));
'Плательщик1' :platname1 :=Trim(Substr(str[j],i+1,255));
'ПлательщикБанк1' :platbank :=Trim(Substr(str[j],i+1,255));
'ПлательщикБИК' :platbik :=Trim(Substr(str[j],i+1,255));
'ПлательщикКорсчет' :platsch2 :=Trim(Substr(str[j],i+1,255));
'ПолучательСчет' :polsch1 :=Trim(Substr(str[j],i+1,255));
'ПолучательИНН' :polinn :=Trim(Substr(str[j],i+1,255));
'Получатель1' :polname :=Trim(Substr(str[j],i+1,255));
'ПолучательБанк1' :polbank :=Trim(Substr(str[j],i+1,255));
'ПолучательБИК' :polbik :=Trim(Substr(str[j],i+1,255));
'ПолучательКорсчет' :polsch2 :=Trim(Substr(str[j],i+1,255));
'ВидПлатежа' :vidopl :=Trim(Substr(str[j],i+1,255));
'Очередность' :ochered :=Trim(Substr(str[j],i+1,255));
'НазначениеПлатежа' :nazn :=Trim(Substr(str[j],i+1,255));
'СтатусСоставителя' :statsost :=Trim(Substr(str[j],i+1,255));
'ПлательщикКПП' :platkpp :=Trim(Substr(str[j],i+1,255));
'ПолучательКПП' :polkpp :=Trim(Substr(str[j],i+1,255));
'ПоказательКБК' :kbk_ :=Trim(Substr(str[j],i+1,255));
'ОКАТО' :okato :=Trim(Substr(str[j],i+1,255));
'ПоказательОснования' :pokosn :=Trim(Substr(str[j],i+1,255));
'ПоказательПериода' :pokper :=Trim(Substr(str[j],i+1,255));
'ПоказательНомера' :poknom :=Trim(Substr(str[j],i+1,255));
'ПоказательДаты' :pokdat :=Trim(Substr(str[j],i+1,255));
'ПоказательТипа' :poktip :=Trim(Substr(str[j],i+1,255));
'СекцияДокумент' :vid_ :=Trim(Substr(str[j],i+1,255));
end;
j:=j+1;
end;
if vid_='Платежное требование' then td:=word(10199); //ВТБ П/Т
if (vid_='Платежное поручение')and (platinn<>'7723011906') then td:=(10188); //ВТБ П/П
if (vid_='Платежное поручение')and (platinn='7723011906') then td:=(0);//Собственные не закачиваем
set org.inn:=platinn;
if org.getfirst=TsOk then platrec:=org.katorg.nrec else platrec:=0;
set org.inn:=polinn;
if org.getfirst=TsOk then polrec:=org.katorg.nrec else polrec:=0;
set bank.bik:=platbik;
set bank.rs:=platsch1;
if bank.getfirst=TsOk then platbankrec:=bank.katbank.nrec else platbankrec:=0;
set bank.bik:=polbik;
set bank.rs:=polsch1;
if bank.getfirst=TsOk then polbankrec:=bank.katbank.nrec else polbankrec:=0;
if (polrec<>0) and (polbankrec<>0) and (platrec<>0) and (platbankrec<>0) and (td<>0) and (ifend<>true) then
begin
insert plpor set
plpor.tidk=td,
plpor.TIDKGAL=word(1),
plpor.VIDDK=0,
plpor.PRI=0,
plpor.DIRECT=1,//собственное
plpor.NODOK=nomer,
plpor.YEARDOC=year(strtodate(dd,'dd.mm.yyyy')),
plpor.DATVIP=strtodate(dd,'dd.mm.yyyy'),
plpor.DATOTS=strtodate(dd,'dd.mm.yyyy'),
plpor.DATOB=strtodate(dd,'dd.mm.yyyy'),
plpor.CPLAT=platrec,
plpor.CBANKPLAT=platbankrec,
plpor.FILBANKPLAT=platbank,
plpor.CPOL=polrec,
plpor.CBANKPOL=polbankrec,
plpor.FILBANKPOL=polbank,
plpor.CBANKKORR=0,
plpor.CGRUZOTP=0,
plpor.CGRUZPOL=0,
plpor.CPLATNEW=0,
plpor.SUMPLAT=summa,
plpor.CVAL=0,
plpor.SUMPLATV=summa,
plpor.DATAPOL='',
plpor.MONTH='',
plpor.NAMEPL1=substr(nazn,1,100),
plpor.NAMEPL2=substr(nazn,101,100),
plpor.NAMEPL3=substr(nazn,202,100),
plpor.DESCR='BEZ',
plpor.DESGR='1';
if td=10199 then Print_import.write('Платежное требование')
else
if td=10188 then Print_import.write('Платежное поручение')
Print_import.write(nomer);
Print_import.write(strtodate(dd,'dd.mm.yyyy'));
Print_import.write(double(summa));
Print_import.write(nazn);
end;
end;
message('OK');
Print_import.ShowFile;
CloseInterface(cmDefault);
end;
}
end;
end.
.Set name 'Print_import'
.fields
tipdoc:string
numdoc:string
datdoc:date
sumdoc:double
nazdoc:string
.endfields
.{
^ ^ ^ &'&&&&&&&&&&&&.&& ^
.}
.endform
.linkform 'importsb_mptus1' prototype is 'Print_import'
.fields
tipdoc
numdoc
datdoc
sumdoc
nazdoc
.endfields
.{
^ ^ ^ &'&&&&&&&&&&&&.&& ^
.}
.endform