$PBExportHeader$uo_finish.sru forward global type uo_finish from nonvisualobject end type end forward global type uo_finish from nonvisualobject end type global uo_finish uo_finish type variables public protectedwrite long finishid public protectedwrite string finishcode public protectedwrite datetime opdate public protectedwrite string opemp public protectedwrite string modemp public protectedwrite datetime moddate public protectedwrite string auditingrep,secauditingrep,thrauditingrep public protectedwrite datetime auditingdate,secauditingdate,thrauditingdate public protectedwrite long flag public protectedwrite long secflag,thrflag long scid string relcode string assign_emp datetime finishdate long printnum long wrkGrpid //自制:工组 id; 外协:供应商id long wagemth //自制:月份; 外协:结算方式 string dscrp long billtype //0:工序派工; 1:外协工序派工 string inputway //建立途径 (来自安卓.....) Boolean if_getid_ture = false long it_mxbt=0 //明细结构数组末指针 //private: s_finish_mx s_finish_mx[] //明细结构 boolean it_newbegin=true //新建标志 boolean it_updatebegin=false//修改标志 int uo_option_inware_mtrlcuscode int uo_option_taskplancode int uo_option_finish_wagemth_type int uo_option_orderrqwp_auditgj end variables forward prototypes public function integer p_clearmx () public function integer p_reset () public function integer newbegin (integer arg_scid, ref string arg_msg) public function integer updatebegin (long arg_finishid, ref string arg_msg) public function integer getinfo (long arg_finishid, ref string arg_msg) public function integer save (s_finish_mx s_mx[], ref string arg_msg, boolean arg_ifcommit) public function integer audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit) public function integer c_audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit) public function integer secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit) public function integer c_secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit) public function integer c_thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit) public function integer del (long arg_finishid, ref string arg_msg, boolean arg_ifcommit) public function integer p_del_inware (long arg_inwareid, long arg_printid, ref string arg_msg) public function integer uof_find_cust (long arg_scid, long arg_orderid, ref long arg_cusid, ref string arg_plancode, ref string arg_mtrlcuscode, ref string arg_msg) public function integer p_del_taskwork (ref string arg_msg) public function integer p_create_inware (long arg_printid, long arg_taskid, long arg_storageid, string arg_location, decimal arg_comqty, decimal arg_workprice, string arg_mxdscrp, ref string arg_msg) public function integer p_getinfo (long arg_finishid, ref string arg_msg) public function integer p_create_taskwork (s_finish_mx s_mx[], ref string arg_msg, integer arg_ifaudit) public function integer thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit, integer arg_ifaudit) public function integer p_del_mustpay (s_finish_mx s_mx[], ref string arg_msg) public function integer p_create_mustpay (s_finish_mx s_mx[], ref string arg_msg) public function integer mod_price (long arg_finishid, long arg_printid, decimal arg_fprice, decimal arg_jgprice, decimal arg_taxrate, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer p_clearmx ();//INT p_clearmx() //清除明细 it_mxbt=0 RETURN 1 end function public function integer p_reset ();//int p_reset() //清除对象及其明细 scid = 0 finishid = 0 finishcode = '' relcode = '' assign_emp = '' wrkGrpid = 0 opemp = '' modemp = '' auditingrep = '' flag= 0 secflag = 0 dscrp = '' thrflag = 0 wagemth = 0 SetNull(finishdate) billtype = 0 //------- it_newbegin=false it_updatebegin=false it_mxbt = 0 //清除明细 p_clearmx() RETURN 1 end function public function integer newbegin (integer arg_scid, ref string arg_msg);//重置对象,设定业务类型与关联ID,准备建立新单 //0 fail 1 success Long rslt = 1,CNT = 0 IF arg_scid < 0 THEN arg_msg = '请选择分部' rslt = 0 GOTO ext END IF p_reset() scid = arg_scid it_newbegin = TRUE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer updatebegin (long arg_finishid, ref string arg_msg);//UPDATEbegin(long arg_finishid,ref string arg_msg) //从置对象,设定业务类型与关联ID,准备更新进仓单 //0 fail 1 success Long rslt = 1 IF arg_finishid <= 0 THEN rslt = 0 ARG_MSG = '错误销售订单唯一码' GOTO ext END IF IF p_getinfo(arg_finishid,ARG_MSG) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = '完工单已经审核,不可以修改' GOTO ext END IF p_clearmx() //清除明细 it_newbegin = FALSE it_updatebegin = TRUE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer getinfo (long arg_finishid, ref string arg_msg);//getinfo(long arg_finishid,string arg_msg) //0 失败 1成功 Int rslt = 1,i = 1,no_mxcheck = 0 IF arg_finishid <= 0 THEN rslt = 0 arg_msg = '错误完工单唯一码' GOTO ext END IF IF p_getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF //用游标读取明细 DECLARE cur_finishmx CURSOR FOR SELECT u_finishmx.scid, u_finishmx.finishid, u_finishmx.printid, u_finishmx.taskid, u_finishmx.procode, u_finishmx.proname, u_finishmx.comqty, u_finishmx.workprice, u_finishmx.mxdscrp, u_finishmx.Wageid, u_finishmx.empid, u_finishmx.workgroupid, u_finishmx.reltaskworkid, u_finishmx.reltaskworkcode, u_finishmx.storageid, u_finishmx.relinwareid, u_finishmx.relinwarecode, u_sc_task.taskcode, u_sc_task.flag, u_sc_task.lastflag, u_finishmx.location, isnull(u_gz_wageitem.wagemode,0), u_sc_task.mtrlid, u_sc_task.status, u_sc_task.woodcode, u_sc_task.pcode FROM u_finishmx INNER JOIN u_sc_task ON u_finishmx.taskid = u_sc_task.taskid LEFT OUTER JOIN u_gz_wageitem ON u_finishmx.wageid = u_gz_wageitem.wageid WHERE u_finishmx.finishid = :arg_finishid ; OPEN cur_finishmx; FETCH cur_finishmx INTO :s_finish_mx[i].scid,:s_finish_mx[i].finishid, :s_finish_mx[i].printid,:s_finish_mx[i].taskid, :s_finish_mx[i].procode, :s_finish_mx[i].proname, :s_finish_mx[i].comqty, :s_finish_mx[i].workprice, :s_finish_mx[i].mxdscrp, :s_finish_mx[i].Wageid, :s_finish_mx[i].empid, :s_finish_mx[i].workgroupid, :s_finish_mx[i].reltaskworkid, :s_finish_mx[i].reltaskworkcode, :s_finish_mx[i].storageid, :s_finish_mx[i].relinwareid, :s_finish_mx[i].relinwarecode, :s_finish_mx[i].taskcode, :s_finish_mx[i].taskflag, :s_finish_mx[i].lastflag, :s_finish_mx[i].location, :s_finish_mx[i].wagemode, :s_finish_mx[i].mtrlid, :s_finish_mx[i].status, :s_finish_mx[i].woodcode, :s_finish_mx[i].pcode; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_finishmx INTO :s_finish_mx[i].scid,:s_finish_mx[i].finishid, :s_finish_mx[i].printid,:s_finish_mx[i].taskid, :s_finish_mx[i].procode, :s_finish_mx[i].proname, :s_finish_mx[i].comqty, :s_finish_mx[i].workprice, :s_finish_mx[i].mxdscrp, :s_finish_mx[i].Wageid, :s_finish_mx[i].empid, :s_finish_mx[i].workgroupid, :s_finish_mx[i].reltaskworkid, :s_finish_mx[i].reltaskworkcode, :s_finish_mx[i].storageid, :s_finish_mx[i].relinwareid, :s_finish_mx[i].relinwarecode, :s_finish_mx[i].taskcode, :s_finish_mx[i].taskflag, :s_finish_mx[i].lastflag, :s_finish_mx[i].location, :s_finish_mx[i].wagemode, :s_finish_mx[i].mtrlid, :s_finish_mx[i].status, :s_finish_mx[i].woodcode, :s_finish_mx[i].pcode; LOOP CLOSE cur_finishmx; //检验明细是否读入完整 SELECT count(*) INTO :no_mxcheck FROM u_finishmx Where u_finishmx.finishid = :arg_finishid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,完工单明细数量" GOTO ext END IF IF i <> (no_mxcheck+1) THEN rslt = 0 arg_msg = "查询操作失败,完工单明细" GOTO ext END IF it_mxbt = i - 1 it_newbegin = FALSE it_updatebegin = FALSE ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer save (s_finish_mx s_mx[], ref string arg_msg, boolean arg_ifcommit);Int rslt = 1,i, j DateTime server_dt Long ll_finishid,ll_lastflag String ls_finishcode Long cnt DateTime ld_finishdate String ls_sccode Decimal lde_workhour String ls_empstr IF uo_option_finish_wagemth_type = -1000 THEN rslt = 0 arg_msg = '选项:[401]工序完工单的计件月份按仓审时间,读取初始默认值失败,操作取消!' GOTO ext END IF datastore ds ds = Create datastore IF sys_option_finish_taskwork_emp = 0 THEN // 工作中心派工的工序完工单计件审时生成计件单员工明细模式 ds.DataObject = 'ds_workgroupmx_empid' ELSE ds.DataObject = 'ds_sc_task_empid' END IF ds.SetTransObject(sqlca) IF it_newbegin = False And it_updatebegin = False THEN rslt = 0 arg_msg = "非编辑状态不可以提交" GOTO ext END IF IF IsNull(relcode) THEN relcode = '' IF IsNull(scid) THEN scid = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(assign_emp) THEN assign_emp = '' IF IsNull(Wrkgrpid) THEN Wrkgrpid = 0 IF IsNull(Wagemth) THEN Wagemth = 0 if isnull(inputway) then inputway = '' IF assign_emp = '' THEN arg_msg = '请填入负责人!' rslt = 0 GOTO ext END IF opemp = publ_operator SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF opdate = server_dt //填写单据建立时间(最近修改时间) IF Wrkgrpid = 0 THEN rslt = 0 IF billtype = 0 THEN arg_msg = "请选择工组" ELSE arg_msg = "请选择供应商" END IF GOTO ext END IF IF billtype = 0 THEN IF uo_option_finish_wagemth_type = 0 THEN IF Wagemth = 0 THEN rslt = 0 arg_msg = "请填入计件月份" GOTO ext END IF ELSE Wagemth = 0 END IF ELSE IF Wagemth = 0 THEN // rslt = 0 arg_msg = "请选择结算方式" GOTO ext END IF END IF it_mxbt = UpperBound(s_mx) IF it_mxbt = 0 THEN //如果输入物料资料错则已经清空 rslt = 0 arg_msg = "没有正确完工单明细内容" GOTO ext END IF //检查完工单数量是否超派工单 Decimal ld_qty_otherfinish_notaudit Decimal ld_qty_sc_task,ld_fqty_sc_task Decimal ld_qty_samebill_othermx Long ll_orderid String ls_relcode,ls_relcode_arr[] Long it_mxbt_rel,k Int li_wagemode Int li_tasktype FOR i = 1 To it_mxbt SELECT u_sc_task.qty,u_sc_task.fqty,u_sc_task.orderid,u_sc_task.tasktype INTO :ld_qty_sc_task,:ld_fqty_sc_task,:ll_orderid,:li_tasktype From u_sc_task Where u_sc_task.taskid = :s_mx[i].taskid; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(i)+',查询相关派工单数量及已完成数失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT taskrelcode INTO :ls_relcode FROM u_order_ml WHERE scid = :scid And orderid = :ll_orderid; IF sqlca.SQLCode = 0 THEN FOR k = 1 To it_mxbt_rel IF ls_relcode = ls_relcode_arr[k] THEN GOTO _exit_rel END IF NEXT it_mxbt_rel++ ls_relcode_arr[it_mxbt_rel] = ls_relcode _exit_rel: END IF SELECT isnull(sum(u_finishmx.comqty),0) INTO :ld_qty_otherfinish_notaudit FROM u_finish,u_finishmx WHERE u_finish.finishid <> :finishid AND u_finish.finishid = u_finishmx.finishid AND u_finishmx.taskid = :s_mx[i].taskid And u_finish.flag = 0; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(i)+',查询相关派工单其它已开未审完工单数量失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_qty_samebill_othermx = 0 FOR j = 1 To i - 1 IF s_mx[j].taskid = s_mx[i].taskid THEN ld_qty_samebill_othermx += s_mx[j].comqty END IF NEXT IF ld_qty_sc_task < ld_fqty_sc_task + ld_qty_otherfinish_notaudit + ld_qty_samebill_othermx + s_mx[i].comqty THEN arg_msg = '明细行:'+String(i)+',超派工单数量,请检查,~n派工数量:'+String(ld_qty_sc_task,'##0.#########')+'~n已完工数量:'+String(ld_fqty_sc_task,'##0.#########')+'~n其它完工单已开未审数量:'+String(ld_qty_otherfinish_notaudit,'##0.#########')+'~n本单其它明细行相同派工单数量:'+String(ld_qty_samebill_othermx,'##0.#########')+'~n本明细数量:'+String(s_mx[i].comqty,'##0.#########') rslt = 0 GOTO ext END IF IF s_mx[i].wageid > 0 THEN SELECT wagemode INTO :li_wagemode FROM u_gz_wageitem Where wageid = :s_mx[i].wageid; IF sqlca.SQLCode <> 0 THEN arg_msg = '明细行:'+String(i)+',查询工资项目属性失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF li_wagemode <> 16 And li_wagemode <> 17 And li_wagemode <> 12 THEN arg_msg = '明细行:'+String(i)+',工资项目类型不属于工作中心计件或个人计件,请检查' rslt = 0 GOTO ext END IF If (li_wagemode = 16 Or li_wagemode = 17) And s_mx[i].workgroupid = 0 THEN arg_msg = '明细行:'+String(i)+',工资项目类型属于工作中心计件,但没有选择工作中心,请检查' rslt = 0 GOTO ext END IF IF li_wagemode = 12 And s_mx[i].empid = 0 THEN arg_msg = '明细行:'+String(i)+',工资项目类型属于个人计件,但没有选择员工,请检查' rslt = 0 GOTO ext END IF END IF //计算实际工时 //实际工时=完工时间-开始时间-准备工时-收尾工时-待工工时 SELECT top 1 datediff(second, :s_mx[i].starttime, :s_mx[i].endtime) / 3600.0 - :s_mx[i].beforehour - :s_mx[i].afterhour - :s_mx[i].waithour INTO :lde_workhour From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "计算实际工时错误, "+sqlca.SQLErrText GOTO ext END IF IF IsNull(lde_workhour) THEN lde_workhour = 0 IF lde_workhour < 0 THEN arg_msg = '明细行:'+String(i)+',计算实际工时为['+String(lde_workhour, '#,##0.0####')+'],不合逻辑' rslt = 0 GOTO ext END IF s_mx[i].workhour = lde_workhour //按工作中心”派工类型,记录工作中心人员 ls_empstr = '' IF s_mx[i].workgroupid > 0 THEN IF sys_option_finish_taskwork_emp = 1 And li_tasktype = 1 THEN cnt = ds.Retrieve(s_mx[i].taskid) ELSE cnt = ds.Retrieve(s_mx[i].workgroupid) END IF FOR j = 1 To cnt ls_empstr += Trim(ds.Object.u_rs_empinfo_empname[j])+',' NEXT END IF s_mx[i].empstr = ls_empstr NEXT IF it_mxbt_rel > 0 THEN IF PosA(dscrp,'指令单生产批号:') > 0 THEN dscrp = MidA(dscrp,1,PosA(dscrp,'指令单生产批号:') - 1) END IF IF PosA(dscrp,'指令单相关号:') > 0 THEN dscrp = MidA(dscrp,1,PosA(dscrp,'指令单相关号:') - 1) END IF IF LenA(dscrp) > 0 THEN dscrp = dscrp + ' 指令单生产批号:' ELSE dscrp = '指令单生产批号:' END IF FOR k = 1 To it_mxbt_rel IF k = it_mxbt_rel THEN dscrp = dscrp + ls_relcode_arr[k] ELSE dscrp = dscrp + ls_relcode_arr[k] + ',' END IF NEXT END IF IF LenA(dscrp) > 255 THEN dscrp = LeftA(dscrp,250)+'...' ///// //末工序必须选仓库 //FOR i = 1 TO it_mxbt // SELECT lastflag // INTO :ll_lastflag // FROM u_sc_task // Where taskid = :s_mx[i].taskid; // IF sqlca.SQLCode <> 0 THEN // rslt = 0 // arg_msg = '第'+String(i)+'行,查询派工单资料失败' // GOTO ext // END IF // // IF ll_lastflag = 1 AND s_mx[i].storageid = 0 THEN // rslt = 0 // arg_msg = '第'+String(i)+'行,请选择进仓仓库' // GOTO ext // END IF //NEXT ////////////////////////////////////////////// //开始区分:新建/更新 处理 IF finishid = 0 THEN ll_finishid = f_sys_scidentity(0,"u_finish","finishid",arg_msg,True,id_sqlca) IF ll_finishid <= 0 THEN rslt = 0 GOTO ext END IF //取分部代号 IF f_get_sccode(scid,sqlca,ls_sccode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF billtype = 0 THEN ls_finishcode = getid(scid,ls_sccode+"PW",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 ELSE ls_finishcode = getid(scid,ls_sccode+"PG",Date(server_dt),if_getid_ture,sqlca) //取得新单据编号 END IF IF ls_finishcode = "err" THEN rslt = 0 arg_msg = "无法获取工序完工单编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_finish (scid, finishid , finishcode, relcode, assign_emp, wrkgrpid, wagemth, opemp, opdate, dscrp, finishdate, billtype, inputway) VALUES (:scid, :ll_finishid, :ls_finishcode, :relcode, :assign_emp, :wrkgrpid, :wagemth, :opemp, :opdate, :dscrp, :finishdate, :billtype, :inputway); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入生产完工单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //读取新finishid finishid = ll_finishid finishcode = ls_finishcode ELSE UPDATE u_finish SET assign_emp = :assign_emp, relcode = :relcode , wrkgrpid = :wrkgrpid, wagemth = :wagemth, modemp = :publ_operator, moddate = :server_dt, dscrp = :dscrp, finishdate = :finishdate WHERE finishid = :finishid And flag = 0 ; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "更新计划操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除原有明细 DELETE FROM u_finishmx Where u_finishmx.finishid = :finishid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除旧有明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt INSERT INTO u_finishmx (scid, finishid, taskid, printid, comqty, mxdscrp, empid, workgroupid, workprice, procode, proname, wageid, storageid, location, starttime, endtime, workhour, beforehour, afterhour, waithour, techlevel, empstr) VALUES (:scid,:finishid, :s_mx[i].taskid, :s_mx[i].printid, :s_mx[i].comqty, :s_mx[i].mxdscrp, :s_mx[i].empid, :s_mx[i].workgroupid, :s_mx[i].workprice, :s_mx[i].procode, :s_mx[i].proname, :s_mx[i].wageid, :s_mx[i].storageid, :s_mx[i].Location, :s_mx[i].starttime, :s_mx[i].endtime, :s_mx[i].workhour, :s_mx[i].beforehour, :s_mx[i].afterhour, :s_mx[i].waithour, :s_mx[i].techlevel, :s_mx[i].empstr) ; IF sqlca.SQLCode <> 0 THEN IF it_newbegin THEN finishid = 0 //还原finishid rslt = 0 arg_msg = "插入明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF NEXT it_newbegin = False it_updatebegin = False ext: Destroy ds IF rslt = 0 THEN ROLLBACK; p_clearmx() ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT; END IF Return(rslt) end function public function integer audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 ,i Long ll_taskid , ll_flag String ls_taskcode uo_sc_task uo_task uo_task = CREATE uo_sc_task IF arg_finishid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 0 THEN rslt = 0 arg_msg = "完工单只有在待确认状态才可以执行确认" GOTO ext END IF IF secflag = 1 THEN rslt = 0 arg_msg = "完工单已经经理审不可以执行审核" GOTO ext END IF FOR i = 1 TO it_mxbt ll_flag = s_finish_mx[i].taskflag IF ll_flag = 0 THEN rslt = 0 arg_msg = "查询派工单:"+String(s_finish_mx[i].taskcode)+"非进行状态,不能提交完成。" GOTO ext END IF IF uo_task.addcmpl(s_finish_mx[i].taskid,s_finish_mx[i].comqty,finishdate,publ_operator,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF NEXT UPDATE u_finish SET auditingrep = :publ_operator, auditingdate = getdate(), flag = 1 WHERE finishid = :arg_finishid AND flag = 0 and secflag = 0 ; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单确认操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_task RETURN rslt end function public function integer c_audit (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i Long ll_cnt String ls_inwarecode long ll_flag DateTime null_dt SetNull(null_dt) uo_sc_task uo_task uo_task = CREATE uo_sc_task IF arg_finishid = 0 THEN rslt = 0 arg_msg = "没有撤销确认对象" GOTO ext END IF IF getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = "只有在确认状态才可以执行撤销确认,请核对" GOTO ext END IF IF secflag <> 0 THEN rslt = 0 arg_msg = "仓库审核状态有误,请核对" GOTO ext END IF FOR i = 1 TO it_mxbt ll_flag = s_finish_mx[i].taskflag IF uo_task.addcmpl(s_finish_mx[i].taskid,0 - s_finish_mx[i].comqty,null_dt,'',arg_msg,FALSE) = 0 THEN rslt = 0 arg_msg = "更新派工单状态失败! " + arg_msg GOTO ext END IF NEXT UPDATE u_finish SET auditingrep = '', auditingdate = :null_dt, flag = 0 WHERE finishid = :arg_finishid AND flag = 1 AND secflag = 0; IF sqlca.SQLCode <> 0 OR sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单撤销确认操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF flag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF DESTROY uo_task RETURN rslt end function public function integer secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1 ,i Long ll_taskid , ll_flag String ls_taskcode Long ll_wagemth DateTime server_dt IF arg_finishid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF uo_option_finish_wagemth_type = -1000 THEN rslt = 0 arg_msg = '选项:[401]工序完工单的计件月份按仓审时间,读取初始默认值失败,操作取消!' GOTO ext END IF SELECT Top 1 getdate() Into :server_dt From u_user ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF ll_wagemth = Long(String(Date(server_dt),'yyyymm')) IF getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = "完工单只有在已确认状态才可以执行仓库审核" GOTO ext END IF IF secflag <> 0 THEN rslt = 0 arg_msg = "完工单只有在待仓库核状态才可以执行仓库审核" GOTO ext END IF UPDATE u_finish SET secauditingrep = :publ_operator, secauditingdate = getdate(), secflag = 1 WHERE finishid = :arg_finishid AND flag = 1 And secflag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单仓库审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF billtype = 0 THEN UPDATE u_finish SET wagemth = case :uo_option_finish_wagemth_type when 0 then wagemth else :ll_wagemth END Where finishid = :arg_finishid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单仓库审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt IF s_finish_mx[i].lastflag = 1 And s_finish_mx[i].storageid > 0 THEN IF p_create_inware(s_finish_mx[i].printid,s_finish_mx[i].taskid,s_finish_mx[i].storageid,s_finish_mx[i].Location,s_finish_mx[i].comqty,s_finish_mx[i].workprice,s_finish_mx[i].mxdscrp,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT secflag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer c_secauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i DateTime null_dt SetNull(null_dt) IF uo_option_finish_wagemth_type = -1000 THEN rslt = 0 arg_msg = '选项:[401]工序完工单的计件月份按仓审时间,读取初始默认值失败,操作取消!' GOTO ext END IF IF arg_finishid = 0 THEN rslt = 0 arg_msg = "没有撤审对象" GOTO ext END IF IF getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF flag <> 1 THEN rslt = 0 arg_msg = "确认状态有误,请核对" GOTO ext END IF IF secflag <> 1 THEN rslt = 0 arg_msg = "只有在已仓库审核状态才可以执行仓库撤审,请核对" GOTO ext END IF UPDATE u_finish SET secauditingrep = '', secauditingdate = :null_dt, secflag = 0 WHERE finishid = :arg_finishid AND flag = 1 And secflag = 1; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单仓库撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF billtype = 0 THEN UPDATE u_finish SET wagemth = case :uo_option_finish_wagemth_type when 0 then wagemth else 0 END Where finishid = :arg_finishid; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单仓库撤审操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF FOR i = 1 To it_mxbt IF s_finish_mx[i].relinwareid > 0 THEN IF p_del_inware(s_finish_mx[i].relinwareid,s_finish_mx[i].printid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF NEXT secflag = 0 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer c_thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Long rslt = 1,i DateTime null_dt SetNull(null_dt) If uo_option_orderrqwp_auditgj = -1000 Then rslt = 0 arg_msg = '选项:[398]工价表如果未进行工价审,指令单工序明细生成时对应工序工价为0,读取初始默认值失败,操作取消!' Goto ext End If If arg_finishid = 0 Then rslt = 0 arg_msg = "没有撤审对象" Goto ext End If If getinfo(arg_finishid,arg_msg) = 0 Then rslt = 0 Goto ext End If If secflag <> 1 Then rslt = 0 arg_msg = "仓库审核状态有误,请核对" Goto ext End If If thrflag <> 1 Then rslt = 0 arg_msg = "只有在已计件审核状态才可以执行计件撤审,请核对" Goto ext End If Update u_finish Set thrauditingrep = '', thrauditingdate = :null_dt, thrflag = 0 Where finishid = :arg_finishid And secflag = 1 And thrflag = 1; If sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 Then rslt = 0 arg_msg = "完工单计件撤审操作失败"+"~n"+sqlca.SQLErrText Goto ext End If If billtype = 0 Then If p_del_taskwork(arg_msg) = 0 Then rslt = 0 Goto ext End If //20141121 选项 398 加强,工序完工单计件撤审的时候,如果工序的工价表已经进行工价审核,以最新的工价更新完工单的单价,否则更新为0 If uo_option_orderrqwp_auditgj = 1 Then Update u_finishmx Set u_finishmx.workprice = case isnull(u_sc_workprice.auditflag_gj,0) when 0 then 0 else isnull(u_sc_workprice.workPrice,0) End From u_finishmx Inner JOIN u_sc_task ON u_finishmx.taskid = u_sc_task.taskid Inner JOIN u_Order_ml ON u_Order_ml.OrderID = u_sc_task.orderid And u_Order_ml.scid = u_sc_task.scid LEFT Outer JOIN U_OrderRqwp ON u_Order_ml.scid = U_OrderRqwp.scid And u_Order_ml.OrderID = U_OrderRqwp.orderid And u_sc_task.procode = U_OrderRqwp.Procode LEFT Outer JOIN u_sc_workprice ON CASE WHEN U_OrderRqwp.sonmtrlid = 0 THEN U_OrderRqwp.mtrlid ELSE U_OrderRqwp.sonmtrlid End = u_sc_workprice.Mtrlid And CASE WHEN rtrim(U_OrderRqwp.procode_ori) = '' THEN U_OrderRqwp.procode ELSE U_OrderRqwp.procode_ori End = u_sc_workprice.procode Where u_finishmx.finishid = :arg_finishid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = "按工价表最新工价更新工序完工单价格失败"+"~n"+sqlca.SQLErrText Goto ext End If End If Else If p_del_mustpay(s_finish_mx, arg_msg) = 0 Then rslt = 0 Goto ext End If End If thrflag = 0 ext: If rslt = 0 Then Rollback; ElseIf rslt = 1 And arg_ifcommit Then Commit; End If Return rslt end function public function integer del (long arg_finishid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 rslt = getinfo(arg_finishid, arg_msg) IF rslt = 0 THEN GOTO ext IF flag <> 0 THEN rslt = 0 arg_msg = "生产完工单已经审核,不可以删除" GOTO ext END IF DELETE FROM u_finish Where finishid = :arg_finishid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产完工单操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF //删除明细 DELETE FROM u_finishmx Where u_finishmx.finishid = :arg_finishid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "删除生产完工明细操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK; p_reset() ELSEIF rslt = 1 AND arg_ifcommit THEN COMMIT; END IF Return (rslt) end function public function integer p_del_inware (long arg_inwareid, long arg_printid, ref string arg_msg);Int rslt = 1 Long ll_cnt,ll_flag String ls_inwarecode uo_inware uo_ware uo_ware = CREATE uo_inware uo_ware.commit_transaction = sqlca uo_ware.if_getid_ture = FALSE IF arg_inwareid <= 0 THEN rslt = 0 arg_msg = '错误的进仓单ID' GOTO ext END IF SELECT count(*) INTO :ll_cnt FROM u_inware Where inwareid = :arg_inwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询相关进仓单失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF ll_cnt = 0 THEN rslt = 1 GOTO ext ELSEIF ll_cnt > 0 THEN SELECT flag INTO :ll_flag FROM u_inware Where inwareid = :arg_inwareid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询相关进仓单审核标记失败"+"~n"+sqlca.SQLErrText GOTO ext END IF END IF IF ll_flag = 1 THEN rslt = 0 arg_msg = '第'+String(arg_printid)+'行,相关进仓单已经审核,请先撤审' GOTO ext // IF uo_ware.getinfo(scid,arg_inwareid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF // // IF uo_ware.c_auditing(false,arg_msg) = 0 THEN // rslt = 0 // GOTO ext // END IF END IF IF uo_ware.del(scid,arg_inwareid,arg_msg,FALSE) = 0 THEN rslt = 0 GOTO ext END IF UPDATE u_finishmx SET relinwareid = 0, relinwarecode = '' WHERE finishid = :finishid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新完工单明细相关进仓单失败' GOTO ext END IF ext: DESTROY uo_ware IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer uof_find_cust (long arg_scid, long arg_orderid, ref long arg_cusid, ref string arg_plancode, ref string arg_mtrlcuscode, ref string arg_msg);Int rslt = 1 IF uo_option_inware_mtrlcuscode = -1000 THEN rslt = 0 arg_msg = '选项:[138]生产进仓单产品批号策略按指令单号,读取初始默认值失败,操作取消!' GOTO ext END IF IF uo_option_taskplancode = -1000 THEN rslt = 0 arg_msg = '选项:[038]使用客户批号库存,读取初始默认值失败,操作取消!' GOTO ext END IF Long li_ordertype,cnt Long ll_cusid String ls_cuscode,ls_cusname,ls_plancode Long ll_mtrlid,ll_mtrlid_p,ll_porderid Boolean lb_ifsameorder Int li_ifmtrlcuscode String ls_ordercode SELECT ordercode,ordertype,mtrlid,porderid INTO :ls_ordercode,:li_ordertype,:ll_mtrlid,:ll_porderid FROM u_order_ml WHERE scid = :arg_scid And orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单信息失败,'+sqlca.SQLErrText GOTO ext END IF IF li_ordertype = 0 THEN ll_cusid = 0 GOTO ext END IF SELECT count(*) INTO :cnt FROM u_order_ml_mx WHERE orderid = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单相关计划明细信息失败,'+sqlca.SQLErrText GOTO ext END IF IF cnt <> 1 THEN ll_cusid = 0 GOTO ext END IF SELECT ifmtrlcuscode INTO :li_ifmtrlcuscode FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料是否使用产品批号属性失败,'+sqlca.SQLErrText GOTO ext END IF IF uo_option_inware_mtrlcuscode = 1 And li_ifmtrlcuscode = 1 THEN arg_mtrlcuscode = ls_ordercode ELSE arg_mtrlcuscode = '' END IF IF li_ordertype = 4 THEN SELECT mtrlid INTO :ll_mtrlid_p FROM u_order_ml WHERE scid = :arg_scid And orderid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单上级计划物料资料失败,'+sqlca.SQLErrText GOTO ext END IF IF ll_mtrlid_p = ll_mtrlid THEN lb_ifsameorder = True SELECT u_order_ml.cusid, isnull(u_cust.cuscode,''), isnull(u_cust.name,''), u_order_ml.taskrelcode INTO :ll_cusid, :ls_cuscode, :ls_cusname, :ls_plancode FROM u_order_ml left OUTER join u_cust on u_cust.cusid = u_order_ml.cusid WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :ll_porderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单上级计划相关客户信息失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE SELECT u_order_ml.cusid, isnull(u_cust.cuscode,''), isnull(u_cust.name,''), u_order_ml.taskrelcode INTO :ll_cusid, :ls_cuscode, :ls_cusname, :ls_plancode FROM u_order_ml left OUTER join u_cust on u_cust.cusid = u_order_ml.cusid WHERE u_order_ml.scid = :arg_scid And u_order_ml.orderid = :arg_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单相关客户信息失败,'+sqlca.SQLErrText GOTO ext END IF END IF IF lb_ifsameorder And uo_option_taskplancode = 1 THEN arg_plancode = ls_plancode ELSE arg_plancode = '' END IF ext: arg_cusid = ll_cusid RETURN rslt end function public function integer p_del_taskwork (ref string arg_msg);Int rslt = 1 Long ll_cnt,ll_flag String ls_inwarecode uo_scwg_taskwork_2 uo_ware uo_ware = CREATE uo_scwg_taskwork_2 uo_ware.commit_transaction = sqlca uo_scwg_taskwork_day uo_ware_day uo_ware_day = CREATE uo_scwg_taskwork_day uo_ware_day.commit_transaction = sqlca Long ll_billid[] Long ll_mxbt = 1,ll_i long ll_billid_day[] long ll_mxbt_day = 1 DECLARE cur_taskwork CURSOR FOR SELECT billid FROM u_scwg_taskwork_2 WHERE relid = :finishid And (billtype = 0 OR billtype = 1); OPEN cur_taskwork ; FETCH cur_taskwork INTO :ll_billid[ll_mxbt]; DO WHILE sqlca.SQLCode = 0 ll_mxbt++ FETCH cur_taskwork INTO :ll_billid[ll_mxbt]; LOOP CLOSE cur_taskwork; ll_mxbt = ll_mxbt -1 FOR ll_i = 1 TO ll_mxbt IF uo_ware.del(ll_billid[ll_i],arg_msg,FALSE) = 0 THEN arg_msg = '删除相关计件单失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT DECLARE cur_taskwork_day CURSOR FOR SELECT billid FROM u_scwg_taskwork_day WHERE relid = :finishid And (billtype = 0); OPEN cur_taskwork_day ; FETCH cur_taskwork_day INTO :ll_billid_day[ll_mxbt_day]; DO WHILE sqlca.SQLCode = 0 ll_mxbt_day++ FETCH cur_taskwork_day INTO :ll_billid_day[ll_mxbt_day]; LOOP CLOSE cur_taskwork_day; ll_mxbt_day = ll_mxbt_day -1 FOR ll_i = 1 TO ll_mxbt_day IF uo_ware_day.del(ll_billid_day[ll_i],arg_msg,FALSE) = 0 THEN arg_msg = '删除相关工作中心日分配计件单失败,'+arg_msg rslt = 0 GOTO ext END IF NEXT ext: DESTROY uo_ware destroy uo_ware_day IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer p_create_inware (long arg_printid, long arg_taskid, long arg_storageid, string arg_location, decimal arg_comqty, decimal arg_workprice, string arg_mxdscrp, ref string arg_msg);Long rslt = 1 Long i Long ll_wrkid,mtrlid,orderid,balctype,cusid,ll_ref_inwareid String status,woodcode,pcode,mtrlcode,unit,ls_ref_inwarecode String ls_plancode,ls_mtrlcuscode decimal ld_planprice int li_ifmtrlcuscode uo_inware uo_ware uo_ware = Create uo_inware uo_ware.commit_transaction = sqlca uo_ware.if_getid_ture = False SELECT u_sc_task.mtrlid, u_sc_task.status, u_sc_task.woodcode, u_sc_task.pcode, u_mtrldef.mtrlcode, u_sc_task.orderid, u_mtrldef.unit, u_mtrldef.ifmtrlcuscode INTO :mtrlid, :status, :woodcode, :pcode, :mtrlcode, :orderid, :unit, :li_ifmtrlcuscode FROM u_sc_task,u_mtrldef WHERE u_sc_task.mtrlid = u_mtrldef.mtrlid AND taskid = :arg_taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询派工单资料失败' GOTO ext END IF if billtype = 0 then SELECT storageid INTO :ll_wrkid FROM u_sc_workgroup Where wrkgrpid = :wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查找工组对应车间失败' GOTO ext END IF else SELECT wrkGrpid INTO :ll_wrkid FROM u_order_ml Where orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查找指令对应车间失败' GOTO ext END IF end if If sys_option_inware_mtrlcuscode = 1 And li_ifmtrlcuscode = 1 Then int li_ordertype long ll_pzlorderid string ls_pzlordercode, ls_ordercode Select ordertype,pzlorderid, ordercode Into :li_ordertype,:ll_pzlorderid,:ls_ordercode From u_order_ml Where u_order_ml.scid = :scid And orderid = :orderid; If sqlca.SQLCode <> 0 Then ls_mtrlcuscode = '' Else If li_ordertype = 4 And ll_pzlorderid > 0 Then Select ordercode Into :ls_pzlordercode From u_order_ml Where u_order_ml.scid = :scid And orderid = :ll_pzlorderid; If sqlca.SQLCode <> 0 Then ls_mtrlcuscode = '' Else ls_mtrlcuscode = ls_pzlordercode End If Else ls_mtrlcuscode = ls_ordercode End If End If Else ls_mtrlcuscode = '' End If //dw_child.Object.u_inwaremx_mtrlcuscode[child_row] = ls_mtrlcuscode SELECT balctype INTO :balctype FROM u_storage Where storageid = :arg_storageid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询仓库资料失败' GOTO ext END IF f_get_planprice_mtrl(mtrlid,status,woodcode,pcode,ld_planprice) IF balctype = 1 THEN IF uof_find_cust(scid,orderid,cusid,ls_plancode,ls_mtrlcuscode,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF uo_option_taskplancode = 1 THEN SELECT taskrelcode INTO :ls_plancode FROM u_order_ml WHERE u_order_ml.scid = :scid And orderid = :orderid; IF sqlca.SQLCode <> 0 THEN ls_plancode = '' END IF ELSE ls_plancode = '' END IF END IF IF uo_ware.newbegin(scid,3,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.indate = finishdate uo_ware.inrep = opemp uo_ware.part = finishcode uo_ware.dscrp = '' uo_ware.storageid = arg_storageid uo_ware.sptname = '工序完工单自动生成' uo_ware.relid = ll_wrkid IF mtrlid > 0 THEN IF uo_ware.acceptmx(1,& mtrlid,& mtrlcode,& ls_plancode,& status,& arg_comqty,& ld_planprice,& 1,& arg_mxdscrp,& arg_msg,& 0,& orderid,& 1,& woodcode,& pcode,& cusid,& unit,& 1,arg_comqty,0,0,'','',0,0,ls_mtrlcuscode,arg_location,& arg_comqty,& 0) = 0 THEN rslt = 0 GOTO ext END IF END IF IF uo_ware.Save(False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF ll_ref_inwareid = uo_ware.inwareid ls_ref_inwarecode = uo_ware.inwarecode //IF uo_ware.getinfo(scid,ll_ref_inwareid,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF // //IF uo_ware.auditing(false,arg_msg) = 0 THEN // rslt = 0 // GOTO ext //END IF UPDATE u_finishmx SET relinwareid = :ll_ref_inwareid, relinwarecode = :ls_ref_inwarecode WHERE finishid = :finishid AND printid = :arg_printid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新完工单明细相关进仓单失败' GOTO ext END IF ext: Destroy uo_ware IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer p_getinfo (long arg_finishid, ref string arg_msg);Int rslt = 1 IF arg_finishid <= 0 THEN rslt = 0 arg_msg = '错误生产任务单唯一码' GOTO ext END IF SELECT scid, finishid, finishcode, relcode, assign_emp, wrkgrpid, opemp, opdate, modemp, moddate, auditingrep, auditingdate, flag, dscrp, secflag, thrflag, finishdate, wagemth, billtype, inputway INTO :scid, :finishid, :finishcode, :relcode, :assign_emp, :wrkgrpid, :opemp, :opdate, :modemp, :moddate, :auditingrep, :auditingdate, :flag, :dscrp, :secflag, :thrflag, :finishdate, :wagemth, :billtype, :inputway FROM u_finish Where finishid = :arg_finishid ; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询生产任务完工单内容失败(错误生产任务完工单唯一码)' GOTO ext END IF finishid = arg_finishid ext: IF rslt = 0 THEN p_reset() RETURN rslt end function public function integer p_create_taskwork (s_finish_mx s_mx[], ref string arg_msg, integer arg_ifaudit);Long rslt = 1 Long ll_ref_billid String ls_ref_billcode uo_scwg_taskwork_2 uo_ware uo_ware = Create uo_scwg_taskwork_2 uo_ware.commit_transaction = sqlca uo_ware.if_getid_ture = False uo_scwg_taskwork_day uo_ware_wrk uo_ware_wrk = Create uo_scwg_taskwork_day uo_ware_wrk.commit_transaction = sqlca uo_ware_wrk.if_getid_ture = False datastore ds_workgroupmx ds_workgroupmx = Create datastore IF sys_option_finish_taskwork_emp = 0 THEN // 工作中心派工的工序完工单计件审时生成计件单员工明细模式 ds_workgroupmx.DataObject = 'ds_workgroupmx_empid' ELSE ds_workgroupmx.DataObject = 'ds_sc_task_empid' END IF ds_workgroupmx.SetTransObject(sqlca) Long ll_empid_arr[] Long ll_empid_wageid[] Long it_emp = 0 Long ll_wrkgrpid_arr[] Long ll_wkp_wageid[] Long it_wrk = 0 Long it_wrk_day = 0 Long ll_wrkgrpid_day[],ll_day_wageid[] Long ll_billtype,ll_wrkgrpid Long ll_i,ll_j,ll_k,ll_l Long ll_mtrlid_arr[] String ls_procode_arr[],ls_proname_arr[] Decimal ld_comqty_arr[],ld_workprice_arr[] String ls_mxdscrp_arr[] String ls_status_arr[],ls_woodcode_arr[],ls_pcode_arr[],ls_wpcode_arr[] String ls_wpcode Long ll_orderid_arr[] Long ll_mxbt_mx Long ll_scid Long ll_mxbt_mx_ Long ll_wkpid Long ll_empid_arr_[], ll_empid_arr_null[] String ls_empname_arr_[], ls_empname_arr_null[] Decimal lde_wageamt_arr_[], lde_wageamt_arr_null[], lde_workhours_arr_[] Long ll_rowcnt Decimal ld_wageamt, lde_assignamt_sum, lde_assignamt Dec lde_workhours, lde_workhours_sum String ls_status,ls_woodcode,ls_pcode Long ll_mtrlid,ll_orderid Decimal ld_wageamt_sm, lde_wageamt_sum SELECT storageid INTO :ll_wkpid FROM u_sc_workgroup Where wrkGrpid = :wrkGrpid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询工组所属车间失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 To it_mxbt IF s_mx[ll_i].empid > 0 And s_mx[ll_i].wagemode = 12 THEN //个人计件 FOR ll_j = 1 To it_emp IF ll_empid_arr[ll_j] = s_mx[ll_i].empid And ll_empid_wageid[ll_j] = s_mx[ll_i].wageid THEN GOTO _next END IF NEXT it_emp++ ll_empid_arr[it_emp] = s_mx[ll_i].empid ll_empid_wageid[it_emp] = s_mx[ll_i].wageid ELSEIF s_mx[ll_i].workgroupid > 0 And s_mx[ll_i].wagemode = 16 THEN //工作中心产品月分配 FOR ll_j = 1 To it_wrk IF ll_wrkgrpid_arr[ll_j] = s_mx[ll_i].workgroupid And ll_wkp_wageid[ll_j] = s_mx[ll_i].wageid THEN GOTO _next END IF NEXT it_wrk++ ll_wrkgrpid_arr[it_wrk] = s_mx[ll_i].workgroupid ll_wkp_wageid[it_wrk] = s_mx[ll_i].wageid ELSEIF s_mx[ll_i].workgroupid > 0 And s_mx[ll_i].wagemode = 17 THEN //工作中心产品日分配 FOR ll_j = 1 To it_wrk_day IF ll_wrkgrpid_day[ll_j] = s_mx[ll_i].workgroupid And ll_day_wageid[ll_j] = s_mx[ll_i].wageid THEN GOTO _next END IF NEXT it_wrk_day++ ll_wrkgrpid_day[it_wrk_day] = s_mx[ll_i].workgroupid ll_day_wageid[it_wrk_day] = s_mx[ll_i].wageid END IF _next: NEXT IF it_emp = 0 And it_wrk = 0 And it_wrk_day = 0 THEN rslt = 1 GOTO ext END IF IF it_emp > 0 THEN //个人计件 FOR ll_i = 1 To it_emp IF uo_ware.newbegin(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.billdate = finishdate uo_ware.wrkGrpid = ll_empid_arr[ll_i] uo_ware.rep = opemp uo_ware.relcode = finishcode uo_ware.dscrp = '工序完工单自动生成' uo_ware.wagemth = wagemth uo_ware.wageid = ll_empid_wageid[ll_i] uo_ware.billtype = 1 uo_ware.relid = finishid ll_mxbt_mx = 0 FOR ll_j = 1 To it_mxbt IF ll_empid_arr[ll_i] = s_mx[ll_j].empid And ll_empid_wageid[ll_i] = s_mx[ll_j].wageid THEN SELECT mtrlid,status,woodcode,pcode,orderid,scid INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ll_orderid,:ll_scid FROM u_sc_task Where taskid = :s_mx[ll_j].taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询派工单资料失败' GOTO ext END IF SELECT wpcode INTO :ls_wpcode FROM u_order_ml WHERE scid = :ll_scid And orderid = :ll_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工价表号失败'+sqlca.SQLErrText GOTO ext END IF FOR ll_k = 1 To ll_mxbt_mx IF ll_orderid_arr[ll_k] = ll_orderid And & ls_procode_arr[ll_k] = s_mx[ll_j].procode And & ls_proname_arr[ll_k] = s_mx[ll_j].proname And & ld_workprice_arr[ll_k] = s_mx[ll_j].workprice THEN ld_comqty_arr[ll_k] = ld_comqty_arr[ll_k] + s_mx[ll_j].comqty GOTO _next_mx END IF NEXT ll_mxbt_mx++ ll_mtrlid_arr[ll_mxbt_mx] = ll_mtrlid ls_procode_arr[ll_mxbt_mx] = s_mx[ll_j].procode ls_proname_arr[ll_mxbt_mx] = s_mx[ll_j].proname ld_comqty_arr[ll_mxbt_mx] = s_mx[ll_j].comqty ld_workprice_arr[ll_mxbt_mx] = s_mx[ll_j].workprice ls_mxdscrp_arr[ll_mxbt_mx] = s_mx[ll_j].mxdscrp ls_status_arr[ll_mxbt_mx] = ls_status ls_woodcode_arr[ll_mxbt_mx] = ls_woodcode ls_pcode_arr[ll_mxbt_mx] = ls_pcode ll_orderid_arr[ll_mxbt_mx] = ll_orderid ls_wpcode_arr[ll_mxbt_mx] = ls_wpcode END IF _next_mx: NEXT FOR ll_l = 1 To ll_mxbt_mx IF uo_ware.acceptmx(ll_mtrlid_arr[ll_l],& ls_procode_arr[ll_l],& ls_proname_arr[ll_l],& ld_comqty_arr[ll_l],& ld_workprice_arr[ll_l],& ls_mxdscrp_arr[ll_l],& arg_msg,& ll_l,& ls_status_arr[ll_l],& ls_woodcode_arr[ll_l],& ls_pcode_arr[ll_l],& '',& ll_orderid_arr[ll_l],'','',0,0,& ls_wpcode_arr[ll_l]) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_ware.Save(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF arg_ifaudit = 1 THEN IF uo_ware.affirm(uo_ware.billid,arg_msg,False) = 0 THEN arg_msg = '确认个人产品计件单失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.auditmx_1(uo_ware.billid,arg_msg,False) = 0 THEN arg_msg = '审核个人产品计件单失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT END IF IF it_wrk > 0 THEN //工作中心产品月分配 FOR ll_i = 1 To it_wrk IF uo_ware.newbegin(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware.billdate = finishdate uo_ware.wrkGrpid = ll_wrkgrpid_arr[ll_i] uo_ware.rep = opemp uo_ware.relcode = finishcode uo_ware.dscrp = '工序完工单自动生成' uo_ware.wagemth = wagemth uo_ware.wageid = ll_wkp_wageid[ll_i] uo_ware.billtype = 0 uo_ware.relid = finishid uo_ware.wkpid = ll_wkpid ll_mxbt_mx = 0 FOR ll_j = 1 To it_mxbt IF ll_wrkgrpid_arr[ll_i] = s_mx[ll_j].workgroupid And ll_wkp_wageid[ll_i] = s_mx[ll_j].wageid And & s_mx[ll_j].empid = 0 THEN SELECT mtrlid,status,woodcode,pcode,orderid,scid INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ll_orderid,:ll_scid FROM u_sc_task Where taskid = :s_mx[ll_j].taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询派工单资料失败' GOTO ext END IF SELECT wpcode INTO :ls_wpcode FROM u_order_ml WHERE scid = :ll_scid And orderid = :ll_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工价表号失败'+sqlca.SQLErrText GOTO ext END IF FOR ll_k = 1 To ll_mxbt_mx IF ll_orderid_arr[ll_k] = ll_orderid And & ls_procode_arr[ll_k] = s_mx[ll_j].procode And & ls_proname_arr[ll_k] = s_mx[ll_j].proname And & ld_workprice_arr[ll_k] = s_mx[ll_j].workprice THEN ld_comqty_arr[ll_k] = ld_comqty_arr[ll_k] + s_mx[ll_j].comqty GOTO _next_mx_wrk END IF NEXT ll_mxbt_mx++ ll_mtrlid_arr[ll_mxbt_mx] = ll_mtrlid ls_procode_arr[ll_mxbt_mx] = s_mx[ll_j].procode ls_proname_arr[ll_mxbt_mx] = s_mx[ll_j].proname ld_comqty_arr[ll_mxbt_mx] = s_mx[ll_j].comqty ld_workprice_arr[ll_mxbt_mx] = s_mx[ll_j].workprice ls_mxdscrp_arr[ll_mxbt_mx] = s_mx[ll_j].mxdscrp ls_status_arr[ll_mxbt_mx] = ls_status ls_woodcode_arr[ll_mxbt_mx] = ls_woodcode ls_pcode_arr[ll_mxbt_mx] = ls_pcode ll_orderid_arr[ll_mxbt_mx] = ll_orderid ls_wpcode_arr[ll_mxbt_mx] = ls_wpcode END IF _next_mx_wrk: NEXT FOR ll_l = 1 To ll_mxbt_mx IF uo_ware.acceptmx(ll_mtrlid_arr[ll_l],& ls_procode_arr[ll_l],& ls_proname_arr[ll_l],& ld_comqty_arr[ll_l],& ld_workprice_arr[ll_l],& ls_mxdscrp_arr[ll_l],& arg_msg,& ll_l,& ls_status_arr[ll_l],& ls_woodcode_arr[ll_l],& ls_pcode_arr[ll_l],& '',& ll_orderid_arr[ll_l],'','',0,0,& ls_wpcode_arr[ll_l]) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF uo_ware.Save(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF arg_ifaudit = 1 THEN IF uo_ware.affirm(uo_ware.billid,arg_msg,False) = 0 THEN arg_msg = '确认工作中心产品月分配失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware.auditmx_1(uo_ware.billid,arg_msg,False) = 0 THEN arg_msg = '审核工作中心产品月分配失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT END IF IF it_wrk_day > 0 THEN //工作中心产品日分配 FOR ll_i = 1 To it_wrk_day IF uo_ware_wrk.newbegin(scid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF uo_ware_wrk.billdate = finishdate uo_ware_wrk.wrkGrpid = ll_wrkgrpid_day[ll_i] uo_ware_wrk.rep = opemp uo_ware_wrk.relcode = finishcode uo_ware_wrk.dscrp = '工序完工单自动生成' uo_ware_wrk.wagemth = wagemth uo_ware_wrk.wageid = ll_day_wageid[ll_i] uo_ware_wrk.billtype = 0 uo_ware_wrk.relid = finishid uo_ware_wrk.wkpid = ll_wkpid ld_wageamt_sm = 0 //处理dw_child, 取当前工作中心,工资项目的明细,按指令/工序汇总 ll_mxbt_mx = 0 FOR ll_j = 1 To it_mxbt IF ll_wrkgrpid_day[ll_i] = s_mx[ll_j].workgroupid And ll_day_wageid[ll_i] = s_mx[ll_j].wageid THEN SELECT mtrlid,status,woodcode,pcode,orderid,scid INTO :ll_mtrlid,:ls_status,:ls_woodcode,:ls_pcode,:ll_orderid,:ll_scid FROM u_sc_task Where taskid = :s_mx[ll_j].taskid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询派工单资料失败' GOTO ext END IF SELECT wpcode INTO :ls_wpcode FROM u_order_ml WHERE scid = :ll_scid And orderid = :ll_orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询相关指令单工价表号失败'+sqlca.SQLErrText GOTO ext END IF FOR ll_k = 1 To ll_mxbt_mx IF ll_orderid_arr[ll_k] = ll_orderid And & ls_procode_arr[ll_k] = s_mx[ll_j].procode And & ls_proname_arr[ll_k] = s_mx[ll_j].proname And & ld_workprice_arr[ll_k] = s_mx[ll_j].workprice THEN ld_comqty_arr[ll_k] = ld_comqty_arr[ll_k] + s_mx[ll_j].comqty GOTO _next_mx_day END IF NEXT ll_mxbt_mx++ ll_mtrlid_arr[ll_mxbt_mx] = ll_mtrlid ls_procode_arr[ll_mxbt_mx] = s_mx[ll_j].procode ls_proname_arr[ll_mxbt_mx] = s_mx[ll_j].proname ld_comqty_arr[ll_mxbt_mx] = s_mx[ll_j].comqty ld_workprice_arr[ll_mxbt_mx] = s_mx[ll_j].workprice ls_mxdscrp_arr[ll_mxbt_mx] = s_mx[ll_j].mxdscrp ls_status_arr[ll_mxbt_mx] = ls_status ls_woodcode_arr[ll_mxbt_mx] = ls_woodcode ls_pcode_arr[ll_mxbt_mx] = ls_pcode ll_orderid_arr[ll_mxbt_mx] = ll_orderid ls_wpcode_arr[ll_mxbt_mx] = ls_wpcode END IF _next_mx_day: NEXT FOR ll_j = 1 To ll_mxbt_mx IF uo_ware_wrk.acceptmx(ll_mtrlid_arr[ll_j],& ls_procode_arr[ll_j],& ls_proname_arr[ll_j],& ld_comqty_arr[ll_j],& ld_workprice_arr[ll_j],& '',& arg_msg,& ll_j,& ls_status_arr[ll_j],& ls_woodcode_arr[ll_j],& ls_pcode_arr[ll_j],& ll_orderid_arr[ll_j],'','',& ls_wpcode_arr[ll_j]) = 0 THEN rslt = 0 GOTO ext END IF ld_wageamt_sm = ld_wageamt_sm + ld_comqty_arr[ll_j] * ld_workprice_arr[ll_j] NEXT uo_ware_wrk.relempstr = '' //处理empid IF sys_option_finish_taskwork_emp = 0 THEN // 工作中心派工的工序完工单计件审时生成计件单员工明细模式 //按员工平均分配 ll_rowcnt = ds_workgroupmx.Retrieve(ll_wrkgrpid_day[ll_i]) IF ll_rowcnt = 0 THEN lde_workhours = 1 ELSE lde_workhours = 1.0 / ll_rowcnt END IF FOR ll_k = 1 To ds_workgroupmx.RowCount() //人员列表 IF uo_ware_wrk.acceptmx_emp(0,& ds_workgroupmx.Object.u_rs_empinfo_empid[ll_k],& ds_workgroupmx.Object.u_rs_empinfo_empname[ll_k],& lde_workhours,0,0,& 0,& ld_wageamt_sm / ll_rowcnt ,& '',& arg_msg,& ll_k) = 0 THEN rslt = 0 GOTO ext END IF NEXT ELSE // sys_option_finish_taskwork_emp = 1 lde_wageamt_sum = ld_wageamt_sm //整张单的总金额 ll_mxbt_mx_ = 0 ll_empid_arr_ = ll_empid_arr_null ls_empname_arr_ = ls_empname_arr_null lde_wageamt_arr_ = lde_wageamt_arr_null FOR ll_j = 1 To it_mxbt IF ll_wrkgrpid_day[ll_i] = s_mx[ll_j].workgroupid & And ll_day_wageid[ll_i] = s_mx[ll_j].wageid THEN ll_rowcnt = ds_workgroupmx.Retrieve(s_mx[ll_j].taskid) IF ll_rowcnt <= 0 THEN arg_msg = "未设置工序派工单工作中心人员" rslt = 0 GOTO ext END IF lde_assignamt_sum = ds_workgroupmx.Object.assignamt_sum[1] //总比例 IF lde_assignamt_sum <= 0 THEN arg_msg = "工序派工单工作中心人员总分配比例不能为0" rslt = 0 GOTO ext END IF ld_wageamt_sm = s_mx[ll_j].comqty * s_mx[ll_j].workprice //一条派工单的金额 FOR ll_k = 1 To ds_workgroupmx.RowCount() //人员列表 lde_assignamt = ds_workgroupmx.Object.assignamt[ll_k] //个人分配比例 ld_wageamt = (lde_assignamt / lde_assignamt_sum) * ld_wageamt_sm //当前员工的金额 FOR ll_l = 1 To ll_mxbt_mx_ IF ds_workgroupmx.Object.u_rs_empinfo_empid[ll_k] = ll_empid_arr_[ll_l] THEN lde_wageamt_arr_[ll_l] += ld_wageamt GOTO _next_mx_ END IF NEXT ll_mxbt_mx_++ ll_empid_arr_[ll_mxbt_mx_] = ds_workgroupmx.Object.u_rs_empinfo_empid[ll_k] ls_empname_arr_[ll_mxbt_mx_] = ds_workgroupmx.Object.u_rs_empinfo_empname[ll_k] lde_wageamt_arr_[ll_mxbt_mx_] = ld_wageamt IF it_mxbt = 1 THEN //如果只有一条派工单,不改变比例"数值" lde_workhours_arr_[ll_mxbt_mx_] = lde_assignamt END IF _next_mx_: NEXT END IF NEXT FOR ll_k = 1 To ll_mxbt_mx_ //人员列表 IF it_mxbt = 1 THEN lde_workhours = lde_workhours_arr_[ll_k] ELSE IF lde_wageamt_sum = 0 THEN lde_workhours = 1 ELSE lde_workhours = lde_wageamt_arr_[ll_k] / lde_wageamt_sum END IF END IF IF uo_ware_wrk.acceptmx_emp(0,& ll_empid_arr_[ll_k],& ls_empname_arr_[ll_k],& lde_workhours,0,0,& 0,& lde_wageamt_arr_[ll_k] ,& '',& arg_msg,& ll_k) = 0 THEN rslt = 0 GOTO ext END IF NEXT END IF IF uo_ware_wrk.Save(arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF IF arg_ifaudit = 1 THEN IF uo_ware_wrk.affirm(uo_ware_wrk.billid,arg_msg,False) = 0 THEN arg_msg = '确认工作中心日分配计件单失败,'+arg_msg rslt = 0 GOTO ext END IF IF uo_ware_wrk.auditmx(uo_ware_wrk.billid,arg_msg,False) = 0 THEN arg_msg = '审核工作中心日分配计件单失败,'+arg_msg rslt = 0 GOTO ext END IF END IF NEXT END IF ext: Destroy uo_ware Destroy uo_ware_wrk Destroy ds_workgroupmx IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer thrauditing (long arg_finishid, ref string arg_msg, boolean arg_ifcommit, integer arg_ifaudit);//自制:计件审, 外协:财审 Long rslt = 1 ,i Long ll_taskid , ll_flag String ls_taskcode IF arg_finishid = 0 THEN rslt = 0 arg_msg = "没有审核对象" GOTO ext END IF IF getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secflag <> 1 THEN rslt = 0 arg_msg = "完工单只有在已经仓库审核状态才可以执行计件审核" GOTO ext END IF IF thrflag <> 0 THEN rslt = 0 arg_msg = "完工单只有在待计件审核状态才可以执行计件审核" GOTO ext END IF UPDATE u_finish SET thrauditingrep = :publ_operator, thrauditingdate = getdate(), thrflag = 1 WHERE finishid = :arg_finishid AND secflag = 1 And thrflag = 0; IF sqlca.SQLCode <> 0 Or sqlca.SQLNRows <= 0 THEN rslt = 0 arg_msg = "完工单计件审批操作失败"+"~n"+sqlca.SQLErrText GOTO ext END IF IF billtype = 0 THEN IF p_create_taskwork(s_finish_mx,arg_msg,arg_ifaudit) = 0 THEN arg_msg = '生成计件单失败,'+arg_msg rslt = 0 GOTO ext END IF ELSE IF p_create_mustpay(s_finish_mx,arg_msg) = 0 THEN arg_msg = '生成应付帐失败,'+arg_msg rslt = 0 GOTO ext END IF END IF thrflag = 1 ext: IF rslt = 0 THEN ROLLBACK; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT; END IF RETURN rslt end function public function integer p_del_mustpay (s_finish_mx s_mx[], ref string arg_msg);Int rslt = 1 Long i Long ll_moneyid_native Decimal jgsum_amt Long ll_payid string ls_unit uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败' rslt = 0 GOTO ext END IF FOR i = 1 To it_mxbt jgsum_amt += Round(s_mx[i].comqty * s_mx[i].workprice, 2) SELECT unit INTO :ls_unit FROM u_mtrldef Where mtrlid = :s_mx[i].mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资料失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_sptprice.uof_del_sptprice_auto(wrkGrpid,finishid,s_mx[i].printid,s_mx[i].mtrlid,s_mx[i].status,s_mx[i].woodcode,s_mx[i].pcode,s_mx[i].proname,& ls_unit,ll_moneyid_native,False,arg_msg) = 0 THEN arg_msg = '更新行:'+String(i)+','+arg_msg rslt = 0 GOTO ext END IF NEXT IF jgsum_amt <> 0 THEN SELECT payid INTO :ll_payid FROM u_bmstpay WHERE scid = :scid AND sptid = :wrkGrpid AND billcode = :finishcode And inwareid = :finishid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询应付账资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF uo_pay.del_payrec(scid,1,ll_payid,wrkGrpid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: Destroy uo_pay Destroy uo_sptprice IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer p_create_mustpay (s_finish_mx s_mx[], ref string arg_msg);Long rslt = 1 Long i Int li_btype Long ll_accountsid Long ll_moneyid_native Long ll_dft_itemid,ll_dft_itemid_tax Decimal ld_jgprice_notax Decimal jgsum_amt String ls_unit String ls_about,ls_dscrp Decimal ld_payamt = 0,ld_mstpayamt = 0,ld_taxamt = 0 uo_mustpay uo_pay uo_pay = Create uo_mustpay uo_spt_price uo_sptprice uo_sptprice = Create uo_spt_price SELECT btype,accountsid INTO :li_btype,:ll_accountsid FROM cw_banktype Where banktypeid = :wagemth Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询结算方式类型失败,'+ sqlca.SQLErrText GOTO ext END IF SELECT moneyid INTO :ll_moneyid_native FROM cw_currency Where native = 1; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询本位币资料失败' rslt = 0 GOTO ext END IF Decimal lde_rebate, lde_rate lde_rebate = 1 lde_rate = 1 jgsum_amt = 0 FOR i = 1 To it_mxbt jgsum_amt += Round(s_mx[i].comqty * s_mx[i].workprice, 2) SELECT unit INTO :ls_unit FROM u_mtrldef Where mtrlid = :s_mx[i].mtrlid; IF sqlca.SQLCode <> 0 THEN arg_msg = "查询物料资料失败,"+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_jgprice_notax = s_mx[i].workprice IF uo_sptprice.uof_update_sptprice(0,wrkGrpid,s_mx[i].mtrlid,ls_unit,s_mx[i].status,s_mx[i].woodcode,s_mx[i].pcode,s_mx[i].proname,& finishid,s_mx[i].workprice,lde_rebate,lde_rate,s_mx[i].workprice/lde_rate,ld_jgprice_notax /lde_rate , & finishdate,finishcode,0,'外协工序完工单',s_mx[i].printid,1,ll_moneyid_native,finishdate,DateTime(9999-01-01),False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF NEXT IF jgsum_amt <> 0 THEN ld_mstpayamt = jgsum_amt ld_taxamt = 0 IF li_btype = 1 THEN ld_payamt = ld_mstpayamt ELSE ld_payamt = 0 END IF ls_about = finishcode + "应付款,相关号:"+relcode SELECT itemid INTO :ll_dft_itemid FROM u_itemdef Where dfttype = 2 Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询默认采购外协退货项目资料失败,'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ls_dscrp = ls_about s_bmstpay s_pay s_pay.scid = scid s_pay.sptid = wrkGrpid s_pay.paydate = finishdate s_pay.inrep = assign_emp s_pay.oriamt = ld_mstpayamt s_pay.mstpayamt = ld_mstpayamt s_pay.payamt = ld_payamt s_pay.payamt_cn = ld_payamt s_pay.dscrp = ls_about s_pay.billcode = finishcode s_pay.relcode = relcode s_pay.banktypeid = wagemth s_pay.viewdate = finishdate s_pay.opemp = publ_operator s_pay.buildtype = 1 s_pay.inwareid = finishid s_pay.accountsid = ll_accountsid s_pay.itemid = ll_dft_itemid s_pay.moneyid = ll_moneyid_native s_pay.moneyid_cn = ll_moneyid_native IF uo_pay.add_payrec (s_pay,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: Destroy uo_pay Destroy uo_sptprice IF rslt = 0 THEN ROLLBACK; END IF RETURN rslt end function public function integer mod_price (long arg_finishid, long arg_printid, decimal arg_fprice, decimal arg_jgprice, decimal arg_taxrate, decimal arg_rebate, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 IF p_getinfo(arg_finishid,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF IF secflag = 0 THEN rslt = 0 arg_msg = '单据待审核状态下不能执行修改单价功能' GOTO ext END IF IF thrflag = 1 THEN rslt = 0 arg_msg = '单据已财审,不能执行修改加工价' GOTO ext END IF Decimal ld_jgprice , ld_taxrate, ld_rebate SELECT workprice INTO :ld_jgprice FROM u_finishmx WHERE finishid = :arg_finishid AND printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据明细内容失败'+sqlca.SQLErrText GOTO ext END IF //ld_taxrate = 0 //ld_rebate = 1 //IF arg_taxrate = -1 THEN arg_taxrate = ld_taxrate //IF arg_rebate = -1 THEN arg_rebate = ld_rebate IF arg_jgprice = ld_jgprice THEN //没有修改,成功返回 rslt = 1 //arg_msg = '单价或税率没有任何修改,不能保存' GOTO ext END IF UPDATE u_finishmx SET workprice = :arg_jgprice WHERE finishid = :arg_finishid And printid = :arg_printid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据明细失败'+sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF rslt = 1 And arg_ifcommit THEN COMMIT Using sqlca; END IF RETURN rslt end function on uo_finish.create call super::create TriggerEvent( this, "constructor" ) end on on uo_finish.destroy TriggerEvent( this, "destructor" ) call super::destroy end on event constructor;String str_optionvalue,arg_msg f_get_sys_option_value('138',str_optionvalue,arg_msg) uo_option_inware_mtrlcuscode = Long(str_optionvalue) f_get_sys_option_value('038',str_optionvalue,arg_msg) uo_option_taskplancode = Long(str_optionvalue) f_get_sys_option_value('401',str_optionvalue,arg_msg) uo_option_finish_wagemth_type = Long(str_optionvalue) str_optionvalue = '' f_get_sys_option_value('398',str_optionvalue,arg_msg) uo_option_orderrqwp_auditgj = Long(str_optionvalue) end event