1
bank1c.php in common – MultiMag

source: common/bank1c.php @ fc24318

Last change on this file since fc24318 was fc24318, checked in by Blacklight <blacklight@…>, 4 years ago
  • В интерфейсе прослушивания записей разговоров добавлено использование поля fname, а так же реализована поддержка нескольких типов расширений файлов записей
  • Добавлен модуль перекодирования записей телефонных разговоров. В данный момент поддерживается только opus.
  • Property mode set to 100644
File size: 11.7 KB
Line 
1<?php
2//      MultiMag v0.2 - Complex sales system
3//
4//      Copyright (C) 2005-2018, BlackLight, TND Team, http://tndproject.org
5//
6//      This program is free software: you can redistribute it and/or modify
7//      it under the terms of the GNU Affero General Public License as
8//      published by the Free Software Foundation, either version 3 of the
9//      License, or (at your option) any later version.
10//
11//      This program is distributed in the hope that it will be useful,
12//      but WITHOUT ANY WARRANTY; without even the implied warranty of
13//      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14//      GNU Affero General Public License for more details.
15//
16//      You should have received a copy of the GNU Affero General Public License
17//      along with this program.  If not, see <http://www.gnu.org/licenses/>.
18//
19
20/// Класс парсера и генератора банковских выписок в формате обмена 1С
21class Bank1CExchange {
22
23    var $rs = '';
24   
25    function __construct() {
26    }
27   
28    /// Анализировать строку документа
29    protected function parseDocumentLineold($name, $value, $params) {
30        switch ($name) {
31            case 'Номер':
32                $params['docnum'] = $value;
33                break;
34            case 'ДатаПроведения':
35                $params['date'] = $value;
36                break;
37            case 'БИК':
38                $params['bik'] = $value;
39                break;
40            case 'Счет':
41                $params['schet'] = $value;
42                break;
43            case 'КорреспондентБИК':
44                $params['kbik'] = $value;
45                break;
46            case 'КорреспондентСчет':
47                $params['kschet'] = $value;
48                break;
49            case 'ДебетСумма':
50                $params['debet'] = $value;
51                break;
52            case 'КредитСумма':
53                $params['kredit'] = $value;
54                break;
55            case 'НазначениеПлатежа':
56                $params['desc'] = $value;
57                break;
58            case 'РасчСчет':
59                $params['rs'] = $value;
60                break;
61        }
62        return $params;
63    }
64   
65    protected function parseDocumentLinev100($name, $value, $params) {
66        return $this->parseDocumentLinev101($name, $value, $params);
67    }
68   
69    protected function parseDocumentLinev101($name, $value, $params) {
70        switch ($name) {
71            // Шапка
72            case 'Номер':
73                $params['docnum'] = $value;
74                break;
75            case 'Дата':
76                $params['date'] = $value;
77                break;
78            case 'ДатаПоступило':
79                $params['p_date'] = $value;
80                break;
81            case 'ДатаСписано':
82                $params['s_date'] = $value;
83                break;
84            case 'Сумма':
85                $params['sum'] = $value;
86                break;
87            // Плательщик
88            case 'ПлательщикСчет':
89                $params['src']['rs'] = $value;
90                break;
91            case 'ПлательщикИНН':
92                $params['src']['inn'] = $value;
93                break;
94            case 'ПлательщикКПП':
95                $params['src']['kpp'] = $value;
96                break;
97            case 'Плательщик1':
98                $params['src']['name'] = $value;
99                break;
100            case 'ПлательщикБанк1':
101                $params['src']['bank_name'] = $value;
102                break;
103            case 'ПлательщикРасчСчет':
104                $params['src']['krs'] = $value;
105                break;
106            case 'ПлательщикБИК':
107                $params['src']['bik'] = $value;
108                break;
109            case 'ПлательщикКорсчет':
110                $params['src']['ks'] = $value;
111            // Получатель
112            case 'ПолучательСчет':
113                $params['dst']['rs'] = $value;
114                break;
115            case 'ПолучательИНН':
116                $params['dst']['inn'] = $value;
117                break;
118            case 'ПолучательКПП':
119                $params['dst']['kpp'] = $value;
120                break;
121            case 'Получатель1':
122                $params['dst']['name'] = $value;
123                break;
124            case 'ПолучательБанк1':
125                $params['dst']['bank_name'] = $value;
126                break;
127            case 'ПолучательРасчСчет':
128                $params['dst']['rs'] = $value;
129                break;
130            case 'ПолучательБИК':
131                $params['dst']['bik'] = $value;
132                break;
133            case 'ПолучательКорсчет':
134                $params['dst']['ks'] = $value;
135                break;
136            // Хвост
137            case 'ВидОплаты':
138                $params['vid'] = $value;
139                break;
140            case 'НазначениеПлатежа':
141                $params['desc'] = $value;
142                break;
143        }
144        return $params;
145    }
146   
147    protected function parseDocumentLinev102($name, $value, $params) {
148        switch ($name) {
149            // Шапка
150            case 'Номер':
151                $params['docnum'] = $value;
152                break;
153            case 'Дата':
154                $params['date'] = $value;
155                break;
156            case 'ДатаПоступило':
157                $params['p_date'] = $value;
158                break;
159            case 'ДатаСписано':
160                $params['s_date'] = $value;
161                break;
162            case 'Сумма':
163                $params['sum'] = $value;
164                break;
165            // Плательщик
166            case 'ПлательщикСчет':
167                $params['src']['rs'] = $value;
168                break;
169            case 'ПлательщикИНН':
170                $params['src']['inn'] = $value;
171                break;
172            case 'ПлательщикКПП':
173                $params['src']['kpp'] = $value;
174                break;
175            case 'Плательщик':
176                $params['src']['name'] = $value;
177                break;
178            case 'ПлательщикРасчСчет':
179                $params['src']['krs'] = $value;
180                break;
181            case 'ПлательщикБИК':
182                $params['src']['bik'] = $value;
183                break;
184            case 'ПлательщикБанк1':
185                $params['src']['bank_name'] = $value;
186                break;
187            case 'ПлательщикКорсчет':
188                $params['src']['ks'] = $value;
189            // Получатель
190            case 'ПолучательСчет':
191                $params['dst']['rs'] = $value;
192                break;
193            case 'ПолучательИНН':
194                $params['dst']['inn'] = $value;
195                break;
196            case 'ПолучательКПП':
197                $params['dst']['kpp'] = $value;
198                break;
199            case 'Получатель':
200                $params['dst']['name'] = $value;
201                break;
202            case 'ПолучательРасчСчет':
203                $params['dst']['rs'] = $value;
204                break;
205            case 'ПолучательБИК':
206                $params['dst']['bik'] = $value;
207                break;
208            case 'ПолучательБанк1':
209                $params['dst']['bank_name'] = $value;
210                break;
211            case 'ПолучательКорсчет':
212                $params['dst']['ks'] = $value;
213                break;
214            // Хвост
215            case 'ВидОплаты':
216                $params['vid'] = $value;
217                break;
218            case 'ВидПлатежа':
219                $params['vid_p'] = $value;
220                break;
221            case 'НазначениеПлатежа':
222                $params['desc'] = $value;
223                break;
224        }
225        return $params;
226    }
227   
228    /// @biref Парсер выписки
229    /// Бросает исключение, если идентификатор не соответствует формату
230    function Parse($raw_data) {
231        $params = array();
232        $parsed_data = array();
233        $parsing = false;
234        $first_line = 1;
235        $version = 0;
236        foreach ($raw_data as $line) {
237            // Кодировку, установленную в файле не учитываем, т.к. параметр кодировки назван кириллицей. Получается, что для чтения кодировки нужно знать кодировку.
238            $line = iconv('windows-1251', 'UTF-8', $line);
239            $line = trim($line);
240            if($first_line) {
241                if($line != '1CClientBankExchange') {
242                    throw new \Exception('Файл не является банковской выпиской в формате 1C!');
243                }
244                $first_line = 0;
245            }
246            else {
247                $pl = explode("=", $line, 2);
248                switch($pl[0]) {                   
249                    case 'ВерсияФормата':
250                        $version = trim($pl[1]);
251                        break;
252                    case 'СекцияРасчСчет':
253                            $parsing = true;
254                            $params = array();
255                            $params['type'] = 'rs';
256                        break;
257                    case 'КонецРасчСчет':
258                        if ($parsing) {
259                            if(isset($parsed_data['rs'])) {
260                                $this->rs = $parsed_data['rs'];
261                            }
262                            $parsing = false;
263                        }
264                        break;
265                    case 'СекцияДокумент':
266                        if ($pl[1] == "Платёжное поручение" || $pl[1] == "Платежное поручение" || $pl[1] == "Банковский ордер") {
267                            $parsing = true;
268                            $params = array();
269                            $params['type'] = 'pp';
270                        }   
271                        break;
272                    case 'КонецДокумента':
273                        if ($parsing) {
274                            $parsed_data[] = $params;
275                            $parsing = false;
276                        }
277                        break;
278                    default:
279                        if($parsing) {
280                            switch($version) {
281                                case '1.00':
282                                    $params = $this->parseDocumentLinev100($pl[0], $pl[1], $params);
283                                    break;
284                                case '1.01':
285                                    $params = $this->parseDocumentLinev101($pl[0], $pl[1], $params);
286                                    break;
287                                case '1.02':
288                                    $params = $this->parseDocumentLinev102($pl[0], $pl[1], $params);
289                                    break;
290                                default:
291                                    throw new \Exception("неподдерживаемая версия формата: $version");
292                            }
293                           
294                        }
295                }
296            }
297        }
298        return $parsed_data;
299    }
300
301}
Note: See TracBrowser for help on using the repository browser.