Closed SamuelQZQ closed 3 years ago
咦我为什么在这里写了俩return,应该都是continue的啊
仔细看了一下……这里return False没有问题。
因为find_duplicate
是用于单笔交易的检测重复,而这里的逻辑和上面的注释说的一样,“unique_no存在但不同,那就绝对不是同一笔交易了,这个时候就直接返回不存在同订单”,因此逻辑没问题。
@zsxsoft 那段代码是在一个 for loop 里,你只判断了一个就直接 return,剩下的其他订单里有重复的怎么办....
@SamuelQZQ 这个函数是每一笔交易都会调用一次,不是攒齐了所有交易一口气deduplicate的
@zsxsoft For example:
find_duplicate 里有这个代码:
bql = "SELECT flag, filename, lineno, location, account, year, month, day, str(entry_meta('timestamp')) as timestamp, metas() as metas WHERE year = {} AND month = {} AND day = {} AND number(convert(units(position), '{}')) = {} ORDER BY timestamp ASC".format(
entry.date.year, entry.date.month, entry.date.day, currency, money)
items = query.run_query(self.entries, self.option_map, bql)
如果返回的 items
有多条,但在 for loop 里由于 return false
, 那么能够被检查到的永远只有第一条。
https://github.com/zsxsoft/my-beancount-scripts/blob/f90949f9758372dfb74500318e8ea20a27ea7bc6/modules/imports/deduplicate.py#L35
这一行应该是 continue?
(感谢分享这些脚本,非常有用)