目前,我正在开发一个导入脚本,该脚本使用php将银行帐户数据导入MySQL数据库。我找到了一些mt940软件,但是他们没有做我想做的事情,或者不符合当前的MT940标准。所以我写了我自己的简单类,它解析了我需要的数据。
问题不是,这甚至可能不是MT940问题,是我必须过滤双重事务。在基本情况下,这非常简单,如果数据库中已经存在完全相同的事务,则不要再次导入。这就是我所做的。
,但现在有趣的是:某些事务可能在同一天发生两次。例如,有人在同一天做两次相同的交易,有人可能会喜欢我,只给我寄两次钱;)虽然这是第一次导入,但没有问题。在一个文件中,每个事务都是一个事务。
但是现在的问题是:,因为事务不是唯一的(MT940不会为事务发送任何唯一的),所以很难从唯一的事务中筛选出一个双重事务。因此,如果我已经从我的银行帐户下载了两个MT940文件。两个事务中的一个在第一个文件中,另一个在第二个文件中。当导入第二个文件时,它现在会告诉我事务是一个双事务。
所以..。我在为这件事而挣扎,而且我可能不是唯一一个。此外,大型会计程序的使用MT940结构和必须处理的相同问题。
谁知道怎么处理这件事?
附加信息
在交易本身(:61:)中,可获得以下信息:
如果有人做了两次交易,所有这些信息都是相同的。
两个双事务的例子(当然,我修改了事务的名称和银行帐户):(这个在一个MT940文件中是双倍的,但实际上是两个事务)。
:61:130311C000000000029,95N122NONREF
0123456789
:86:/ORDP//NAME/JANSEN W H/ADDR/SOMEROAD 1 9569 GS THECITY/REMI/N
OKIA 3310/ISDT/2013-03-11发布于 2013-07-22 09:36:32
假设您有3个事务: A、B和C。
A和B是重复的,因此必须丢弃B。
C是一个不同的事务,但在各个方面都与A相同。
根据你在问题中提供的数据,A=B= C是真的,它们是完全相同的。没有办法,通过阅读他们的内容,谁是真实的,谁是复制的。下列每一种情况都可能有效:
正如你所看到的,没有任何算法能百分之百地决定哪一种情况是正确的。既然我们说的是钱,所有不能百分之百确定的事情都不能被接受。
那该怎么办呢?
如果一台电脑无法判断,那就让人类开始行动吧。记录冲突时,请编译列表。处理所有没有冲突的东西,当您完成批处理后,将冲突列表发送给一个人工操作符,让他/她从真正的事务中整理副本(即使我仍然想知道如果它们在各个方面是相同的,它们如何排序)
如果你发现运算符知道如何排序,试着推导出他们的人工算法,如果可能的话。
发布于 2015-03-19 14:28:09
MT940声明信息有期初和期末余额,对吗?因此,如果你有一张包含两个相同交易的报表,银行账户余额就会反映出这一点。
如果您“清理”出现重复的数据,这并不意味着事务没有发生。如果您正在进行这种清理,以便将940中的数据放入一个数据库,该数据库存在唯一的约束冲突,不允许发布相同的事务,那么这可能会在稍后出现问题--或者,如果有人将数据库中事务的总和与语句中的结束余额进行比较,则可能会出现问题。
一种更好的方法可能是生成一些额外的密钥信息(可能会增加每个语句行的序列号),您可以添加这些信息来区分其他明显相同的事务,并在不违反约束的情况下将它们加载到数据库中。
发布于 2016-05-14 08:42:25
一个答案指出,mt940消息包含一个起始(和结束)平衡。在遍历消息时,使用起始余额信息为每个事务创建当前余额。将当前余额与事务的值日期以及帐户代码一起使用,以创建唯一标识符。例如,您可以将它们连接起来,并使用编程语言提供的任何函数来创建MD5哈希。
https://stackoverflow.com/questions/17783228
复制相似问题