$PBExportHeader$uo_oa_doc.sru forward global type uo_oa_doc from nonvisualobject end type end forward global type uo_oa_doc from nonvisualobject end type global uo_oa_doc uo_oa_doc type variables Transaction ins_tran long ins_docid Boolean it_newbegin = FALSE //新建标志 Boolean it_updatebegin = FALSE //修改标志 end variables forward prototypes public function long del_doc (long arg_docid, ref string arg_msg, boolean ifcommit) public function integer save_doc (s_oadoc arg_doc, ref string arg_msg, ref long arg_docid, boolean arg_ifcommit) public function integer opt_audit (long arg_powerid, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg) public function integer p_reverse (long arg_docid, boolean arg_ifcommit, ref string arg_msg) public function integer p_init (long arg_docid, boolean arg_ifcommit, ref string arg_msg) public function integer p_stop (long arg_docid, boolean arg_ifcommit, ref string arg_msg) public function integer p_continue (long arg_docid, boolean arg_ifcommit, ref string arg_msg) public function integer p_check_if_oaflow (long arg_scid, long arg_billid, long arg_powerid, ref string arg_msg) public function integer p_create_oa_flow (long arg_powerid, long arg_scid, long arg_billid, string arg_billcode, string arg_relcode, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg) public function integer uof_top1_sort_id (long arg_docid, ref string arg_ref_sort, ref long arg_ref_flowid, ref string arg_msg) public function integer p_to_nextstep (long arg_docid, long arg_sort, boolean arg_ifcommit, ref string arg_msg) public function integer p_add_oa_flow (long arg_docid, long arg_empid, long arg_rowid, long arg_colomnid, long arg_flowsort, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg) public function integer uof_doc_stepadd (s_oaflow_step arg_s_oaflow_step, ref string arg_msg, boolean arg_ifcommit) public function integer uof_get_flow_annex (long arg_flowid, ref s_oa_doc_annex arg_s_oda[]) public function integer set_read (long arg_docid, long arg_empid, long arg_read_flag) public function integer opt_caudit (long arg_powerid, long arg_type, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg, string arg_empcontent) public function integer p_gree (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp) public function integer p_oppose (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp) public function integer uof_doc_stepdel (long arg_docid, long arg_flowsort, integer arg_deltype, ref string arg_msg, boolean arg_ifcommit) public function integer uof_urge (long arg_docid, string arg_urgemsg, string arg_emp, ref string arg_msg, boolean arg_ifcommit) public function integer uof_disagree_back (long arg_docid, string arg_disagree_msg, boolean arg_ifcommit, ref string arg_msg) public function integer uof_clean_step (long arg_docid, long arg_flowsort, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_item (long arg_docid, long arg_printid, string arg_itemvalue, long arg_relid, ref string arg_msg, boolean arg_ifcommit) public function integer uof_update_relqty (long arg_docid, decimal arg_relqty, ref string arg_msg, boolean arg_ifcommit) end prototypes public function long del_doc (long arg_docid, ref string arg_msg, boolean ifcommit);Long rslt = 1,cnt = 0 Long ll_docflag If arg_docid <= 0 Then arg_msg = '非有效公文ID' rslt = 0 Goto ext End If Select docflag Into :ll_docflag From oa_doc Where docid = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '查询公文信息失败>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If If ll_docflag <> 0 Then rslt = 0 arg_msg = '公文只有在草稿状态下才能被删除,请核对' Goto ext End If Delete From oa_doc_flow Where (oa_doc_flow.docid = :arg_docid) Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除公文流转失败>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If Delete From oa_doc_step Where (oa_doc_step.docid = :arg_docid) Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除公文流转失败>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If Delete From oa_doc_stepemp Where oa_doc_stepemp.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除公文流程相关人员失败'+ins_tran.SQLErrText rslt = 0 Goto ext End If Delete From oa_doc_item Where oa_doc_item.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除公文自定义字段失败'+ins_tran.SQLErrText rslt = 0 Goto ext End If Delete From oa_doc_copy_emp Where oa_doc_copy_emp.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除抄送对象失败'+ins_tran.SQLErrText rslt = 0 Goto ext End If Delete From oa_doc_annex Where oa_doc_annex.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除公文失败(附件表)'+ins_tran.SQLErrText rslt = 0 Goto ext End If Delete From oa_doc Where oa_doc.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '删除公文失败'+ins_tran.SQLErrText rslt = 0 Goto ext End If ext: If ifcommit And rslt = 1 Then Commit Using ins_tran; ElseIf rslt = 0 Then Rollback Using ins_tran; End If Return rslt end function public function integer save_doc (s_oadoc arg_doc, ref string arg_msg, ref long arg_docid, boolean arg_ifcommit);Long rslt = 1 Long ls_newid DateTime server_datetime String doccode Long ls_newdocid = 0 Long ls_empid,ls_rowid,ls_columnid String ls_empcode Long li_flowid,ll_i SELECT TOP 1 getdate() INTO :server_datetime FROM u_user Using ins_tran; //取得系统时间,借用操作员表 IF ins_tran.SQLCode <> 0 THEN rslt = 0 arG_MSG = "查询操作失败,日期 " GOTO ext END IF IF IsNull(arg_doc.doctitle) THEN arg_doc.doctitle = '' IF IsNull(arg_doc.doccontent) THEN arg_doc.doccontent = '' IF Trim(arg_doc.doctitle) = '' THEN arG_MSG = '缺乏公文标题' rslt = 0 GOTO ext END IF IF Trim(arg_doc.doccontent) = '' THEN arG_MSG = '缺乏公文内容' rslt = 0 GOTO ext END IF SELECT empid INTO :ls_empid FROM u_user Where username = :publ_operator Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '查询用户ID失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF IF ls_empid < 0 THEN rslt = 0 arG_MSG = '错误用户ID' GOTO ext END IF IF arg_doc.docid = 0 THEN //新建 ls_newid = f_sys_scidentity(sys_scid,"oa_doc","docID",arG_MSG,True,id_sqlca) doccode = getid(sys_scid,'GW',Date(server_datetime),False,ins_tran) IF doccode = "err" THEN doccode = '' rslt = 0 arG_MSG = "无法获取公文编号"+"~n"+sqlca.SQLErrText GOTO ext END IF INSERT INTO oa_doc (docID, Doccode, Doctitle, Doccontent, Doccontent_ori, dscrp, docflag, dtype, billcode, Opemp, Opdt, rowid, SCID, BILLID, flowid, powerid, empid, timedscrp, specialdscrp, relqty, reldemocode, reldemoid ) VALUES(:ls_newid, :doccode, :arg_doc.doctitle, :arg_doc.doccontent, :arg_doc.doccontent, :arg_doc.dscrp, :arg_doc.docstatus, :arg_doc.dtype, :arg_doc.billcode, :publ_operator, :server_datetime, :arg_doc.rowid, :arg_doc.SCID, :arg_doc.BILLID, :arg_doc.flowid, :arg_doc.powerid, :ls_empid, :arg_doc.timedscrp, :arg_doc.specialdscrp, :arg_doc.relqty, :arg_doc.reldemocode, :arg_doc.reldemoid)Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败1>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF IF arg_doc.dtype = 0 THEN //dyy 2014-12-10 修改为外部传入数据保存. (由于公文模板引用生成的公文流程可能跟定义的审批流程不一致) FOR ll_i = 1 To UpperBound(arg_doc.arg_s_step) INSERT INTO oa_doc_step (docid, flowsort, flowstepname, flowempstr, flowinfo, limithour, ifnecessary, ifjoin, ifmod_relqty, ifmodfj) VALUES (:ls_newid, :arg_doc.arg_s_step[ll_i].flowsort, :arg_doc.arg_s_step[ll_i].flowstepname, :arg_doc.arg_s_step[ll_i].flowempstr, :arg_doc.arg_s_step[ll_i].flowinfo, :arg_doc.arg_s_step[ll_i].limithour, :arg_doc.arg_s_step[ll_i].ifnecessary, :arg_doc.arg_s_step[ll_i].ifjoin, :arg_doc.arg_s_step[ll_i].ifmod_relqty, :arg_doc.arg_s_step[ll_i].ifmodfj) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败2,插入审核步骤失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT FOR ll_i = 1 To UpperBound(arg_doc.arg_s_stepemp) INSERT INTO oa_doc_stepemp (docid, flowsort, empid) VALUES (:ls_newid, :arg_doc.arg_s_stepemp[ll_i].flowsort, :arg_doc.arg_s_stepemp[ll_i].empid) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败3,插入审核步骤人员信息失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT ELSE //插入流程步骤 //如果有发起者处理的,插入发起者的empid INSERT INTO oa_doc_step (docid, flowsort, flowstepname, flowempstr, flowinfo, limithour, ifnecessary, ifjoin) SELECT :ls_newid, flowsort, flowstepname, case when ifopflag = 0 then flowempstr else rtrim(flowempstr) + ',' + :publ_operator END, flowinfo, limithour, ifnecessary, ifjoin FROM oa_flowdef_step Where flowid = :arg_doc.flowid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败2>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF FOR ll_i = 1 To UpperBound(arg_doc.flowsort_arr) UPDATE oa_doc_step SET flowinfo = :arg_doc.flowinfo_arr[ll_i], limithour = :arg_doc.limithour_arr[ll_i] WHERE docid = :ls_newid And flowsort = :arg_doc.flowsort_arr[ll_i] Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '更新审批描述失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT // case when ifopflag = 0 then flowempstr else // case when CHARINDEX(:publ_operator, flowempstr) > 0 then flowempstr else // case when rtrim(flowempstr) = '' then :publ_operator else rtrim(flowempstr) + ',' + :publ_operator END END END //插入常规的用户empid INSERT INTO oa_doc_stepemp (docid, flowsort, empid) SELECT :ls_newid,oa_flowdef_stepemp.flowsort,oa_flowdef_stepemp.empid FROM oa_flowdef_stepemp INNER join oa_flowdef_step on oa_flowdef_stepemp.flowid = oa_flowdef_step.flowid AND oa_flowdef_stepemp.flowsort = oa_flowdef_step.flowsort WHERE oa_flowdef_stepemp.flowid = :arg_doc.flowid And oa_flowdef_step.ifopflag = 0 Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败3>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF //插入发起者的empid INSERT INTO oa_doc_stepemp (docid, flowsort, empid) SELECT :ls_newid AS docid, flowsort, :ls_empid AS empid FROM oa_flowdef_step WHERE flowid = :arg_doc.flowid And (ifopflag = 1) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败4>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF // And (CHARINDEX( :publ_operator, flowempstr) = 0) END IF FOR ll_i = 1 To UpperBound(arg_doc.arg_s_item) INSERT INTO oa_doc_item (docid, printid, itemname, itemtype, itemvalue, flowsort, ifrequired, relid, dscrp_ch, modemp, moddate, cell, ifread) VALUES (:ls_newid, :arg_doc.arg_s_item[ll_i].printid, :arg_doc.arg_s_item[ll_i].itemname, :arg_doc.arg_s_item[ll_i].itemtype, :arg_doc.arg_s_item[ll_i].itemvalue, :arg_doc.arg_s_item[ll_i].flowsort, :arg_doc.arg_s_item[ll_i].ifrequired, :arg_doc.arg_s_item[ll_i].relid, :arg_doc.arg_s_item[ll_i].dscrp_ch, :arg_doc.arg_s_item[ll_i].modemp, :arg_doc.arg_s_item[ll_i].moddate, :arg_doc.arg_s_item[ll_i].cell, :arg_doc.arg_s_item[ll_i].ifread) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败,插入自定义字段>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT FOR ll_i = 1 To UpperBound(arg_doc.arg_s_copy_emp) INSERT INTO oa_doc_copy_emp (docid, empid) VALUES (:ls_newid, :arg_doc.arg_s_copy_emp[ll_i].empid) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败,插入抄送对象字段>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT arg_docid = ls_newid ELSE //更新 UPDATE oa_doc SET Doctitle = :arg_doc.doctitle, Doccontent = :arg_doc.doccontent, dscrp = :arg_doc.dscrp, dtype = :arg_doc.dtype, billcode = :arg_doc.billcode, mdfemp = :publ_operator, mdfdt = :server_datetime, rowid = :arg_doc.rowid, SCID = :ARG_doc.SCID, BILLID = :ARG_DOC.BILLID, flowid = :arg_doc.flowid, timedscrp = :arg_doc.timedscrp, specialdscrp = :arg_doc.specialdscrp, relqty = :arg_doc.relqty, reldemocode = :arg_doc.reldemocode, reldemoid = :arg_doc.reldemoid WHERE docID = :arg_doc.docid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '更新公告失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF IF arg_doc.dtype = 0 THEN DELETE FROM oa_doc_step Where (oa_doc_step.docid = :arg_doc.docid) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '删除公文流转失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM oa_doc_stepemp WHERE oa_doc_stepemp.docID = :arg_doc.docid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '删除公文流程相关人员失败'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM oa_doc_item WHERE oa_doc_item.docID = :arg_doc.docid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '删除公文自定义字段失败'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM oa_doc_copy_emp WHERE docid = :arg_doc.docid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '删除抄送对象失败'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF //dyy 2014-12-10 修改为外部传入数据保存. (由于公文模板引用生成的公文流程可能跟定义的审批流程不一致) FOR ll_i = 1 To UpperBound(arg_doc.arg_s_step) INSERT INTO oa_doc_step (docid, flowsort, flowstepname, flowempstr, flowinfo, limithour, ifnecessary, ifjoin, ifmod_relqty, ifmodfj) VALUES (:arg_doc.docid, :arg_doc.arg_s_step[ll_i].flowsort, :arg_doc.arg_s_step[ll_i].flowstepname, :arg_doc.arg_s_step[ll_i].flowempstr, :arg_doc.arg_s_step[ll_i].flowinfo, :arg_doc.arg_s_step[ll_i].limithour, :arg_doc.arg_s_step[ll_i].ifnecessary, :arg_doc.arg_s_step[ll_i].ifjoin, :arg_doc.arg_s_step[ll_i].ifmod_relqty, :arg_doc.arg_s_step[ll_i].ifmodfj) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败2,插入审核步骤失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT FOR ll_i = 1 To UpperBound(arg_doc.arg_s_stepemp) INSERT INTO oa_doc_stepemp (docid, flowsort, empid) VALUES (:arg_doc.docid, :arg_doc.arg_s_stepemp[ll_i].flowsort, :arg_doc.arg_s_stepemp[ll_i].empid) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败3,插入审核步骤人员信息失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT FOR ll_i = 1 To UpperBound(arg_doc.arg_s_item) INSERT INTO oa_doc_item (docid, printid, itemname, itemtype, itemvalue, flowsort, ifrequired, relid, dscrp_ch, modemp, moddate, cell, ifread) VALUES (:arg_doc.docid, :arg_doc.arg_s_item[ll_i].printid, :arg_doc.arg_s_item[ll_i].itemname, :arg_doc.arg_s_item[ll_i].itemtype, :arg_doc.arg_s_item[ll_i].itemvalue, :arg_doc.arg_s_item[ll_i].flowsort, :arg_doc.arg_s_item[ll_i].ifrequired, :arg_doc.arg_s_item[ll_i].relid, :arg_doc.arg_s_item[ll_i].dscrp_ch, :arg_doc.arg_s_item[ll_i].modemp, :arg_doc.arg_s_item[ll_i].moddate, :arg_doc.arg_s_item[ll_i].cell, :arg_doc.arg_s_item[ll_i].ifread) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败,插入自定义字段>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT FOR ll_i = 1 To UpperBound(arg_doc.arg_s_copy_emp) INSERT INTO oa_doc_copy_emp (docid, empid) VALUES (:arg_doc.docid, :arg_doc.arg_s_copy_emp[ll_i].empid) Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arG_MSG = '发布公告失败,插入抄送对象字段>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF NEXT END IF arg_docid = arg_doc.docid END IF ext: IF rslt = 0 THEN ROLLBACK Using ins_tran; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using ins_tran; END IF RETURN rslt end function public function integer opt_audit (long arg_powerid, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 If arg_billid <= 0 Then rslt = 0 arg_msg = '错误的单据唯一码' Goto ext End If Choose Case arg_powerid Case 6,1324 //'销售订单审核' uo_saletask obj_saletask obj_saletask = Create uo_saletask obj_saletask.commit_transaction = sqlca obj_saletask.audit_buildtype = 1 If obj_saletask.propermit(arg_Scid,arg_billid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Destroy obj_saletask Case 94,1277,4299 //'采购订单' uo_buytask uo_buy uo_buy = Create uo_buytask uo_buy.commit_transaction = sqlca uo_buy.audit_buildtype = 1 If uo_buy.firstpermit(arg_Scid,arg_billid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Destroy uo_buy Case 36,1138 uo_order_ml uo_order uo_order = Create uo_order_ml uo_order.audit_buildtype = 1 If uo_order.sec_audit(arg_Scid,arg_billid,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Destroy uo_order Case 461 uo_quote uo_qu uo_qu = Create uo_quote uo_qu.commit_transaction = sqlca uo_qu.audit_buildtype = 1 If uo_qu.sec_audit(arg_Scid,arg_billid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Destroy uo_qu Case 1684,2234 uo_sptcheck uo_check uo_check = Create uo_sptcheck uo_check.audit_buildtype = 1 If uo_check.audit(arg_billid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Destroy uo_check Case 1494 uo_workprice_change uo_workprice uo_workprice = Create uo_workprice_change uo_workprice.audit_buildtype = 1 If uo_workprice.audit(arg_billid,publ_operator,arg_msg,False) = 0 Then rslt = 0 Goto ext End If Destroy uo_workprice Case 2404 uo_price_order uo_price uo_price = Create uo_price_order If uo_price.secaudit(arg_billid,publ_operator,False,arg_msg) = 0 Then rslt = 0 Goto ext End If Destroy uo_price case 4174 uo_requestbuy uo_rqbuy uo_rqbuy = create uo_requestbuy uo_rqbuy.audit_buildtype = 1 If uo_rqbuy.audit_2(arg_scid,arg_billid,publ_operator,arg_msg,false) = 0 Then rslt = 0 Goto ext End If Destroy uo_rqbuy End Choose ext: If rslt = 0 Then Rollback Using ins_tran; ElseIf arg_ifcommit And rslt = 1 Then Commit Using ins_tran; End If Return rslt end function public function integer p_reverse (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long ls_rowid,ls_empid Long li_cnt Long ls_dtype,ls_scid,ls_billid,ls_powerid Long LL_docflag DateTime nulldate SetNull(nulldate) li_cnt = 0 SELECT count(*) INTO :li_cnt FROM oa_doc Where docid = :arg_docid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF IF li_cnt <= 0 THEN rslt = 0 arg_msg = '错误的公文唯一码' GOTO ext END IF SELECT rowid,dtype,scid,billid,powerid,docflag INTO :ls_rowid ,:ls_dtype,:ls_scid,:ls_billid,:ls_powerid,:LL_docflag FROM oa_doc Where docid = :arg_docid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询公文ID失败1>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT empid INTO :ls_empid FROM u_user Where username = :publ_operator; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询用户ID失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //该人员所在的流转列 li_cnt = 0 SELECT count(*) INTO :li_cnt FROM oa_doc_flow WHERE oa_doc_flow.docid = :arg_docid AND oa_doc_flow.empid = :ls_empid AND oa_doc_flow.passed = 1; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,当前人员公文流转列:'+sqlca.SQLErrText GOTO ext END IF IF li_cnt = 0 THEN rslt = 0 arg_msg = '你没有执行过审批操作,无须逆处理' GOTO ext END IF Long ll_emp_rowid,ll_flowsort SELECT TOP 1 oa_doc_flow.rowid,oa_doc_flow.flowsort INTO :ll_emp_rowid,:ll_flowsort FROM oa_doc_flow WHERE oa_doc_flow.docid = :arg_docid AND oa_doc_flow.empid = :ls_empid AND oa_doc_flow.passed = 1 Order By oa_doc_flow.rowid Desc Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,当前人员公文流转列:'+sqlca.SQLErrText GOTO ext END IF IF ls_rowid > ll_emp_rowid + 1 THEN rslt = 0 arg_msg = '你的下一级审批人员已经处理过该公文,不能进行逆处理' GOTO ext ELSEIF ls_rowid < ll_emp_rowid + 1 And LL_docflag = 1 THEN rslt = 0 arg_msg = '你还未处理过该公文,不能进行逆处理' GOTO ext END IF li_cnt = 0 SELECT count(distinct rowid) INTO :li_cnt FROM oa_doc_flow Where docid = :arg_docid Using sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询公文ID失败2>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF //IF ls_rowid = li_cnt + 1 THEN //公文已经完成情况 IF ls_rowid <> 2 THEN IF LL_docflag = 11 THEN UPDATE oa_doc SET docflag = 1, fnsdt = :nulldate, fnsemp = '' Where docid = :arg_docid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新公文ID失败4>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF IF ls_dtype = 1 THEN IF opt_caudit(ls_powerid,0,ls_scid, ls_billid, False,arg_msg,'') = 0 THEN rslt = 0 GOTO ext END IF END IF END IF UPDATE oa_doc SET rowid = :ll_emp_rowid, docflag = 1, flowsort = :ll_flowsort Where docid = :arg_docid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE oa_doc_flow SET Passed = 0,Empcontent = '',greetime = :nulldate WHERE docid = :arg_docid AND rowid = :ll_emp_rowid AND empid = :ls_empid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新公文ID失败3>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSE //反发起,初始化为草稿状态 UPDATE oa_doc SET rowid = :ll_emp_rowid, docflag = 0, flowsort = 0 Where docid = :arg_docid; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DELETE FROM oa_doc_flow Where docid = :arg_docid ; IF sqlca.SQLCode <> 0 THEN arg_msg = "删除原有流程失败,请重试!"+'~n'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using ins_tran; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using ins_tran; END IF RETURN rslt end function public function integer p_init (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long ls_flowid = 0 Long ls_empid = 0 Long ls_rowid = 0 String ls_dscrp Int li_if_rivet String ls_flowstepname[],ls_flowempstr[] Long ls_flowsort[] Int li_ifopflag[] Int li_limithour[] Long i,ll_i,ll_j Long ls_colomnid Long ll_ds_rowcount,ls_i String ls_Empcontent Long ll_empid_arr[],ll_mxbt String ls_doctitle,ls_doccontent Long ll_pushid uo_phone_push uo_push uo_push = Create uo_phone_push Select flowid,rowid,doctitle,doccontent Into :ls_flowid,:ls_rowid,:ls_doctitle,:ls_doccontent From oa_doc Where oa_doc.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '查询公文所用流程ID失败>>'+ins_tran.SQLErrText Goto ext End If If ls_flowid <= 0 Then rslt = 0 arg_msg = '错误公文流程' Goto ext End If //如果审批流程类型是直接完成审核,则调用归档函数 Select if_rivet Into :li_if_rivet From OA_FLOWDEF Where flowid = :ls_flowid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询审核流程是否直接完成审批类型失败,'+sqlca.SQLErrText Goto ext End If ls_dscrp = '发起人['+publ_operator+']发起公文流转!' Select empid Into :ls_empid From u_user Where Username = :publ_operator Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '查询用户ID失败>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If If ls_empid < 0 Then rslt = 0 arg_msg = '错误用户ID' Goto ext End If //先删除旧流程表 Delete From oa_doc_flow Where docID = :arg_docid Using ins_tran ; If ins_tran.SQLCode <> 0 Then arg_msg = "公文新建失败,请重试!"+'~n'+ins_tran.SQLErrText rslt = 0 Goto ext End If //插入流程列表 //1.插入第一行:发起公文 If li_if_rivet <> 2 Then ls_Empcontent = '发起通过' Else ls_Empcontent = '发起通过并直接完成审批' End If Insert Into oa_doc_flow ( Docid, Empid, rowid, columnid, flowsort, dscrp, Passed , Empcontent, greetime ) Values ( :arg_docid, :ls_empid, 1, 1, 0, :ls_dscrp, 1, :ls_Empcontent, getdate() ) Using ins_tran ; If ins_tran.SQLCode <> 0 Then arg_msg = "公文新建失败,请重试!"+'~n'+ins_tran.SQLErrText rslt = 0 Goto ext End If //查找流程列表,如果是直接完成批审类型,不需要此步骤 If li_if_rivet <> 2 Then ls_colomnid = 0 i = 1 Declare cur_mx Cursor For Select oa_doc_step.flowstepname, oa_doc_step.flowsort, oa_doc_step.flowempstr, oa_doc_step.limithour From oa_doc_step Where oa_doc_step.docid = :arg_docid Order By oa_doc_step.flowsort Using ins_tran ; Open cur_mx; Fetch cur_mx Into :ls_flowstepname[i],:ls_flowsort[i],:ls_flowempstr[i],:li_limithour[i]; Do While ins_tran.SQLCode = 0 i++ Fetch cur_mx Into :ls_flowstepname[i],:ls_flowsort[i],:ls_flowempstr[i],:li_limithour[i]; Loop Close cur_mx; If i <= 1 Then rslt = 0 arg_msg = '没有指定审批步骤!' Goto ext End If datastore ds_oa_flow ds_oa_flow = Create datastore ds_oa_flow.DataObject = "ds_oa_flow_emp_choose" ds_oa_flow.SetTransObject(ins_tran) ll_mxbt = 0 For ll_i = 1 To i - 1 ds_oa_flow.Retrieve(arg_docid,ls_flowsort[ll_i]) ll_ds_rowcount = ds_oa_flow.RowCount() If ll_ds_rowcount <= 0 Then rslt = 0 arg_msg = '可能是单据指定流程失败,或者审批流程没有指定审批步骤.' Goto ext End If ls_colomnid = 0 For ll_j = 1 To ll_ds_rowcount ls_empid = ds_oa_flow.Object.empid[ll_j] If ll_i = 1 Then ll_mxbt++ ll_empid_arr[ll_mxbt] = ls_empid End If ls_colomnid++ Insert Into oa_doc_flow ( Docid, Empid, rowid, columnid, flowsort, dscrp, limithour ) Values ( :arg_docid, :ls_empid, :ll_i + 1, :ls_colomnid, :ls_flowsort[ll_i], '', :li_limithour[ll_i] ) Using ins_tran ; If ins_tran.SQLCode <> 0 Then arg_msg = "公文新建失败,请重试!"+'~n'+ins_tran.SQLErrText rslt = 0 Goto ext End If Next Next End If Update oa_doc Set oa_doc.docflag = 1 Where oa_doc.docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '更新公文状态失败>>'+ins_tran.SQLErrText Goto ext End If Update oa_doc Set rowid = 2,flowsort = :ls_flowsort[1] Where docID = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '更新公文ID失败2>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If Update oa_doc_flow Set read_flag = 0, limittime = DATEADD(hh, limithour, getdate()) Where docID = :arg_docid And rowid = 2 Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '更新公文为未读失败>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If //如果是直接完成审批类型,调用归档函数 If li_if_rivet = 2 Then If p_to_nextstep(arg_docid,-1,False,arg_msg) = 0 Then arg_msg = '公文归档失败>>'+arg_msg rslt = 0 Goto ext End If End If //发送手机推送 If li_if_rivet <> 2 Then If uo_push.uf_add(ll_empid_arr, ls_doctitle, ls_doccontent, 'oatome', String(arg_docid), ll_pushid, arg_msg, False) <> 1 Then rslt = 0 Goto ext End If End If ext: If rslt = 0 Then Rollback Using ins_tran; ElseIf arg_ifcommit And rslt = 1 Then Commit Using ins_tran; End If Destroy uo_push Return rslt end function public function integer p_stop (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 UPDATE oa_doc SET oa_doc.docflag = 10 Where oa_doc.docID = :arg_docid USING ins_tran; IF ins_tran.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新公文失败>>'+ins_tran.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING ins_tran; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING ins_tran; END IF RETURN rslt end function public function integer p_continue (long arg_docid, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 UPDATE oa_doc SET oa_doc.docflag = 1 Where oa_doc.docID = :arg_docid USING ins_tran; IF ins_tran.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新公文失败>>'+ins_tran.SQLErrText GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING ins_tran; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING ins_tran; END IF RETURN rslt end function public function integer p_check_if_oaflow (long arg_scid, long arg_billid, long arg_powerid, ref string arg_msg);Long RSLT = 1 Long CNT Long ls_doc_status SELECT COUNT(*) INTO :CNT FROM oa_doc Where dtype = 1 AND powerid = :arg_powerid AND SCID = :ARG_SCID AND BILLID = :ARG_BILLID USING SQLCA; IF SQLCA.SQLCode <> 0 THEN RSLT = 0 ARG_MSG = '查询操作失败:OA审批公文:'+SQLCA.SQLErrText GOTO ext END IF IF CNT <= 0 THEN RSLT = 0 ARG_MSG = '没有发现对应审批流程' GOTO ext END IF SELECT docflag INTO :ls_doc_status FROM oa_doc Where dtype = 1 AND powerid = :arg_powerid AND SCID = :ARG_SCID AND BILLID = :ARG_BILLID USING SQLCA; IF SQLCA.SQLCode <> 0 THEN RSLT = 0 ARG_MSG = '查询操作失败:OA审批公文状态:'+SQLCA.SQLErrText GOTO ext END IF IF ls_doc_status = 1 THEN RSLT = 0 ARG_MSG = '该单据正处于待OA流程审批中,不能删改、审核、撤审' GOTO ext ELSEIF ls_doc_status = 10 THEN RSLT = 0 ARG_MSG = '该单据正处于OA流程暂停审批中,不能删改、审核、撤审' GOTO ext ELSEIF ls_doc_status = 11 THEN RSLT = 0 ARG_MSG = '该单据已经完成OA流程审批,不能删改、审核、撤审' GOTO ext END IF ext: RETURN RSLT end function public function integer p_create_oa_flow (long arg_powerid, long arg_scid, long arg_billid, string arg_billcode, string arg_relcode, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg);Long rslt = 0 Long cnt = 0 Decimal ls_sumqty,ls_sumamt ,ls_disqty,ls_disamt,ld_rebate Long ls_flowid,ls_billtypeid,arg_docid Long ll_typeid,ll_ordertype Decimal ld_minqty,ld_minprice Decimal ld_sum_checkqty,ld_min_checkqty Dec lde_wrkchg_new_qty, lde_wrkchg_chgname_qty //工价表变更单, 明细新增类型的条目数量,修改类型工序名称变更的条目数量 Int li_kind //高级价格策略类型 String ls_poexpr //高级价格策略表示式 Decimal ld_poexpr_price //价格策略目标价 Decimal ld_poexpr_rebate // 价格策略目标价折扣 Decimal ld_list_price //价格表单价 String ls_cuskind Long ll_buykind String ls_argname,ls_sqlstr Decimal ld_argrslt String ls_colname String ls_kindname,ls_cussptname,ls_moneyname String ls_mtrlname, ls_mtrlmode,ls_unit Decimal ld_qty,ld_price String ls_status,ls_woodcode,ls_pcode Long ll_deptid,ll_mtrltypeid Decimal ld_peramt ,ld_price_dept IF arg_powerid = 0 THEN rslt = 0 ARG_MSG = '错误的权限ID' GOTO ext END IF CHOOSE CASE arg_powerid CASE 6,1324 //'销售订单审核' SELECT SUM(u_SaleTaskMx.SaleQty) AS sumqty, SUM(u_SaleTaskMx.Price * u_SaleTaskMx.SaleQty) AS sumamt INTO :ls_sumqty,:ls_sumamt FROM u_SaleTaskMx INNER JOIN u_SaleTask ON u_SaleTaskMx.scid = u_SaleTask.scid AND u_SaleTaskMx.TaskID = u_SaleTask.TaskID WHERE u_SaleTask.Status = 4 AND u_SaleTask.scid = :arg_Scid And u_SaleTask.TaskID = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,销售订单总数量、总金额:'+sqlca.SQLErrText GOTO ext END IF SELECT u_SaleTask.typeid INTO :ll_typeid FROM u_saletask WHERE u_SaleTask.Status = 4 AND u_SaleTask.scid = :arg_Scid And u_SaleTask.TaskID = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,销售订单分类:'+sqlca.SQLErrText GOTO ext END IF ls_sumamt = Round(ls_sumamt,2) ls_disqty = 0 ls_disamt = 0 ld_rebate = 1 SELECT u_saletype.typename, u_cust.name, cw_currency.name INTO :ls_kindname, :ls_cussptname, :ls_moneyname FROM u_SaleTask LEFT OUTER JOIN u_cust ON u_SaleTask.CusID = u_cust.cusid LEFT OUTER JOIN cw_currency ON u_SaleTask.moneyid = cw_currency.moneyid LEFT OUTER JOIN u_saletype ON u_SaleTask.typeid = u_saletype.typeid WHERE u_saletask.scid = :arg_scid And u_SaleTask.TaskID = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN ls_kindname = '' ls_cussptname = '' ls_moneyname = '' END IF IF ls_moneyname = '人民币' THEN ls_moneyname = '元' IF ls_cussptname <> '' THEN ls_cussptname = '客户:'+ls_cussptname SELECT top 1 u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_SaleTaskMx.SaleQty, u_mtrldef.unit, u_SaleTaskMx.enprice INTO :ls_mtrlname, :ls_mtrlmode, :ld_qty, :ls_unit, :ld_price FROM u_SaleTaskMx INNER JOIN u_mtrldef ON u_SaleTaskMx.MtrlID = u_mtrldef.mtrlid WHERE u_SaleTaskMx.scid = :arg_scid AND u_SaleTaskMx.taskid = :arg_billid Order By u_SaleTaskMx.SaleQty * u_SaleTaskMx.enprice Desc Using sqlca; IF sqlca.SQLCode <> 0 THEN ls_mtrlname = '' ls_mtrlmode = '' ld_qty = 0 ls_unit = '' ld_price = 0 END IF CASE 94,1277,4299 SELECT SUM(u_buytaskmx.uQty) AS sumqty, SUM(u_buytaskmx.uprice * u_buytaskmx.uQty) AS sumamt INTO :ls_sumqty,:ls_sumamt FROM u_buytaskmx INNER JOIN u_buytask ON u_buytaskmx.scid = u_buytask.scid AND u_buytaskmx.TaskID = u_buytask.TaskID WHERE u_buytask.Status = 4 AND u_buytask.scid = :arg_Scid And u_buytask.TaskID = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,采购订单总数量、总金额:'+sqlca.SQLErrText GOTO ext END IF SELECT kind INTO :ll_buykind FROM u_buyTask WHERE scid = :arg_scid And TaskID = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,采购订单分类:'+sqlca.SQLErrText GOTO ext END IF ls_sumamt = Round(ls_sumamt,2) ls_disqty = 0 ls_disamt = 0 ld_rebate = 1 SELECT u_buytype.typename, u_spt.name, cw_currency.name INTO :ls_kindname, :ls_cussptname, :ls_moneyname FROM u_buyTask INNER JOIN u_spt ON u_buyTask.sptID = u_spt.sptid INNER JOIN cw_currency ON u_buyTask.moneyid = cw_currency.moneyid LEFT OUTER JOIN u_buytype ON u_buyTask.kind = u_buytype.typeid WHERE u_buytask.scid = :arg_scid And u_buytask.TaskID = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN ls_kindname = '' ls_cussptname = '' ls_moneyname = '' END IF IF ls_moneyname = '人民币' THEN ls_moneyname = '元' IF ls_cussptname <> '' THEN ls_cussptname = '供应商:'+ls_cussptname SELECT top 1 u_mtrldef.mtrlname, u_mtrldef.mtrlmode, u_buyTaskMx.uqty, u_buyTaskMx.unit, u_buytaskmx.enprice INTO :ls_mtrlname, :ls_mtrlmode, :ld_qty, :ls_unit, :ld_price FROM u_buyTaskMx INNER JOIN u_mtrldef ON u_buyTaskMx.MtrlID = u_mtrldef.mtrlid WHERE u_buytaskmx.taskid = :arg_billid AND u_buytaskmx.scid = :arg_scid Order By u_buytaskmx.uQty * u_buytaskmx.enprice Desc Using sqlca; IF sqlca.SQLCode <> 0 THEN ls_mtrlname = '' ls_mtrlmode = '' ld_qty = 0 ls_unit = '' ld_price = 0 END IF CASE 36,1138 SELECT orderqty ,ordertype INTO :ls_sumqty,:ll_ordertype FROM u_order_ml WHERE scid = :arg_scid AND orderid = :arg_billid And Status = 4 Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,生产数量:'+sqlca.SQLErrText GOTO ext END IF CASE 461 SELECT min(qty),min(sumprice_1) INTO :ld_minqty,:ld_minprice FROM u_quotemx WHERE scid = :arg_scid AND quoteid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,销售报价单:'+sqlca.SQLErrText GOTO ext END IF ld_minprice = Round(ld_minprice,10) CASE 1684,2234 SELECT sum(u_sptcheck_mx.checkqty) INTO :ld_sum_checkqty FROM u_sptcheck_mx INNER JOIN u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid WHERE u_sptcheck.scid = :arg_scid And u_sptcheck_mx.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询总来单质检数操作失败,供应商质检单:'+sqlca.SQLErrText GOTO ext END IF SELECT min(u_sptcheck_mx.checkqty) INTO :ld_min_checkqty FROM u_sptcheck_mx INNER JOIN u_sptcheck ON u_sptcheck_mx.billid = u_sptcheck.billid WHERE u_sptcheck.scid = :arg_scid And u_sptcheck_mx.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询最少来单质检数操作失败,供应商质检单:'+sqlca.SQLErrText GOTO ext END IF CASE 1494 //工价表变更单 //明细存在新增或变更类型改过工序名称的 SELECT sum(CASE u_workprice_changemx.editflag when 1 THEN 1 ELSE 0 END ), sum(CASE u_workprice_changemx.editflag when 0 Then (CASE when u_workprice_changemx.proname <> u_workprice_changemx.proname_ori THEN 1 ELSE 0 END) ELSE 0 END) Into :lde_wrkchg_new_qty,:lde_wrkchg_chgname_qty From u_workprice_change Inner JOIN u_workprice_changemx On u_workprice_change.billid = u_workprice_changemx.billid Where u_workprice_change.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,工价表变更单:'+sqlca.SQLErrText GOTO ext END IF CASE 2404 //高级价格策略 SELECT u_price_order.kind, u_price_order.poexpr, ISNULL(v_sale_price.price, 0) , isnull(u_cust.cuskind,'') INTO :li_kind, :ls_poexpr, :ld_list_price, :ls_cuskind FROM u_price_order LEFT OUTER JOIN u_cust ON u_price_order.cusid = u_cust.cusid LEFT OUTER JOIN (SELECT pricelistid, mtrlid, MAX(price) AS price FROM u_sale_price_mx GROUP BY pricelistid, mtrlid) v_sale_price ON u_price_order.mtrlid = v_sale_price.mtrlid AND u_cust.pricelistid = v_sale_price.pricelistid Where u_price_order.poid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询操作失败,高级价格策略:'+sqlca.SQLErrText GOTO ext END IF IF li_kind = 1 THEN ld_poexpr_price = f_price_order_poexpr(ls_poexpr) ELSE ld_poexpr_price = 0 END IF ld_poexpr_price = Round(ld_poexpr_price,10) IF ld_list_price = 0 THEN ld_poexpr_rebate = 0 ELSE ld_poexpr_rebate = ld_poexpr_price / ld_list_price END IF ld_poexpr_rebate = Round(ld_poexpr_rebate,2) ls_cuskind = '"'+ls_cuskind+'"' CASE 4174 //非产生类物料申购单 SELECT top 1 u_mtrldef.mtrlname, u_requestbuymxmx.status, u_requestbuymxmx.woodcode, u_requestbuymxmx.pcode, u_requestbuymxmx.uqty, u_requestbuymxmx.unit, u_requestbuymxmx.price, u_requestbuy.deptid, u_mtrldef.mtrltypeid, isnull(u_dept_peramt.peramt,0) INTO :ls_mtrlname, :ls_status, :ls_woodcode, :ls_pcode, :ld_qty, :ls_unit, :ld_price_dept, :ll_deptid, :ll_mtrltypeid, :ld_peramt FROM u_requestbuymxmx INNER JOIN u_mtrldef ON u_requestbuymxmx.mtrlid = u_mtrldef.mtrlid INNER JOIN u_requestbuy ON u_requestbuymxmx.scid = u_requestbuy.scid AND u_requestbuymxmx.requestbuyid = u_requestbuy.requestbuyid LEFT OUTER JOIN u_dept_peramt ON u_requestbuy.deptid = u_dept_peramt.deptid AND u_mtrldef.mtrltypeid = u_dept_peramt.mtrltypeid WHERE u_requestbuymxmx.scid = :arg_scid AND u_requestbuymxmx.requestbuyid = :arg_billid Order By u_requestbuymxmx.Price Desc Using sqlca; IF sqlca.SQLCode <> 0 THEN ls_mtrlname = '' ls_status = '' ls_woodcode = '' ls_pcode = '' ld_qty = 0 ls_unit = '' ld_price_dept = 0 ll_deptid = 0 ll_mtrltypeid = 0 ld_peramt = 0 END IF ld_price = ld_price_dept ls_sumamt = Round(ld_qty * ld_price,5) END CHOOSE String ls_temp Long i,j Boolean if_find = False Long rslt_flowid = 0,rslt_billtype = 0 String ls Long s_rtn datastore ds_flow_set ds_flow_set = Create datastore ds_flow_set.DataObject = 'ds_oa_flow_set' ds_flow_set.SetTransObject( sqlca) ds_flow_set.Retrieve(arg_powerid) IF ds_flow_set.RowCount( ) <= 0 THEN rslt = 0 ARG_MSG = '没有设置审批条件' GOTO ext END IF datastore ds_parm ds_parm = Create datastore ds_parm.DataObject = 'ds_oa_flow_sqlarg' ds_parm.SetTransObject(sqlca) ds_parm.Retrieve(arg_powerid) FOR i = 1 To ds_flow_set.RowCount( ) ls_temp = ds_flow_set.Object.relation[i] FOR j = 1 To ds_parm.RowCount() ls_argname = ds_parm.Object.argname[j] ls_sqlstr = ds_parm.Object.sqlstr[j] IF ls_sqlstr = '' THEN CONTINUE ls_argname = '['+ls_argname+']' SELECT Top 1 Replace(:ls_sqlstr,':arg_id',:arg_billid) Into :ls_sqlstr From u_user; IF Pos(ls_temp,ls_argname) > 0 THEN DECLARE cur_get Dynamic Cursor FOR sqlsa ; PREPARE sqlsa From :ls_sqlstr ; OPEN Dynamic cur_get; FETCH cur_get Into :ld_argrslt; IF sqlca.SQLCode <> 0 THEN rslt = 0 ARG_MSG = '查询自定义sql参数:'+ls_argname+' 的值失败' GOTO ext END IF CLOSE cur_get; SELECT Top 1 Replace(:ls_temp,:ls_argname,:ld_argrslt) Into :ls_temp From u_user; END IF NEXT SELECT Top 1 Replace(:ls_temp,'采购订单分类',:ll_buykind) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'总数量',:ls_sumqty) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'总金额',:ls_sumamt) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'订单分类',:ll_typeid) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'计划类型',:ll_ordertype) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'客户还价',:ld_minprice) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'报价数量',:ld_minqty) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'总来单质检数',:ld_sum_checkqty) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'最少来单质检数',:ld_min_checkqty) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'新增类型条目数量',:lde_wrkchg_new_qty) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'修改类型且变更工序名条目数量',:lde_wrkchg_chgname_qty) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'价格策略类型',:li_kind) Into :ls_temp From u_user; // Select Top 1 Replace(:ls_temp,'价格限制',0) Into :ls_temp From u_user; // Select Top 1 Replace(:ls_temp,'价格指定',1) Into :ls_temp From u_user; // Select Top 1 Replace(:ls_temp,'折扣指定',2) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'价格策略目标价折扣',:ld_poexpr_rebate) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'价格策略目标价',:ld_poexpr_price) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'客户分类',:ls_cuskind) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'非生产物料类别',:ll_mtrltypeid) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'非生产部门',:ll_deptid) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'参考单价',:ld_price_dept) Into :ls_temp From u_user; SELECT Top 1 Replace(:ls_temp,'月预算',:ld_peramt) Into :ls_temp From u_user; ls_temp = 'if('+ls_temp+',1,0)' ls = ds_flow_set.Modify("aa.expression='"+ls_temp+"'") s_rtn = Long(ds_flow_set.Object.aa[i]) IF s_rtn = 1 THEN rslt_flowid = ds_flow_set.Object.flowid[i] rslt_billtype = ds_flow_set.Object.BilltypeAD[i] rslt = 1 if_find = True EXIT END IF NEXT IF Not if_find THEN rslt = 0 ARG_MSG = '没有合适的审批流程,可能审批条件没有设置' GOTO ext END IF uo_oa_doc uo_tran uo_tran = Create uo_oa_doc uo_tran.ins_tran = sqlca Long ls_settypeid ls_settypeid = f_oa_find_settype(arg_powerid) s_oadoc s_savedoc IF ls_settypeid > 0 THEN s_savedoc.doctitle = s_oaflow_settype[ls_settypeid].setname+'(自动)' If (arg_powerid = 94 Or arg_powerid = 1277 Or arg_powerid = 6 Or arg_powerid = 4299) And ls_cussptname <> '' And ls_mtrlname <> '' THEN s_savedoc.doccontent = ls_kindname+' '+ls_cussptname+' 金额:'+String(ls_sumamt,'#,##0.##')+','+ls_mtrlname+' '+ls_mtrlmode+' '+String(ld_price,'#,##0.##########')+' '+ls_moneyname+' '+String(ld_qty,'#,##0.##########')+ls_unit+'...' ELSEIF arg_powerid = 4174 THEN s_savedoc.doccontent = ls_mtrlname+' '+String(ld_qty,'#,##0.##########')+ls_unit+' 单价:'+String(ld_price,'#,##0.##########')+'元'+' 金额:'+String(ls_sumamt,'#,##0.##') ELSE s_savedoc.doccontent = '系统自动发起公文,相关号码:'+arg_relcode s_savedoc.doccontent_ori = '系统自动发起公文,相关号码:'+arg_relcode END IF ELSE s_savedoc.doctitle = '系统自动发起公文' s_savedoc.doccontent = '系统自动发起公文,相关号码:'+arg_relcode s_savedoc.doccontent_ori = '系统自动发起公文,相关号码:'+arg_relcode END IF s_savedoc.docid = 0 s_savedoc.dscrp = arg_dscrp s_savedoc.dtype = 1 s_savedoc.billcode = arg_billcode s_savedoc.flowid = rslt_flowid s_savedoc.rowid = 1 s_savedoc.docstatus = 1 s_savedoc.scid = arg_Scid s_savedoc.billid = arg_billid s_savedoc.powerid = arg_powerid IF uo_tran.save_doc(s_savedoc, ARG_MSG,arg_docid,False) = 0 THEN rslt = 0 GOTO ext END IF ins_docid = arg_docid Destroy uo_tran ext: IF rslt = 0 THEN ROLLBACK Using sqlca; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using sqlca; END IF Destroy ds_parm RETURN rslt end function public function integer uof_top1_sort_id (long arg_docid, ref string arg_ref_sort, ref long arg_ref_flowid, ref string arg_msg);Int rslt = 1 SELECT TOP 1 OA_FLOWDEF_STEP.flowsort,OA_FLOWDEF_STEP.flowid INTO :arg_ref_sort,:arg_ref_flowid FROM oa_doc INNER JOIN OA_FLOWDEF_STEP ON oa_doc.flowid = OA_FLOWDEF_STEP.flowid WHERE oa_doc.docid = :arg_docid ORDER BY OA_FLOWDEF_STEP.flowsort USING ins_tran; IF ins_tran.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败,开始流转编序:'+ins_tran.SQLErrText GOTO ext END IF ext: RETURN rslt end function public function integer p_to_nextstep (long arg_docid, long arg_sort, boolean arg_ifcommit, ref string arg_msg);Long RSLT = 1 Long ll_maxrowid,ls_colomnid = 0,ll_pushid Long ll_empid_arr[],ll_mxbt String ls_doctitle, ls_doccontent ll_mxbt = 1 uo_phone_push uo_push uo_push = Create uo_phone_push If ARG_SORT = -1 Then //归档 Long ls_dtype,ls_billid,ls_powerid,ls_scid Select dtype,billid,powerid,scid Into :ls_dtype,:ls_billid,:ls_powerid,:ls_scid From oa_doc Where docID = :ARG_DOCID Using ins_tran; If ins_tran.SQLCode <> 0 Then RSLT = 0 ARG_MSG = '查询公文ID失败1>>'+ins_tran.SQLErrText Goto EXT End If Update oa_doc Set docflag = 11, fnsdt = getdate(), fnsemp = :publ_operator, rowid = rowid + 1 Where docID = :ARG_DOCID; If ins_tran.SQLCode <> 0 Then RSLT = 0 ARG_MSG = '更新公文ID失败1>>'+ins_tran.SQLErrText Goto EXT End If Update oa_doc_flow Set read_flag = 0 Where docID = :ARG_DOCID And rowid = 1; If ins_tran.SQLCode <> 0 Then RSLT = 0 ARG_MSG = '更新公文为未读失败1>>'+ins_tran.SQLErrText Goto EXT End If If ls_dtype = 1 Then If opt_audit(ls_powerid,ls_scid, ls_billid, False,ARG_MSG) = 0 Then RSLT = 0 ARG_MSG = '审批单据操作失败>>'+ARG_MSG Goto EXT End If End If Else Update oa_doc Set rowid = rowid + 1 ,flowsort = :arg_sort Where docID = :ARG_DOCID Using ins_tran; If ins_tran.SQLCode <> 0 Then ARG_MSG = '更新公文ID失败2>>'+ins_tran.SQLErrText RSLT = 0 Goto EXT End If Update oa_doc_flow Set oa_doc_flow.read_flag = 0, oa_doc_flow.limittime = DATEADD(hh, oa_doc_flow.limithour, getdate()) From oa_doc_flow Inner JOIN oa_doc ON oa_doc_flow.Docid = oa_doc.docID And oa_doc_flow.rowid = oa_doc.rowid Where (oa_doc_flow.docID = :ARG_DOCID); If ins_tran.SQLCode <> 0 Then RSLT = 0 ARG_MSG = '更新公文为未读失败2>>'+ins_tran.SQLErrText Goto EXT End If Declare cur_emp Cursor For Select Empid From oa_doc_flow Where (flowsort = :arg_sort) And (docID = :ARG_DOCID) Using ins_tran; Open cur_emp ; Fetch cur_emp Into :ll_empid_arr[ll_mxbt]; Do While ins_tran.SQLCode = 0 ll_mxbt++ Fetch cur_emp Into :ll_empid_arr[ll_mxbt]; Loop Close cur_emp; ll_mxbt = ll_mxbt - 1 If ll_mxbt > 0 Then Select doctitle,doccontent Into :ls_doctitle,:ls_doccontent From oa_doc Where oa_doc.docID = :ARG_DOCID Using ins_tran; If ins_tran.SQLCode <> 0 Then RSLT = 0 ARG_MSG = '发送手机推送失败(查询公文信息失败)>>'+ins_tran.SQLErrText Goto EXT End If If uo_push.uf_add(ll_empid_arr, ls_doctitle, ls_doccontent, 'oatome', String(ARG_DOCID), ll_pushid, ARG_MSG, False) <> 1 Then RSLT = 0 Goto EXT End If End If End If EXT: If RSLT = 0 Then Rollback Using ins_tran; ElseIf arg_ifcommit And RSLT = 1 Then Commit Using ins_tran; End If Destroy uo_push Return RSLT end function public function integer p_add_oa_flow (long arg_docid, long arg_empid, long arg_rowid, long arg_colomnid, long arg_flowsort, string arg_dscrp, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1,cnt IF IsNull(arg_docid) THEN arg_docid = 0 IF IsNull(arg_empid) THEN arg_empid = 0 IF IsNull(arg_rowid) THEN arg_rowid = 0 IF IsNull(arg_colomnid) THEN arg_colomnid = 0 IF IsNull(arg_flowsort) THEN arg_flowsort = 0 IF IsNull(arg_dscrp) THEN arg_dscrp = '' IF arg_docid <= 0 THEN rslt = 0 arg_msg = '错误的公文唯一码' GOTO ext END IF cnt = 0 SELECT count(*) INTO :cnt FROM u_user Where empid = :arg_empid USING ins_tran; IF ins_tran.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+ins_tran.SQLErrText GOTO ext END IF IF cnt <= 0 THEN rslt = 0 arg_msg = '错误的人员唯一码' GOTO ext END IF INSERT INTO oa_doc_flow ( Docid, Empid, rowid, columnid, flowsort, dscrp ) VALUES ( :arg_docid, :arg_empid, :arg_rowid, :arg_colomnid, :arg_flowsort, :arg_dscrp ); IF sqlca.SQLCode <> 0 THEN arg_msg = "公文新建失败,请重试!"+'~n'+sqlca.SQLErrText rslt = 0 GOTO ext END IF UPDATE oa_doc SET rowid = :arg_rowid,flowsort = :arg_flowsort Where Docid = :arg_docid USING ins_tran; IF ins_tran.SQLCode <> 0 THEN arg_msg = '更新公文ID失败2>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF ext: IF rslt = 0 THEN ROLLBACK USING ins_tran; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING ins_tran; END IF RETURN rslt end function public function integer uof_doc_stepadd (s_oaflow_step arg_s_oaflow_step, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Long i Int ll_docflag Long ls_colomnid If IsNull(arg_s_oaflow_step.docid) Then arg_s_oaflow_step.docid = 0 If IsNull(arg_s_oaflow_step.flowstepname) Then arg_s_oaflow_step.flowstepname = '' If IsNull(arg_s_oaflow_step.flowsort) Then arg_s_oaflow_step.flowsort = 0 If IsNull(arg_s_oaflow_step.flowempstr) Then arg_s_oaflow_step.flowempstr = '' If IsNull(arg_s_oaflow_step.flowinfo) Then arg_s_oaflow_step.flowinfo = '' If IsNull(arg_s_oaflow_step.limithour) Then arg_s_oaflow_step.limithour = 0 If IsNull(arg_s_oaflow_step.ifnecessary) Then arg_s_oaflow_step.ifnecessary = 0 If IsNull(arg_s_oaflow_step.ifjoin) Then arg_s_oaflow_step.ifjoin = 0 If IsNull(arg_s_oaflow_step.ifmod_relqty) Then arg_s_oaflow_step.ifmod_relqty = 0 If IsNull(arg_s_oaflow_step.ifmodfj) Then arg_s_oaflow_step.ifmodfj = 1 If arg_s_oaflow_step.docid = 0 Then arg_msg = '错误的公文id,请检查' rslt = 0 Goto ext End If If arg_s_oaflow_step.flowstepname = '' Then arg_msg = '请输入步骤名称' rslt = 0 Goto ext End If If arg_s_oaflow_step.flowsort = 0 Then arg_msg = '请输入步骤' rslt = 0 Goto ext End If If arg_s_oaflow_step.flowempstr = '' Then arg_msg = '请设置相关人员' rslt = 0 Goto ext End If If UpperBound(arg_s_oaflow_step.empid) = 0 Then arg_msg = '请选择相关人员' rslt = 0 Goto ext End If If IsNull(arg_s_oaflow_step.rowid) Then arg_s_oaflow_step.rowid = 0 Select docflag Into :ll_docflag From oa_doc Where docid = :arg_s_oaflow_step.docid Using ins_tran; If ins_tran.SQLCode <> 0 Then arg_msg = '查询公文信息失败>>'+ins_tran.SQLErrText rslt = 0 Goto ext End If Insert Into oa_doc_step ( docid, flowstepname, flowsort, flowempstr, flowinfo, limithour, modemp, moddate, ifnecessary, ifjoin, ifmod_relqty, ifmodfj) Values( :arg_s_oaflow_step.docid, :arg_s_oaflow_step.flowstepname, :arg_s_oaflow_step.flowsort, :arg_s_oaflow_step.flowempstr, :arg_s_oaflow_step.flowinfo, :arg_s_oaflow_step.limithour, :publ_operator, getdate(), :arg_s_oaflow_step.ifnecessary, :arg_s_oaflow_step.ifjoin, :arg_s_oaflow_step.ifmod_relqty, :arg_s_oaflow_step.ifmodfj); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '新增步骤操作失败,'+sqlca.SQLErrText Goto ext End If For i = 1 To UpperBound(arg_s_oaflow_step.empid) Insert Into oa_doc_stepemp (docid, flowsort, empid) Values( :arg_s_oaflow_step.docid, :arg_s_oaflow_step.flowsort, :arg_s_oaflow_step.empid[i]); If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '新增步骤操作失败,'+sqlca.SQLErrText Goto ext End If Next //如果是在进行公文增加流程,需要把数据增加到 oa_doc_flow If ll_docflag <> 0 And arg_s_oaflow_step.rowid > 0 Then ls_colomnid = 0 For i = 1 To UpperBound(arg_s_oaflow_step.empid) ls_colomnid++ Insert Into oa_doc_flow ( Docid, Empid, rowid, columnid, flowsort, dscrp, limithour, modemp, moddate ) Values ( :arg_s_oaflow_step.docid, :arg_s_oaflow_step.empid[i], :arg_s_oaflow_step.rowid, :ls_colomnid, :arg_s_oaflow_step.flowsort, '', :arg_s_oaflow_step.limithour, :publ_operator, getdate() ) Using ins_tran ; If ins_tran.SQLCode <> 0 Then arg_msg = "插入审核人员列表失败!"+'~n'+ins_tran.SQLErrText rslt = 0 Goto ext End If Next End If ext: If rslt = 0 Then Rollback using ins_tran; ElseIf rslt = 1 And arg_ifcommit Then Commit using ins_tran; End If Return rslt end function public function integer uof_get_flow_annex (long arg_flowid, ref s_oa_doc_annex arg_s_oda[]);Long doc_row String ls_flowstepname[],ls_nextstep[],ls_flowempstr[] Long ls_flowsort[] Long i,ll_i,ll_row,ll_if_rivet s_oa_doc_annex s_oda[] i = 1 DECLARE cur_mx CURSOR FOR SELECT Filename, Fileblob, Filetype, annextype, IFDOWNFJ, IFLOOKFJ, Filesize FROM oa_flow_annex Where oa_flow_annex.flowid = :arg_flowid; OPEN cur_mx; FETCH cur_mx INTO :s_oda[i].FileName, :s_oda[i].FileBlob, :s_oda[i].Filetype, :s_oda[i].annextype, :s_oda[i].IFDOWNFJ, :s_oda[i].IFLOOKFJ, :s_oda[i].Filesize; DO WHILE sqlca.SQLCode = 0 i++ FETCH cur_mx INTO :s_oda[i].FileName, :s_oda[i].FileBlob, :s_oda[i].FileType, :s_oda[i].annextype, :s_oda[i].IFDOWNFJ, :s_oda[i].IFLOOKFJ, :s_oda[i].Filesize; LOOP CLOSE cur_mx; arg_s_oda = s_oda RETURN 1 end function public function integer set_read (long arg_docid, long arg_empid, long arg_read_flag);Int rslt = 1 Long ll_rowid, ll_docflag, ll_empid SELECT rowid, docflag, empid INTO :ll_rowid, :ll_docflag, :ll_empid FROM oa_doc Where docid = :arg_docid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF ll_docflag = 11 OR ll_empid = arg_empid THEN ll_rowid = 1 END IF UPDATE oa_doc_flow SET read_flag = :arg_read_flag WHERE docid = :arg_docid AND rowid = :ll_rowid AND empid = :arg_empid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN rslt = 0 GOTO ext END IF IF ins_tran.SQLNRows <= 0 THEN rslt = 0 END IF ext: IF rslt = 1 THEN COMMIT Using ins_tran; ELSE ROLLBACK Using ins_tran; END IF RETURN rslt end function public function integer opt_caudit (long arg_powerid, long arg_type, long arg_scid, long arg_billid, boolean arg_ifcommit, ref string arg_msg, string arg_empcontent);Long rslt = 1 String ls_code,ls_opemp,ls_relcode //arg_type 0 - 逆操作 1 - 反对 IF arg_billid <= 0 THEN rslt = 0 arg_msg = '错误的单据唯一码' GOTO ext END IF CHOOSE CASE arg_powerid CASE 6,1324 //'销售订单审核' uo_saletask obj_saletask obj_saletask = Create uo_saletask obj_saletask.commit_transaction = sqlca obj_saletask.audit_buildtype = 1 IF arg_type = 0 THEN IF obj_saletask.cancelpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF ELSE IF obj_saletask.canceloapermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy obj_saletask //日志 SELECT u_saletask.taskcode,u_saletask.opemp,u_saletask.relcode INTO :ls_code,:ls_opemp,:ls_relcode FROM u_saletask Where u_saletask.scid = :arg_Scid And u_saletask.taskid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF f_setsysoplog('销售订单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) CASE 94,1277,4299 //'采购' uo_buytask obj_buytask obj_buytask = Create uo_buytask obj_buytask.commit_transaction = sqlca obj_buytask.audit_buildtype = 1 IF arg_type = 0 THEN IF obj_buytask.cancelpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext ELSE IF obj_buytask.cancelsecpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF obj_buytask.cancelsecpermit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy obj_buytask //日志 SELECT u_buytask.taskcode,u_buytask.opemp,u_buytask.relcode INTO :ls_code,:ls_opemp,:ls_relcode FROM u_buytask Where u_buytask.scid = :arg_Scid And u_buytask.taskid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF f_setsysoplog('采购订单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) CASE 36,1138 uo_order_ml uo_order uo_order = Create uo_order_ml uo_order.audit_buildtype = 1 IF arg_type = 0 THEN IF uo_order.c_sec_audit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext ELSE IF uo_order.c_audit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_order.c_audit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy uo_order //日志 SELECT u_order_ml.ordercode,u_order_ml.opemp,u_order_ml.relcode INTO :ls_code,:ls_opemp,:ls_relcode FROM u_order_ml Where u_order_ml.scid = :arg_Scid And u_order_ml.orderid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF IF arg_powerid = 36 THEN f_setsysoplog('生产计划','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) ELSE f_setsysoplog('生产指令单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) END IF CASE 461 uo_quote uo_qu uo_qu = Create uo_quote uo_qu.commit_transaction = sqlca IF arg_type = 0 THEN IF uo_qu.cancelsecaudit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext ELSE IF uo_qu.cancelaudit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_qu.cancelaudit(arg_Scid,arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy uo_qu //日志 SELECT u_quote.quotecode,u_quote.opemp,u_quote.relcode INTO :ls_code,:ls_opemp,:ls_relcode FROM u_quote Where u_quote.scid = :arg_Scid And u_quote.quoteid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF f_setsysoplog('销售报价单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) CASE 1684,2234 uo_sptcheck uo_check uo_check = Create uo_sptcheck uo_check.audit_buildtype = 1 IF arg_type = 0 THEN IF uo_check.caudit(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext ELSE IF uo_check.first_caudit(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_check.first_caudit(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy uo_check SELECT u_sptcheck.billcode,u_sptcheck.opemp,u_sptcheck.relcode INTO :ls_code,:ls_opemp,:ls_relcode FROM u_sptcheck Where u_sptcheck.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF IF arg_powerid = 1684 THEN f_setsysoplog('供应商采购质检单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) ELSE f_setsysoplog('供应商外协质检单','撤审'+',code:'+ls_code+',相关号码:'+ls_relcode+',建立人:'+ls_opemp,arg_msg,False) END IF CASE 1494 uo_workprice_change uo_workprice uo_workprice = Create uo_workprice_change uo_workprice.audit_buildtype = 1 uo_workprice.oppreason = arg_empcontent IF uo_workprice.c_priceaudit(arg_billid,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF Destroy uo_workprice SELECT billcode,opemp,relcode INTO :ls_code,:ls_opemp,:ls_relcode FROM u_workprice_change Where u_workprice_change.billid = :arg_billid Using sqlca; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF f_setsysoplog('工价表变更单','工价表单变更单反确认,ID:'+String(arg_billid)+',code:'+ls_code,arg_msg,False) CASE 2404 uo_price_order uo_price uo_price = Create uo_price_order uo_price.audit_buildtype = 1 IF arg_type = 0 THEN IF uo_price.csecaudit(arg_billid,False,arg_msg) = 0 THEN rslt = 0 GOTO ext ELSE IF uo_price.caudit(arg_billid,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_price.caudit(arg_billid,False,arg_msg) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy uo_price SELECT pocode INTO :ls_code FROM u_price_order Where u_price_order.poid = :arg_billid; IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = '查询操作失败:'+sqlca.SQLErrText GOTO ext END IF f_setsysoplog('高级价格策略','高级价格策略撤审,ID:'+String(arg_billid)+',code:'+ls_code,arg_msg,False) CASE 4174 uo_requestbuy uo_rqbuy uo_rqbuy = Create uo_requestbuy uo_rqbuy.audit_buildtype = 1 IF arg_type = 0 THEN IF uo_rqbuy.caudit_2(arg_Scid,arg_billid,1,arg_msg,False) = 0 THEN rslt = 0 GOTO ext ELSE IF uo_rqbuy.caudit(arg_Scid,arg_billid,1,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF ELSE IF uo_rqbuy.caudit(arg_Scid,arg_billid,1,arg_msg,False) = 0 THEN rslt = 0 GOTO ext END IF END IF Destroy uo_rqbuy END CHOOSE ext: IF rslt = 0 THEN ROLLBACK Using ins_tran; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using ins_tran; END IF RETURN rslt end function public function integer p_gree (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp);//流转 Long rslt = 1 Long ls_rowid,ls_empid Long li_cnt long ls_flowsort SELECT rowid,flowsort INTO :ls_rowid,:ls_flowsort FROM oa_doc Where docID = :arg_docid USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询公文ID失败1>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF SELECT empid INTO :ls_empid FROM u_user Where Username = :publ_operator; IF sqlca.SQLCode <> 0 THEN arg_msg = '查询用户ID失败>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF DateTime server_dt SELECT Top 1 getdate() INTO :server_dt FROM u_user USING sqlca ; //取得系统时间,借用操作员表 IF sqlca.SQLCode <> 0 THEN rslt = 0 arg_msg = "查询操作失败,日期 " GOTO ext END IF IF ls_flowsort <> 0 THEN UPDATE oa_doc_flow SET Passed = 1,Empcontent = :arg_empcontent,greetime = :server_dt WHERE docid = :arg_docid AND (empid = :ls_empid or empid in (select empid from u_user where pempid = :ls_empid) and :arg_ifpemp = 1 ) AND rowid = :ls_rowid AND Passed = 0 USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF ELSEIF ls_flowsort = 0 THEN UPDATE oa_doc_flow SET Passed = 1,Empcontent = '发起通过',greetime = :server_dt WHERE docid = :arg_docid AND (empid = :ls_empid or empid in (select empid from u_user where pempid = :ls_empid) and :arg_ifpemp = 1 ) AND rowid = 1 AND Passed = 0 USING sqlca; IF sqlca.SQLCode <> 0 THEN arg_msg = '更新公文ID失败2>>'+sqlca.SQLErrText rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK USING ins_tran; ELSEIF arg_ifcommit AND rslt = 1 THEN COMMIT USING ins_tran; END IF RETURN rslt end function public function integer p_oppose (long arg_docid, string arg_empcontent, boolean arg_ifcommit, ref string arg_msg, integer arg_ifpemp); Long rslt = 1 Long ls_rowid,ls_empid Long ls_flowsort Long ll_dtype,ll_scid,ll_billid,ll_powerid SELECT rowid,flowsort,dtype,scid,billid,powerid INTO :ls_rowid,:ls_flowsort,:ll_dtype,:ll_scid,:ll_billid,:ll_powerid FROM oa_doc Where docID = :arg_docid Using ins_tran; IF ins_tran.SQLCode <> 0 THEN arg_msg = '查询公文ID失败1>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF SELECT empid INTO :ls_empid FROM u_user Where username = :publ_operator; IF ins_tran.SQLCode <> 0 THEN arg_msg = '查询用户ID失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF UPDATE oa_doc SET docflag = 2,flowsort = 0,rowid = 1 Where docID = :arg_docid; IF ins_tran.SQLCode <> 0 THEN arg_msg = '查询公文ID失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF UPDATE oa_doc_flow SET Passed = 2,Empcontent = :arg_empcontent WHERE docid = :arg_docid AND rowid = :ls_rowid AND flowsort = :ls_flowsort AND (empid = :ls_empid or empid in (select empid from u_user where pempid = :ls_empid) and :arg_ifpemp = 1 ); IF ins_tran.SQLCode <> 0 THEN arg_msg = '查询公文ID失败>>'+ins_tran.SQLErrText rslt = 0 GOTO ext END IF UPDATE oa_doc_flow SET read_flag = 0 Where docID = :arg_docid And rowid = 1; IF ins_tran.SQLCode <> 0 THEN rslt = 0 arg_msg = '更新公文为未读失败>>'+ins_tran.SQLErrText GOTO ext END IF IF ll_dtype = 1 THEN IF opt_caudit(ll_powerid,1,ll_scid, ll_billid, False,arg_msg,arg_empcontent) = 0 THEN rslt = 0 GOTO ext END IF END IF ext: IF rslt = 0 THEN ROLLBACK Using ins_tran; ELSEIF arg_ifcommit And rslt = 1 THEN COMMIT Using ins_tran; END IF RETURN rslt end function public function integer uof_doc_stepdel (long arg_docid, long arg_flowsort, integer arg_deltype, ref string arg_msg, boolean arg_ifcommit);//arg_deltype 0 - 修改(删除原数据然后插入新数据,不需要更新后面步骤rowid) 1 - 删除(需要更新后面步骤的rowid) Int rslt = 1 If IsNull(arg_docid) Then arg_docid = 0 If IsNull(arg_flowsort) Then arg_flowsort = 0 If arg_docid = 0 Then arg_msg = '错误的公文id,请检查' rslt = 0 Goto ext End If If arg_flowsort = 0 Then arg_msg = '请错误的步骤,请检查' rslt = 0 Goto ext End If Delete From oa_doc_stepemp Where docid = :arg_docid And flowsort = :arg_flowsort Using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '删除步骤人员操作失败,'+ins_tran.SQLErrText Goto ext End If Delete From oa_doc_step Where docid = :arg_docid And flowsort = :arg_flowsort using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '删除步骤操作失败,'+ins_tran.SQLErrText Goto ext End If Delete From oa_doc_flow Where docid = :arg_docid And flowsort = :arg_flowsort using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '删除审批人员列表操作失败,'+ins_tran.SQLErrText Goto ext End If //如果是直接删除步骤,后面的步骤的rowid要减1 If arg_deltype = 1 Then Update oa_doc_flow Set rowid = rowid - 1 Where docid = :arg_docid And flowsort > :arg_flowsort using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '更新后面步骤人员列表rowid操作失败,'+ins_tran.SQLErrText Goto ext End If End If ext: If rslt = 0 Then Rollback using ins_tran; ElseIf rslt = 1 And arg_ifcommit Then Commit using ins_tran; End If Return rslt end function public function integer uof_urge (long arg_docid, string arg_urgemsg, string arg_emp, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 String ls_flowempstr Int li_docflag Long ll_rowid String ls_opemp,ls_Doccode Select oa_doc_step.flowempstr, oa_doc.docflag, oa_doc.rowid, oa_doc.Opemp, oa_doc.Doccode Into :ls_flowempstr, :li_docflag, :ll_rowid, :ls_opemp, :ls_Doccode From oa_doc Inner JOIN oa_doc_step ON oa_doc.docID = oa_doc_step.docid And oa_doc.flowsort = oa_doc_step.flowsort Where oa_doc.docID = :arg_docid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询公文信息失败,'+sqlca.SQLErrText Goto ext End If If ls_opemp <> arg_emp Then rslt = 0 arg_msg = '只有发起人才能执行催办功能' Goto ext End If If li_docflag <> 1 Then rslt = 0 arg_msg = '只有在进行的公文才能执行催办功能' Goto ext End If Select Top 1 Replace(:ls_flowempstr, ',', ';') Into :ls_flowempstr From u_user; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '转换审批人至内部邮件收件人格式失败,'+sqlca.SQLErrText Goto ext End If Update oa_doc_flow Set urgeflag = 1, urgeemp = :arg_emp, urgedate = getdate(), urgenum = urgenum + 1 Where docid = :arg_docid And rowid = :ll_rowid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '更新催办标记失败,'+sqlca.SQLErrText Goto ext End If //发送内部邮件到被催办人员 uo_transmsg uo_msg If uo_msg.f_create_admsg(sys_empid,arg_emp,ls_flowempstr,'公文催办:'+ls_Doccode,arg_urgemsg,arg_msg,0,ls_Doccode,False) = 0 Then rslt = 0 arg_msg = '催办消息发送失败,'+arg_msg 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_disagree_back (long arg_docid, string arg_disagree_msg, boolean arg_ifcommit, ref string arg_msg);Long rslt = 1 Long ll_rowid,ll_docflag,ll_empid,ll_cnt,ll_rowid_back,ll_flowsort DateTime nulldate String ls_flowempstr,ls_Doccode SetNull(nulldate) Select rowid,docflag,doccode Into :ll_rowid ,:ll_docflag,:ls_Doccode From oa_doc Where docid = :arg_docid Using sqlca; If sqlca.SQLCode <> 0 Then arg_msg = '查询公文信息>>'+sqlca.SQLErrText rslt = 0 Goto ext End If If ll_docflag <> 1 Then rslt = 0 arg_msg = '公文不是在处理状态,不能否决上一步' Goto ext End If If ll_rowid <= 1 Then rslt = 0 arg_msg = '公文还没有人审批过,不能否决上一步' Goto ext End If Select empid Into :ll_empid From u_user Where username = :publ_operator; If sqlca.SQLCode <> 0 Then arg_msg = '查询用户ID失败>>'+sqlca.SQLErrText rslt = 0 Goto ext End If ll_cnt = 0 Select count(*) Into :ll_cnt From oa_doc_flow Where oa_doc_flow.docid = :arg_docid And oa_doc_flow.empid = :ll_empid And oa_doc_flow.rowid = :ll_rowid; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询操作失败,当前人员公文流转列:'+sqlca.SQLErrText Goto ext End If If ll_cnt = 0 Then rslt = 0 arg_msg = '你不是当前审批人员,不能否决上一步' Goto ext End If Select TOP 1 oa_doc_flow.rowid,oa_doc_flow.flowsort Into :ll_rowid_back,:ll_flowsort From oa_doc_flow Where oa_doc_flow.docid = :arg_docid And oa_doc_flow.passed = 1 Order By oa_doc_flow.rowid Desc Using sqlca; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '查询操作失败,查询上一步审批信息失败:'+sqlca.SQLErrText Goto ext End If Update oa_doc_flow Set limittime = :nulldate Where docid = :arg_docid And rowid = :ll_rowid; If sqlca.SQLCode <> 0 Then arg_msg = '清除当前审批限定时间失败>>'+sqlca.SQLErrText rslt = 0 Goto ext End If Update oa_doc_flow Set Passed = 0, Empcontent = '', greetime = :nulldate Where docid = :arg_docid And rowid = :ll_rowid_back; If sqlca.SQLCode <> 0 Then arg_msg = '否决上一步审批失败>>'+sqlca.SQLErrText rslt = 0 Goto ext End If Update oa_doc Set rowid = :ll_rowid_back, flowsort = :ll_flowsort Where docid = :arg_docid; If sqlca.SQLCode <> 0 Then arg_msg = '更新公文信息失败>>'+sqlca.SQLErrText rslt = 0 Goto ext End If //发信息给上一步审批人员 uo_transmsg uo_msg Select flowempstr Into :ls_flowempstr From oa_doc_step Where docid = :arg_docid And flowsort = :ll_flowsort; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '获取上一步审批人员信息失败,'+sqlca.SQLErrText Goto ext End If Select Top 1 Replace(:ls_flowempstr, ',', ';') Into :ls_flowempstr From u_user; If sqlca.SQLCode <> 0 Then rslt = 0 arg_msg = '转换审批人至内部邮件收件人格式失败,'+sqlca.SQLErrText Goto ext End If If uo_msg.f_create_admsg(sys_empid,publ_operator,ls_flowempstr,'公文审批否决,重新审批:'+ls_Doccode,arg_disagree_msg,arg_msg,0,ls_Doccode,False) = 0 Then rslt = 0 arg_msg = '否决消息发送失败,'+arg_msg 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_clean_step (long arg_docid, long arg_flowsort, ref string arg_msg, boolean arg_ifcommit);//arg_flowsort 指定序号后的步骤清空 Int rslt = 1 If IsNull(arg_docid) Then arg_docid = 0 If IsNull(arg_flowsort) Then arg_flowsort = 0 If arg_docid = 0 Then arg_msg = '错误的公文id,请检查' rslt = 0 Goto ext End If Delete From oa_doc_stepemp Where docid = :arg_docid And flowsort > :arg_flowsort Using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '删除步骤人员操作失败,'+ins_tran.SQLErrText Goto ext End If Delete From oa_doc_step Where docid = :arg_docid And flowsort > :arg_flowsort using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '删除步骤操作失败,'+ins_tran.SQLErrText Goto ext End If Delete From oa_doc_flow Where docid = :arg_docid And flowsort > :arg_flowsort using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '删除审批人员列表操作失败,'+ins_tran.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback using ins_tran; ElseIf rslt = 1 And arg_ifcommit Then Commit using ins_tran; End If Return rslt end function public function integer uof_update_item (long arg_docid, long arg_printid, string arg_itemvalue, long arg_relid, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Update oa_doc_item Set itemvalue = :arg_itemvalue, relid = :arg_relid, modemp = :publ_operator, moddate = getdate() Where docid = :arg_docid And printid = :arg_printid Using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '更新自定义字段失败,'+ins_tran.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback Using ins_tran; ElseIf rslt = 1 And arg_ifcommit Then Commit Using ins_tran; End If Return rslt end function public function integer uof_update_relqty (long arg_docid, decimal arg_relqty, ref string arg_msg, boolean arg_ifcommit);Int rslt = 1 Update oa_doc Set relqty = :arg_relqty Where docid = :arg_docid Using ins_tran; If ins_tran.SQLCode <> 0 Then rslt = 0 arg_msg = '更新相关数值失败,'+ins_tran.SQLErrText Goto ext End If ext: If rslt = 0 Then Rollback Using ins_tran; ElseIf rslt = 1 And arg_ifcommit Then Commit Using ins_tran; End If Return rslt end function on uo_oa_doc.create call super::create TriggerEvent( this, "constructor" ) end on on uo_oa_doc.destroy TriggerEvent( this, "destructor" ) call super::destroy end on