123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- $PBExportHeader$uf_update_warecost.srf
- global type uf_update_warecost from function_object
- end type
- forward prototypes
- global function integer uf_update_warecost (long arg_storageid, boolean arg_ifcommit, ref string arg_msg)
- end prototypes
- global function integer uf_update_warecost (long arg_storageid, boolean arg_ifcommit, ref string arg_msg);Int rslt = 1
- Int li_balctype
- SELECT balctype INTO :li_balctype
- FROM u_storage
- Where storageid = :arg_storageid;
- IF sqlca.SQLCode <> 0 THEN
- arg_msg = '查询仓库结存金额计算方法失败,不能结存'
- rslt = 0
- GOTO ext
- END IF
- CHOOSE CASE li_balctype
- CASE 0
- rslt = 1
- GOTO ext
- case 1
- case 2
- update u_inwaremx
- set u_inwaremx.fprice = u_mtrldef.planprice,
- u_inwaremx.price = u_mtrldef.planprice * u_inwaremx.rebate
- from u_inwaremx,u_inware,u_mtrldef
- where u_inwaremx.scid = u_inware.scid
- and u_inwaremx.inwareid = u_inware.inwareid
- and u_inwaremx.mtrlid = u_mtrldef.mtrlid
- and u_inware.flag = 1
- and u_inware.balcdateint = 0
- and u_inware.storageid = :arg_storageid;
- if sqlca.sqlcode <> 0 then
- arg_msg = '更新计划价为进仓价失败,'+sqlca.sqlerrtext
- rslt = 0
- goto ext
- end if
-
- update u_warebalc
- set u_warebalc.incamt = u_incamt_balc.incamt
- from u_warebalc,u_incamt_balc
- where u_warebalc.storageid = u_incamt_balc.storageid
- and u_warebalc.mtrlid = u_incamt_balc.mtrlid
- and u_warebalc.status = u_incamt_balc.status;
- if sqlca.sqlcode <> 0 then
- arg_msg = '更新进仓金额失败,'+sqlca.sqlerrtext
- rslt = 0
- goto ext
- end if
- case 3
- update u_inwaremx
- set u_inwaremx.fprice = u_mtrldef.planprice,
- u_inwaremx.price = u_mtrldef.planprice * u_inwaremx.rebate
- from u_inwaremx,u_inware,u_mtrldef
- where u_inwaremx.scid = u_inware.scid
- and u_inwaremx.inwareid = u_inware.inwareid
- and u_inwaremx.mtrlid = u_mtrldef.mtrlid
- and u_inwaremx.fprice = 0
- and u_inware.flag = 1
- and u_inware.balcdateint = 0
- and u_inware.storageid = :arg_storageid;
- if sqlca.sqlcode <> 0 then
- arg_msg = '更新计划价为进仓价失败,'+sqlca.sqlerrtext
- rslt = 0
- goto ext
- end if
-
- update u_warebalc
- set u_warebalc.incamt = u_incamt_balc.incamt
- from u_warebalc,u_incamt_balc
- where u_warebalc.storageid = u_incamt_balc.storageid
- and u_warebalc.mtrlid = u_incamt_balc.mtrlid
- and u_warebalc.status = u_incamt_balc.status;
- if sqlca.sqlcode <> 0 then
- arg_msg = '更新进仓金额失败,'+sqlca.sqlerrtext
- rslt = 0
- goto ext
- end if
- END CHOOSE
- UPDATE u_warebalc
- SET u_warebalc.desamt = round(u_warebalc.desqty * uv_warebalc_newoutcost.newoutcost,2),
- u_warebalc.balcamt = round(u_warebalc.balcqty * uv_warebalc_newoutcost.newoutcost,2)
- FROM u_warebalc INNER JOIN
- uv_warebalc_newoutcost ON
- u_warebalc.Storageid = uv_warebalc_newoutcost.Storageid AND
- u_warebalc.mtrlid = uv_warebalc_newoutcost.mtrlid AND
- u_warebalc.status = uv_warebalc_newoutcost.status
- Where (u_warebalc.balcdateint = 0) AND u_warebalc.storageid = :arg_storageid;
-
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新结存出仓金额及结存金额失败!>>'+sqlca.SQLErrText
- GOTO ext
- END IF
- UPDATE u_mtrlware
- SET wareamt = round(u_mtrlware.noallocqty * uv_warebalc_newoutcost.newoutcost,2),
- cost = uv_warebalc_newoutcost.newoutcost
- FROM u_mtrlware INNER JOIN
- uv_warebalc_newoutcost ON u_mtrlware.mtrlid = uv_warebalc_newoutcost.mtrlid AND
- u_mtrlware.storageid = uv_warebalc_newoutcost.Storageid AND
- u_mtrlware.Status = uv_warebalc_newoutcost.status
- Where u_mtrlware.storageid = :arg_storageid ;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新库存金额失败!>>'+sqlca.SQLErrText
- GOTO ext
- END IF
- UPDATE u_outwaremx
- SET costamt = round(u_outwaremx.qty * uv_warebalc_newoutcost.newoutcost,2)
- FROM u_outwaremx INNER JOIN
- u_outware ON u_outwaremx.scid = u_outware.scid AND
- u_outwaremx.outwareid = u_outware.outwareid INNER JOIN
- uv_warebalc_newoutcost ON
- u_outware.StorageID = uv_warebalc_newoutcost.Storageid AND
- u_outwaremx.mtrlid = uv_warebalc_newoutcost.mtrlid AND
- u_outwaremx.status = uv_warebalc_newoutcost.status
- Where (u_outware.billtype = 1) AND u_outware.storageid = :arg_storageid AND u_outware.flag = 1 AND u_outware.balcflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新销售单出仓成本失败!>>'+sqlca.SQLErrText
- GOTO ext
- END IF
- UPDATE u_outwaremx
- SET costamt = round(u_outwaremx.qty * uv_warebalc_newoutcost.newoutcost,2),
- u_outwaremx.fprice = uv_warebalc_newoutcost.newoutcost,
- u_outwaremx.price = uv_warebalc_newoutcost.newoutcost*u_outwaremx.rebate
- FROM u_outwaremx INNER JOIN
- u_outware ON u_outwaremx.scid = u_outware.scid AND
- u_outwaremx.outwareid = u_outware.outwareid INNER JOIN
- uv_warebalc_newoutcost ON
- u_outware.StorageID = uv_warebalc_newoutcost.Storageid AND
- u_outwaremx.mtrlid = uv_warebalc_newoutcost.mtrlid AND
- u_outwaremx.status = uv_warebalc_newoutcost.status
- Where (u_outware.billtype <> 1) AND u_outware.storageid = :arg_storageid AND u_outware.flag = 1 AND u_outware.balcflag = 0;
- IF sqlca.SQLCode <> 0 THEN
- rslt = 0
- arg_msg = '更新出仓成本失败!>>'+sqlca.SQLErrText
- GOTO ext
- END IF
- ext:
- IF rslt = 0 THEN
- ROLLBACK;
- ELSEIF rslt = 1 AND arg_ifcommit THEN
- COMMIT;
- END IF
- RETURN rslt
- end function
|