銀行取引明細書とPHP-簡単です

「1Cアカウンティング」には、銀行システムとテキスト情報を交換するための形式があります。 銀行が組織の口座の明細書を提供するのは、この形式です。



少し前のプロジェクトの1つで、そのようなステートメントを「解析」して処理する必要がありました。 次に、インターネットを検索したところ、見た目が悪いか、既成のソリューションを共有したくないということがわかりました。



1CのWebサイトにアクセスして、経験が浅いプログラマでもフォーマットが非常にシンプルで理解しやすいことがわかりました。



抽出ファイルは、単純なテキストドキュメントです。



ファイル例
1CClientBankExchange =1.02 =Windows =C  - = ,  4.4 =27.11.2013 =27.11.2014 =12345678901234567890  =27.11.2013 =27.11.2014 =12345678901234567890 =0 =68770 =68770 =0  =  =1 =26.12.2013 =1000 =26.12.2013 = =12345678901234567890 = 778899001122    () = 778899001122 1=   () =12345678901234567890 1=  "" 2=.  =044525201 =98765432198765432100 =98765432198765432100 =89765456787654345678 = 7765434566\775001001   "" =7765434566 1=  "" =89765456787654345678 1=  "" 2=.  =044525201 =98765432198765432100 =17 =        ""  =  =176 =26.12.2013 =4770 = = 7725747515\772501001  "" =7725747515 =40702810822000034869 1= "" =40702810822000034869 1= " " () 2=.  =044525976 =30101810500000000976 =26.12.2013 = 778899001122     =778899001122 =12345678901234567890 1=    =12345678901234567890 1=  "" 2=.  =044525201 =98765432198765432100 =01 =26.12.2013 =5 = 1  26  (     )   .  =  =1 =10.01.2014 =20 =10.01.2014 = =12345678901234567890 = 778899001122    () =778899001122 1=   () =12345678901234567890 1=  "" 2=.  =044525201 =98765432198765432100 =70601810200021210220 = 7765434566\775001001   "" =7765434566 1=  "" =70601810200021210220 1=  "" 2=.  =044525201 =98765432198765432100 =17 =        =  =1 =10.01.2014 =3500 =10.01.2014 = 778899001122\772801001    () =778899001122 =12345678901234567890 1=   () =12345678901234567890 1=  "" 2=.  =044525201 =98765432198765432100 = = 7707704692\772801001  "   " =7707704692 =40702810000760001497 1= "   " =40702810000760001497 1= " " 2=.  =044525219 =30101810500000000219 =01 =01 =772801001 =772801001 =00000000000000000000 =0 =0 =0 =0 =10.01.2014 =0 =10.01.2014 =5 = 3500.00,  ..  - 388,99  
      
      







したがって、ドキュメントがテキストの場合、「解析」は簡単です。 ファイル内のデータは次の形式で表示されます。



  = 
      
      





したがって、ファイルを文字列の配列として取得し、この配列の循環を開始するだけで十分です。 便宜上、パーサーはオブジェクトの配列を返します。



Document.php-宛先ルールを持つドキュメントモデル
 <?php namespace bank; class Document { public $doctype; public $inbankid; public $docdate; public $summ; public $outdate; public $indate; public $payeraccount; public $payerinfo; public $payerinn; public $payer; public $payerdealaccount; public $payerbank1; public $payerbank2; public $payerbik; public $payerfixaccount; public $recieveraccount; public $recieverinfo; public $recieverinn; public $reciever1; public $recieverdealaccount; public $recieverbank1; public $recieverbank2; public $recieverbik; public $recieverfixaccount; public $paytype; public $paydirection; public $makerstatus; public $payerkpp; public $recieverkpp; public $showerkbk; public $okato; public $showerfundament; public $showerperiod; public $showernumber; public $showerdate; public $showertype; public $paymentperiod; public $quenue; public function __construct() { } public function rules($rule) { $rules = [ '' => 'doctype', '' => 'inbankid', '' => 'docdate', '' => 'summ', '' => 'outdate', '' => 'indate', '' => 'payeraccount', '' => 'payerinfo', '' => 'payerinn', '1' => 'payer', '' => 'payerdealaccount', '1' => 'payerbank1', '2' => 'payerbank2', '' => 'payerbik', '' => 'payerfixaccount', '' => 'recieveraccount', '' => 'recieverinfo', '' => 'recieverinn', '1' => 'reciever1', '' => 'recieverdealaccount', '1' => 'recieverbank1', '2' => 'recieverbank2', '' => 'recieverbik', '' => 'recieverfixaccount', '' => 'paytype', '' => 'paydirection', '' => 'makerstatus', '' => 'payerkpp', '' => 'recieverkpp', '' => 'showerkbk', '' => 'okato', '' => 'showerfundament', '' => 'showerperiod', '' => 'showernumber', '' => 'showerdate', '' => 'showertype', '' => 'paymentperiod', '' => 'quenue', ]; return $rules[$rule]; } public function set($section, $param) { $rulled = $this->rules($section); $this->$rulled = $param; } } ?>
      
      







Bank.php-ドキュメントパーサークラス
 <?php include 'Document.php'; //   class Bank { protected $documents; //    ""  //       function __construct($fileaddr) { $maas = file($fileaddr); //      $documents = []; //       $docid = 0; //   ID   0 foreach ($maas as $key => $value) { //    $value2 = rtrim($value); //        $value2 = mb_convert_encoding($value2, "utf-8", "windows-1251"); //    utf-8      windows-1251 $result = explode('=', $value2); //     =>  if (count($result) == 2) { //     if ($result[0] == '') { //        $workflow = new Document(); //   } if (isset($workflow)) { //    $workflow->set($result[0], $result[1]); //  ,  } } else { //    if ($result[0] == '') { //      $documents[$docid] = $workflow; //      $docid++; //  } } } $this->documents = $documents; //       } function getDocs() { return $this->documents; //     } } ?>
      
      







検証コード
 <?php include 'Bank.php'; //  $file = 'export_to_1c.txt'; //    $bank = new Bank($file); //   $docs = $bank->getDocs(); //    var_dump($docs);//    ?>
      
      







クラスでは交換形式の微妙な違いを考慮していないため、一部の大規模プロジェクトでこの「パーサー」を使用することはお勧めしません。

エラー処理もありません。 このクラスは教育目的でのみ作成されたもので、天才であると主張するものではありませんが、出発点としての私の観点からは、非常に適しています。



ご静聴ありがとうございました。コメントをありがとうございます。



All Articles