|

楼主 |
发表于 2009-8-4 09:50:43
|
显示全部楼层
//针对外售清单,启动物资领用流程
procedure TMRBD.BitBtn3Click(Sender: TObject);
var
lFlowValue: TFlowValue;
lFlowControl: TFlowControl;
lExecutor: TOrgURL;
lGuid,lMatCode: String;
lNO,i: Integer;
lQuantity, lValue: Double;
lMatList,lGuidList: TStrings;
lHandle: TTransactionHandle;
lTransaction: TTransaction;
lDataSet: TDataSet;
lConnection: TConnection;
lSqlStr,lSql:String;
begin
lNO:=1;lQuantity:=0;lMatCode:='';
lMatList := TStringList.Create;
lGuidList := TStringList.Create;
lFlowValue := TFlowValue.Create;
lExecutor := TOrgURL.Create('XXB', 'ITGCS', 'LIUHY');
lConnection:= dsSale.DataSet.Connection;
with dsApplyMain.DataSet,dsApplyDetail do
try
if not Active then Open;
//添加主流程数据
Append ;
lGuid:=FieldByName ('FGuid').AsString ;
FieldByName ('FOutStore').AsString :='JD';
FieldByName ('FMaterialRequisitionDept').AsString :=lExecutor.DeptID;
FieldByName ('FMaterialRequisitioner').AsString :=lExecutor.PersonID;
FieldByName ('FProcKind').AsString:='1';
TCommonLib.GetStockBillNo(dsApplyMain.DataSet, FieldByName('FOutStore').AsString, FieldByName('FBizKind').AsString, 'FStockBillNo');
dsSale.DataSet.Filter:='FisSale=''T''';
lSql:= dsSale.DataSet.Filter;
dsSale.DataSet.Filtered :=true;
dsSale.DataSet.Open ;
lNO:= dsSale.DataSet.RecordCount;
if dsSale.DataSet.RecordCount <=0 then
begin
jsdialogs.ShowMsg ('你没有选择要外售的物资,不会启动物资领用任务!','');
dsSale.DataSet.Filtered :=false;
TSQLDataSet(dsSale.DataSet).SQLFilter:='FisBuy=''F''';
TSQLDataSet(dsSale.DataSet).SQLFiltered :=true;
dsSale.DataSet .Refresh ;
exit;
end;
//添加明细数据
DataSet.DisableControls ;
dsSale.DataSet .DisableControls ;
dsSale.DataSet .First ;
if not DataSet.Active then DataSet.Open;
while not dsSale.DataSet .Eof do
begin
DataSet.Append;
DataSet.FieldByName('FMainID').AsString:=lGuid;
lMatCode:= dsSale.DataSet.FieldByName ('FMatCode').AsString ;
lQuantity:= dsSale.DataSet.FieldByName ('FRequestQuantity').AsFloat;
lValue:= Sysutils.StrToFloatDef(lMatList.Values[lMatCode],0);
lMatList.Values [lMatCode]:=Sysutils.FloatToStr(lQuantity+lValue);
DataSet.FieldByName('FMatCode').AsString:=lMatCode;
DataSet.FieldByName('FWeight').AsFloat:=dsSale.DataSet.FieldByName ('FSingleWeight').AsFloat ;
DataSet.FieldByName('FApplyQuantity').AsFloat:=lQuantity;
DataSet.Post ;
lGuidList.Add(dsSale.DataSet.FieldByName ('FGuid').AsString);
dsSale.DataSet.Next ;
lNO:=lNO+1;
end;
lHandle:= lTransaction.Start(False);
try
lSqlStr:=StrUtils.AnsiReplaceText(sysutils.Trim(lGuidList.Text), #13#10, ''',''');
lFlowValue.IDs.Add(lGuid); //流程ID
lFlowValue.Subject := '['+FieldByName('FStockBillNo').AsString+']'
+FieldByName('FMaterialRequisitionDept').DisplayText +'-'+ FieldByName('FMaterialRequisitioner').DisplayText ; //流程主题
//启动流程实例
//lFlowControl.StartupFlow(lBizURL, 'APPLY', lExecutor, lFlowValue);
//流程实例数据保存到数据库
//lFlowControl.FlowRunnerbyIndex[0].CurrentTask.SaveToDB;
TCommonFunc.UserStartFlow(Context, lTransaction, lFlowValue, lExecutor, 'Biz:\SCMSPACE\ClaimMaterialFlow.Proc', 'APPLY');
ApplyUpdates(True);
jsdialogs.ShowMsg ('已经在你的工作台上启动了一个物资领用流程','');
dsSale.DataSet.Filtered :=false;
lConnection.ExecuteSQL('update MATREQUIRMENT set FisSale=''T'' where FGuid in ('+sysutils.QuotedStr(lSqlStr)+')');
lTransaction.Commit(lHandle);
except
lTransaction.Rollback(lHandle);
end;
finally
lFlowValue.Free;
lMatList.Free ;
dsSale.DataSet.EnableControls ;
DataSet.EnableControls;
end;
end; |
|