补历史申报、补审计工作底稿时,很多人会直接想“手工建一张就好”。但 Odoo 的 account.return.creation.wizard 并不是无脑开口子,而是对日期合法性、重复性和申报类型做了精细区分。
参考入口:
enterprise/account_reports/tests/test_account_returns.pyenterprise/account_reports/models/account_return.py
一、日期不符合周期时,系统先告警而不是默认放行
test_return_manual_creation_wizard_wrong_dates 说明,wizard 会通过 show_warning_wrong_dates 告诉你当前日期范围不符合 return type 的周期边界。比如月报却给了跨月不整齐区间,系统先提醒你“这不是标准期间”。
二、必要时可以强制 override,但这会改变后续报表选项
test_return_manual_creation_force_wrong_dates 证明,只要显式带 force_periodicity_violation=True,系统仍可生成非标准期间的 return,而且生成后的 report options 会切到 custom date filter。也就是说,override 不是偷偷放过,而是把“这是个例外期间”显式固化进报表上下文。
三、归档旧申报后,可以为同期间重建一张新的 active return
test_return_creation_for_archived_return_month 展示了很实用的边界:旧 return 归档后,同一期间可以再建一张新的 active return;但旧 return 不能再无脑 unarchive,否则会和新记录冲突。
四、audit return 和普通 account return 的重复策略不同
test_audit_manual_creation_allow_duplicates 说明 audit 类 return 允许同期间出现多份,而普通申报并不默认这样做。因为 audit 更像工作底稿或审阅版本,允许并行存在;法定申报则更强调唯一正式口径。
五、实战建议
- 手工建单前先确认你是“补正式申报”还是“补审计工作稿”。
- 归档旧单后重建新单是可行路径,但不要再把旧单强行 unarchive。
- 强制 override 只能解决特殊期问题,不能代替周期治理。
六、结论
Tax Return 的手工建单能力,不是给你绕开规则,而是给你在例外场景下仍能留下清晰语义:哪张是正式期间、哪张是归档替代、哪张只是 audit 副本。
DISCUSSION
评论区