Имя: Пароль:
1C
1С v8
Парсинг выписки из Клиент-Банка по нескольким счетам
0 CepeLLlka
 
30.04.14
13:25
Добрый день ребята...
Помогите мне решить проблему с парсингом выписки из Клиент-Банка..


Итак..
Я парсю файл и заношу выписку в РС сведений...

Файл выписки имеет такой вид:

//Шапка
1CClientBankExchange
ВерсияФормата=1.01
Кодировка=Windows
Отправитель=КлиентБанк
Получатель=1C
ДатаСоздания=02.04.2014
ВремяСоздания=10:14:02
ДатаНачала=01.04.2014
ДатаКонца=01.04.2014

//Перечисление всех счетов выписки
РасчСчет=000000000000000000001
РасчСчет=000000000000000000002
РасчСчет=000000000000000000003
РасчСчет=000000000000000000004

//Остатки и обороты по каждому счету
СекцияРасчСчет
ДатаНачала=01.04.2014
ДатаКонца=01.04.2014
РасчСчет=00000000000000000001
НачальныйОстаток=0.00
ВсегоПоступило=0.00
ВсегоСписано=0.00
КонечныйОстаток=0.00
КонецРасчСчет
СекцияРасчСчет
ДатаНачала=01.04.2014
ДатаКонца=01.04.2014
РасчСчет=00000000000000000001
НачальныйОстаток=0.00
ВсегоПоступило=0.00
ВсегоСписано=0.00
КонечныйОстаток=0.00
КонецРасчСчет
СекцияРасчСчет
ДатаНачала=01.04.2014
ДатаКонца=01.04.2014
РасчСчет=00000000000000000001
НачальныйОстаток=0.00
ВсегоПоступило=0.00
ВсегоСписано=0.00
КонечныйОстаток=0.00
КонецРасчСчет
СекцияРасчСчет
ДатаНачала=01.04.2014
ДатаКонца=01.04.2014
РасчСчет=00000000000000000001
НачальныйОстаток=0.00
ВсегоПоступило=0.00
ВсегоСписано=0.00
КонечныйОстаток=0.00
КонецРасчСчет

//И наконец идут перечисления всех платежей участвующих в выписке в таком виде
СекцияДокумент=Платежное поручение
Номер=5
Дата=01.04.2014
Сумма=19683
ПлательщикСчет=00000000000000000001
ДатаСписано=01.04.2014
Плательщик=ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Ололо"
ПлательщикИНН=0101047620
ПлательщикКПП=010101001
ПлательщикРасчСчет=40702810242000003846
ПлательщикБанк1=ВОЛГО-ВЯТСКИЙ БАНК СБЕРБАНКА РОССИИ
ПлательщикБанк2=Г МОСКВА
ПлательщикБИК=043333303
ПлательщикКорсчет=30101810900000000603
ПолучательСчет=00000000000000000001
ДатаПоступило=01.04.2014
Получатель=ООО "Веревка и Мыло"
ПолучательИНН=0101020708
ПолучательКПП=010101001
ПолучательРасчСчет=00000000000000000001
ПолучательБанк1=ВОЛГО-ВЯТСКИЙ БАНК СБЕРБАНКА РОССИИ
ПолучательБанк2=Г МОСКВА
ПолучательБИК=043333303
ПолучательКорсчет=30101810900033333503
ВидПлатежа=Электронно
ВидОплаты=01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
Очередность=5
НазначениеПлатежа=Оплата страховой премии по счету
Код=
КонецДокумента


Мне нужно распарсить файл таким образом чтобы занести в РС все платежи в без повторений.

Повторения платежек в файле бывают в том случае, когда один счет присутствующий в файле платит на другой счет так-же присутствующий в файле. А мне как я писал выше нужно заносить их только единоразово.

Я сделал это проверяя уникальность по номеру...
Но оказалось что некоторые платежи дробятся из-за проведения их через картотеку(частями). Таким образом получается что некоторые платежи мне нужно заносить с одинаковыми номерами, но с разными суммами, и всё это может ещё повторится в этом файле и второй раз этот платёж уже загружать не надо..

Как быть в такой ситуации? Подскажите пожалуйста..
1 Maxus43
 
30.04.14
13:29
на один счет приход, на другой счет расход, записи две всё равно.
А что за регистр? зачем вобще?
2 vmv
 
30.04.14
13:30
измерения платежей в любой релегиозно правильной учетной системе

1. ДатаОплаты
2. ДатаДокумента
3. НомерДокумента
4. Р/С организации (наш)
5. Р/С Корреспондента (контрагента или наш при переводах)

вроде все, простынь в (0) не читал, наверняка там 90% бред
3 CepeLLlka
 
30.04.14
13:30
(1)Да всё верно, но как определить что приход, что расход? В файле никаких обозначений нет по этому поводу.
4 CepeLLlka
 
30.04.14
13:31
(2)Зря не читал... если бы прочитал, может быть что и понял..
5 vmv
 
30.04.14
13:32
+(2) ну и вид движения Приход/Расход, хотя даже в случае перевода, когда даты и номера документов идентичны - счета меняються местами, т.е. уникальность соблюдена и без вида движения.
6 CepeLLlka
 
30.04.14
13:32
(1)Регистр - Движения по РС. Хочу выписку хранить в базе.. вот
7 CepeLLlka
 
30.04.14
13:32
(5)Где счета меняются местами? :) Ты файл выписки видел вообще? :)
8 piter3
 
30.04.14
13:32
как может быть ВсегоСписано=0.00 если есть хоть одно списание со счета?
9 Maxus43
 
30.04.14
13:32
(3) как нет то? выдерни из файла эти 2 документа и тупо визуально сравни
10 vmv
 
30.04.14
13:33
(3) в файлах клиент банков обычно есть флаг Дт/Кт

в файлах 1С - это вид операции/вид документа
11 CepeLLlka
 
30.04.14
13:33
(8)Это пример.
(9)Выдернул, идентичны.
12 CepeLLlka
 
30.04.14
13:34
(10)В (0) я показал всё что есть в файле КБ, кроме строчки - "КонецФайла"
13 Maxus43
 
30.04.14
13:34
(11) получатель-отправитель сомтри естественно. От куда куда идёт - очевидно что приход-расход это оно и есть
14 CepeLLlka
 
30.04.14
13:35
(13)Там отображаются платёжки же..

Если ты делаешь платёж - Ты плательщик, он получает твой платёж там тоже ты плательщик..
15 Maxus43
 
30.04.14
13:36
(14) ну дак смотри счет.
загружай по каждому счету отдельно, если текущий счет отправитель - значит расход
16 vmv
 
30.04.14
13:37
(7) у меня в К-Б 10+ банков, где экспорт/импорт в дбф, хмл, тхт, в том числе и дос-кодировки, наверное я ничего не пониманимаю в КБ, если технология обработки любого файла дает на входе/выходе простую и достаточную модель данных - для всех одинаковую.

Причем, бюджеты, переводы, транзиты, валюты и т.д. обрабатываються как надо, а не как на это клали болт в стандотном КБ от 1С.
17 CepeLLlka
 
30.04.14
13:39
(16)Ну если ты разбираешься в обменах, то наверное уже заметил что у меня тут стандартный формат обмена от 1С.

(15)Что значит загружай по каждому счету отдельно?
У меня все счета сразу в одном файле..
18 vmv
 
30.04.14
13:39
надо ввести измерение "ПорядковыйНомерДокументаЧастичнойОплаты" для дробных платежей
19 CepeLLlka
 
30.04.14
13:40
(18)И как я определю где начинается дробная часть? По какому признаку?
20 vmv
 
30.04.14
13:42
(19) а для этого у тебя есть мозг и источник данных

другого пути решения в контексте постановки задачи нету
21 ДенисЧ
 
30.04.14
13:43
(20) У кого есть мозг??? У ТС?? Где ты его нашёл???
22 CepeLLlka
 
30.04.14
13:44
(21)Денис.. ты ведь умный парень.. подскажи чё-нибудь..
Ты ведь точно знаешь.. Не будь букой..
23 vmv
 
30.04.14
13:46
по данным источника я бы обратил внимание на ряды

НачальныйОстаток=0.00
ВсегоПоступило=0.00
ВсегоСписано=0.00
КонечныйОстаток=0.00

с целью определения цепочек дробных платежей, но также необходимо анализировать и историю платежей в интервале даты платежа по р/с платежки

Стандартный механизм К-Б 1С выглядит красиво, имеет много полей в служебных таблицах, но его практическое применение ограничено элементарными банковскими операциями ларька, увы
24 Maxus43
 
30.04.14
13:47
(17) короче, обработку сомтрел типовую КБ? там же нормально определяет входящий-исходящий, там допилисть надо чтоб не по одному счету, а по всем было, но всё равно основа типовая, файл проходит по счету, указанному в шапке, отсюда мы знаем направление движения денег
25 CepeLLlka
 
30.04.14
13:50
(24)Дело в том, что другой счёт тоже указан в шапке.. и по нему будет ещё одна платёжка..
Это оба наших счёта.
26 Maxus43
 
30.04.14
14:04
(25) в типовой обработке счет в шапке один (в шапке обработки) - по нему идёт анализ. Вместо счета в шапке обработки у тебя будет цикл по всем счетам из файла
27 Maxus43
 
30.04.14
14:04
я хз как ещё объяснить...
28 Maxus43
 
30.04.14
14:06
я переделывал типовую обработку на загрузку всех счетов одновременно из файла, получилось же... с теми же алгоритмами, их надо подрихтовать просто, в отладчике время провести, а не на форуме и т.д.
29 CepeLLlka
 
30.04.14
14:08
(27)Я понимаю тебя полностью.. Полностью понимаю...

Я не хочу обидеть :( Но ты не понял моей проблемы :(
30 Maxus43
 
30.04.14
14:14
(29)>(28), я загружал из одного файла так же, всё нормально, подрихтовал типовую. Чем твой случай отличается? у меня тоже переводы между своими счетами были
31 CepeLLlka
 
30.04.14
14:15
(30)Картотека была у тебя?
32 CepeLLlka
 
30.04.14
14:16
(30)Чтобы за место одного платежа в файле было 10 платежей с одинаковым номером и разными суммами, и порой повторяющимися и + ещё столько же по другому счету.
33 CepeLLlka
 
30.04.14
14:18
(30)Спасибо за отзывчивость в любом случае.. надеюсь что придумаю чё-нить..
34 Maxus43
 
30.04.14
14:31
(31) без картотеки...
35 Злопчинский
 
30.04.14
14:38
выписку по движению ДС между РС обычно показывают по тому счету, который стоит в Дт. потому как операция считается проршедшей только если доеньги ПОСТПИЛИ в место назначения.
36 Sol78
 
30.04.14
20:44
(32) а пример такого файла можешь куда-нибудь запилить?
37 Sol78
 
30.04.14
20:49
(3)  ко всему вышесказаному, есть ещё один определитель что приход, а что расход - наличие в секции либо ДатаСписано, либо Дата Поступило
38 CepeLLlka
 
30.04.14
21:18
(37)Есть такое, да.. про дату..
Но в ней только дата.. как она может мне помочь?
39 CepeLLlka
 
30.04.14
21:19
(38)Ааааааа точно! Либо списано, либо поступило..


(37)Я бы мог залить но файлы по 25к строк.. мне редактировать все данные в них чтобы лишнего не показать это я с ума сойду.. :(
40 CepeLLlka
 
30.04.14
21:28
(37)Посмарел на эти "ДатаСписано", "ДатаПоступило"

В файле две одинаковые платёжки, так как взаиморасчеты между нашими счетами. Они полностью идентичны..

СекцияДокумент=Платежное поручение
Номер=2113
Дата=09.04.2014
Сумма=241000
ПлательщикСчет=000000000000000000
ДатаСписано=09.04.2014
Плательщик=ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Верёвка и мыло"
ПлательщикИНН=000000000000000000
ПлательщикКПП=000000000000000000
ПлательщикРасчСчет=000000000000000000
ПлательщикБанк1=ВОЛГО-ВЯТСКИЙ БАНК СБЕРБАНКА РОССИИ
ПлательщикБанк2=Г МОСКВА
ПлательщикБИК=000000000000000000
ПлательщикКорсчет=000000000000000000
ПолучательСчет=000000000000000000
ДатаПоступило=09.04.2014
Получатель=ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Олололо"
ПолучательИНН=000000000000000000
ПолучательКПП=000000000000000000
ПолучательРасчСчет=000000000000000000
ПолучательБанк1=ВОЛГО-ВЯТСКИЙ БАНК СБЕРБАНКА РОССИИ
ПолучательБанк2=Г МОСКВА
ПолучательБИК=000000000000000000
ПолучательКорсчет=000000000000000000
ВидПлатежа=Электронно
ВидОплаты=01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
Очередность=5
НазначениеПлатежа=Оплата по договору процентного займа)
Код=
КонецДокумента


Не копирую это, а беру из файла другую и тоже заменяю данные, чтобы наглядно увидеть если что..


СекцияДокумент=Платежное поручение
Номер=2113
Дата=09.04.2014
Сумма=241000
ПлательщикСчет=000000000000000000
ДатаСписано=09.04.2014
Плательщик=ООО "Верёвка и мыло"
ПлательщикИНН=000000000000000000
ПлательщикКПП=000000000000000000
ПлательщикРасчСчет=000000000000000000
ПлательщикБанк1=ВОЛГО-ВЯТСКИЙ БАНК СБЕРБАНКА РОССИИ
ПлательщикБанк2=Г МОСКВА
ПлательщикБИК=000000000000000000
ПлательщикКорсчет=000000000000000000
ПолучательСчет=000000000000000000
ДатаПоступило=09.04.2014
Получатель=ОБЩЕСТВО С ОГРАНИЧЕННОЙ ОТВЕТСТВЕННОСТЬЮ "Олололо"
ПолучательИНН=000000000000000000
ПолучательКПП=000000000000000000
ПолучательРасчСчет=000000000000000000
ПолучательБанк1=ВОЛГО-ВЯТСКИЙ БАНК СБЕРБАНКА РОССИИ
ПолучательБанк2=Г МОСКВА
ПолучательБИК=000000000000000000
ПолучательКорсчет=000000000000000000
ВидПлатежа=Электронно
ВидОплаты=01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
Очередность=5
НазначениеПлатежа=Оплата по договору процентного займа
Код=
КонецДокумента
41 CepeLLlka
 
30.04.14
21:34
Странно.. отличаются поля - "Плательщик"
42 DjSpike
 
01.05.14
00:39
ты не можешь помочь вот с этой проблемой v8: УТ 10.3  и Эквайринг сбербанк (загрузка платежек)
43 Злопчинский
 
01.05.14
02:35
Блин, что будет если тупо сделать две выписки руками по разным РС, по операции перевода между своими же счетами. Не верю, что В БП такое не предусмотрено - должна отработать корректно. В других конфигах (а о какой конфиге идет речь у ТС?) - хз...
44 CepeLLlka
 
05.05.14
19:21
Изи оказалось..

Платёжки бегут в такой последовательности:
По порядку счетов что перечисляются в начале выписки
Затем, все списания с этого счета, потом все поступления на счет.

Вот.. я что-то не заметил сначала это просто..
Независимо от того, куда вы едете — это в гору и против ветра!