$PBExportHeader$uo_ordermtrl_workgroup_picscheck.sru forward global type uo_ordermtrl_workgroup_picscheck from nonvisualobject end type end forward global type uo_ordermtrl_workgroup_picscheck from nonvisualobject end type global uo_ordermtrl_workgroup_picscheck uo_ordermtrl_workgroup_picscheck type variables long pkid string billcode long scid long orderid string barcode long wrkgrpid long ifok string dscrp decimal qty string qcResult string opemp datetime opdate long auditflag string audit_emp datetime audit_date PUBLIC PRIVATEWRITE long billtype = 1466 end variables forward prototypes public function integer uf_save (ref string arg_msg) public function integer uf_save_file (long arg_pkid, string arg_filename, blob arg_picdata, ref long arg_rt_fileid, ref string arg_msg) public function integer uf_del (long arg_pkid, ref string arg_msg) public function integer auditing (long arg_pkid, ref string arg_msg) public function integer cauditing (long arg_pkid, ref string arg_msg) public function long pf_getclassid (ref string arg_msg) private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_swkpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_pordermtrl_workgroup (string arg_pordercode, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit) end prototypes public function integer uf_save (ref string arg_msg);Int rslt = 1 IF IsNull(pkid) THEN pkid = 0 IF IsNull(scid) THEN scid = 0 IF IsNull(orderid) THEN orderid = 0 IF IsNull(barcode) THEN barcode = '' IF IsNull(wrkgrpid) THEN wrkgrpid = 0 IF IsNull(ifok) THEN ifok = 0 IF IsNull(dscrp) THEN dscrp = '' IF IsNull(qty) THEN qty = 0 IF IsNull(qcResult) THEN qcResult = '' IF orderid <= 0 THEN rslt = 0 arg_msg = '请选择关联的指令单' GOTO ext END IF Long ll_scid, ll_orderid, ll_wkpid Decimal ld_qty IF barcode <> '' THEN SELECT scid, orderid, packqty * qty INTO :ll_scid, :ll_orderid, :ld_qty FROM u_mtrlware_mx Where (barcode = :barcode); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询条码['+barcode+']相关信息失败,' + sqlca.SQLErrText GOTO ext END IF IF scid <> ll_scid Or orderid <> ll_orderid THEN rslt = 0 arg_msg = '条码['+barcode+']对应指令单'+String(ll_scid)+'_'+String(ll_orderid)+'与传入指令单'+String(scid)+'_'+String(orderid)+'不一至' GOTO ext END IF IF ld_qty <> qty THEN rslt = 0 arg_msg = '条码['+barcode+']对应数量'+String(ld_qty)+'与传入数量'+String(qty)+'不一至' GOTO ext END IF END IF String ls_wrkgrpname Long ll_inwkpid SELECT wrkgrpname, storageid INTO :ls_wrkgrpname, :ll_inwkpid FROM u_sc_workgroup Where wrkgrpid = :wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询传入工组名称失败,' + sqlca.SQLErrText GOTO ext END IF String ls_wkpname SELECT u_order_ml.wrkgrpid, u_sc_wkp.wrkgrpname INTO :ll_wkpid, :ls_wkpname FROM u_order_ml INNER join u_sc_wkp ON u_order_ml.wrkgrpid = u_sc_wkp.wrkgrpid WHERE u_order_ml.scid = :scid And u_order_ml.orderid = :orderid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单车间失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_inwkpid <> ll_wkpid THEN rslt = 0 arg_msg = '传入工组"' + ls_wrkgrpname + '"不属于指令单的车间"' + ls_wkpname + '"' GOTO ext END IF IF pkid = 0 THEN // 新建 Long ls_newid ls_newid = f_sys_scidentity(0,"u_OrderMtrl_workgroup_picsCheck","pkid",arg_msg,True,id_sqlca) IF ls_newid <= 0 THEN rslt = 0 GOTO ext END IF DateTime server_datetime SELECT top 1 GETDATE() INTO :server_datetime From u_user; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '获取服务器时间失败,' + sqlca.SQLErrText GOTO ext END IF String ls_newcode ls_newcode = getid(0,'WQ',Date(server_datetime),False,sqlca) IF ls_newcode = "err" THEN rslt = 0 arg_msg = "无法获取指令单工组质检单编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO u_OrderMtrl_workgroup_picsCheck(pkid, billcode, scid, orderid, wrkgrpid,opemp, opdate, ifok, dscrp, qty, qcResult, barcode) Values(:ls_newid, :ls_newcode, :scid, :orderid, :wrkgrpid, :publ_operator, GETDATE(), :ifok, :dscrp, :qty, :qcResult, :barcode); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令单工组质检单失败,' + sqlca.SQLErrText GOTO ext END IF pkid = ls_newid billcode = ls_newcode ELSE UPDATE u_OrderMtrl_workgroup_picsCheck SET scid = :scid, orderid = :orderid, wrkgrpid = :wrkgrpid, opemp = :publ_operator, opdate = GETDATE(), ifok = :ifok, qty = :qty, dscrp = :dscrp, qcResult = :qcResult, barcode = :barcode Where pkid = :pkid And auditflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新指令单工组质检单信息失败,' + sqlca.SQLErrText GOTO ext END IF IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '单据已经被删除或者已被审核不能修改' GOTO ext END IF END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF RETURN rslt end function public function integer uf_save_file (long arg_pkid, string arg_filename, blob arg_picdata, ref long arg_rt_fileid, ref string arg_msg);Int rslt = 1 Long ll_fileid, ll_classid String ls_filetype IF arg_pkid <= 0 THEN rslt = 0 arg_msg = '参数单据ID无效' GOTO ext END IF String ls_billcode SELECT billcode INTO :ls_billcode FROM u_OrderMtrl_workgroup_picsCheck Where pkid = :arg_pkid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据编号失败,' + sqlca.SQLErrText GOTO ext END IF ll_classid = pf_getclassid(Ref arg_msg) IF ll_classid <= 0 THEN rslt = 0 GOTO ext END IF ls_filetype = '' Long ll_pos ll_pos = lastpos(arg_filename, '.') IF ll_pos > 0 THEN ls_filetype = Mid(arg_filename, ll_pos + 1) END IF SELECT isnull(max(fileid),0) + 1 INTO :ll_fileid From u_file Using sys_fileDB_sqlca; IF sys_fileDB_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "即时获取新档案ID失败(请重试)" + sys_fileDB_sqlca.SQLErrText GOTO ext END IF INSERT INTO U_File ( FileID, DisplayName, FileName, ClassID, FileType, Dscrp, Opdate, Opemp, Compressed, Encrypted, relid, relcode, billtype, relid_mx, relcode_mx, scid) VALUES ( :ll_fileid, :arg_filename, :arg_filename, :ll_classid, :ls_filetype, '', GETDATE(), :publ_operator, 0, 0, :arg_pkid, :ls_billcode, :billtype, 0, '', :scid) Using sys_fileDB_sqlca; IF sys_fileDB_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "插入文件信息失败," + sys_fileDB_sqlca.SQLErrText ROLLBACK Using sys_fileDB_sqlca; GOTO ext END IF COMMIT Using sys_fileDB_sqlca; UpdateBlob u_file Set filedata = :arg_picdata Where fileid = :ll_fileid Using sys_fileDB_sqlca; IF sys_fileDB_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "更新文件失败" + sys_fileDB_sqlca.SQLErrText ROLLBACK Using sys_fileDB_sqlca; GOTO ext END IF arg_rt_fileid = ll_fileid COMMIT Using sys_fileDB_sqlca; ext: RETURN rslt end function public function integer uf_del (long arg_pkid, ref string arg_msg);Int rslt = 1 Long ll_auditflag SELECT auditflag INTO :ll_auditflag FROM u_OrderMtrl_workgroup_picsCheck Where pkid = :arg_pkid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_auditflag <> 0 THEN rslt = 0 arg_msg = '单据不在待审状态,不能删除' GOTO ext END IF DELETE From u_OrderMtrl_workgroup_picsCheck Where pkid = :arg_pkid And auditflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除单据失败,' + sqlca.SQLErrText GOTO ext END IF IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '删除单据失败,由于单据已经被删除或已被审核' GOTO ext END IF DELETE From U_File Where billtype = :billtype And relid = :arg_pkid Using sys_fileDB_sqlca; IF sys_fileDB_sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '删除单据附件失败,' + sys_fileDB_sqlca.SQLErrText GOTO ext END IF ext: IF rslt = 1 THEN COMMIT; COMMIT Using sys_fileDB_sqlca; ELSE ROLLBACK; ROLLBACK Using sys_fileDB_sqlca; END IF RETURN rslt end function public function integer auditing (long arg_pkid, ref string arg_msg);Int rslt = 1 Long ll_auditflag, ll_wrkgrpid, ll_ifok, ll_scid, ll_orderid,ll_mtrlid,ll_statusflag Decimal ld_qty Long ll_jdtype = 0 DateTime ld_now String ls_ordercode Long ll_pos = 0 SELECT auditflag, wrkgrpid, qty, ifok, scid, orderid, GETDATE() INTO :ll_auditflag, :ll_wrkgrpid, :ld_qty, :ll_ifok, :ll_scid, :ll_orderid, :ld_now FROM u_OrderMtrl_workgroup_picsCheck Where pkid = :arg_pkid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_auditflag <> 0 THEN rslt = 0 arg_msg = '单据不在待审状态,不能审核' GOTO ext END IF UPDATE u_OrderMtrl_workgroup_picsCheck SET auditflag = 1, audit_emp = :publ_operator, audit_date = GETDATE() Where pkid = :arg_pkid And auditflag = 0; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '审核失败,单据已经被删除或已被审核' GOTO ext END IF IF ll_ifok = 1 THEN SELECT jdtype INTO :ll_jdtype FROM u_sc_workgroup Where wrkgrpid = :ll_wrkgrpid; IF sqlca.SQLCode = 0 And ll_jdtype = 7 THEN // 更新工组进度 SELECT mtrlid, ordercode INTO :ll_mtrlid, :ls_ordercode 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 SELECT statusflag INTO :ll_statusflag FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料信息失败,' + sqlca.SQLErrText GOTO ext END IF ll_pos = Pos(ls_ordercode, '.') IF ll_statusflag = 2 And ll_pos > 0 THEN // DONE: 汇总直接更新工组进度 ls_ordercode = Mid(ls_ordercode, 1, ll_pos - 1) IF uof_update_pordermtrl_workgroup(ls_ordercode, ll_wrkgrpid, Ref arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF ELSE IF uof_add_workgroup_qty(ll_scid, ll_orderid, ll_wrkgrpid, 0, ld_now, ld_qty, Ref arg_msg, False) <> 1 THEN rslt = 0 arg_msg = '更新工组进度失败,原因:' + arg_msg GOTO ext END IF END IF END IF END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF RETURN rslt end function public function integer cauditing (long arg_pkid, ref string arg_msg);Int rslt = 1 Long ll_auditflag, ll_wrkgrpid, ll_ifok, ll_scid, ll_orderid, ll_mtrlid, ll_statusflag, ll_pos Decimal ld_qty Long ll_jdtype = 0 DateTime ld_now string ls_ordercode SELECT auditflag, wrkgrpid, qty, ifok, scid, orderid, GETDATE() INTO :ll_auditflag, :ll_wrkgrpid, :ld_qty, :ll_ifok, :ll_scid, :ll_orderid, :ld_now FROM u_OrderMtrl_workgroup_picsCheck Where pkid = :arg_pkid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF ll_auditflag <> 1 THEN rslt = 0 arg_msg = '单据不在已审状态,不能搞撤审' GOTO ext END IF UPDATE u_OrderMtrl_workgroup_picsCheck SET auditflag = 0, audit_emp = '', audit_date = NULL Where pkid = :arg_pkid And auditflag = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新单据审核状态失败,' + sqlca.SQLErrText GOTO ext END IF IF sqlca.SQLNRows = 0 THEN rslt = 0 arg_msg = '撤审失败,单据已经被删除或已被撤审' GOTO ext END IF IF ll_ifok = 1 THEN SELECT jdtype INTO :ll_jdtype FROM u_sc_workgroup Where wrkgrpid = :ll_wrkgrpid; IF sqlca.SQLCode = 0 And ll_jdtype = 7 THEN // 更新工组进度 SELECT mtrlid, ordercode INTO :ll_mtrlid, :ls_ordercode 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 SELECT statusflag INTO :ll_statusflag FROM u_mtrldef Where mtrlid = :ll_mtrlid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料信息失败,' + sqlca.SQLErrText GOTO ext END IF ll_pos = Pos(ls_ordercode, '.') IF ll_statusflag = 2 And ll_pos > 0 THEN // DONE: 汇总直接更新工组进度 ls_ordercode = Mid(ls_ordercode, 1, ll_pos - 1) IF uof_update_pordermtrl_workgroup(ls_ordercode, ll_wrkgrpid, Ref arg_msg, False) <> 1 THEN rslt = 0 GOTO ext END IF ELSE IF uof_add_workgroup_qty(ll_scid, ll_orderid, ll_wrkgrpid, 0, ld_now, -ld_qty, Ref arg_msg, False) <> 1 THEN rslt = 0 arg_msg = '更新工组进度失败,原因:' + arg_msg GOTO ext END IF END IF END IF END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF RETURN rslt end function public function long pf_getclassid (ref string arg_msg);Long ll_classid = 0 Int rslt = 1 Long cnt SELECT count(0) INTO :cnt FROM U_FileClass Where billtype = :billtype; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询单据分类失败,' + sqlca.SQLErrText GOTO ext END IF IF cnt = 0 THEN ll_classid = f_sys_scidentity(0,"U_FileClass","classid",arg_msg,True,id_sqlca) IF ll_classid <= 0 THEN rslt = 0 GOTO ext END IF INSERT INTO U_FileClass(ClassID, ClassName, billtype) Values(:ll_classid, '质检图', :billtype); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入指令单工组质检单分类失败,' + sqlca.SQLErrText ROLLBACK; GOTO ext END IF COMMIT; ELSE SELECT top 1 classid INTO :ll_classid FROM U_FileClass WHERE billtype = :billtype Order By ClassID; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询指令单工组质检单分类ID失败,' + sqlca.SQLErrText GOTO ext END IF END IF ext: IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; ll_classid = 0 END IF RETURN ll_classid end function private function integer uof_add_workgroup_qty (long arg_scid, long arg_orderid, long arg_swkpid, long arg_workgroupid, datetime arg_finishdate, decimal arg_qty, ref string arg_msg, boolean arg_ifcommit);//更新工组进度完成数 Int rslt = 1 String ls_ordercode String ls_mtrlcode Decimal ld_orderqty,ld_acmpqty,ld_trueqty DateTime null_dt SetNull(null_dt) DateTime dt_fdate IF arg_orderid <= 0 THEN rslt = 0 arg_msg = '错误的计划唯一码' GOTO ext END IF SELECT ordercode INTO :ls_ordercode FROM u_Order_ml WHERE OrderID = :arg_orderid And scid = :arg_scid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询生产计划编号失败' rslt = 0 GOTO ext END IF SELECT u_mtrldef.mtrlcode , u_order_ml.orderqty, u_order_ml.acmpqty INTO :ls_mtrlcode, :ld_orderqty, :ld_acmpqty FROM u_mtrldef,u_order_ml WHERE u_order_ml.mtrlid = u_mtrldef.mtrlid AND u_order_ml.scid = :arg_scid And u_Order_ml.OrderID = :arg_orderid; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询物料编号失败' rslt = 0 GOTO ext END IF //arg_swkpid:源工组; Decimal finishqty, totalqty SELECT isnull(sum(orderqty - stopqty),0), isnull(sum(finishqty),0) INTO :totalqty, :finishqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_swkpid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = ',查询物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF arg_qty + finishqty > totalqty THEN arg_qty = totalqty - finishqty END IF IF arg_qty + finishqty < 0 THEN arg_qty = -finishqty END IF IF arg_qty = 0 THEN GOTO ext END IF Long ll_owrkgrpid, arr_owrkgrpid[] String ls_wkpname, arr_wkpname[] Long ll_workgroupid, arr_workgroupid[] Decimal ld_ufqty, ld_fqty, arr_ufqty[], arr_fqty[] Long ll_cnt = 0 DECLARE cur1 CURSOR FOR SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_swkpid AND workgroupid = :arg_workgroupid UNION SELECT owrkgrpid, wkpname, workgroupid, orderqty - finishqty - stopqty, finishqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_swkpid And workgroupid <> :arg_workgroupid; OPEN cur1; FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty; DO WHILE sqlca.SQLCode = 0 ll_cnt++ arr_owrkgrpid[ll_cnt] = ll_owrkgrpid arr_wkpname[ll_cnt] = ls_wkpname arr_workgroupid[ll_cnt] = ll_workgroupid arr_ufqty[ll_cnt] = ld_ufqty arr_fqty[ll_cnt] = ld_fqty FETCH cur1 Into :ll_owrkgrpid, :ls_wkpname, :ll_workgroupid, :ld_ufqty, :ld_fqty; LOOP CLOSE cur1; Long i Decimal ld_addqty ld_addqty = arg_qty FOR i = 1 To ll_cnt ll_owrkgrpid = arr_owrkgrpid[i] ls_wkpname = arr_wkpname[i] ll_workgroupid = arr_workgroupid[i] ld_ufqty = arr_ufqty[i] ld_fqty = arr_fqty[i] IF ld_addqty = 0 THEN EXIT END IF IF ld_addqty >= ld_ufqty THEN IF ld_ufqty = 0 THEN CONTINUE UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty + :ld_ufqty, finishflag = 1, finishdate = :arg_finishdate WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid AND owrkgrpid = :ll_owrkgrpid AND wkpname = :ls_wkpname And workgroupid = :ll_workgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_addqty = ld_addqty - ld_ufqty ELSEIF ld_addqty <= -ld_fqty THEN UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty - :ld_fqty, finishflag = 0, finishdate = NULL WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid AND owrkgrpid = :ll_owrkgrpid AND wkpname = :ls_wkpname And workgroupid = :ll_workgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_addqty = ld_addqty + ld_fqty ELSE UPDATE u_OrderMtrl_workgroup SET finishqty = finishqty + :ld_addqty, finishflag = 0, finishdate = NULL WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid AND owrkgrpid = :ll_owrkgrpid AND wkpname = :ls_wkpname And workgroupid = :ll_workgroupid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新物料:'+ls_mtrlcode+'源工组未完成数量失败,原因:'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ld_addqty = 0 END IF NEXT //IF pf_checklast(arg_scid, arg_orderid, arg_swkpid, arg_owkpid) = 1 THEN Decimal ld_sumorderqty SELECT isnull(sum(orderqty - stopqty),0) INTO :ld_sumorderqty FROM u_OrderMtrl_workgroup WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkGrpid = :arg_swkpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+'计划数失败,' + sqlca.SQLErrText GOTO ext END IF Decimal ld_sumfqty SELECT isnull(sum(fqty),0) INTO :ld_sumfqty FROM u_OrderMtrl_workgroup_date WHERE scid = :arg_scid AND orderid = :arg_orderid And wrkGrpid = :arg_swkpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询物料:'+ls_mtrlcode+'已完成数失败,' + sqlca.SQLErrText GOTO ext END IF ld_addqty = arg_qty IF ld_addqty + ld_sumfqty > ld_sumorderqty THEN ld_addqty = ld_sumorderqty - ld_sumfqty END IF IF ld_addqty + ld_sumfqty < 0 THEN ld_addqty = -ld_sumfqty END IF dt_fdate = DateTime(Date(arg_finishdate), Time(0)) IF ld_addqty >= 0 THEN UPDATE u_OrderMtrl_workgroup_date SET fqty = fqty + :ld_addqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid And fdate = :dt_fdate; IF sqlca.SQLCode = 0 THEN IF sqlca.SQLNRows = 0 THEN INSERT INTO u_OrderMtrl_workgroup_date (scid,orderid,wrkgrpid,fdate,fqty) VALUES (:arg_scid,:arg_orderid,:arg_swkpid,:dt_fdate,:ld_addqty); IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '插入工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF END IF ELSE rslt = 0 arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF ELSE DateTime ld_date, arr_date[] Decimal ld_fqtyd, arr_fqtyd[] i = 0 DECLARE cur2 CURSOR FOR SELECT fdate, fqty FROM u_OrderMtrl_workgroup_date WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid AND fdate = :dt_fdate UNION SELECT fdate, fqty FROM u_OrderMtrl_workgroup_date WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid And fdate <> :dt_fdate; OPEN cur2; FETCH cur2 Into :ld_date,:ld_fqtyd; DO WHILE sqlca.SQLCode = 0 i++ arr_date[i] = ld_date arr_fqtyd[i] = ld_fqtyd FETCH cur2 Into :ld_date,:ld_fqtyd; LOOP CLOSE cur2; FOR i = 1 To UpperBound(arr_date) ld_date = arr_date[i] ld_fqtyd = arr_fqtyd[i] IF ld_addqty = 0 THEN EXIT END IF IF ld_addqty <= -ld_fqtyd THEN UPDATE u_OrderMtrl_workgroup_date SET fqty = fqty - :ld_fqtyd WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid And fdate = :ld_date; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF ld_addqty = ld_addqty + ld_fqtyd ELSE UPDATE u_OrderMtrl_workgroup_date SET fqty = fqty + :ld_addqty WHERE scid = :arg_scid AND orderid = :arg_orderid AND wrkgrpid = :arg_swkpid And fdate = :ld_date; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新工组当天进度失败,'+sqlca.SQLErrText GOTO ext END IF ld_addqty = 0 END IF NEXT END IF //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_update_pordermtrl_workgroup (string arg_pordercode, long arg_wrkgrpid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long ll_pscid, ll_porderid Decimal ld_porderqty, ld_rate, ld_fqty SELECT orderqty, scid, orderid INTO :ld_porderqty, :ll_pscid, :ll_porderid FROM u_order_ml Where ordercode = :arg_pordercode; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主指令单信息失败,' + sqlca.SQLErrText GOTO ext END IF SELECT MIN(rate) INTO :ld_rate FROM ( SELECT sum(u_OrderMtrl_workgroup_picsCheck.qty) / u_Order_ml.orderqty AS rate, u_Order_ml.OrderCode FROM u_OrderMtrl_workgroup_picsCheck INNER JOIN u_Order_ml ON u_OrderMtrl_workgroup_picsCheck.scid = u_Order_ml.scid AND u_OrderMtrl_workgroup_picsCheck.orderid = u_Order_ml.OrderID WHERE (u_Order_ml.OrderCode LIKE :arg_pordercode + '.%') AND (u_Order_ml.OrderCode <> :arg_pordercode) AND u_OrderMtrl_workgroup_picsCheck.wrkgrpid = :arg_wrkgrpid AND u_OrderMtrl_workgroup_picsCheck.auditflag = 1 AND u_OrderMtrl_workgroup_picsCheck.ifok = 1 Group By u_order_ml.orderqty,u_order_ml.ordercode) a; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询主指令单的整体进度失败,' + sqlca.SQLErrText GOTO ext END IF ld_fqty = Long(ld_porderqty * ld_rate) IF ld_fqty > ld_porderqty THEN ld_fqty = ld_porderqty END IF UPDATE u_ordermtrl_workgroup SET finishqty = case when (:ld_fqty >= orderqty - stopqty) then orderqty - stopqty else :ld_fqty END, finishflag = case when (:ld_fqty >= orderqty - stopqty) then 1 else 0 END, finishdate = case when (:ld_fqty >= orderqty - stopqty) then GETDATE() else NULL END WHERE scid = :ll_pscid AND orderid = :ll_porderid And wrkgrpid = :arg_wrkgrpid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新主指令单工组进度失败,' + sqlca.SQLErrText GOTO ext END IF ext: IF arg_ifcommit THEN IF rslt = 1 THEN COMMIT; ELSE ROLLBACK; END IF END IF RETURN rslt end function on uo_ordermtrl_workgroup_picscheck.create call super::create TriggerEvent( this, "constructor" ) end on on uo_ordermtrl_workgroup_picscheck.destroy TriggerEvent( this, "destructor" ) call super::destroy end on