tables
| hascharged | paid | 已收已付 |
| currentprocess | amount | 当前收款/付款 |
收款
| 520 | sale |
| 524 | sale_return |
| 845 | receivableadjust |
付款
| 532 | purchase |
| 536 | purchasereturn |
| 847 | payableadjust |
预收?
预付?
合作伙伴partnerbalance 按部门核算
| haspaid | 付款 |
| hascharged | 收款 |
| receivable | 应收 |
| payable | 应付 |
| advance_received | 预收 |
| advance+payment | 预付 |
x_e_UpdatePartnerBalance 更新合作伙伴余额
更新合作伙伴余额
参数
| noteId | 表单id |
| tableid | 表id |
| partnerId | 合作伙伴id |
| departmentId | 表单部门id |
| receivable | 应收 |
| payable | 应付 |
| advanceReceived | 预收 |
| advancePayment | 预付 |
PartnerBalance表结构
| IndexNo |
| partnerId | 合作伙伴Id |
| departmentId | 部门Id |
| initReceivableBalance | 初始化应收 |
| initAdvanceReceivedBalance | 初始化预收 |
| initPayableBalance | 初始化应付 |
| initAdvancePaymentBalance | 初始化预付 |
| receivableBalance | 应收 |
| payableBalance | 应付 |
| AdvanceReceivedBalance | 预收 |
| advanceReceivedBalance | 预付 |
更新各个相应字段
调价
x_e_adjustPrice
凭证
|借135库存科目
应付调整
1. 遍历明细更新收支类型余额
2. 更新合作伙伴余额
汇总明细收支类型科目和金额,根据类型0取负数,总金额取负数
凭证
| 借 收支类型科目和金额 | 金额 |
| 贷 204 应付 | 总金额 |
现金银行变动 x_e_BankInOut
银行存取款
x_e_MoveBank
转出和转入部门是否一致
一致情况
凭证
出现金银行部门->如现金银行部门
| 借 进现金或银行存款 | 总金额 |
| 贷 出现金或银行存款 | 总金额 |
不一致 出现金银行部门->入现金银行部门
| 借205内部应付 | 总金额 |
| 贷 出现金或银行存款 | 总金额 |
入现金银行部门->出现金银行部门
| 借 入现金或银行存款 | 总金额 |
| 贷 123内部应收 | 总金额 |
银行存取款
x_e_bankinout
调拨 x_e_allot
1. 遍历明细,执行出库和入库,出库更新aprice,入库更新加权平均价格,计算总成本
出仓库部门=入仓库部门
凭证
出部门->出部门
| 借135库存商品 | 总金额-总成本 |
| 贷 541 其它业务收入 | 总金额-总成品 |
不等于
出部门->入部门
| 借123 内部应收 | 总金额 |
| 借512 商品销售成本B | 成本 |
| 贷135库存商品 | 成本 |
| 贷502 | 库存销售收入B,总金额 |
入部门->出部门
工资单
x_e_salaryandbonus
更新收支类别余额
凭证
| 借511 管理费用 | 总金额 |
| 贷215 应付工资 | 总金额 |
应收调整
1. 遍历明细更新收支类型余额
2. 更新合作伙伴余额
汇总明细收支类型科目和金额,根据类型0取负数,总金额取负数
凭证
| 借 122 应收 | 总金额 |
| 贷 收支类型科目和金额 | 金额 |
x_e_purchaseReturn 采购退货
1. 遍历明细,更新库存,更新加权成本价,更新明细成本价格
2.
| total_amount |
| tax_total |
| goods_total |
| change_total | 成本价,注意获取方式,当退货导致数量为0时 |
凭证一
| 借135 库存商品 | 成本注意,已是负数 |
| 借 221002001 进项税 | 负 |
| 借 541 其它业务收入 | 负 goods_total-change_total |
| 贷 204 应付款 | 负total_amount |
凭证2
库存部门-部门
| 借135 | 成本负 |
| 借221002001 | tax_total负 |
| 借541 | goods_total-change_total负 |
| 贷205 内部应付 | total_amount负 |
凭证3
部门到库存部门
| 借123 内部应付 | total_amount负 |
| 贷135 | 成品负 |
| 贷221002001 | tax_total负 |
| 都541 | goods_total-change_total |
x_e_SaleReturn 销售退货
销售退货-退货入库不更新成本价格
遍历明细,更新库存,获取当前成本价格,更新成本价格
| goods_cost_total | 总成本 |
| total_amount | 总金额+税 |
| tax_total | 税 |
| goods_total | 总金额,不含税 |
减合作伙伴应付
凭证1
| 借122 应收账款 | || total_amount 乘-1
| 借511 商品销售成本 | goods_cost_total 乘-1 |
| 贷501 商品销售收入 | goods_total 乘-1 |
| 贷135 库存商品 | goods_cost_total乘-1 |
| 贷221002003 | tax_total乘-1 |
凭证2
仓库部门-部门
| 借 123 内部应收 | goods_cost_total乘-1 |
| 贷135 库存商品 | goods_cost_total乘-1 |
部门-仓库部门
| 借135 库存商品 | goods_cost_total乘-1 |
| 贷205 内部应付 | goods_cost_total乘-1 |
x_e_updategoodsStockBalance 更新商品数量/成本价返回成本价
参数
| noteId | 表单id |
| tableId | 表id |
| storeId | 仓库id |
| goodsid | 货品id |
| quantity | 数量 |
| price | 单价 |
| updateAPricetype | 0 不更新成本 1 按加权平均更新成本 3 仅更新价格 |
| output | 返回成本价 当updateApriceType为1时返回总金额,总数量乘传入的单价 |
不更新成本
如果传入quantity大于0 ,仅当前库存商品数量为0,金额为0时用price,quantity更新 传入小于0,则更新数量
返回当前成本
按加权平均更新成本
新数量=quantity+原数量
如果新数量大于0 ,计算新成本, (quantity*price+ 原数量原成本)/新数量
更新数量和成本价
如果新数量等于0 ,考虑采购退货后库存为0时,则仅更新数量
其它值,库存出现负数,报告错误
返回成本价
x_e_checkStockCanUse
参数
| tableid |
| goodsid |
| quantity | 单据的数量 |
| currentquantity | 库存数量 |
| currentonroad | 库存在途数量 |
出库时currentquantity -currentonroad 必须大于quantity
x_e_payment 采购付款
明细按单据类型分类
| detail_total | 全部金额汇总 |
| received_total | ||已收,单据类型 520 sale,524 salereturn ,854 receivableadjust)
| payment_total | 已付,单据类型532 purchase, 536 purchasereturn,847 payableadjust |
| advance_received | 预收 单据类型526 charge |
| advance_payment | 预付 单据类型538 payment |
| advance_payment+ @total_amount-@detail_title | 允许单据总金额不同于合计,这样多出的部分也算作预付 |
遍历付款明细
如果是526 charge 且单号是0,则更新合作伙伴 已收款-当前付款
如果是538 payment 且单号为0,则更新合作伙伴已付款+当前付款
如果是526 charge 且单号不为0,则更新charge.advance_received_process+当前付款
如果是538 payment 且单号不为0,则更新payment.advance_payment_process+当前付款
如果是532 purchase 且单号不为0, 则更新purchase.haspaid+当前付款
如果是536,且单号不为0,则更新purchasereturn.haspiad-当前付款
如果是847 payableadjust 且单号不为0则根据类型0 已付-当前付款,否则+当前付款
如果是520 sale ,且单号不为0,则sale.haschargd- 当前付款
如果是540 salereturn 且单号不为0,则salereturn.hascharged+当前付款
如果是845 receivableadjust,根据类型receivableadjust.hascharged+ 或-当前付款
凭证一
| 借 204 应付 | payment_total |
| 借126 预付款 | advance_payment |
| 贷 100 现金或银行存款 | total_amount |
| 122 应收账款 | received_total乘-1 |
| 贷 206 预付款 | advance_received 乘 -1 |
银行部门不等于单据部门
凭证2
部门到银行部门
| 借 现金或银行存款 | 总金额 |
| 贷 205 内部应付 | 总金额 |
凭证2
银行部门到部门
| 借123 内部应收 | 总金额 |
| 贷 现金或银行存款 | 总金额 |
x_e_charge 销售收款
c8/c9映射
| 表charge/chargedetail | sale_charge/sale_charge_line |
| currentprocess | amount列 |
| relationtable int | form_name nvarchar |
涉及单据列映射
在c8中,单据头只有总金额和已付/已收,所有的收款付款均在销售收款/销售付款中处理
比较搞,遍历收款明细
如果单据类型是520 sale并且单号是0,则视为期初应收, 合作伙伴的已付-当前付款
如果单据类型是532 purchase 并且单号是0 ,则视为期初应付 合作伙伴已付+当前金额
如果单据类型是526 charge并且单号不为0,则更新对应单据的预收记录 advancereceivedprocess
如果单据类型是538 payment并且单号不为0,则更新对应单据的预付字段 advancepaymentprocess
如果单据类型是520 sale并且单号不为0,则更新对应单据的hasCharge
如果单据类型是524 salereturn ,并且单号不为0则更新hascharged-currentprocess
如果单据是845 receivableadjust 并且单号不为0根据调整类型0 - ,其它加,更新对应单据的hascharged字段
如果单据是532 purchase,并且单号不为0,则更新对应单据的haspaid-currentprocess
如果单据是536 purchasereturn 并且单号不为0,则更新对应单据的haspaid+currentprocess
如果单据是847 并且单号不为0,根据调整类型0+,其它减payableadjust haspaid 字段
凭证一
| 借 101/102现金或银行存款 | 总金额 |
| 借 204 应付款 |
| 借 126 预付款 |
| 贷 122 应收款 |
| 贷 206 预收款 |
凭证二
部门->银行部门
| 借 123内部应收 | 总金额 |
| 贷 现金或银行存款 | 总金额 |
凭证三
银行部门->部门
| 借 现金或银行存款 | 总金额 |
| 贷205 内部应付 | 总金额 |
x_e_sale 执行销售单
1. 表sale/saledetail
2. 遍历saledetail,进行调用 x_e_updategoodsStockBalance 出库操作,计算总成本价格
3. 计算总金额(quantity*price+tax),tax,不含税金额
4. 用总金额更新合作伙伴应收款
5. 创建凭证1
6. 如果部门不等于仓库部门,创建凭证2,凭证3
凭证一
| 借 | 122应收 | 总金额 |
| 借 | 511商品销售成本 | 总成本 |
| 贷 | 501 商品销售收入 | 不含税金额 |
| 贷 | 135库存商品 | 总成本 |
| 贷 | 221002003 | tax |
凭证2
仓库部门->部门
| 借123内部应收 | 总成本 |
| 贷135库存商品 | 总成本 |
凭证3
部门->仓库部门
x_e_expense 费用开支
现金或银行存款科目根据现金银行的类型确定
1 合计总金额
2. 遍历明细,更新收入支出类别余额,获得收入支出每科目汇总
3. 创建凭证1
4. 如果银行部门不等于部门,创建凭证2,3
凭证1
| 贷 收入支出每科目汇总 | 每科目汇总金额,多条 |
| 借 现金或银行存款科目 | 总金额 |
凭证2
部门->现金银行部门
| 借 现金或银行存款科目 | 总金额 |
| 贷 205内部应付 | 总金额 |
凭证3
现金银行部门->部门
| 借 123 内受应收 | 总金额 |
| 贷 现金或银行存款科目 | ||总金额
x_e_InCome 其它收入
1. 合计总金额
2. 遍历明细,更新收入支出类别余额
凭证1
部门id=部门id
| 借现款或现金银行科目 | 总金额 |
| 贷 明细收支类别汇总金额多条 |
如果银行所属部门不等于部门
凭证2
部门到 银行部门
| 借 123 内部应收 | 总金额 |
| 贷 现款或现金银行科目 | 总金额 |
凭证3
银行部门到部门
| 借 现款或现金银行科目 | 总金额 |
| 贷 205 内部应收 | 总金额 |
x_e_purchase 采购单
传两个部门id
凭证1
| 借135库存商品 | 不含税金额 |
| 借221002001 进项税额 | tax |
| 贷204 应付账款 | 含税金额 |
凭证2
仓库部门id到部门id
| 借 135库存商品 | 不含税金额 |
| 借221002001 | 税金 |
| 贷205 内部应付 | 含税金额 |
凭证3
部门id到仓库部门id
| 借123内部应收 | 含税总金额 |
|贷135| 不含税 |
| 贷221002001 | 税 |
x_e_createcredence 创建凭证
参数
| noteid | 表单id |
| tableid | 表id |
| departmentId | 部门id |
| todepartment | 部门id |
| employeeid | 员工id |
| debitsubjectid1,debit1 - 4 | 借1到4,等于0 为没有 |
| creditsubjectid1,credit1-4 | 贷1到4,等于0,为没有 |
123,内部应收科目,205 内部应付科目
插入明细,更新对应科目余额
如果科目等于123/205,则调用x_e_updateToDepartmentBalance
x_e_updateToDepartmentBalance
参数
| departmentId |
| todepartmentId |
| receivable |
| payable |
从c8移值
c8 实现了按部门核算,所以,单独的通过科目表的余额字段无法表达各部门的不同,c8创建一个一系列xxxBalance表,在移值到c9的过程中,这部分加以保留
c9的业务逻辑大部分都是通过存储过程实现的,属于过程化的编程守法,很难一下子转到面对对象编程,为了保持项目进度,使用先移值再重构的方式
表 todepartmentBalance/department_rests
| id | id |
| parentId | parent_id |
| todeparmtnetId | department_id |
| initreceivableBalance | init_receivable |
| initpayableBalance | init_payable |
| payablebalance | payable |
| receivableBalance | receivable |
partnerbalance/partner_rests
| id | id |
| indexNo | 无 |
| parentid | partner_id |
| departmentid | department_id |
| initreceivablebalance | init_receivable |
| initpayableblance | init_payable |
| initadvancepaymentbalance | init_pre_paid |
| initadvancereceivedbalance | init_pre_received |
| receivablebalance | receivable |
| payableblanace | payable |
| advancereceivedbalance | pre_received |
| advancepaymentbanalce | pre_paid |
| haspaid | paid |
| hascharge | received |
bankbalance/bank_rests
| id | id |
| indexno | 无 |
| parentid | bank_id |
| departmentid | department_id |
| init_balance | init_rest |
| balance | rest |
| onroadbalance | on_road |
inouttypebalance/income_expense_type_rests
| id | id |
| indexno | 无 |
| parentid | income_expense_type_id |
| departmentid | department_id |
| initbalance | init_rest |
| balance | rest |
subjectbalance/subject_rests
| id | id |
| indexno | 无 |
| parentid | subject_id |
| departmentid | department_id |
| initbalance | init_rest |
| balance | rest |
存储过程移值 业务类型过程移动到workflow中成为实例方法
| x_e_UpdateSubjectBalance | update_subject_rest |
| x_e_UpdateBankBalance | update_bank_rest |
| x_e_CreateCredence | create_voucher |
| x_e_UpdateToDepartmentBalance | update_department_rest |
| x_e_CreateCredence | create_voucher |
| x_e_UpdateGoodsStockBalance | update_on_hand |
| x_e_checkStockCanUse | check_store_can_use |
| x_e_UpdatePartnerBalance | update_partner_rest |
| x_e_UpdateInOutTypeBalance | update_income_expense_type_rest |
| x_e_sale | sale_order |
| x_e_purchase | purchase_order |
| x_e_purchaseReturn | purchase_return |
| x_e_SaleReturn | sale_return |
| x_e_Income | income |
| x_e_expense | expense |
| x_e_UpdateBankOnRoad | update_bank_on_road |
| x_e_UpdateGoodsStockOnRoad | update_on_hand_on_road |
| x_e_adjustPrice | adjust_price |
| x_e_MoveBank | bank_move1,bank_move2 |
| x_e_BankInOut | bank_change |
| x_e_receivableadjust|receivable_adjust |
| x_e_payableadjust | payable_adjust |
| x_e_allot | allot1,allot2 |