$PBExportHeader$uo_apportion.sru forward global type uo_apportion from nonvisualobject end type end forward global type uo_apportion from nonvisualobject end type global uo_apportion uo_apportion type variables Int uo_option_inware_sc_location Int uo_option_scll_plan_wsaudit end variables forward prototypes public function integer uof_add_apportion_time (long arg_atid, long arg_wrkgrpid, long arg_pmonth, datetime arg_firstdate, datetime arg_enddate, string arg_opemp, ref string arg_msg) public function integer uof_del_apportion_time (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_cp (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_pd (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_mtrl (long arg_atid, ref string arg_msg) public function integer uof_checkdate (long arg_wrkgrpid, datetime arg_firstdate, datetime arg_enddate, ref string arg_msg) public function integer uof_audit_apportion_time (long arg_atid, integer arg_flag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_balc_apportion_time (long arg_atid, integer arg_flag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_get_pdb_cost (long arg_atid, long arg_storageid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_cost, ref string arg_msg) public function integer uof_cmpl_apportion_item_ft (long arg_atid, ref string arg_msg) public function integer uof_del_apportion_item_ft (long arg_atid, ref string arg_msg) public function integer uof_lastaudit (long arg_atid, ref string arg_msg) public function integer uof_c_lastaudit (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_item_ft_mtrl (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_cp_ft (long arg_atid, ref string arg_msg) public function integer uof_del_apportion_cp_ft (long arg_atid, ref string arg_msg) public function integer uof_cmp_apportion_abnormityamt (long arg_atid, ref string arg_msg) public function integer uof_cmp_apportion_abnormityamt_ft (long arg_atid, ref string arg_msg) public function integer uof_del_apportion_abnormity_ft (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_item_ft_gz (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_cost (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_cp_ft_zqty (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_item_ft_zqty (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_glgz (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_glgz_ft (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_glgz_ft_zqty (long arg_atid, ref string arg_msg) public function integer uof_del_apportion_glgz_ft (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_item_ft_amt (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_item_ft_zamt (long arg_atid, ref string arg_msg) public function integer uof_cmp_apportion_abnormityamt_ft_zqty (long arg_atid, ref string arg_msg) public function integer uof_cmp_apportion_abnormityamt_ft_amt (long arg_atid, ref string arg_msg) public function integer uof_cmp_apportion_abnormityamt_ft_zamt (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_glgz_ft_amt (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_glgz_ft_zamt (long arg_atid, ref string arg_msg) public function integer uof_cmpl_apportion_item (long arg_atid, integer arg_ifoutware, ref string arg_msg) private function integer uof_update_apportion_mtrl (long arg_atid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlname, decimal arg_orderqty, decimal arg_orderamt, decimal arg_cost, decimal arg_orqty, decimal arg_oramt, decimal arg_inqty, decimal arg_inamt, decimal arg_balcqty, decimal arg_balcamt, decimal arg_outqty_pk, decimal arg_outamt_pk, decimal arg_outqty_scllplan, decimal arg_outamt_scllplan, decimal arg_outqty_fl, decimal arg_outamt_fl, decimal arg_outqty_tl, decimal arg_outamt_tl, decimal arg_outqty_bl, decimal arg_outamt_bl, ref string arg_msg, boolean arg_ifcommit) public function integer uof_cmpl_apportion_jjgz (long arg_atid, decimal arg_jjgzamt, ref string arg_msg) end prototypes public function integer uof_add_apportion_time (long arg_atid, long arg_wrkgrpid, long arg_pmonth, datetime arg_firstdate, datetime arg_enddate, string arg_opemp, ref string arg_msg);Int rslt = 1 Long ll_newid Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_sc_wkp Where wrkGrpid = :arg_wrkGrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt = 0 THEN arg_msg = '车间资料不存在,请检查' rslt = 0 GOTO ext END IF IF cnt > 1 THEN arg_msg = '车间资料重复,请检查' rslt = 0 GOTO ext END IF IF arg_pmonth = 0 THEN arg_msg = '请输入正确的核算月份' rslt = 0 GOTO ext END IF IF arg_enddate < arg_firstdate THEN arg_msg = '盘点结束日期小于开始日期' rslt = 0 GOTO ext END IF IF arg_atid = 0 THEN // SELECT count(*) INTO :cnt // FROM u_apportion_time // Where enddate > :arg_firstdate // and wrkGrpid = :arg_wrkGrpid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询开始日期之后是否有盘点操作失败' // rslt = 0 // GOTO ext // END IF // // IF cnt > 0 THEN // arg_msg = '开始日期之后已有盘点' // rslt = 0 // GOTO ext // END IF ll_newid = f_sys_scidentity(0,"u_apportion_time","atid",arg_msg,TRUE,id_sqlca) IF ll_newid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO u_apportion_time (atid,wrkGrpid,firstdate,enddate,pmonth,opdate,opemp) VALUES (:ll_newid,:arg_wrkGrpid,:arg_firstdate,:arg_enddate,:arg_pmonth,getdate(),:arg_opemp); IF sqlca.SQLCode <> 0 THEN arg_msg = "建立盘点日期操作失败!"+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE // SELECT count(*) INTO :cnt FROM u_apportion_time // WHERE enddate > :arg_firstdate // AND atid <> :arg_atid // and wrkGrpid = :arg_wrkGrpid; // IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询开始日期之后是否有盘点操作失败' // rslt = 0 // GOTO ext // END IF // // IF cnt > 0 THEN // arg_msg = '开始日期之后已有盘点' // rslt = 0 // GOTO ext // END IF UPDATE u_apportion_time SET firstdate = :arg_firstdate, enddate = :arg_enddate, pmonth = :arg_pmonth Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "更新盘点日期操作失败!"+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_del_apportion_time (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_disflag,li_itemauditflag,li_lastauditflag,li_glgzflag,li_balcflag,li_auditflag SELECT disflag, itemauditflag, lastauditflag, glgzflag, balcflag, auditflag INTO :li_disflag, :li_itemauditflag, :li_lastauditflag, :li_glgzflag, :li_balcflag, :li_auditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该盘点是否已分摊失败' rslt = 0 GOTO ext END IF IF li_balcflag = 1 THEN arg_msg = '已经确认,不能删除' rslt = 0 GOTO ext END IF if li_auditflag = 1 then arg_msg = '已经盘点审核,不能删除' rslt = 0 GOTO ext END IF IF li_disflag = 1 THEN arg_msg = '该盘点已分摊,不能删除' rslt = 0 GOTO ext END IF IF li_itemauditflag = 1 THEN arg_msg = '该盘点已费用分摊,不能删除' rslt = 0 GOTO ext END IF IF li_glgzflag = 1 THEN arg_msg = '该盘点已管理工资分摊,不能删除' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '该盘点已终审,不能删除' rslt = 0 GOTO ext END IF DELETE FROM u_apportion_cp Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期相关成品统计数操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM u_apportion_mtrl Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期相关材料统计数操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM u_apportion_item_ft Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除指令费用分摊表操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM u_apportion_cp_ft Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除材料分摊表操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmpl_apportion_cp (long arg_atid, ref string arg_msg);Int rslt = 1 Long cnt,ll_wrkGrpid DateTime firstdate,enddate Int li_balcflag,li_auditflag Long li_pmonth Long ll_i Long ll_scid,ll_orderid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode,ls_pfcode Decimal ld_planprice Decimal ld_mcrate,ld_pmrate datastore ds_cmp ds_cmp = Create datastore ds_cmp.DataObject = 'ds_apportion_cp_cmp_price' ds_cmp.SetTransObject(sqlca) Select firstdate,enddate,wrkGrpid,balcflag,auditflag,pmonth Into :firstdate,:enddate,:ll_wrkGrpid,:li_balcflag,:li_auditflag,:li_pmonth From u_apportion_time Where atid = :arg_atid; If sqlca.SQLCode <> 0 Then arg_msg = '查询盘点资料失败 - 开始日期,结束日期' rslt = 0 Goto ext End If If li_balcflag = 0 Then arg_msg = '盘点未确认,不能操作' rslt = 0 Goto ext End If //If li_auditflag = 1 Then // arg_msg = '盘点已审核,不能操作' // rslt = 0 // Goto ext //End If Select mcrate,pmrate Into :ld_mcrate,:ld_pmrate From u_sc_wkp Where wrkGrpid = :ll_wrkGrpid; If sqlca.SQLCode <> 0 Then arg_msg = '查询车间成本属性失败,'+sqlca.sqlerrtext rslt = 0 Goto ext End If Delete u_apportion_cp Where atid = :arg_atid; If sqlca.SQLCode <> 0 Then arg_msg = '删除成品统计失败,'+sqlca.SQLErrText rslt = 0 Goto ext End If Select count(*) Into :cnt From u_inwaremx,u_inware Where u_inware.inwareid = u_inwaremx.inwareid And u_inware.scid = u_inwaremx.scid And u_inware.flag = 0 And u_inware.indate >= :firstdate And u_inware.indate <= :enddate And u_inware.relid = :ll_wrkGrpid And u_inware.billtype = 3; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的生产进仓单操作失败! ~n'+sqlca.SQLErrText Goto ext End If If cnt > 0 Then arg_msg = '当前盘点时间范围存在没有审核的生产进仓单!' rslt = 0 Goto ext End If Insert Into u_apportion_cp (atid,mtrlid,status,woodcode,pcode,pfcode,qty,price,orderid,scid,mcrate,pmrate) Select :arg_atid, u_inwaremx.mtrlid, u_inwaremx.status, u_inwaremx.woodcode, u_inwaremx.pcode, u_order_ml.pfcode, sum(u_inwaremx.qty), AVG(u_inwaremx.price), u_order_ml.orderid, u_order_ml.scid, :ld_mcrate, :ld_pmrate From u_inwaremx, u_inware, u_order_ml Where u_inware.scid = u_inwaremx.scid And u_inware.inwareid = u_inwaremx.inwareid And u_inwaremx.scid = u_order_ml.scid And u_inwaremx.relid = u_order_ml.orderid And u_inware.flag = 1 And u_inware.billtype = 3 And u_inware.indate >= :firstdate And u_inware.indate <= :enddate And u_order_ml.wrkgrpid = :ll_wrkGrpid Group By u_inwaremx.mtrlid, u_inwaremx.status, u_inwaremx.woodcode, u_inwaremx.pcode, u_order_ml.orderid, u_order_ml.scid, u_order_ml.pfcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从生产进仓单读取车间产量失败! ~n'+sqlca.SQLErrText Goto ext End If //INSERT INTO u_apportion_cp // (atid,mtrlid,status,woodcode,pcode,pfcode,qty,price,orderid,scid) // SELECT distinct :arg_atid,u_order_ml.mtrlid,u_order_ml.status,u_order_ml.woodcode,u_order_ml.pcode,u_order_ml.pfcode,0,0,u_order_ml.orderid,u_order_ml.scid // FROM u_outwaremx INNER JOIN // u_outware ON u_outwaremx.scid = u_outware.scid AND // u_outwaremx.outwareid = u_outware.outwareid INNER JOIN // u_Order_ml ON u_outwaremx.relid = u_Order_ml.OrderID AND // u_outwaremx.scid = u_Order_ml.scid // WHERE (u_outware.billtype = 3) // AND (u_outware.flag = 1) // AND (u_order_ml.wrkgrpid = :ll_wrkGrpid) // AND (u_outware.outdate >= :firstdate) // AND (u_outware.outdate <= :firstdate) // AND (NOT EXISTS // (SELECT * // FROM u_apportion_cp // WHERE u_apportion_cp.scid = u_outware.scid AND // u_apportion_cp.orderid = u_outwaremx.relid AND // u_apportion_cp.mtrlid = u_outwaremx.mtrlid AND // u_apportion_cp.status = u_outwaremx.status AND // u_apportion_cp.woodcode = u_outwaremx.woodcode AND // u_apportion_cp.pcode = u_outwaremx.pcode AND // u_apportion_cp.atid = :arg_atid)); //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '从生产领料单读取车间产量失败! ~n'+sqlca.SQLErrText // GOTO ext //END IF Insert Into u_apportion_cp (atid,mtrlid,status,woodcode,pcode,pfcode,qty,price,orderid,scid,mcrate,pmrate) Select DISTINCT :arg_atid,u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, u_Order_ml.pcode, u_Order_ml.pfcode, 0,0,u_Order_ml.OrderID, u_Order_ml.scid,:ld_mcrate,:ld_pmrate From (Select u_sc_taskwork.orderid, u_sc_taskwork.scid From u_sc_taskwork Inner JOIN u_sc_taskworkmx ON u_sc_taskwork.billid = u_sc_taskworkmx.Billid And u_sc_taskwork.scid = u_sc_taskworkmx.scid Inner JOIN u_Order_ml ON u_sc_taskwork.scid = u_Order_ml.scid And u_sc_taskwork.orderid = u_Order_ml.OrderID Where (u_sc_taskwork.orderid > 0) And (u_sc_taskwork.Wagemth = :li_pmonth) And ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) Union All Select u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2.scid From u_scwg_taskwork_2_mx Inner JOIN u_scwg_taskwork_2 ON u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid Inner JOIN u_Order_ml ON u_scwg_taskwork_2.scid = u_Order_ml.scid And u_scwg_taskwork_2_mx.orderid = u_Order_ml.OrderID Where (u_scwg_taskwork_2_mx.orderid > 0) And (u_scwg_taskwork_2.Wagemth = :li_pmonth) And ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) Union All Select u_scwg_taskwork_day_mx.orderid, u_scwg_taskwork_day.scid From u_scwg_taskwork_day_mx Inner JOIN u_scwg_taskwork_day ON u_scwg_taskwork_day_mx.billid = u_scwg_taskwork_day.billid Inner JOIN u_Order_ml ON u_scwg_taskwork_day.scid = u_Order_ml.scid And u_scwg_taskwork_day_mx.orderid = u_Order_ml.OrderID Where (u_scwg_taskwork_day_mx.orderid > 0) And (u_scwg_taskwork_day.Wagemth = :li_pmonth) And ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) ) v_scwg Inner JOIN u_Order_ml ON v_scwg.scid = u_Order_ml.scid And v_scwg.orderid = u_Order_ml.OrderID Where (Not Exists (Select * From u_apportion_cp Where u_apportion_cp.scid = u_Order_ml.scid And u_apportion_cp.orderid = u_Order_ml.orderid And u_apportion_cp.mtrlid = u_Order_ml.mtrlid And u_apportion_cp.status = u_Order_ml.status_mode And u_apportion_cp.woodcode = u_Order_ml.woodcode And u_apportion_cp.pcode = u_Order_ml.pcode And u_apportion_cp.atid = :arg_atid)); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '从计件单读取车间产量失败! ~n'+sqlca.SQLErrText Goto ext End If //更新折算套数 Update u_apportion_cp Set zqty = case isnull(v_total_taskwork.Amt,0) when 0 then 0 else round(isnull(v_sum_taskwork.amt,0) / isnull(v_total_taskwork.Amt,0),2) End From u_apportion_cp LEFT Outer JOIN (Select u_sc_taskwork.orderid, u_sc_taskwork.scid, SUM(ROUND(dbo.u_sc_taskworkmx.Amount * dbo.u_sc_taskworkmx.Workprice, 2)) AS Amt From u_sc_taskwork Inner JOIN u_sc_taskworkmx ON u_sc_taskwork.billid = u_sc_taskworkmx.Billid And u_sc_taskwork.scid = u_sc_taskworkmx.scid Inner JOIN u_Order_ml ON u_sc_taskwork.scid = u_Order_ml.scid And u_sc_taskwork.orderid = u_Order_ml.OrderID Where (u_sc_taskwork.orderid > 0) And (u_Order_ml.wrkGrpid = :ll_wrkgrpid) Group By u_sc_taskwork.orderid, u_sc_taskwork.scid Union All Select u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2.scid, SUM(round(qty * price, 2)) AS amt From u_scwg_taskwork_2_mx Inner JOIN u_scwg_taskwork_2 ON u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid Inner JOIN u_Order_ml ON u_scwg_taskwork_2.scid = u_Order_ml.scid And u_scwg_taskwork_2_mx.orderid = u_Order_ml.OrderID Where (u_scwg_taskwork_2_mx.orderid > 0) And (u_Order_ml.wrkGrpid = :ll_wrkgrpid) Group By u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2.scid Union All Select u_scwg_taskwork_day_mx.orderid, u_scwg_taskwork_day.scid, SUM(round(qty * price, 2)) AS amt From u_scwg_taskwork_day_mx Inner JOIN u_scwg_taskwork_day ON u_scwg_taskwork_day_mx.billid = u_scwg_taskwork_day.billid Inner JOIN u_Order_ml ON u_scwg_taskwork_day.scid = u_Order_ml.scid And u_scwg_taskwork_day_mx.orderid = u_Order_ml.OrderID Where (u_scwg_taskwork_day_mx.orderid > 0) And (u_Order_ml.wrkGrpid = :ll_wrkgrpid) Group By u_scwg_taskwork_day_mx.orderid, u_scwg_taskwork_day.scid) v_total_taskwork ON u_apportion_cp.scid = v_total_taskwork.scid And u_apportion_cp.orderid = v_total_taskwork.orderid LEFT Outer JOIN (Select u_sc_taskwork.orderid, u_sc_taskwork.scid, SUM(ROUND(dbo.u_sc_taskworkmx.Amount * dbo.u_sc_taskworkmx.Workprice, 2)) AS Amt From u_sc_taskwork Inner JOIN u_sc_taskworkmx ON u_sc_taskwork.billid = u_sc_taskworkmx.Billid And u_sc_taskwork.scid = u_sc_taskworkmx.scid Inner JOIN u_Order_ml ON u_sc_taskwork.scid = u_Order_ml.scid And u_sc_taskwork.orderid = u_Order_ml.OrderID Where (u_sc_taskwork.orderid > 0) And (u_sc_taskwork.Wagemth = :li_pmonth) And (u_Order_ml.wrkGrpid = :ll_wrkgrpid) Group By u_sc_taskwork.orderid, u_sc_taskwork.scid Union All Select u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2.scid, SUM(round(qty * price, 2)) AS amt From u_scwg_taskwork_2_mx Inner JOIN u_scwg_taskwork_2 ON u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid Inner JOIN u_Order_ml ON u_scwg_taskwork_2.scid = u_Order_ml.scid And u_scwg_taskwork_2_mx.orderid = u_Order_ml.OrderID Where (u_scwg_taskwork_2_mx.orderid > 0) And (u_scwg_taskwork_2.Wagemth = :li_pmonth) And (u_Order_ml.wrkGrpid = :ll_wrkgrpid) Group By u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2.scid Union All Select u_scwg_taskwork_day_mx.orderid, u_scwg_taskwork_day.scid, SUM(round(qty * price, 2)) AS amt From u_scwg_taskwork_day_mx Inner JOIN u_scwg_taskwork_day ON u_scwg_taskwork_day_mx.billid = u_scwg_taskwork_day.billid Inner JOIN u_Order_ml ON u_scwg_taskwork_day.scid = u_Order_ml.scid And u_scwg_taskwork_day_mx.orderid = u_Order_ml.OrderID Where (u_scwg_taskwork_day_mx.orderid > 0) And (u_scwg_taskwork_day.Wagemth = :li_pmonth) And (u_Order_ml.wrkGrpid = :ll_wrkgrpid) Group By u_scwg_taskwork_day_mx.orderid, u_scwg_taskwork_day.scid) v_sum_taskwork ON u_apportion_cp.orderid = v_sum_taskwork.orderid And u_apportion_cp.scid = v_sum_taskwork.scid Where u_apportion_cp.atid = :arg_atid ; If sqlca.SQLCode = -1 Then rslt = 0 arg_msg = '更新折算数量失败! ~n'+sqlca.SQLErrText Goto ext End If //按物料计划价更新由计件单生成的数据 ds_cmp.Retrieve(arg_atid) For ll_i = 1 To ds_cmp.RowCount() ll_scid = ds_cmp.Object.scid[ll_i] ll_orderid = ds_cmp.Object.orderid[ll_i] ll_mtrlid = ds_cmp.Object.mtrlid[ll_i] ls_status = ds_cmp.Object.status[ll_i] ls_woodcode = ds_cmp.Object.woodcode[ll_i] ls_pcode = ds_cmp.Object.pcode[ll_i] ls_pfcode = ds_cmp.Object.pfcode[ll_i] ld_planprice = 0 f_get_planprice_mtrl(ll_mtrlid,ls_status,ls_woodcode,ls_pcode,ld_planprice) Update u_apportion_cp Set price = :ld_planprice Where atid = :arg_atid And scid = :ll_scid And orderid = :ll_orderid And mtrlid = :ll_mtrlid And status = :ls_status And woodcode = :ls_woodcode And pcode = :ls_pcode And pfcode = :ls_pfcode; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新单价失败,'+sqlca.SQLErrText Goto ext End If Next //INSERT INTO u_apportion_cp // (atid,mtrlid,status,woodcode,pcode,pfcode,qty,price,orderid,scid) // SELECT DISTINCT :arg_atid,u_Order_ml.mtrlid, u_Order_ml.status_mode, u_Order_ml.woodcode, // u_Order_ml.pcode, u_Order_ml.pfcode, 0,0,u_Order_ml.OrderID, u_Order_ml.scid // FROM u_Order_ml INNER JOIN // u_data_collect INNER JOIN // u_sc_task ON u_data_collect.taskid = u_sc_task.taskid AND // u_data_collect.scid = u_sc_task.scid ON u_Order_ml.scid = u_sc_task.scid AND // u_Order_ml.OrderID = u_sc_task.orderid // WHERE (NOT EXISTS // (SELECT * // FROM u_apportion_cp // WHERE u_apportion_cp.scid = u_Order_ml.scid AND // u_apportion_cp.orderid = u_Order_ml.orderid AND // u_apportion_cp.mtrlid = u_Order_ml.mtrlid AND // u_apportion_cp.status = u_Order_ml.status_mode AND // u_apportion_cp.woodcode = u_Order_ml.woodcode AND // u_apportion_cp.pcode = u_Order_ml.pcode AND // u_apportion_cp.atid = :arg_atid)) // AND ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) // and (u_data_collect.opdate >= :firstdate) // and (u_data_collect.opdate <= :enddate); //IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '从注塑质检单读取车间产量失败! ~n'+sqlca.SQLErrText // GOTO ext //END IF UPDATE u_apportion_time SET cpamt = a.amt FROM u_apportion_time, (SELECT u_apportion_cp.atid,sum(round(u_apportion_cp.qty * u_apportion_cp.price,2)) as amt FROM u_apportion_cp WHERE u_apportion_cp.atid = :arg_atid GROUP BY u_apportion_cp.atid ) a WHERE u_apportion_time.atid = a.atid And u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新核算表产值金额失败'+sqlca.SQLErrText GOTO ext END IF ext: If rslt = 0 Then Rollback; Else Commit; End If Destroy ds_cmp; Return rslt end function public function integer uof_cmpl_apportion_pd (long arg_atid, ref string arg_msg);Int rslt = 1 Long cnt,i,ll_rowcnt Long ll_mtrlid,ll_storageid,ll_scid,ll_pmonth DateTime ldt_enddate Long ll_mtrlwareid String ls_pdbdate String ls_mtrlcode String ls_status,ls_woodcode,ls_pcode Decimal ld_qty,ld_newprice Int li_balcflag,li_auditflag string ls_location IF uo_option_inware_sc_location = -1000 THEN rslt = 0 arg_msg = '选项:[151]车间领料进仓仓位按工组名称,读取初始默认值失败,操作取消!' GOTO ext END IF datastore ds_pd ds_pd = CREATE datastore SELECT balcflag,auditflag INTO :li_balcflag,:li_auditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询确认标记失败' rslt = 0 GOTO ext END IF IF li_balcflag = 0 THEN arg_msg = '盘点未确认,不能统计' rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN arg_msg = '盘点已审核,不能统计' rslt = 0 GOTO ext END IF SELECT u_sc_wkp.storageid, u_apportion_time.pmonth, u_apportion_time.enddate, u_sc_wkp.scid INTO :ll_storageid, :ll_pmonth, :ldt_enddate, :ll_scid FROM u_sc_wkp,u_apportion_time WHERE u_sc_wkp.wrkGrpid = u_apportion_time.wrkGrpid AND u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间盘点资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_storageid = 0 THEN arg_msg = '车间未设置车间仓库,请检查' rslt = 0 GOTO ext END IF ls_pdbdate = String(ldt_enddate,'yyyymmdd') SELECT count(*) INTO :cnt FROM u_ws_pd WHERE u_ws_pd.flag = 0 AND u_ws_pd.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的车间盘点单失败!' GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的车间盘点单!' rslt = 0 GOTO ext END IF UPDATE u_warepdb SET factqty = 0 Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '清除盘点表盘点数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ds_pd.DataObject = 'ds_ws_pd' ds_pd.SetTransObject(sqlca) ll_rowcnt = ds_pd.Retrieve(arg_atid) //Open(w_sys_wait_jdt) //初始化进度条 // //w_sys_wait_jdt.Show() //w_sys_wait_jdt.wf_accepttol(ll_rowcnt) // FOR i = 1 TO ll_rowcnt ll_mtrlid = ds_pd.Object.u_ws_pd_mx_cmpl_mtrlid[i] ls_mtrlcode = ds_pd.Object.u_mtrldef_mtrlcode[i] ls_status = ds_pd.Object.u_ws_pd_mx_cmpl_status[i] ls_woodcode = ds_pd.Object.u_ws_pd_mx_cmpl_woodcode[i] ls_pcode = ds_pd.Object.u_ws_pd_mx_cmpl_pcode[i] ld_qty = ds_pd.Object.u_ws_pd_mx_qty[i] IF uo_option_inware_sc_location = 1 THEN ls_location = ds_pd.Object.location[i] ELSE ls_location = '' END IF SELECT price INTO :ld_newprice FROM v_maxprice_sptprice Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode = -1 THEN arg_msg = '物料:'+ls_mtrlcode+',查询最新价失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 THEN ld_newprice = 0 END IF // w_sys_wait_jdt.st_msg.Text = ls_mtrlcode+" 正在更新盘点数..." //进度信息 UPDATE u_warepdb SET factqty = :ld_qty, factuqty = :ld_qty WHERE storageid = :ll_storageid AND pdbdate = :ls_pdbdate AND mtrlid = :ll_mtrlid AND status = :ls_status AND plancode = '' AND sptid = 0 AND scid = :ll_scid AND Dxflag = 0 AND woodcode = :ls_woodcode AND pcode = :ls_pcode and location = :ls_location; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_warepdb (storageid, pdbdate, mtrlid, status, qty, factqty, plancode, Sptid, scid, mtrlwareid, Dxflag, woodcode, pcode, wareamt, cost, atid, location, uqty, factuqty) VALUES (:ll_storageid, :ls_pdbdate, :ll_mtrlid, :ls_status, 0, :ld_qty, '', 0, :ll_scid, 0, 0, :ls_woodcode, :ls_pcode, 0, :ld_newprice, :arg_atid, :ls_location, 0, :ld_qty); IF sqlca.SQLCode <> 0 THEN arg_msg = '新增盘点记录失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '更新盘点实盘数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF // w_sys_wait_jdt.wf_inc(i) //进度 NEXT ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_pd //Close(w_sys_wait_jdt) RETURN rslt end function public function integer uof_cmpl_apportion_mtrl (long arg_atid, ref string arg_msg);//统计材料 //1.统计计划用料 //2.统计领料 //3.统计车间期初 //4.统计车间盘点 //5.重新计算 Int rslt = 1 Long row_cnt,pf_cnt DateTime ldt_firstdate,ldt_enddate datastore ds_cp,ds_mtrl_out,ds_mtrl_balc,ds_mtrl_ori datastore ds_mtrl_outscllplan_over,ds_mtrl_pdpk datastore ds_mtrl_fl,ds_mtrl_tl,ds_mtrl_bl Long ll_i Long ll_mtrlid,ll_scid,ll_orderid,ll_wrkGrpid,ll_storageid_wrk Long ll_pmonth,ll_storageid Decimal ld_qty,ld_amt,ld_cost String ls_mtrlname,ls_pfcode,ls_mtrlcode String ls_status,ls_woodcode,ls_pcode Int li_if_bom Int li_balcflag,li_lastauditflag s_cp_scll s_cs[],arg_s_cs[],tmp_s_cs[] Long arg_itmxt,k SELECT firstdate,enddate,wrkGrpid,pmonth,balcflag,lastauditflag INTO :ldt_firstdate,:ldt_enddate,:ll_wrkGrpid,:ll_pmonth,:li_balcflag,:li_lastauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点资料失败(开始日期,结束日期)' rslt = 0 GOTO ext END IF IF li_balcflag = 0 THEN arg_msg = '盘点未确认,不能操作' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '盘点已最终审核,不能操作' rslt = 0 GOTO ext END IF IF uof_checkdate(ll_wrkGrpid,ldt_firstdate,ldt_enddate,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF SELECT u_sc_wkp.storageid INTO :ll_storageid_wrk From u_sc_wkp Where wrkGrpid = :ll_wrkGrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询核算车间对应车间仓失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_storageid_wrk = 0 THEN arg_msg = '核算车间对应车间仓未设置,操作取消' rslt = 0 GOTO ext END IF DELETE u_apportion_mtrl Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除上次材料统计失败' rslt = 0 GOTO ext END IF uo_cp_auto_scll uo_mrp_scll uo_mrp_scll = Create uo_cp_auto_scll //Open(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() IF uo_option_scll_plan_wsaudit = 0 THEN // w_sys_wait_2jdt.wf_accepttol(5) //初始化进度条1 //1.统计计划用料 ds_cp = Create datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) row_cnt = ds_cp.Retrieve(arg_atid) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计计划领料..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_cp.Object.u_apportion_cp_mtrlid[ll_i] ls_mtrlname = ds_cp.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_cp.Object.u_apportion_cp_qty[ll_i] ls_pfcode = ds_cp.Object.u_apportion_cp_pfcode[ll_i] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_i] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计计划领料:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) SELECT count(*) INTO :pf_cnt FROM u_PrdPF WHERE mtrlid = :ll_mtrlid And pfcode = :ls_pfcode; IF sqlca.SQLCode <> 0 Or IsNull(pf_cnt) THEN pf_cnt = 0 END IF IF pf_cnt = 0 THEN li_if_bom = 0 ELSE li_if_bom = 1 END IF UPDATE u_apportion_cp SET ifbom = :li_if_bom WHERE atid = :arg_atid AND scid = :ll_scid And orderid = :ll_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新车间产品是否已建立清单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_if_bom = 0 THEN CONTINUE arg_s_cs = tmp_s_cs IF uo_mrp_scll.uof_cp_scll(ll_scid,ll_orderid,0,& ld_qty,arg_s_cs,arg_itmxt,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF FOR k = 1 To arg_itmxt ld_cost = 0 ld_amt = 0 ll_mtrlid = arg_s_cs[k].mtrlid ls_status = arg_s_cs[k].status ls_woodcode = arg_s_cs[k].woodcode ls_pcode = arg_s_cs[k].pcode ld_qty = arg_s_cs[k].qty ls_mtrlcode = arg_s_cs[k].mtrlcode IF uof_get_pdb_cost(arg_atid,ll_storageid,ll_mtrlid,& ls_mtrlcode,ls_status,ls_woodcode,& ls_pcode,ld_cost,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ld_amt = Round(ld_qty * ld_cost,2) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,ld_qty,ld_amt,ld_cost,0,0,0,0,& 0,0,0,0,0,0,0,0,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT NEXT // w_sys_wait_2jdt.wf_inc(1) //2.统计领料 ds_mtrl_out = Create datastore ds_mtrl_out.DataObject = 'ds_apportion_mtrl_outware' ds_mtrl_out.SetTransObject(sqlca) row_cnt = ds_mtrl_out.Retrieve(ll_wrkGrpid,ldt_firstdate,ldt_enddate) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计生产领料领入车间..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_out.Object.u_outwaremx_mtrlid[ll_i] ls_mtrlname = ds_mtrl_out.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_out.Object.u_inwaremx_qty[ll_i] ld_amt = ds_mtrl_out.Object.amt[ll_i] ls_status = ds_mtrl_out.Object.u_outwaremx_status[ll_i] ls_woodcode = ds_mtrl_out.Object.u_outwaremx_woodcode[ll_i] ls_pcode = ds_mtrl_out.Object.u_outwaremx_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计生产领料:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,ld_qty,ld_amt,& 0,0,0,0,0,0,0,0,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(2) //3.统计车间期初 Long last_atid SELECT top 1 atid INTO :last_atid FROM u_apportion_time WHERE enddate < :ldt_firstdate And wrkGrpid = :ll_wrkGrpid; IF sqlca.SQLCode = - 1 THEN arg_msg = '查询上次车间盘点资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLCode = 100 Or IsNull(last_atid) THEN last_atid = 0 END IF IF last_atid > 0 THEN ds_mtrl_ori = Create datastore ds_mtrl_ori.DataObject = 'ds_apportion_mtrl_balc' ds_mtrl_ori.SetTransObject(sqlca) row_cnt = ds_mtrl_ori.Retrieve(last_atid) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计车间物料期初..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_ori.Object.u_warepdb_mtrlid[ll_i] ls_mtrlname = ds_mtrl_ori.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_ori.Object.u_warepdb_factqty[ll_i] ld_amt = ds_mtrl_ori.Object.balcamt[ll_i] ls_status = ds_mtrl_ori.Object.u_warepdb_status[ll_i] ls_woodcode = ds_mtrl_ori.Object.u_warepdb_woodcode[ll_i] ls_pcode = ds_mtrl_ori.Object.u_warepdb_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计车间期初:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,ld_qty,ld_amt,& 0,0,0,0,0,0,0,0,0,0,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF // w_sys_wait_2jdt.wf_inc(3) //4.统计车间盘点 ds_mtrl_balc = Create datastore ds_mtrl_balc.DataObject = 'ds_apportion_mtrl_balc' ds_mtrl_balc.SetTransObject(sqlca) row_cnt = ds_mtrl_balc.Retrieve(arg_atid) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计车间盘点数据..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_balc.Object.u_warepdb_mtrlid[ll_i] ls_mtrlname = ds_mtrl_balc.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_balc.Object.u_warepdb_factqty[ll_i] ld_amt = ds_mtrl_balc.Object.balcamt[ll_i] ls_status = ds_mtrl_balc.Object.u_warepdb_status[ll_i] ls_woodcode = ds_mtrl_balc.Object.u_warepdb_woodcode[ll_i] ls_pcode = ds_mtrl_balc.Object.u_warepdb_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计车间盘点:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,0,0,& ld_qty,ld_amt,0,0,0,0,0,0,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(4) //5.计算实际用料 // w_sys_wait_2jdt.wf_accepttol2(0) // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在计算实际用料..." UPDATE u_apportion_mtrl SET outqty = orqty + inqty - balcqty, outamt = oramt + inamt - balcamt Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '计算实际用料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF // w_sys_wait_2jdt.wf_inc(5) ELSE // w_sys_wait_2jdt.wf_accepttol(7) //初始化进度条1 //1.统计发料 ds_mtrl_fl = Create datastore ds_mtrl_fl.DataObject = 'ds_apportion_mtrl_fl' ds_mtrl_fl.SetTransObject(sqlca) row_cnt = ds_mtrl_fl.Retrieve(ll_wrkGrpid,ldt_firstdate,ldt_enddate) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计发料数据..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_fl.Object.u_outwaremx_mtrlid[ll_i] ls_mtrlname = ds_mtrl_fl.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_fl.Object.u_inwaremx_qty[ll_i] ld_amt = ds_mtrl_fl.Object.amt[ll_i] ls_status = ds_mtrl_fl.Object.u_outwaremx_status[ll_i] ls_woodcode = ds_mtrl_fl.Object.u_outwaremx_woodcode[ll_i] ls_pcode = ds_mtrl_fl.Object.u_outwaremx_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计发料数据:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,0,0,& 0,0,0,0,0,0,ld_qty,ld_amt,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(1) //2.统计退料 ds_mtrl_tl = Create datastore ds_mtrl_tl.DataObject = 'ds_apportion_mtrl_tl' ds_mtrl_tl.SetTransObject(sqlca) row_cnt = ds_mtrl_tl.Retrieve(ll_wrkGrpid,ldt_firstdate,ldt_enddate) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计退料数据..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_tl.Object.u_outwaremx_mtrlid[ll_i] ls_mtrlname = ds_mtrl_tl.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_tl.Object.u_inwaremx_qty[ll_i] ld_amt = ds_mtrl_tl.Object.amt[ll_i] ls_status = ds_mtrl_tl.Object.u_outwaremx_status[ll_i] ls_woodcode = ds_mtrl_tl.Object.u_outwaremx_woodcode[ll_i] ls_pcode = ds_mtrl_tl.Object.u_outwaremx_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计退料数据:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,0,0,& 0,0,0,0,0,0,0,0,ld_qty,ld_amt,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(2) //2.统计补料 ds_mtrl_bl = Create datastore ds_mtrl_bl.DataObject = 'ds_apportion_mtrl_bl' ds_mtrl_bl.SetTransObject(sqlca) row_cnt = ds_mtrl_bl.Retrieve(ll_wrkGrpid,ldt_firstdate,ldt_enddate) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计补料数据..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_bl.Object.u_outwaremx_mtrlid[ll_i] ls_mtrlname = ds_mtrl_bl.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_bl.Object.u_inwaremx_qty[ll_i] ld_amt = ds_mtrl_bl.Object.amt[ll_i] ls_status = ds_mtrl_bl.Object.u_outwaremx_status[ll_i] ls_woodcode = ds_mtrl_bl.Object.u_outwaremx_woodcode[ll_i] ls_pcode = ds_mtrl_bl.Object.u_outwaremx_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计补料数据:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,0,0,& 0,0,0,0,0,0,0,0,0,0,ld_qty,ld_amt,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(3) //4.统计盘点盘亏 ds_mtrl_pdpk = Create datastore ds_mtrl_pdpk.DataObject = 'ds_apportion_mtrl_pdpk' ds_mtrl_pdpk.SetTransObject(sqlca) row_cnt = ds_mtrl_pdpk.Retrieve(ll_storageid_wrk,ldt_firstdate,ldt_enddate) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计盘亏损耗数据..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_pdpk.Object.u_outwaremx_mtrlid[ll_i] ls_mtrlname = ds_mtrl_pdpk.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_pdpk.Object.u_inwaremx_qty[ll_i] ld_amt = ds_mtrl_pdpk.Object.amt[ll_i] ls_status = ds_mtrl_pdpk.Object.u_outwaremx_status[ll_i] ls_woodcode = ds_mtrl_pdpk.Object.u_outwaremx_woodcode[ll_i] ls_pcode = ds_mtrl_pdpk.Object.u_outwaremx_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计盘亏损耗数据:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,0,0,& 0,0,ld_qty,ld_amt,0,0,0,0,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(4) //5.计算发料单损耗 ds_mtrl_outscllplan_over = Create datastore ds_mtrl_outscllplan_over.DataObject = 'ds_apportion_mtrl_outscllplan_over' ds_mtrl_outscllplan_over.SetTransObject(sqlca) row_cnt = ds_mtrl_outscllplan_over.Retrieve(ll_storageid_wrk,ldt_firstdate,ldt_enddate) // w_sys_wait_2jdt.wf_accepttol2(row_cnt) //初始化进度条2 // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在统计发料通知单损耗数据..." FOR ll_i = 1 To row_cnt ll_mtrlid = ds_mtrl_outscllplan_over.Object.u_outwaremx_mtrlid[ll_i] ls_mtrlname = ds_mtrl_outscllplan_over.Object.u_mtrldef_mtrlname[ll_i] ld_qty = ds_mtrl_outscllplan_over.Object.u_inwaremx_qty[ll_i] ld_amt = ds_mtrl_outscllplan_over.Object.amt[ll_i] ls_status = ds_mtrl_outscllplan_over.Object.u_outwaremx_status[ll_i] ls_woodcode = ds_mtrl_outscllplan_over.Object.u_outwaremx_woodcode[ll_i] ls_pcode = ds_mtrl_outscllplan_over.Object.u_outwaremx_pcode[ll_i] // w_sys_wait_2jdt.st_msg.Text = "正在统计发料通知单损耗数据:"+ls_mtrlname+"..." // w_sys_wait_2jdt.wf_inc2(ll_i) IF uof_update_apportion_mtrl(arg_atid,ll_mtrlid,ls_status,& ls_woodcode,ls_pcode,ls_mtrlname,0,0,0,0,0,0,0,& 0,0,0,0,ld_qty,ld_amt,0,0,0,0,0,0,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF NEXT // w_sys_wait_2jdt.wf_inc(5) //6.更新总损耗 // w_sys_wait_2jdt.wf_accepttol2(0) // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在计算实际用料..." UPDATE u_apportion_mtrl SET outqty = outqty_fl + outqty_tl + outqty_bl + outqty_pk + outqty_scllplan, outamt = outamt_fl + outamt_tl + outamt_bl + outamt_pk + outamt_scllplan Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '计算总耗用失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_mtrl SET cost = case when outqty = 0 then 0 else round(outamt/outqty,2) END Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '计算成本价失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF // w_sys_wait_2jdt.wf_inc(6) //7.更新总损耗 // w_sys_wait_2jdt.wf_accepttol2(0) // w_sys_wait_2jdt.wf_inc2(0) // w_sys_wait_2jdt.st_msg.Text = "正在更新核算表材料耗用..." UPDATE u_apportion_time SET mtrlamt = a.amt FROM u_apportion_time, (SELECT u_apportion_mtrl.atid,sum(outamt) as amt FROM u_apportion_mtrl WHERE u_apportion_mtrl.atid = :arg_atid GROUP BY u_apportion_mtrl.atid ) a WHERE u_apportion_time.atid = a.atid And u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新核算表材料耗用失败'+sqlca.SQLErrText GOTO ext END IF // w_sys_wait_2jdt.wf_inc(7) END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF //Close(w_sys_wait_2jdt) Destroy ds_cp Destroy ds_mtrl_out Destroy ds_mtrl_balc Destroy ds_mtrl_pdpk Destroy ds_mtrl_outscllplan_over Destroy ds_mtrl_fl Destroy ds_mtrl_tl Destroy ds_mtrl_bl Destroy ds_mtrl_ori Destroy uo_mrp_scll RETURN rslt end function public function integer uof_checkdate (long arg_wrkgrpid, datetime arg_firstdate, datetime arg_enddate, ref string arg_msg);Int rslt = 1 Long cnt cnt = 0 SELECT count(*) INTO :cnt FROM u_outware,u_workgroup,u_sc_workgroup WHERE ( u_outware.billtype = 3 ) AND ( u_outware.secflag = 0 ) AND ( u_outware.relid = u_workgroup.workgroupid ) AND ( u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid ) AND ( u_sc_workgroup.storageid = :arg_wrkGrpid ) AND ( u_outware.outdate >= :arg_firstdate ) And ( u_outware.outdate <= :arg_enddate ); IF sqlca.SQLCode <> 0 THEN arg_msg = '查询核算时间范围内领入车间的领料单是否有未审核失败,操作取消,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '核算时间范围内领入车间的领料单有未审核,操作取消,请检查' rslt = 0 GOTO ext END IF //cnt = 0 //SELECT count(*) INTO :cnt // FROM u_outware,u_workgroup,u_sc_workgroup // WHERE ( u_outware.billtype = 3 ) // AND ( u_outware.secflag = 1 ) // AND ( u_outware.relid = u_workgroup.workgroupid ) // AND ( u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid ) // AND ( u_sc_workgroup.storageid = :arg_wrkGrpid ) // AND ( u_outware.outdate >= :arg_enddate ); //IF sqlca.SQLCode <> 0 THEN // arg_msg = '查询日期:'+string(arg_enddate,'yyyy-mm-dd hh:mm:ss')+'后,领入车间的领料单是否有未审核失败,操作取消,'+sqlca.SQLErrText // rslt = 0 // GOTO ext //END IF // //IF cnt > 0 THEN // arg_msg = '日期:'+string(arg_enddate,'yyyy-mm-dd hh:mm:ss')+'后,领入车间的领料单有已审核,操作取消,请检查' // rslt = 0 // GOTO ext //END IF ext: RETURN rslt end function public function integer uof_audit_apportion_time (long arg_atid, integer arg_flag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_auditflag,li_disflag,li_balcflag Long ll_storageid,ll_pmonth String ls_pdbdate Int li_ifbalc DateTime null_dt Long cnt ,ll_scid String ls_storagename Long ll_pycnt,ll_pkcnt,i SetNull(null_dt) String ls_status,ls_plancode,ls_mtrlcode,ls_unit,ls_uunit Long ls_mtrlwareid,ls_sptid String ls_woodcode,ls_pcode Decimal ls_planprice,ld_rate,ld_uprice Decimal ld_cost,ld_cost_mtrlware Long ls_mtrlid Int ls_dxflag DateTime ld_balcdate,ld_enddate String ls_balcdate Long ll_balcdateint Int rst Long ll_inwareid,ll_outwareid datastore ds_pdb ds_pdb = CREATE datastore ds_pdb.DataObject = 'ds_apportion_pd_ware_rp' ds_pdb.SetTransObject(sqlca) ds_pdb.Retrieve(arg_atid) uo_ware_pdb_balc uo_pdb uo_pdb = CREATE uo_ware_pdb_balc uo_outware uo_ware_pk uo_ware_pk = CREATE uo_outware uo_ware_pk.commit_transaction = sqlca uo_inware uo_ware_py uo_ware_py = CREATE uo_inware uo_ware_py.commit_transaction = sqlca SELECT auditflag,disflag,balcflag INTO :li_auditflag,:li_disflag,:li_balcflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询审核标记失败' rslt = 0 GOTO ext END IF SELECT u_sc_wkp.storageid, u_apportion_time.enddate INTO :ll_storageid, :ld_enddate FROM u_sc_wkp,u_apportion_time WHERE u_sc_wkp.wrkGrpid = u_apportion_time.wrkGrpid AND u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间盘点资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_storageid = 0 THEN arg_msg = '车间未设置车间仓库,请检查' rslt = 0 GOTO ext END IF ls_pdbdate = String(ld_enddate,'yyyymmdd') IF arg_flag = 0 THEN IF li_auditflag = 0 THEN arg_msg = '未审核,不能撤审' rslt = 0 GOTO ext END IF IF li_disflag = 1 THEN arg_msg = '已分摊,不能撤审' rslt = 0 GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_inware WHERE billtype = 9 AND storageid = :ll_storageid AND relstr_1 = :ls_pdbdate AND relint_1 = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询盘点表相关盘盈单失败'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT scid,inwareid INTO :ll_scid,:ll_inwareid FROM u_inware WHERE billtype = 9 AND storageid = :ll_storageid AND relstr_1 = :ls_pdbdate AND relint_1 = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询盘点表相关盘盈单失败'+sqlca.SQLErrText GOTO ext END IF IF uo_ware_py.getinfo(ll_scid,ll_inwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_py.c_auditing(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_py.del(ll_scid,ll_inwareid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_outware WHERE billtype = 9 AND storageid = :ll_storageid AND relstr_1 = :ls_pdbdate AND relint_1 = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询盘点表相关盘盈单失败'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN SELECT scid,outwareid INTO :ll_scid,:ll_outwareid FROM u_outware WHERE billtype = 9 AND storageid = :ll_storageid AND relstr_1 = :ls_pdbdate AND ifauto = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询盘点表相关盘亏单失败'+sqlca.SQLErrText GOTO ext END IF IF uo_ware_pk.getinfo(ll_scid,ll_outwareid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_pk.c_auditing(FALSE,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF uo_ware_pk.del(ll_scid,ll_outwareid,0,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_pdb.uof_pdb_caudit(ll_storageid,Long(ls_pdbdate),arg_msg,FALSE) = 0 THEN arg_msg = '撤审盘点表失败,'+arg_msg rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET auditflag = :arg_flag, auditrep = '', auditdate = :null_dt WHERE atid = :arg_atid AND auditflag = 1 AND disflag = 0; ELSE IF li_balcflag = 0 THEN arg_msg = '未确认,不能再审核' rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN arg_msg = '已经审核,不能再审核' rslt = 0 GOTO ext END IF SELECT ifbalc,storagename INTO :li_ifbalc,:ls_storagename FROM u_storage Where storageid = :ll_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询仓库是否审核盘点表自动结存标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_warepdb WHERE u_warepdb.storageid = :ll_storageid AND u_warepdb.pdbdate = :ls_pdbdate AND flag = 0 USING sqlca; IF sqlca.SQLCode < 0 THEN arg_msg = '查询操作失败,在盘点日:'+String(ls_pdbdate)+',仓库:'+ls_storagename+'的数据资料!' rslt = 0 GOTO ext ELSE IF cnt <= 0 THEN arg_msg = '盘点日:'+String(ls_pdbdate)+',仓库:'+ls_storagename+'的盘点数据已经审核!' rslt = 0 GOTO ext END IF END IF SELECT scid INTO :ll_scid FROM u_storage Where storageid = :ll_storageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询仓库所属分部失败' rslt = 0 GOTO ext END IF FOR i = 1 TO ds_pdb.RowCount() IF ds_pdb.Object.pypkqty[i] > 0 THEN ll_pycnt++ ELSEIF ds_pdb.Object.pypkqty[i] < 0 THEN ll_pkcnt++ END IF NEXT IF ll_pycnt > 0 THEN IF uo_ware_py.newbegin(ll_scid,9,arg_msg) = 0 THEN arg_msg = 'error!/盘盈单'+arg_msg rslt = 0 GOTO ext END IF uo_ware_py.indate = DateTime(Date(Left(ls_pdbdate,4)+'-'+Mid(ls_pdbdate,5,2)+'-'+Right(ls_pdbdate,2)),Time(0)) uo_ware_py.inrep = publ_operator uo_ware_py.part = '' uo_ware_py.dscrp = '电脑生成的'+ls_pdbdate+'的盘盈单' uo_ware_py.storageid = ll_storageid uo_ware_py.commit_transaction = sqlca uo_ware_py.relstr_1 = ls_pdbdate uo_ware_py.relint_1 = 1 //自动建立 uo_ware_py.if_getid_ture = FALSE END IF IF ll_pkcnt > 0 THEN IF uo_ware_pk.newbegin(ll_scid,9,arg_msg) = 0 THEN arg_msg = 'error!/盘亏单'+arg_msg rslt = 0 GOTO ext END IF uo_ware_pk.outdate = DateTime(Date(Left(ls_pdbdate,4)+'-'+Mid(ls_pdbdate,5,2)+'-'+Right(ls_pdbdate,2)),Time(0)) uo_ware_pk.outrep = publ_operator uo_ware_pk.part = '' uo_ware_pk.dscrp = '电脑生成的'+ls_pdbdate+'的盘亏单' uo_ware_pk.storageid = ll_storageid uo_ware_pk.ifauto = 1 //自动 uo_ware_pk.relstr_1 = ls_pdbdate uo_ware_pk.commit_transaction = sqlca uo_ware_pk.if_getid_ture = FALSE END IF // Open(w_sys_wait_jdt) //初始化进度条 // w_sys_wait_jdt.Show() // w_sys_wait_jdt.wf_accepttol(ds_pdb.RowCount()) //初始化进度条1 FOR i = 1 TO ds_pdb.RowCount() ls_mtrlcode = ds_pdb.Object.u_mtrldef_mtrlcode[i] ls_unit = ds_pdb.Object.u_mtrldef_unit[i] // w_sys_wait_jdt.st_msg.Text = "处理:"+ls_mtrlcode //进度信息 IF ds_pdb.Object.mtrlid[i] <= 0 THEN CONTINUE IF ds_pdb.Object.pypkqty[i] = 0 THEN CONTINUE ls_mtrlwareid = ds_pdb.Object.u_warepdb_mtrlwareid[i] ls_mtrlid = ds_pdb.Object.mtrlid[i] ls_sptid = ds_pdb.Object.u_warepdb_sptid[i] ls_plancode = ds_pdb.Object.u_warepdb_plancode[i] ls_dxflag = ds_pdb.Object.u_warepdb_dxflag[i] ls_status = ds_pdb.Object.u_warepdb_status[i] ls_woodcode = ds_pdb.Object.u_warepdb_woodcode[i] ls_pcode = ds_pdb.Object.u_warepdb_pcode[i] SELECT cost INTO :ld_cost_mtrlware FROM u_mtrlware WHERE mtrlwareid = :ls_mtrlwareid AND scid = :ll_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',查询库存成本价失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT planprice INTO :ls_planprice FROM u_mtrldef Where mtrlid = :ls_mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = '物料:'+ls_mtrlcode+',查询计划价失败'+sqlca.SQLErrText rslt = 0 GOTO ext END IF Int ll_mtrlprp ll_mtrlprp = f_get_storage_mtrlprp(ll_storageid) IF ll_mtrlprp = 0 OR ll_mtrlprp = 1 OR ll_mtrlprp = 2 THEN IF ld_cost_mtrlware = 0 THEN ld_cost = ls_planprice ELSE ld_cost = ld_cost_mtrlware END IF ELSE ld_cost = 0 END IF IF ds_pdb.Object.u_mtrldef_ifunit[i] = 0 THEN ls_uunit = ds_pdb.Object.u_mtrldef_unit[i] ld_rate = 1 ld_uprice = ld_cost ELSE ld_rate = ds_pdb.Object.u_warepdb_rate[i] IF ld_rate = 1 THEN ls_uunit = ds_pdb.Object.u_mtrldef_unit[i] ld_uprice = ld_cost ELSE ls_uunit = ds_pdb.Object.u_mtrldef_unit_buy[i] ld_uprice = ld_cost * ld_rate END IF END IF IF ds_pdb.Object.pypkqty[i] > 0 THEN IF ll_pycnt > 0 THEN IF uo_ware_py.acceptmx(i,& ds_pdb.Object.mtrlid[i],& ds_pdb.Object.u_mtrldef_mtrlcode[i],& ls_plancode,& ls_status,& ds_pdb.Object.pypkuqty[i],& ld_uprice,& 1,& '',& arg_msg,0,0,0,ls_woodcode,ls_pcode,ls_sptid,ls_uunit,ld_rate,ds_pdb.Object.pypkqty[i],0,0,'','',0,0,'','',& ds_pdb.Object.pypkuqty[i],& 0) = 0 THEN arg_msg = 'error!/盘盈单'+arg_msg rslt = 0 GOTO ext END IF END IF ELSEIF ds_pdb.Object.pypkqty[i] < 0 THEN IF ll_pkcnt > 0 THEN IF uo_ware_pk.acceptmx(ls_mtrlwareid,& Abs(ds_pdb.Object.pypkqty[i]),& ld_cost,& 1,& '',& i,& arg_msg,0,0,0,0,'',0,0,ls_uunit,& Abs(ds_pdb.Object.pypkuqty[i]),ld_rate,'','',0,0,'',0,0,0,0,'','') = 0 THEN arg_msg = 'error!/盘亏单'+arg_msg rslt = 0 GOTO ext END IF END IF END IF // w_sys_wait_jdt.wf_inc(i) //进度 NEXT // Close(w_sys_wait_jdt) IF ll_pycnt > 0 THEN IF uo_ware_py.Save(FALSE,arg_msg) = 0 THEN arg_msg = 'error!/盘盈单'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware_py.getinfo(ll_scid,uo_ware_py.inwareid,arg_msg) = 0 THEN arg_msg = 'error!/盘盈单'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware_py.auditing(FALSE,arg_msg) = 0 THEN arg_msg = 'error!/盘盈单'+arg_msg rslt = 0 GOTO ext END IF END IF IF ll_pkcnt > 0 THEN IF uo_ware_pk.Save(FALSE,arg_msg) = 0 THEN arg_msg = 'error!/盘亏单'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware_pk.getinfo(ll_scid,uo_ware_pk.outwareid,arg_msg) = 0 THEN arg_msg = 'error!/盘亏单'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware_pk.auditing(FALSE,arg_msg) = 0 THEN arg_msg = 'error!/盘亏单'+arg_msg rslt = 0 GOTO ext END IF END IF IF uo_pdb.uof_pdb_audit(ll_storageid,Long(ls_pdbdate),arg_opemp,arg_msg,FALSE) = 0 THEN arg_msg = '审核盘点表失败,'+arg_msg rslt = 0 GOTO ext END IF ls_balcdate = Left(String(ls_pdbdate),4) + '-' + Left(Right(String(ls_pdbdate),4),2) +'-'+ Right(String(ls_pdbdate),2) ld_balcdate = DateTime(Date(ls_balcdate),Time(0)) ll_balcdateint = Year(Date(ld_balcdate)) * 10000 + Month(Date(ld_balcdate)) * 100 + Day(Date(ld_balcdate)) IF li_ifbalc = 1 THEN // w_sys_wait.Show() // w_sys_wait.wf_set_msg('系统正在处理数据...') rst = uo_pdb.uof_warebalc(ll_storageid,ld_balcdate,arg_msg,FALSE,0) // w_sys_wait.Hide() IF rst = 0 THEN arg_msg = '结存失败:'+arg_msg rslt = 0 GOTO ext ELSEIF rst = 2 THEN rslt = 2 GOTO ext ELSE f_setwarebalc_log(ll_balcdateint,ll_storageid,0,arg_msg,FALSE) END IF END IF UPDATE u_apportion_time SET auditflag = 1, auditrep = :arg_opemp, auditdate = getdate() WHERE atid = :arg_atid AND auditflag = 0 AND balcflag = 1 ; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新审核标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "正在执行操作,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: //Close(w_sys_wait_jdt) IF rslt = 0 OR rslt = 2 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_pdb DESTROY uo_ware_py DESTROY uo_ware_pk RETURN rslt end function public function integer uof_balc_apportion_time (long arg_atid, integer arg_flag, string arg_opemp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Int li_auditflag,li_balcflag Int li_disflag,li_itemauditflag,li_abnormityflag,li_glgzflag,li_lastauditflag Long ll_storageid,ll_pmonth DateTime ldt_enddate DateTime null_dt Long rst SetNull(null_dt) uo_ware_pdb_balc uo_pdb uo_pdb = Create uo_ware_pdb_balc SELECT auditflag,balcflag,disflag,itemauditflag,abnormityflag,glgzflag,lastauditflag INTO :li_auditflag,:li_balcflag,:li_disflag,:li_itemauditflag,:li_abnormityflag,:li_glgzflag,:li_lastauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点标记失败' rslt = 0 GOTO ext END IF SELECT u_sc_wkp.storageid, u_apportion_time.pmonth, u_apportion_time.enddate INTO :ll_storageid, :ll_pmonth, :ldt_enddate FROM u_sc_wkp,u_apportion_time WHERE u_sc_wkp.wrkGrpid = u_apportion_time.wrkGrpid And u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询车间盘点资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ll_storageid = 0 THEN arg_msg = '车间未设置车间仓库,请检查' rslt = 0 GOTO ext END IF IF arg_flag = 0 THEN IF li_balcflag = 0 THEN arg_msg = '未确认,不能反确认' rslt = 0 GOTO ext END IF IF li_disflag = 1 THEN arg_msg = '已用料分摊,不能反确认,请先取消用料分摊' rslt = 0 GOTO ext END IF IF li_itemauditflag = 1 THEN arg_msg = '已费用分摊,不能反确认,请先取消费用分摊' rslt = 0 GOTO ext END IF IF li_abnormityflag = 1 THEN arg_msg = '已执行其它计件分摊,不能反确认,请先取消其它计件分摊' rslt = 0 GOTO ext END IF IF li_glgzflag = 1 THEN arg_msg = '已执行管理工资分摊,不能反确认,请先取消管理工资分摊' rslt = 0 GOTO ext END IF IF li_auditflag = 1 THEN arg_msg = '已审核,不能反确认' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '已终审,不能反确认' rslt = 0 GOTO ext END IF // IF uo_pdb.uof_pdb_del(ll_storageid,Long(String(ldt_enddate,'yyyymmdd')),arg_msg,False) = 0 THEN // arg_msg = '删除车间盘点表失败,'+arg_msg // rslt = 0 // GOTO ext // END IF DELETE From u_apportion_cp Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期相关成品统计数操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE From u_apportion_mtrl Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期相关材料统计数操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE From u_apportion_item Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期相关费用统计数操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE From u_apportion_gz Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除盘点日期相关管理工资统计数操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET balcflag = :arg_flag, balcemp = '', balcdate = :null_dt WHERE atid = :arg_atid AND auditflag = 0 And balcflag = 1; ELSE IF li_balcflag = 1 THEN arg_msg = '已经确认,不能再确认' rslt = 0 GOTO ext END IF // rslt = uo_pdb.uof_pdb_add(arg_atid,ll_storageid,ldt_enddate,0,arg_msg,False) // // IF rslt = 0 THEN // arg_msg = "车间建立盘点表失败,"+arg_msg // GOTO ext // ELSEIF rslt = 2 THEN // GOTO ext // END IF UPDATE u_apportion_time SET balcflag = :arg_flag, balcemp = :arg_opemp, balcdate = getdate() WHERE atid = :arg_atid And balcflag = 0; END IF IF sqlca.SQLCode <> 0 THEN arg_msg = '更新确认标记失败,'+sqlca.SQLErrText rslt = 0 GOTO ext ELSEIF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = "正在执行操作,请稍后查询。"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 Or rslt = 2 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF Destroy uo_pdb RETURN rslt end function public function integer uof_get_pdb_cost (long arg_atid, long arg_storageid, long arg_mtrlid, string arg_mtrlcode, string arg_status, string arg_woodcode, string arg_pcode, ref decimal arg_ref_cost, ref string arg_msg); Int rslt = 1 SELECT cost INTO :arg_ref_cost FROM u_warepdb WHERE atid = :arg_atid AND storageid = :arg_storageid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode AND pcode = :arg_pcode; IF sqlca.SQLCode = -1 THEN arg_msg = '查询物料:'+arg_mtrlcode+',盘点表成本价失败,'+sqlca.SQLErrText rslt = 0 GOTO ext elseif sqlca.SQLCode = 100 THEN arg_ref_cost = 0 END IF ext: RETURN rslt end function public function integer uof_cmpl_apportion_item_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_itemauditflag Decimal ld_sumqty,ld_itemamt,ld_cpqty SELECT itemauditflag INTO :ll_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表费用分摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_itemauditflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过费用分摊操作,不能重复执行' GOTO ext END IF datastore ds_item,ds_cp ds_item = CREATE datastore ds_item.DataObject = 'ds_apportion_item' ds_item.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty) INTO :ld_sumqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_item.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_itemid Decimal ld_cpamt //Open(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() //w_sys_wait_2jdt.wf_accepttol(row_cnt) //初始化进度条1 FOR ll_i = 1 TO row_cnt ld_itemamt = ds_item.Object.u_apportion_item_amt[ll_i] ll_itemid = ds_item.Object.u_apportion_item_itemid[ll_i] //w_sys_wait_2jdt.wf_accepttol2(row_cnt_cp) //初始化进度条2 //w_sys_wait_2jdt.st_msg.Text = "正在统计..." FOR ll_j = 1 TO row_cnt_cp //w_sys_wait_2jdt.wf_inc2(ll_j) ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_cpqty / ld_sumqty * ld_itemamt INSERT INTO u_apportion_item_ft (scid, orderid, atid, itemid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_itemid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT //w_sys_wait_2jdt.wf_inc(ll_i) NEXT UPDATE u_apportion_time SET itemauditflag = 1, itemauditdate = getdate(), itemauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: //Close(w_sys_wait_2jdt) IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_item DESTROY ds_cp RETURN rslt end function public function integer uof_del_apportion_item_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_itemauditflag DateTime ld_nulldate SetNull(ld_nulldate) SELECT itemauditflag INTO :li_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该盘点是否已费用分摊失败' rslt = 0 GOTO ext END IF IF li_itemauditflag = 0 THEN arg_msg = '该盘点还没有费用分摊,不能取消费用分滩' rslt = 0 GOTO ext END IF DELETE FROM u_apportion_item_ft Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除指令费用分摊表操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET itemauditflag = 0 , itemauditdate = :ld_nulldate, itemauditemp = '' Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_lastaudit (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_disflag,li_itemauditflag SELECT disflag, itemauditflag INTO :li_disflag, :li_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询材料分滩及费用分滩标记失败'+sqlca.SQLErrText GOTO ext END IF IF li_disflag = 0 THEN rslt = 0 arg_msg = '还没有执行材料分滩,不能最终审核,请核对' GOTO ext END IF IF li_itemauditflag = 0 THEN rslt = 0 arg_msg = '还没有执行费用分滩,不能最终审核,请核对' GOTO ext END IF UPDATE u_apportion_time SET lastauditflag = 1, lastauditdate = getdate(), lastauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最终审核标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_c_lastaudit (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_lastauditflag DateTime ld_nulldate SetNull(ld_nulldate) SELECT lastauditflag INTO :li_lastauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询最终审核标记失败'+sqlca.SQLErrText GOTO ext END IF IF li_lastauditflag = 0 THEN rslt = 0 arg_msg = '还没有执行最终审核,不能撤审,请核对' GOTO ext END IF UPDATE u_apportion_time SET lastauditflag = 0, lastauditdate = :ld_nulldate, lastauditemp = '' Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新最终审核标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmpl_apportion_item_ft_mtrl (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_itemauditflag Decimal ld_sumqty,ld_itemamt,ld_cpqty SELECT itemauditflag INTO :ll_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表费用分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_itemauditflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过费用分滩操作,不能重复执行' GOTO ext END IF datastore ds_item,ds_cp ds_item = CREATE datastore ds_item.DataObject = 'ds_apportion_item' ds_item.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty) INTO :ld_sumqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_item.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分滩操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_itemid,ll_mtrlid Decimal ld_cpamt,ld_cpcost //OPEN(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() //w_sys_wait_2jdt.wf_accepttol(row_cnt) //初始化进度条1 FOR ll_i = 1 TO row_cnt ld_itemamt = ds_item.Object.u_apportion_item_amt[ll_i] ll_itemid = ds_item.Object.u_apportion_item_itemid[ll_i] //w_sys_wait_2jdt.wf_accepttol2(row_cnt_cp) //初始化进度条2 //w_sys_wait_2jdt.st_msg.Text = "正在统计..." ld_sumqty = 0 FOR ll_j = 1 TO row_cnt_cp ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] ll_mtrlid = ds_cp.Object.u_apportion_cp_orderid[ll_j] ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] IF ll_orderid = 0 THEN CONTINUE SELECT u_mtrl_cost.cost INTO :ld_cpcost FROM u_mtrl_cost WHERE u_mtrl_cost.itemid = :ll_itemid AND u_mtrl_cost.mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN ld_cpcost = 0 END IF ld_sumqty = ld_sumqty + ld_cpcost * ld_cpqty NEXT IF ld_sumqty = 0 THEN arg_msg = '被分摊指令的产品未设置标准成本费用{财务-成本-物料成本费用设置},请检查' rslt = 0 GOTO ext END IF FOR ll_j = 1 TO row_cnt_cp //w_sys_wait_2jdt.wf_inc2(ll_j) ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] ll_mtrlid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE SELECT u_mtrl_cost.cost INTO :ld_cpcost FROM u_mtrl_cost WHERE u_mtrl_cost.itemid = :ll_itemid AND u_mtrl_cost.mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN ld_cpcost = 0 END IF ld_cpamt = (ld_cpqty * ld_cpcost) / ld_sumqty * ld_itemamt INSERT INTO u_apportion_item_ft (scid, orderid, atid, itemid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_itemid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT //w_sys_wait_2jdt.wf_inc(ll_i) NEXT UPDATE u_apportion_time SET itemauditflag = 1, itemauditdate = getdate(), itemauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: //CLOSE(w_sys_wait_2jdt) IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_item DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_cp_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_disflag,li_auditflag Decimal ld_sumqty,ld_itemamt,ld_cpqty Long ll_cnt SELECT disflag,auditflag INTO :ll_disflag,:li_auditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表材料分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_disflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过材料分滩操作,不能重复执行' GOTO ext END IF IF li_auditflag = 0 THEN rslt = 0 arg_msg = '该车间盘点表还没有审核,不能执行材料分滩操作' GOTO ext END IF datastore ds_pdb,ds_cp ds_pdb = CREATE datastore ds_pdb.DataObject = 'ds_apportion_pd_ware_rp' ds_pdb.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) row_cnt = ds_pdb.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有盘点数据,不能执行费用分滩操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode Decimal ld_cpamt,ld_truerqqty Decimal ld_pypkqty,ld_ftqty,ld_ftamt,ld_cost //Open(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() //w_sys_wait_2jdt.wf_accepttol(row_cnt) //初始化进度条1 FOR ll_i = 1 TO row_cnt ll_mtrlid = ds_pdb.Object.mtrlid[ll_i] ls_status = ds_pdb.Object.u_warepdb_status[ll_i] ls_woodcode = ds_pdb.Object.u_warepdb_woodcode[ll_i] ls_pcode = ds_pdb.Object.u_warepdb_pcode[ll_i] ld_pypkqty = ds_pdb.Object.pypkqty[ll_i] ld_cost = ds_pdb.Object.u_warepdb_cost[ll_i] IF ld_pypkqty = 0 THEN GOTO _next //w_sys_wait_2jdt.wf_accepttol2(row_cnt_cp) //初始化进度条2 //w_sys_wait_2jdt.st_msg.Text = "正在统计..." ld_sumqty = 0 FOR ll_j = 1 TO row_cnt_cp ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ll_cnt = 0 END IF IF ll_cnt = 0 THEN CONTINUE SELECT sum(u_OrderRqMtrl_scll.trueRqqty/u_Order_ml.orderqty) INTO :ld_truerqqty FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ld_truerqqty = 0 END IF ld_sumqty = ld_sumqty + ld_cpqty * ld_truerqqty NEXT if ld_sumqty = 0 then continue FOR ll_j = 1 TO row_cnt_cp //w_sys_wait_2jdt.wf_inc2(ll_j) ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ll_cnt = 0 END IF IF ll_cnt = 0 THEN CONTINUE SELECT sum(u_OrderRqMtrl_scll.trueRqqty /u_Order_ml.orderqty) INTO :ld_truerqqty FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ld_truerqqty = 0 END IF ld_ftqty = ld_cpqty * ld_truerqqty / ld_sumqty * ld_pypkqty ld_ftamt = ld_ftqty * ld_cost INSERT INTO u_apportion_cp_ft (scid, orderid, atid, mtrlid, status, woodcode, pcode, qty, costamt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_ftqty, :ld_ftamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令材料分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT _next: //w_sys_wait_2jdt.wf_inc(ll_i) NEXT UPDATE u_apportion_time SET disflag = 1, disdate = getdate(), disrep = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新材料分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: //Close(w_sys_wait_2jdt) IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_pdb DESTROY ds_cp RETURN rslt end function public function integer uof_del_apportion_cp_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_disflag DateTime ld_nulldate SetNull(ld_nulldate) SELECT disflag INTO :li_disflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该盘点是否已材料分摊失败' rslt = 0 GOTO ext END IF IF li_disflag = 0 THEN arg_msg = '该盘点还没有材料分摊,不能取消材料分滩' rslt = 0 GOTO ext END IF DELETE FROM u_apportion_cp_ft Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除指令材料分摊表操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET disflag = 0 , disdate = :ld_nulldate, disrep = '' Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新材料分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmp_apportion_abnormityamt (long arg_atid, ref string arg_msg);Int rslt = 1 Long cnt,ll_wrkGrpid DateTime firstdate,enddate Int li_balcflag,li_lastauditflag SELECT firstdate,enddate,wrkGrpid,balcflag,lastauditflag INTO :firstdate,:enddate,:ll_wrkGrpid,:li_balcflag,:li_lastauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点资料失败 - 开始日期,结束日期' rslt = 0 GOTO ext END IF IF li_balcflag = 0 THEN arg_msg = '盘点未确认,不能操作' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '盘点已最终审核,不能操作' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_sc_abnormity WHERE u_sc_abnormity.Auditingflag = 0 AND u_sc_abnormity.billdate >= :firstdate AND u_sc_abnormity.billdate <= :enddate AND u_sc_abnormity.wrkGrpid = :ll_wrkGrpid and u_sc_abnormity.ifzj = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的个人其它计件单操作失败! ~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的个人其它计件单!' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_scwg_taskwork_2 INNER JOIN u_workgroup ON u_scwg_taskwork_2.wrkGrpid = u_workgroup.workgroupid INNER JOIN u_sc_workgroup ON u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid WHERE u_scwg_taskwork_2.billtype = 2 AND u_scwg_taskwork_2.billdate >= :firstdate AND u_scwg_taskwork_2.billdate <= :enddate AND u_sc_workgroup.storageid = :ll_wrkGrpid AND u_scwg_taskwork_2.flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的工作中心月分配异常计件单操作失败! ~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的工作中心月分配异常计件单!' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_scwg_taskwork_day INNER JOIN u_workgroup ON u_scwg_taskwork_day.wrkGrpid = u_workgroup.workgroupid INNER JOIN u_sc_workgroup ON u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid WHERE u_scwg_taskwork_day.billtype = 1 AND u_scwg_taskwork_day.billdate >= :firstdate AND u_scwg_taskwork_day.billdate <= :enddate AND u_sc_workgroup.storageid = :ll_wrkGrpid AND u_scwg_taskwork_day.flag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的工作中心日分配异常计件单操作失败! ~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的工作中心日分配异常计件单!' rslt = 0 GOTO ext END IF Decimal ld_sumamt,ld_sumamt_1,ld_sumamt_2 SELECT SUM(u_sc_abnormitymx.amount * u_sc_abnormitymx.Wage) INTO :ld_sumamt FROM u_sc_abnormity INNER JOIN u_sc_abnormitymx ON u_sc_abnormity.billid = u_sc_abnormitymx.billid WHERE u_sc_abnormity.Auditingflag = 1 AND u_sc_abnormity.billdate >= :firstdate AND u_sc_abnormity.billdate <= :enddate AND u_sc_abnormity.wrkGrpid = :ll_wrkGrpid; IF sqlca.SQLCode <> 0 THEN IF sqlca.SQLCode = 100 THEN ld_sumamt = 0 ELSE rslt = 0 arg_msg = '查询当前盘点时间范围内的个人异常计件单金额失败'+sqlca.SQLErrText GOTO ext END IF END IF SELECT sum(u_scwg_taskwork_2_mx.qty * u_scwg_taskwork_2_mx.price) INTO :ld_sumamt_1 FROM u_scwg_taskwork_2 INNER JOIN u_workgroup ON u_scwg_taskwork_2.wrkGrpid = u_workgroup.workgroupid INNER JOIN u_sc_workgroup ON u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid INNER JOIN u_scwg_taskwork_2_mx ON u_scwg_taskwork_2.billid = u_scwg_taskwork_2_mx.billid WHERE u_scwg_taskwork_2.billtype = 2 AND u_scwg_taskwork_2.billdate >= :firstdate AND u_scwg_taskwork_2.billdate <= :enddate AND u_sc_workgroup.storageid = :ll_wrkGrpid AND u_scwg_taskwork_2.flag = 1; IF sqlca.SQLCode <> 0 THEN IF sqlca.SQLCode = 100 THEN ld_sumamt_1 = 0 ELSE rslt = 0 arg_msg = '查询当前盘点时间范围内的工作中心月分配异常计件单金额失败'+sqlca.SQLErrText GOTO ext END IF END IF SELECT sum(u_scwg_taskwork_day_mx.qty * u_scwg_taskwork_day_mx.price) INTO :ld_sumamt_2 FROM u_scwg_taskwork_day INNER JOIN u_workgroup ON u_scwg_taskwork_day.wrkGrpid = u_workgroup.workgroupid INNER JOIN u_sc_workgroup ON u_workgroup.wrkGrpid = u_sc_workgroup.wrkGrpid INNER JOIN u_scwg_taskwork_day_mx ON u_scwg_taskwork_day.billid = u_scwg_taskwork_day_mx.billid WHERE u_scwg_taskwork_day.billtype = 1 AND u_scwg_taskwork_day.billdate >= :firstdate AND u_scwg_taskwork_day.billdate <= :enddate AND u_sc_workgroup.storageid = :ll_wrkGrpid AND u_scwg_taskwork_day.flag = 1; IF sqlca.SQLCode <> 0 THEN IF sqlca.SQLCode = 100 THEN ld_sumamt_2 = 0 ELSE rslt = 0 arg_msg = '查询当前盘点时间范围内的工作中心日分配异常计件单金额失败'+sqlca.SQLErrText GOTO ext END IF END IF IF IsNull(ld_sumamt) THEN ld_sumamt = 0 IF IsNull(ld_sumamt_1) THEN ld_sumamt_1 = 0 IF IsNull(ld_sumamt_2) THEN ld_sumamt_2 = 0 UPDATE u_apportion_time SET abnormityamt = :ld_sumamt + :ld_sumamt_1 +:ld_sumamt_2 Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新盘点表异常计件金额失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmp_apportion_abnormityamt_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_abnormityflag Decimal ld_sumqty,ld_cpqty Decimal ld_abnormityamt SELECT abnormityflag INTO :ll_abnormityflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_abnormityflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过异常计件分滩操作,不能重复执行' GOTO ext END IF SELECT abnormityamt INTO :ld_abnormityamt FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件金额失败,'+sqlca.SQLErrText GOTO ext END IF datastore ds_cp ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty) INTO :ld_sumqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt_cp = ds_cp.Retrieve(arg_atid) Long ll_scid,ll_orderid Decimal ld_ftamt FOR ll_j = 1 TO row_cnt_cp ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_ftamt = ld_cpqty / ld_sumqty * ld_abnormityamt INSERT INTO u_apportion_abnormity_ft (scid, orderid, atid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ld_ftamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令异常计件分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT UPDATE u_apportion_time SET abnormityflag = 1, abnormitydate = getdate(), abnormityemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新异常计件分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_cp RETURN rslt end function public function integer uof_del_apportion_abnormity_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_abnormityflag DateTime ld_nulldate SetNull(ld_nulldate) SELECT abnormityflag INTO :li_abnormityflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该盘点是否已异常计件分摊失败' rslt = 0 GOTO ext END IF IF li_abnormityflag = 0 THEN arg_msg = '该盘点还没有异常计件分摊,不能取消异常计件分滩' rslt = 0 GOTO ext END IF DELETE FROM u_apportion_abnormity_ft Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除指令异常计件分摊表操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET abnormityflag = 0 , abnormitydate = :ld_nulldate, abnormityemp = '' Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新异常计件分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmpl_apportion_item_ft_gz (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_gz,ll_i,ll_j,ll_itemauditflag Decimal ld_sumamt,ld_itemamt,ld_gzamt_mx Long ll_pmonth,ll_wrkgrpid SELECT itemauditflag,pmonth,wrkgrpid INTO :ll_itemauditflag,:ll_pmonth,:ll_wrkgrpid FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表费用分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_itemauditflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过费用分滩操作,不能重复执行' GOTO ext END IF datastore ds_item,ds_gz ds_item = Create datastore ds_item.DataObject = 'ds_apportion_item' ds_item.SetTransObject(sqlca) ds_gz = Create datastore ds_gz.DataObject = 'ds_apportion_gz' ds_gz.SetTransObject(sqlca) row_cnt = ds_item.Retrieve(arg_atid) row_cnt_gz = ds_gz.Retrieve(ll_wrkgrpid,ll_pmonth) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分滩操作' GOTO ext END IF ld_sumamt = 0 FOR ll_i = 1 To row_cnt_gz ld_sumamt = ld_sumamt + ds_gz.Object.amt[ll_i] NEXT Long ll_scid,ll_orderid,ll_itemid Decimal ld_cpamt FOR ll_i = 1 To row_cnt ld_itemamt = ds_item.Object.u_apportion_item_amt[ll_i] ll_itemid = ds_item.Object.u_apportion_item_itemid[ll_i] FOR ll_j = 1 To row_cnt_gz ld_gzamt_mx = ds_gz.Object.amt[ll_j] ll_scid = ds_gz.Object.scid[ll_j] ll_orderid = ds_gz.Object.orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_gzamt_mx / ld_sumamt * ld_itemamt INSERT INTO u_apportion_item_ft (scid, orderid, atid, itemid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_itemid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET itemauditflag = 1, itemauditdate = getdate(), itemauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF Destroy ds_item Destroy ds_gz RETURN rslt end function public function integer uof_cmpl_apportion_cost (long arg_atid, ref string arg_msg);Int rslt = 1 Long cnt,ll_wrkGrpid DateTime firstdate,enddate Int li_balcflag,li_auditflag,li_pmonth Int li_disflag,li_itemauditflag,li_abnormityflag,li_costflag,li_lastauditflag Long row_cnt_cp,ll_i Long ll_scid,ll_orderid Decimal ld_mtrlcost,ld_rlcost,ld_rqcost,ld_fycost String ls_ordercode SELECT firstdate,enddate,wrkGrpid,balcflag,auditflag,pmonth,disflag,itemauditflag,abnormityflag,costflag,lastauditflag INTO :firstdate,:enddate,:ll_wrkGrpid,:li_balcflag,:li_auditflag,:li_pmonth,:li_disflag,:li_itemauditflag,:li_abnormityflag,:li_costflag,:li_lastauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点资料失败 - 开始日期,结束日期' rslt = 0 GOTO ext END IF datastore ds_cp ds_cp = Create datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) IF li_balcflag = 0 THEN rslt = 0 arg_msg = '车间核算资料还未确认,不能核算成本' GOTO ext END IF IF li_auditflag = 0 THEN rslt = 0 arg_msg = '车间核算资料还未盘点审核,不能核算成本' GOTO ext END IF IF li_disflag = 0 THEN rslt = 0 arg_msg = '车间核算资料还未分摊用料,不能核算成本' GOTO ext END IF IF li_itemauditflag = 0 THEN rslt = 0 arg_msg = '车间核算资料还未执行费用分摊,不能核算成本' GOTO ext END IF IF li_abnormityflag = 0 THEN rslt = 0 arg_msg = '车间核算资料还未执行其它计件分摊,不能核算成本' GOTO ext END IF IF li_costflag = 1 THEN rslt = 0 arg_msg = '已执行过成本统计,不能重复执行' GOTO ext END IF IF li_lastauditflag = 1 THEN rslt = 0 arg_msg = '车间核算资料还未执行终审,不能再核算成本' GOTO ext END IF //检查日期段内未审单据 //1.领料单 SELECT count(*) INTO :cnt FROM u_sc_workgroup INNER JOIN u_workgroup ON u_sc_workgroup.wrkGrpid = u_workgroup.wrkGrpid INNER JOIN u_outware ON u_workgroup.workgroupid = u_outware.relid WHERE u_outware.flag = 0 AND u_outware.outdate >= :firstdate AND u_outware.outdate <= :enddate AND u_outware.billtype = 3 And u_sc_workgroup.storageid = :ll_wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询统计日期段内是否有未审核的领料单失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '统计日期段内有未审核的领料单,统计成本前请先审核' GOTO ext END IF //2.计件单 SELECT count(*) INTO :cnt FROM (SELECT u_sc_taskwork.orderid, u_sc_taskwork.scid FROM u_sc_taskwork INNER JOIN u_sc_taskworkmx ON u_sc_taskwork.billid = u_sc_taskworkmx.Billid AND u_sc_taskwork.scid = u_sc_taskworkmx.scid INNER JOIN u_Order_ml ON u_sc_taskwork.scid = u_Order_ml.scid AND u_sc_taskwork.orderid = u_Order_ml.OrderID WHERE (u_sc_taskwork.orderid > 0) AND (u_sc_taskwork.Wagemth = :li_pmonth) AND ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) AND (u_sc_taskwork_affirmflag = 0) UNION ALL SELECT u_scwg_taskwork_2_mx.orderid, u_scwg_taskwork_2.scid FROM u_scwg_taskwork_2_mx INNER JOIN u_scwg_taskwork_2 ON u_scwg_taskwork_2_mx.billid = u_scwg_taskwork_2.billid INNER JOIN u_Order_ml ON u_scwg_taskwork_2.scid = u_Order_ml.scid AND u_scwg_taskwork_2_mx.orderid = u_Order_ml.OrderID WHERE (u_scwg_taskwork_2_mx.orderid > 0) AND (u_scwg_taskwork_2.Wagemth = :li_pmonth) AND ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) AND (u_scwg_taskwork_2.affirmflag = 0) UNION ALL SELECT u_scwg_taskwork_day_mx.orderid, u_scwg_taskwork_day.scid FROM u_scwg_taskwork_day_mx INNER JOIN u_scwg_taskwork_day ON u_scwg_taskwork_day_mx.billid = u_scwg_taskwork_day.billid INNER JOIN u_Order_ml ON u_scwg_taskwork_day.scid = u_Order_ml.scid AND u_scwg_taskwork_day_mx.orderid = u_Order_ml.OrderID WHERE (u_scwg_taskwork_day_mx.orderid > 0) AND (u_scwg_taskwork_day.Wagemth = :li_pmonth) AND ( u_Order_ml.wrkGrpid = :ll_wrkgrpid) AND (u_scwg_taskwork_day.affirmflag = 0) ) v_scwg; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询统计月份是否有未确认的计件单失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '统计月份内有未确认的计件单,统计成本前请先确认' GOTO ext END IF //3.注塑质检单 SELECT count(*) INTO :cnt FROM u_data_collect INNER JOIN u_Order_ml ON u_data_collect.scid = u_Order_ml.scid AND u_data_collect.orderid = u_Order_ml.OrderID WHERE (u_data_collect.opdate >= :firstdate) AND (u_data_collect.opdate <= :enddate) AND (u_Order_ml.wrkGrpid = :ll_wrkgrpid) And (u_data_collect.flag <> 2 ) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询时间段内是否有注塑质检单未审核完成失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN rslt = 0 arg_msg = '时间段内有未完成审核的注塑质检单,统计成本前请先完成审核' GOTO ext END IF // row_cnt_cp = ds_cp.Retrieve(arg_atid) FOR ll_i = 1 To row_cnt_cp ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_i] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_i] ls_ordercode = ds_cp.Object.u_order_ml_ordercode[ll_i] //1.本期材料成本 SELECT sum(u_outwaremx.costamt) INTO :ld_mtrlcost FROM u_outwaremx INNER JOIN u_outware ON u_outwaremx.scid = u_outware.scid AND u_outwaremx.outwareid = u_outware.outwareid WHERE (u_outware.billtype = 3) AND (u_outware.flag = 1) AND (u_outwaremx.relid = :ll_orderid) And (u_outwaremx.scid = :ll_scid) AND (u_outware.outdate >= :firstdate AND (u_outware.outdate <= :enddate; IF sqlca.SQLCode = -1 THEN rslt = 0 arg_msg = '查询指令单:'+ls_ordercode+'材料成本失败,'+sqlca.SQLErrText GOTO ext END IF //2.本期人力成本 NEXT ext: RETURN rslt end function public function integer uof_cmpl_apportion_cp_ft_zqty (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_disflag,li_auditflag Decimal ld_sumqty,ld_itemamt,ld_zqty Long ll_cnt SELECT disflag,auditflag INTO :ll_disflag,:li_auditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表材料分摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_disflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过材料分摊操作,不能重复执行' GOTO ext END IF IF li_auditflag = 0 THEN rslt = 0 arg_msg = '该车间盘点表还没有审核,不能执行材料分摊操作' GOTO ext END IF datastore ds_pdb,ds_cp ds_pdb = CREATE datastore ds_pdb.DataObject = 'ds_apportion_pd_ware_rp' ds_pdb.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) row_cnt = ds_pdb.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有盘点数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_mtrlid String ls_status,ls_woodcode,ls_pcode Decimal ld_cpamt,ld_truerqqty Decimal ld_pypkqty,ld_ftqty,ld_ftamt,ld_cost //Open(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() //w_sys_wait_2jdt.wf_accepttol(row_cnt) //初始化进度条1 FOR ll_i = 1 TO row_cnt ll_mtrlid = ds_pdb.Object.mtrlid[ll_i] ls_status = ds_pdb.Object.u_warepdb_status[ll_i] ls_woodcode = ds_pdb.Object.u_warepdb_woodcode[ll_i] ls_pcode = ds_pdb.Object.u_warepdb_pcode[ll_i] ld_pypkqty = ds_pdb.Object.pypkqty[ll_i] ld_cost = ds_pdb.Object.u_warepdb_cost[ll_i] IF ld_pypkqty = 0 THEN GOTO _next //w_sys_wait_2jdt.wf_accepttol2(row_cnt_cp) //初始化进度条2 //w_sys_wait_2jdt.st_msg.Text = "正在统计..." ld_sumqty = 0 FOR ll_j = 1 TO row_cnt_cp ld_zqty = ds_cp.Object.zqty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ll_cnt = 0 END IF IF ll_cnt = 0 THEN CONTINUE SELECT sum(u_OrderRqMtrl_scll.trueRqqty/u_Order_ml.orderqty) INTO :ld_truerqqty FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ld_truerqqty = 0 END IF ld_sumqty = ld_sumqty + ld_zqty * ld_truerqqty NEXT if ld_sumqty = 0 then continue FOR ll_j = 1 TO row_cnt_cp //w_sys_wait_2jdt.wf_inc2(ll_j) ld_zqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ll_cnt = 0 SELECT count(*) INTO :ll_cnt FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ll_cnt = 0 END IF IF ll_cnt = 0 THEN CONTINUE SELECT sum(u_OrderRqMtrl_scll.trueRqqty /u_Order_ml.orderqty) INTO :ld_truerqqty FROM u_OrderRqMtrl_scll INNER JOIN u_Order_ml ON u_OrderRqMtrl_scll.scid = u_Order_ml.scid AND u_OrderRqMtrl_scll.OrderID = u_Order_ml.OrderID WHERE u_OrderRqMtrl_scll.orderid = :ll_orderid AND u_OrderRqMtrl_scll.scid = :ll_scid AND u_OrderRqMtrl_scll.mtrlid = :ll_mtrlid AND u_OrderRqMtrl_scll.status = :ls_status AND u_OrderRqMtrl_scll.woodcode = :ls_woodcode AND u_OrderRqMtrl_scll.pcode = :ls_pcode; IF sqlca.SQLCode <> 0 THEN ld_truerqqty = 0 END IF ld_ftqty = ld_zqty * ld_truerqqty / ld_sumqty * ld_pypkqty ld_ftamt = ld_ftqty * ld_cost INSERT INTO u_apportion_cp_ft (scid, orderid, atid, mtrlid, status, woodcode, pcode, qty, costamt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_mtrlid, :ls_status, :ls_woodcode, :ls_pcode, :ld_ftqty, :ld_ftamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令材料分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT _next: //w_sys_wait_2jdt.wf_inc(ll_i) NEXT UPDATE u_apportion_time SET disflag = 1, disdate = getdate(), disrep = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新材料分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: //Close(w_sys_wait_2jdt) IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_pdb DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_item_ft_zqty (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_itemauditflag Decimal ld_sumzqty,ld_itemamt,ld_zqty SELECT itemauditflag INTO :ll_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表费用分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_itemauditflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过费用分滩操作,不能重复执行' GOTO ext END IF datastore ds_item,ds_cp ds_item = CREATE datastore ds_item.DataObject = 'ds_apportion_item' ds_item.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(zqty) INTO :ld_sumzqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_item.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分滩操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_itemid Decimal ld_cpamt //Open(w_sys_wait_2jdt) //初始化进度条 //w_sys_wait_2jdt.Show() //w_sys_wait_2jdt.wf_accepttol(row_cnt) //初始化进度条1 FOR ll_i = 1 TO row_cnt ld_itemamt = ds_item.Object.u_apportion_item_amt[ll_i] ll_itemid = ds_item.Object.u_apportion_item_itemid[ll_i] //w_sys_wait_2jdt.wf_accepttol2(row_cnt_cp) //初始化进度条2 //w_sys_wait_2jdt.st_msg.Text = "正在统计..." FOR ll_j = 1 TO row_cnt_cp //w_sys_wait_2jdt.wf_inc2(ll_j) ld_zqty = ds_cp.Object.zqty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_zqty / ld_sumzqty * ld_itemamt INSERT INTO u_apportion_item_ft (scid, orderid, atid, itemid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_itemid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT //w_sys_wait_2jdt.wf_inc(ll_i) NEXT UPDATE u_apportion_time SET itemauditflag = 1, itemauditdate = getdate(), itemauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: //Close(w_sys_wait_2jdt) IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_item DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_glgz (long arg_atid, ref string arg_msg);Int rslt = 1 Long cnt,ll_wrkGrpid DateTime firstdate,enddate Int li_balcflag,li_lastauditflag,li_glgzflag Long li_pmonth Long ll_deptid String ls_handtype SELECT pmonth,wrkGrpid,balcflag,lastauditflag,glgzflag INTO :li_pmonth,:ll_wrkGrpid,:li_balcflag,:li_lastauditflag,:li_glgzflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点资料失败 - 开始日期,结束日期' rslt = 0 GOTO ext END IF IF li_glgzflag = 1 THEN rslt = 0 arg_msg = '已执行管理工资分摊,不能操作' GOTO ext END IF IF li_balcflag = 0 THEN arg_msg = '盘点未确认,不能操作' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '盘点已最终审核,不能操作' rslt = 0 GOTO ext END IF SELECT deptid INTO :ll_deptid FROM u_sc_wkp Where wrkGrpid = :ll_wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间对应的部门失败,'+sqlca.SQLErrText GOTO ext END IF SELECT handtype INTO :ls_handtype FROM cw_department Where departmentid = :ll_deptid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询部门信息失败,'+sqlca.SQLErrText GOTO ext END IF ls_handtype = ls_handtype + '%' DELETE u_apportion_gz Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除管理工资统计失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF INSERT INTO u_apportion_gz (atid, wageid, amt) SELECT :arg_atid,u_gz_wagemx.wageid, SUM(u_gz_wagemx.Wageamt * u_gz_wageitem.wagetype) AS sumamt FROM u_gz_wagemx INNER JOIN u_gz_wageitem ON u_gz_wagemx.wageid = u_gz_wageitem.wageid INNER JOIN u_gz_wage ON u_gz_wagemx.wagemth = u_gz_wage.wagemth and u_gz_wagemx.empid = u_gz_wage.empid INNER JOIN u_rs_empinfo ON u_gz_wage.empid = u_rs_empinfo.empid WHERE (u_gz_wageitem.if_cost = 1) AND (u_gz_wagemx.wagemth = :li_pmonth) AND (u_rs_empinfo.handtype LIKE :ls_handtype) Group By u_gz_wagemx.wageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '插入管理工资统计失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET u_apportion_time.glgzamt = a.amt FROM u_apportion_time, (SELECT u_apportion_gz.atid,sum(u_apportion_gz.amt) as amt FROM u_apportion_gz WHERE u_apportion_gz.atid = :arg_atid GROUP BY u_apportion_gz.atid ) a WHERE u_apportion_time.atid = a.atid And u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新盘点表车间管理人员工资金额失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmpl_apportion_glgz_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_glgzflag Decimal ld_sumqty,ld_wageamt,ld_cpqty SELECT glgzflag INTO :ll_glgzflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表管理工资摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_glgzflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过理工资分摊操作,不能重复执行' GOTO ext END IF datastore ds_glgz,ds_cp ds_glgz = CREATE datastore ds_glgz.DataObject = 'ds_apportion_glgz' ds_glgz.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty) INTO :ld_sumqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_glgz.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_wageid Decimal ld_cpamt FOR ll_i = 1 TO row_cnt ld_wageamt = ds_glgz.Object.amt[ll_i] ll_wageid = ds_glgz.Object.wageid[ll_i] FOR ll_j = 1 TO row_cnt_cp ld_cpqty = ds_cp.Object.u_apportion_cp_qty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_cpqty / ld_sumqty * ld_wageamt INSERT INTO u_apportion_gz_ft (scid, orderid, atid, wageid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_wageid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET glgzflag = 1, glgzdate = getdate(), glgzemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新管理工资分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_glgz DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_glgz_ft_zqty (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_glgzflag Decimal ld_sumqty,ld_wageamt,ld_zqty SELECT glgzflag INTO :ll_glgzflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表管理工资摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_glgzflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过理工资分摊操作,不能重复执行' GOTO ext END IF datastore ds_glgz,ds_cp ds_glgz = CREATE datastore ds_glgz.DataObject = 'ds_apportion_glgz' ds_glgz.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(zqty) INTO :ld_sumqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_glgz.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_wageid Decimal ld_cpamt FOR ll_i = 1 TO row_cnt ld_wageamt = ds_glgz.Object.amt[ll_i] ll_wageid = ds_glgz.Object.wageid[ll_i] FOR ll_j = 1 TO row_cnt_cp ld_zqty = ds_cp.Object.zqty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_zqty / ld_sumqty * ld_wageamt INSERT INTO u_apportion_gz_ft (scid, orderid, atid, wageid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_wageid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET glgzflag = 1, glgzdate = getdate(), glgzemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新管理工资分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_glgz DESTROY ds_cp RETURN rslt end function public function integer uof_del_apportion_glgz_ft (long arg_atid, ref string arg_msg);Int rslt = 1 Int li_glgzflag DateTime ld_nulldate SetNull(ld_nulldate) SELECT glgzflag INTO :li_glgzflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询该盘点是否已执行管理工资分摊失败' rslt = 0 GOTO ext END IF IF li_glgzflag = 0 THEN arg_msg = '该盘点还没有执行管理工资分摊,不能取消分滩' rslt = 0 GOTO ext END IF DELETE FROM u_apportion_gz_ft Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除指令管理工资分摊表操作失败!"+ sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET glgzflag = 0 , glgzdate = :ld_nulldate, glgzemp = '' Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新管理工资分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function public function integer uof_cmpl_apportion_item_ft_amt (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_itemauditflag Decimal ld_sumamt,ld_itemamt,ld_amt SELECT itemauditflag INTO :ll_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表费用分摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_itemauditflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过费用分摊操作,不能重复执行' GOTO ext END IF datastore ds_item,ds_cp ds_item = CREATE datastore ds_item.DataObject = 'ds_apportion_item' ds_item.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty * price) INTO :ld_sumamt FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_item.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_itemid Decimal ld_cpamt FOR ll_i = 1 TO row_cnt ld_itemamt = ds_item.Object.u_apportion_item_amt[ll_i] ll_itemid = ds_item.Object.u_apportion_item_itemid[ll_i] FOR ll_j = 1 TO row_cnt_cp ld_amt = ds_cp.Object.amt[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_amt / ld_sumamt * ld_itemamt INSERT INTO u_apportion_item_ft (scid, orderid, atid, itemid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_itemid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET itemauditflag = 1, itemauditdate = getdate(), itemauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_item DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_item_ft_zamt (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_itemauditflag Decimal ld_sumamt,ld_itemamt,ld_zamt SELECT itemauditflag INTO :ll_itemauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表费用分摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_itemauditflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过费用分摊操作,不能重复执行' GOTO ext END IF datastore ds_item,ds_cp ds_item = CREATE datastore ds_item.DataObject = 'ds_apportion_item' ds_item.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(zqty * price) INTO :ld_sumamt FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_item.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_itemid Decimal ld_cpamt FOR ll_i = 1 TO row_cnt ld_itemamt = ds_item.Object.u_apportion_item_amt[ll_i] ll_itemid = ds_item.Object.u_apportion_item_itemid[ll_i] FOR ll_j = 1 TO row_cnt_cp ld_zamt = ds_cp.Object.zamt[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_zamt / ld_sumamt * ld_itemamt INSERT INTO u_apportion_item_ft (scid, orderid, atid, itemid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_itemid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET itemauditflag = 1, itemauditdate = getdate(), itemauditemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新费用分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_item DESTROY ds_cp RETURN rslt end function public function integer uof_cmp_apportion_abnormityamt_ft_zqty (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_abnormityflag Decimal ld_sumqty,ld_cpqty Decimal ld_abnormityamt SELECT abnormityflag INTO :ll_abnormityflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_abnormityflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过异常计件分滩操作,不能重复执行' GOTO ext END IF SELECT abnormityamt INTO :ld_abnormityamt FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件金额失败,'+sqlca.SQLErrText GOTO ext END IF datastore ds_cp ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(zqty) INTO :ld_sumqty FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt_cp = ds_cp.Retrieve(arg_atid) Long ll_scid,ll_orderid Decimal ld_ftamt FOR ll_j = 1 TO row_cnt_cp ld_cpqty = ds_cp.Object.zqty[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_ftamt = ld_cpqty / ld_sumqty * ld_abnormityamt INSERT INTO u_apportion_abnormity_ft (scid, orderid, atid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ld_ftamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令异常计件分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT UPDATE u_apportion_time SET abnormityflag = 1, abnormitydate = getdate(), abnormityemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新异常计件分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_cp RETURN rslt end function public function integer uof_cmp_apportion_abnormityamt_ft_amt (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_abnormityflag Decimal ld_sumamt,ld_amt Decimal ld_abnormityamt SELECT abnormityflag INTO :ll_abnormityflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_abnormityflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过异常计件分滩操作,不能重复执行' GOTO ext END IF SELECT abnormityamt INTO :ld_abnormityamt FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件金额失败,'+sqlca.SQLErrText GOTO ext END IF datastore ds_cp ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty * price) INTO :ld_sumamt FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt_cp = ds_cp.Retrieve(arg_atid) Long ll_scid,ll_orderid Decimal ld_ftamt FOR ll_j = 1 TO row_cnt_cp ld_amt = ds_cp.Object.amt[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_ftamt = ld_amt / ld_sumamt * ld_abnormityamt INSERT INTO u_apportion_abnormity_ft (scid, orderid, atid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ld_ftamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令异常计件分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT UPDATE u_apportion_time SET abnormityflag = 1, abnormitydate = getdate(), abnormityemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新异常计件分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_cp RETURN rslt end function public function integer uof_cmp_apportion_abnormityamt_ft_zamt (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_abnormityflag Decimal ld_sumamt,ld_amt Decimal ld_abnormityamt SELECT abnormityflag INTO :ll_abnormityflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件分滩标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_abnormityflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过异常计件分滩操作,不能重复执行' GOTO ext END IF SELECT abnormityamt INTO :ld_abnormityamt FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表异常计件金额失败,'+sqlca.SQLErrText GOTO ext END IF datastore ds_cp ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(zqty * price) INTO :ld_sumamt FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt_cp = ds_cp.Retrieve(arg_atid) Long ll_scid,ll_orderid Decimal ld_ftamt FOR ll_j = 1 TO row_cnt_cp ld_amt = ds_cp.Object.zamt[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_ftamt = ld_amt / ld_sumamt * ld_abnormityamt INSERT INTO u_apportion_abnormity_ft (scid, orderid, atid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ld_ftamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令异常计件分滩表失败'+sqlca.SQLErrText GOTO ext END IF NEXT UPDATE u_apportion_time SET abnormityflag = 1, abnormitydate = getdate(), abnormityemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新异常计件分滩标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_glgz_ft_amt (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_glgzflag Decimal ld_sumamt,ld_wageamt,ld_amt SELECT glgzflag INTO :ll_glgzflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表管理工资摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_glgzflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过理工资分摊操作,不能重复执行' GOTO ext END IF datastore ds_glgz,ds_cp ds_glgz = CREATE datastore ds_glgz.DataObject = 'ds_apportion_glgz' ds_glgz.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(qty * price) INTO :ld_sumamt FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_glgz.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_wageid Decimal ld_cpamt FOR ll_i = 1 TO row_cnt ld_wageamt = ds_glgz.Object.amt[ll_i] ll_wageid = ds_glgz.Object.wageid[ll_i] FOR ll_j = 1 TO row_cnt_cp ld_amt = ds_cp.Object.amt[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_amt / ld_sumamt * ld_wageamt INSERT INTO u_apportion_gz_ft (scid, orderid, atid, wageid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_wageid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET glgzflag = 1, glgzdate = getdate(), glgzemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新管理工资分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_glgz DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_glgz_ft_zamt (long arg_atid, ref string arg_msg);Int rslt = 1 Long row_cnt,row_cnt_cp,ll_i,ll_j,ll_glgzflag Decimal ld_sumamt,ld_wageamt,ld_amt SELECT glgzflag INTO :ll_glgzflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询车间盘点表管理工资摊标记失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_glgzflag = 1 THEN rslt = 0 arg_msg = '该车间盘点表已经执行过理工资分摊操作,不能重复执行' GOTO ext END IF datastore ds_glgz,ds_cp ds_glgz = CREATE datastore ds_glgz.DataObject = 'ds_apportion_glgz' ds_glgz.SetTransObject(sqlca) ds_cp = CREATE datastore ds_cp.DataObject = 'ds_apportion_cp' ds_cp.SetTransObject(sqlca) SELECT sum(zqty * price) INTO :ld_sumamt FROM u_apportion_cp WHERE orderid > 0 AND atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点表产量失败'+sqlca.SQLErrText GOTO ext END IF row_cnt = ds_glgz.Retrieve(arg_atid) row_cnt_cp = ds_cp.Retrieve(arg_atid) IF row_cnt = 0 THEN rslt = 0 arg_msg = '没有统计费用数据,不能执行费用分摊操作' GOTO ext END IF Long ll_scid,ll_orderid,ll_wageid Decimal ld_cpamt FOR ll_i = 1 TO row_cnt ld_wageamt = ds_glgz.Object.amt[ll_i] ll_wageid = ds_glgz.Object.wageid[ll_i] FOR ll_j = 1 TO row_cnt_cp ld_amt = ds_cp.Object.zamt[ll_j] ll_scid = ds_cp.Object.u_apportion_cp_scid[ll_j] ll_orderid = ds_cp.Object.u_apportion_cp_orderid[ll_j] IF ll_orderid = 0 THEN CONTINUE ld_cpamt = ld_amt / ld_sumamt * ld_wageamt INSERT INTO u_apportion_gz_ft (scid, orderid, atid, wageid, amt, opdate, opemp) VALUES (:ll_scid, :ll_orderid, :arg_atid, :ll_wageid, :ld_cpamt, getdate(), :publ_operator); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令费用分摊表失败'+sqlca.SQLErrText GOTO ext END IF NEXT NEXT UPDATE u_apportion_time SET glgzflag = 1, glgzdate = getdate(), glgzemp = :publ_operator Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新管理工资分摊标记失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF DESTROY ds_glgz DESTROY ds_cp RETURN rslt end function public function integer uof_cmpl_apportion_item (long arg_atid, integer arg_ifoutware, ref string arg_msg);Int rslt = 1 Long cnt,ll_wrkGrpid,ll_scid DateTime firstdate,enddate Int li_balcflag,li_lastauditflag,li_itemauditflag Long ll_wkpid_arr[] Long ll_cnt_wkp,ll_i Long ll_itemid,ll_pmonth Decimal ld_amt s_produce_cost arg_s_cost uo_produce_cost uo_cost uo_cost = Create uo_produce_cost SELECT u_apportion_time.firstdate, u_apportion_time.enddate, u_apportion_time.wrkGrpid, u_apportion_time.balcflag, u_apportion_time.lastauditflag, u_apportion_time.itemauditflag, u_sc_wkp.scid, u_apportion_time.pmonth INTO :firstdate, :enddate, :ll_wrkGrpid, :li_balcflag, :li_lastauditflag, :li_itemauditflag, :ll_scid, :ll_pmonth FROM u_apportion_time INNER JOIN u_sc_wkp ON u_apportion_time.wrkGrpid = u_sc_wkp.wrkGrpid Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点资料失败 - 开始日期,结束日期' rslt = 0 GOTO ext END IF IF li_itemauditflag = 1 THEN rslt = 0 arg_msg = '已执行费用分滩,不能操作' GOTO ext END IF IF li_balcflag = 0 THEN arg_msg = '盘点未确认,不能操作' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '盘点已最终审核,不能操作' rslt = 0 GOTO ext END IF DELETE u_apportion_item Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除费用统计失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE u_produce_cost_mx FROM u_produce_cost_mx INNER JOIN u_produce_cost ON u_produce_cost_mx.billid = u_produce_cost.billid Where u_produce_cost.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除自动生成的车间费用单明细失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM u_produce_cost Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '删除自动生成的车间费用单失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //统计其它出仓单 IF arg_ifoutware = 1 THEN cnt = 0 SELECT count(*) INTO :cnt FROM u_outware WHERE billtype = 8 AND outdate >= :firstdate AND outdate <= :enddate And flag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询当前盘点时间范围是否存在没有审核的其它出仓单操作失败'+'~r~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的其它出仓单,请先审核!' rslt = 0 GOTO ext END IF SELECT itemid INTO :ll_itemid FROM u_itemdef Where dfttype = 16; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询默认生产分摊费用项目失败,'+sqlca.SQLErrText GOTO ext END IF SELECT count(*) INTO :cnt FROM u_outware INNER JOIN u_sc_wkp ON u_outware.deptid = u_sc_wkp.deptid WHERE (u_outware.billtype = 8) AND (u_outware.flag = 0) AND (u_outware.outdate >= :firstdate) AND (u_outware.outdate <= :enddate) And (u_sc_wkp.wrkGrpid = :ll_wrkGrpid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的其它出仓单操作失败'+'~r~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的其它出仓单,请先审核!' rslt = 0 GOTO ext END IF SELECT sum(u_outwaremx.qty * u_outwaremx.fprice) INTO :ld_amt FROM u_outware INNER JOIN u_sc_wkp ON u_outware.deptid = u_sc_wkp.deptid INNER JOIN u_outwaremx ON u_outware.scid = u_outwaremx.scid AND u_outware.outwareid = u_outwaremx.outwareid WHERE (u_outware.billtype = 8) AND (u_outware.flag = 1) AND (u_outware.outdate >= :firstdate) AND (u_outware.outdate <= :enddate) And (u_sc_wkp.wrkGrpid = :ll_wrkGrpid) ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围其它出仓单金额操作失败'+'~r~n'+sqlca.SQLErrText GOTO ext END IF IF IsNull(ld_amt) THEN ld_amt = 0 IF ld_amt > 0 THEN arg_s_cost.scid = ll_scid arg_s_cost.billid = 0 arg_s_cost.billdate = firstdate arg_s_cost.billmth = ll_pmonth arg_s_cost.rep = publ_operator arg_s_cost.dscrp = '车间核算统计费用自动生成(其它出仓单费用)' arg_s_cost.wrkGrpid = ll_wrkGrpid arg_s_cost.billtype = 0 arg_s_cost.atid = arg_atid arg_s_cost.arg_s_costmx[1].printid = 1 arg_s_cost.arg_s_costmx[1].itemid = ll_itemid arg_s_cost.arg_s_costmx[1].amt = ld_amt arg_s_cost.arg_s_costmx[1].dscrp = '' IF uo_cost.Save(arg_s_cost,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '自动建立车间费用单失败,'+arg_msg GOTO ext END IF IF uo_cost.audit(uo_cost.uo_billid,publ_operator,arg_msg,False) = 0 THEN rslt = 0 arg_msg = '审核自动建立的车间费用单失败,'+arg_msg GOTO ext END IF END IF END IF SELECT count(*) INTO :cnt FROM u_produce_cost_mx,u_produce_cost WHERE u_produce_cost.billid = u_produce_cost_mx.billid AND u_produce_cost.flag = 0 AND u_produce_cost.billdate >= :firstdate AND u_produce_cost.billdate <= :enddate And u_produce_cost.wrkGrpid = :ll_wrkGrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的车间费用单操作失败! ~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的车间费用单!' rslt = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM U_income_expenses INNER JOIN U_income_expenses_mx ON U_income_expenses.billid = U_income_expenses_mx.billid INNER JOIN u_sc_wkp ON U_income_expenses_mx.deptid = u_sc_wkp.deptid INNER JOIN u_itemdef ON U_income_expenses_mx.itemid = u_itemdef.itemid WHERE (u_itemdef.itemflag = - 1) AND (U_income_expenses_mx.deptid > 0) AND (u_sc_wkp.wrkgrpid = :ll_wrkGrpid) AND U_income_expenses.outdate >= :firstdate AND U_income_expenses.outdate <= :enddate AND U_income_expenses.flag = 0 AND U_income_expenses.billtype = 0 And U_income_expenses_mx.relbillid = 0 ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询当前盘点时间范围是否存在没有审核的其它收入支出单操作失败! ~n'+sqlca.SQLErrText GOTO ext END IF IF cnt > 0 THEN arg_msg = '当前盘点时间范围存在没有审核的其它收入支出单!' rslt = 0 GOTO ext END IF INSERT INTO u_apportion_item (atid,itemid,amt) SELECT :arg_atid,itemid, SUM(amt) AS amt FROM ( SELECT u_produce_cost_mx.itemid, sum(u_produce_cost_mx.amt) as amt FROM u_produce_cost_mx, u_produce_cost WHERE u_produce_cost.billid = u_produce_cost_mx.billid AND u_produce_cost.flag = 1 AND u_produce_cost.billdate >= :firstdate AND u_produce_cost.billdate <= :enddate AND u_produce_cost.wrkGrpid = :ll_wrkGrpid GROUP BY u_produce_cost_mx.itemid UNION ALL SELECT U_income_expenses_mx.itemid, sum(U_income_expenses_mx.amt) as amt FROM U_income_expenses INNER JOIN U_income_expenses_mx ON U_income_expenses.billid = U_income_expenses_mx.billid INNER JOIN u_sc_wkp ON U_income_expenses_mx.deptid = u_sc_wkp.deptid INNER JOIN u_itemdef ON U_income_expenses_mx.itemid = u_itemdef.itemid WHERE (u_itemdef.itemflag = - 1) AND (U_income_expenses_mx.deptid > 0) AND (u_sc_wkp.wrkgrpid = :ll_wrkGrpid) AND U_income_expenses.outdate >= :firstdate AND U_income_expenses.outdate <= :enddate AND U_income_expenses.flag = 1 AND U_income_expenses.billtype = 0 AND U_income_expenses_mx.relbillid = 0 GROUP BY U_income_expenses_mx.itemid ) v_itemamt Group By itemid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '读取车间相关其它收入支出单及车间费用单失败! ~n'+sqlca.SQLErrText GOTO ext END IF UPDATE u_apportion_time SET itemamt = a.amt FROM u_apportion_time, (SELECT u_apportion_item.atid,sum(u_apportion_item.amt) as amt FROM u_apportion_item WHERE u_apportion_item.atid = :arg_atid GROUP BY u_apportion_item.atid ) a WHERE u_apportion_time.atid = a.atid And u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新盘点表异常计件金额失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF Destroy uo_cost RETURN rslt end function private function integer uof_update_apportion_mtrl (long arg_atid, long arg_mtrlid, string arg_status, string arg_woodcode, string arg_pcode, string arg_mtrlname, decimal arg_orderqty, decimal arg_orderamt, decimal arg_cost, decimal arg_orqty, decimal arg_oramt, decimal arg_inqty, decimal arg_inamt, decimal arg_balcqty, decimal arg_balcamt, decimal arg_outqty_pk, decimal arg_outamt_pk, decimal arg_outqty_scllplan, decimal arg_outamt_scllplan, decimal arg_outqty_fl, decimal arg_outamt_fl, decimal arg_outqty_tl, decimal arg_outamt_tl, decimal arg_outqty_bl, decimal arg_outamt_bl, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 UPDATE u_apportion_mtrl SET orderqty = orderqty + :arg_orderqty, orderamt = orderamt + :arg_orderamt, cost = :arg_cost, inqty = inqty + :arg_inqty, inamt = inamt + :arg_inamt, orqty = orqty + :arg_orqty, oramt = oramt + :arg_oramt, balcamt = balcamt + :arg_balcamt, balcqty = balcqty + :arg_balcqty, outqty_pk = outqty_pk + :arg_outqty_pk, outamt_pk = outamt_pk + :arg_outamt_pk, outqty_fl = outqty_fl + :arg_outqty_fl, outamt_fl = outamt_fl + :arg_outamt_fl, outqty_tl = outqty_tl + :arg_outqty_tl, outamt_tl = outamt_tl + :arg_outamt_tl, outqty_bl = outqty_bl + :arg_outqty_bl, outamt_bl = outamt_bl + :arg_outamt_bl, outqty_scllplan = outqty_scllplan + :arg_outqty_scllplan, outamt_scllplan = outamt_scllplan + :arg_outamt_scllplan WHERE atid = :arg_atid AND mtrlid = :arg_mtrlid AND status = :arg_status AND woodcode = :arg_woodcode And pcode = :arg_pcode; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_apportion_mtrl (atid,mtrlid,status,woodcode,pcode, orderqty,orqty,oramt,inqty,inamt, balcqty,balcamt,cost, outqty_pk,outamt_pk,outqty_scllplan,outamt_scllplan, outqty_fl,outamt_fl,outqty_tl,outamt_tl, outqty_bl,outamt_bl) VALUES(:arg_atid,:arg_mtrlid,:arg_status,:arg_woodcode,:arg_pcode, :arg_orderqty,:arg_orqty,:arg_oramt,:arg_inqty,:arg_inamt, :arg_balcqty,:arg_balcamt,:arg_cost, :arg_outqty_pk,:arg_outamt_pk,:arg_outqty_scllplan,:arg_outamt_scllplan, :arg_outqty_fl,:arg_outamt_fl,:arg_outqty_tl,:arg_outamt_tl, :arg_outqty_bl,:arg_outamt_bl); IF sqlca.SQLCode <> 0 THEN arg_msg = '统计材料:'+arg_mtrlname+' 用料失败' rslt = 0 GOTO ext END IF END IF ELSE arg_msg = '更新材料:'+arg_mtrlname+' 用料失败' rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer uof_cmpl_apportion_jjgz (long arg_atid, decimal arg_jjgzamt, ref string arg_msg);Int rslt = 1 Int li_balcflag,li_lastauditflag Long li_pmonth SELECT balcflag,lastauditflag INTO :li_balcflag,:li_lastauditflag FROM u_apportion_time Where atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询盘点资料失败 - 开始日期,结束日期' rslt = 0 GOTO ext END IF IF li_balcflag = 0 THEN arg_msg = '盘点未确认,不能操作' rslt = 0 GOTO ext END IF IF li_lastauditflag = 1 THEN arg_msg = '盘点已最终审核,不能操作' rslt = 0 GOTO ext END IF UPDATE u_apportion_time SET u_apportion_time.jjgzamt = :arg_jjgzamt WHERE u_apportion_time.atid = :arg_atid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新车间计件工资金额失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; ELSE COMMIT; END IF RETURN rslt end function on uo_apportion.create call super::create TriggerEvent( this, "constructor" ) end on on uo_apportion.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('151',str_optionvalue,arg_msg) uo_option_inware_sc_location = Long(str_optionvalue) f_get_sys_option_value('377',str_optionvalue,arg_msg) uo_option_scll_plan_wsaudit = Long(str_optionvalue) end event