📄 pchorder.~pas
字号:
Value[1] := 'ProvNo';
Value[2] := 'SELECT * FROM Providers';
Value := IFmMain.CallClassDo('ckPublic.bpl;TFmPubSelect', '1', Value);
if not VarIsNull(Value) then begin
CdsPchOrder.Edit;
CdsPchOrderProvNo.AsVariant := Value;
end;
end;
procedure TFmPchOrder.RzDBButtonEdit5ButtonClick(Sender: TObject);
var Value: Variant;
begin
inherited;
if FEditMode=0 then Exit;
Value := VarArrayCreate([0,2], VarOleStr);
Value[0] := '选择结算方式';
Value[1] := 'PayModeName';
Value[2] := 'SELECT * FROM PayModes';
Value := IFmMain.CallClassDo('ckPublic.bpl;TFmPubSelect', '1', Value);
if not VarIsNull(Value) then begin
CdsPchOrder.Edit;
CdsPchOrderProvNo.AsVariant := Value;
end;
end;
procedure TFmPchOrder.CdsPchOrderNewRecord(DataSet: TDataSet);
begin
edProvName.Button.Click;
cdsPchOrderBillNo.Value := BuildBillNo('PchOrder');
CdsPchOrderCreater.Value := LogonInfo^.UserID;
CdsPchOrderGrup.Value := LogonInfo^.UserGrupID;
CdsPchOrderFDate.Value:=Date;
CdsPchOrderDealDate.Value:=Date;
CdsPchOrderPayDate.Value:=Date;
CdsPchOrderBeginDate.Value := Date;
CdsPchOrderEndDate.Value := IncMonth(Date,12);
end;
procedure TFmPchOrder.ParseGoodsInfo;
var sProvNo, sGoodsID, sUnit: String;
dPrice: Double;
b1: Boolean;
begin
if FEditMode=0 then Exit;
if bBrowGoods then Exit;
bBrowGoods := true;
try
b1 := SelectGoods(CdsPchOrderDtl, CdsPchOrderDtlGoodsID, CdsPchOrderDtlUnit, true, False, False);
if not b1 then
begin
// dbgPchOrderDtl.InplaceEditor.Show;
Abort;
end;
sGoodsID := CdsPchOrderDtlGoodsID.Value;
sUnit := CdsPchOrderDtlUnit.Value;
if (sGoodsID<>'') And (sUnit<>'') Then Begin
sProvNo := CdsPchOrderProvNO.Value;
dPrice := SvrCommon.AppServer.GetGoodsPrice(IClientID,'P',sProvNo,sGoodsID,sUnit);
if dPrice=0 then
cdsPchOrderDtlOPrice.AsVariant := null
else
cdsPchOrderDtlOPrice.Value := dPrice;
end;
finally
bBrowGoods := false;
end;
end;
procedure TFmPchOrder.CdsPchOrderDtlGoodsIDChange(Sender: TField);
begin
ParseGoodsInfo;
end;
procedure TFmPchOrder.cdsPchOrderProvNoChange(Sender: TField);
Var
sProvNo,sProvName,LogText:String;
begin
IF FEditMode=0 Then Exit;
sProvNo:=CdsPchOrderProvNo.Value;
if sProvNo=BeforeProvNo Then Exit;
If sProvNo='' Then Begin
CdsPchOrderProvName.Value:='';
Exit;
End;
BeforeProvNo:=sProvNO;
sProvName:=VarToStr(SvrCommon.AppServer.GetProvInfo(iClientID,sProvNo,1,'ProvName',LogText));
CdsPchOrderProvName.Value:=sProvName;
If LogText<>'' Then Begin
Messagebox(Handle,Pchar(LogText),nil,16);
Abort;
End;
end;
procedure TFmPchOrder.SumCount;
Var
dUnTaxPrice,dQty,dAmount,D,E,T:Double;
begin
D:=CdsPchOrderDtlOPrice.AsFloat; //标准售价
if cdsPchOrderDtlRebate.IsNull then
E := 100
else
E:=CdsPchOrderDtlRebate.AsFloat; //折扣
T:=CdsPchOrderDtlTaxRate.AsFloat; //税率
dQty:=CdsPchOrderDtlQty.AsFloat; //数量
CdsPchOrderDtlPrice.AsFloat:=D*(E/100); //实际售价 //实际售价
dUnTaxPrice:=D*(E/100)/(1+T/100); //未税单价
CdsPchOrderDtlUnTaxPrice.AsFloat:=dUnTaxPrice;
CdsPchOrderDtlGoodsSum.AsFloat:=dQty*dUnTaxPrice; //货款;
dAmount:=dQty*D*(E/100); //合计;
CdsPchOrderDtlAmount.AsFloat:=dAmount;
CdsPchOrderDtlTaxSum.AsFloat:=dAmount-dQty*dUnTaxPrice; //税款
end;
procedure TFmPchOrder.ShowPayModes;
Var
A:Variant;
iClientID, I, k:Integer;
begin
Try
iClientID := IFmMain.IFmMainEx.ClientID;
A:=SvrPchOrder.AppServer.GetNeedValue(iClientID,3,sPayModes);
If (Not VarIsNull(A)) And (VarIsArray(A)) Then
Begin
slPayModes.Clear;
cbPayModes.Items.Clear;
k := VarArrayHighBound(A,2);
for i:=VarArrayLowBound(A,2) to k do
Begin
slPayModes.Add(A[0,i]);
cbPayModes.Items.Add(A[0,i]+':'+A[1,i]+'('+A[2,i]+')');
End;
End;
Except
On E:Exception Do
Messagebox(Handle,Pchar(E.Message),'',16);
End;
end;
procedure TFmPchOrder.ActSaveExecute(Sender: TObject);
Var iIndex:Integer;
begin
If FEditMode=0 Then Exit;
iIndex:=cbPayModes.ItemIndex;
if iIndex<>-1 Then
CdsPchOrderPaymentMode.Value:=slPayModes[iIndex];
If (CdsPchOrderDtl.State In dsEditModes) Then
CdsPchOrderDtl.Post;
If (CdsPchOrder.State In dsEditModes) Then
CdsPchOrder.Post;
Inherited;
end;
procedure TFmPchOrder.CdsPchOrderReconcileError(
DataSet: TCustomClientDataSet; E: EReconcileError;
UpdateKind: TUpdateKind; var Action: TReconcileAction);
begin
Messagebox(Handle,Pchar(E.Message),'',16);
Action:=RaAbort;
end;
procedure TFmPchOrder.dbgPchOrderDtlEditButtonClick(Sender: TObject);
var sField: String;
dPrice: Double;
begin
if FEditMode=0 then Exit;
sField := LowerCase(dbgPchOrderDtl.SelectedField.FieldName);
if sField='goodsid' then begin
ParseGoodsInfo;
end else if sField='oprice' then begin
dPrice := ViewGoodsPrice(cdsPchOrderDtlGoodsID.Value, cdsPchOrderDtlUnit.Value);
if dPrice>=0 then begin
cdsPchOrderDtl.Edit;
cdsPchOrderDtlOPrice.Value := dPrice;
end;
end;
end;
procedure TFmPchOrder.CdsPchOrderEmpNoChange(Sender: TField);
Var
sEmpNo,sEmpName,LogText:String;
begin
IF FEditMode=0 Then Exit;
sEmpNo:=CdsPchOrderEmpNo.Value;
If sEmpNo='' Then Exit;
if sEmpNo=BeforeEmpNo Then Exit;
BeforeEmpNo:=sEmpNO;
sEmpName:=VarToStr(SvrCommon.AppServer.GetEmpInfo(iClientID,sEmpNo,1,'Name',LogText));
CdsPchOrdername.Value:=sEmpName;
If LogText<>'' Then Begin
Messagebox(Handle,Pchar(LogText),nil,16);
Abort;
End;
end;
procedure TFmPchOrder.ActAuditExecute(Sender: TObject);
Var
sUserID,Str:String;
sSysInfo : Variant;
begin
Try
If CdsPchOrder.IsEmpty Then Exit;
If FEditMode>0 then Exit;
Inherited;
If Application.MessageBox('确实要审核当前数据吗?','提示',4+32)<>6 Then Exit;
str := 'CurrMonth';
sSysInfo := SvrCommon.AppServer.GetSysInfo(iClientID,Str,1);
If Not(VarIsNull(sSysInfo)) Then Begin
If CdsPchOrderFDate.Value<VarToDateTime(sSysInfo) Then Begin
Messagebox(Handle,Pchar('单据日期不符,该月已完成月度结算...'),nil,16);
Exit;
End;
End Else Begin
Messagebox(Handle,Pchar('请先设置开帐日期...'),nil,16);
Exit;
End;
CdsPchOrder.Edit;
CdsPchOrderTransfer.Value:=True;
sUserID := iFmMain.IFmMainEx.LogonInfo^.UserID;
CdsPchOrderAudit.Value := sUserID;
try
cdsPchOrder.Post;
Except
cdsPchOrder.Cancel;
Raise;
end;
If CdsPchOrder.ApplyUpdates(0)>0 Then
Messagebox(Handle,Pchar('复核数据不成功!'),nil,16)
Else Begin
ActAudit.Enabled := False and CanAudit;
ActRevert.Enabled := True and CanRevert;
Lab_State.Caption:='单据状态:已审核';
Lab_State.Font.Color:=clRed;
ActRefreshExecute(NIl);
End;
Except
On E:Exception Do
Messagebox(Handle,Pchar(E.Message),nil,16);
End;
end;
procedure TFmPchOrder.ActRevertExecute(Sender: TObject);
Var BillNo: String;
begin
Try
If CdsPchOrder.IsEmpty Then Exit;
If FEditMode>0 then Exit;
Inherited;
If Application.MessageBox('确实要还原当前已审核过的数据吗?','提示',4+32)<>6 Then Exit;
BillNo := CdsPchOrderBillNo.Value;
If Not(SvrPchOrder.AppServer.BillRevert(iClientID,'PchOrder',BillNo,'')) Then
Messagebox(Handle,Pchar('还原数据不成功!'),nil,16)
Else Begin
ActAudit.Enabled:=True;
ActRevert.Enabled:=False;
Lab_State.Caption:='单据状态:未审核';
Lab_State.Font.Color:=clHotLight;
ActRefreshExecute(Nil);
End;
Except
On E:Exception Do
Messagebox(Handle,Pchar(E.Message),nil,16);
End;
End;
procedure TFmPchOrder.ActFieldLayoutExecute(Sender: TObject);
begin
SetFieldsLayOut(LocSetting^.FieldLayoutCfgFile, Name,
[dbgPchOrderDtl],'采购合同明细');
end;
procedure TFmPchOrder.ActDataExportExecute(Sender: TObject);
begin
ExportData([CdsPchOrder, CdsPchOrderDtl],'采购合同;采购合同明细', '');
end;
function TFmPchOrder.DoSome(cType: PChar; Values: Variant): Variant;
const
cTypes = 'viewbill'#13'query';
// 查看某单 查询
var sTypes: TStrings;
i: integer;
str, str2: String;
begin
sTypes := TStringList.Create;
sTypes.Text := cTypes;
i := sTypes.IndexOf(cType);
case i of
0: begin//ViewBill
if VarIsArray(Values) then begin
str := Values[0];
str2:= Values[1];
end else begin
str := Values;
str2:= '';
end;
if str2='' then begin
if sBillNoList.IndexOf(str)<0 then
sBillNoList.Add(str);
end else
sBillNoList.Text := str2;
self.BringToFront;
SetCurrBillNo(str);
end;
end;
end;
procedure TFmPchOrder.edProvNameButtonClick(Sender: TObject);
Var sProvNo,sProvName,sEmpNo,sPayModeNo:String;
begin
If FEditMode=0 Then Exit;
sProvNo := CdsPchOrderProvNO.Value;
If SelectProv(sProvNo,sProvName,sEmpNo,sPayModeNo) Then
Begin
CdsPchOrderProvNO.Value := sProvNo;
CdsPchOrderProvName.Value := sProvName;
CdsPchOrderEmpNO.Value := sEmpNo;
cbPayModes.ItemIndex := slPayModes.IndexOf(sPayModeNo);
End;
End;
procedure TFmPchOrder.ActBillTurnExecute(Sender: TObject);
var sBillNo, sToBillNo, str,MatchBillNo: String;
begin
if FEditMode>0 then Exit;
If Not(cdsPchOrderTransfer.Value) Then Begin
Messagebox(handle,Pchar('当前单据尚没[审核],不能进行转单操作!'),'警告',64);
Exit;
End;
sBillNo := CdsPchOrderBillNo.AsString;
if sBillNo='' then Exit;
if Application.MessageBox('确定要将此合同转出到来货登记吗?', '消息', MB_YESNO+MB_ICONQUESTION)=IDNO then
Exit;
sToBillNo := BuildBillNo('PchCheckIn');
If SvrPchOrder.AppServer.BillTurn(iClientID, 'PchOrder', 'PchCheckIn', sBillNo, sToBillNo,MatchBillNo) then begin
ActRefresh.Execute;
str := sBillNo+'号合同已成功转出到['+MatchBillNo+']号来货登记单,要查看该单据吗?';
If Application.MessageBox(PChar(str), '消息', MB_YESNO+MB_ICONINFORMATION)=IDYES then
IFmMain.DoSome(ActBillTurn.ModuleFile, 'ViewBill', MatchBillNo);
end;
end;
procedure TFmPchOrder.ActFinishExecute(Sender: TObject);
begin
if FEditMode>0 then Exit;
If Not(cdsPchOrderTransfer.Value) Then Begin
Messagebox(handle,Pchar('当前单据尚未[审核],不能结案。你可以选择删除来作废此单!'),'警告',64);
Exit;
End;
cdsPchOrder.Edit;
cdsPchOrderFinish.Value := true;
try
cdsPchOrder.Post;
Except
cdsPchOrder.Cancel;
Raise;
end;
if cdsPchOrder.ApplyUpdates(0)>0 then
begin
Application.MessageBox('数据提交失败,结案操作不成功。请重试!', '消息', MB_ICONINFORMATION);
cdsPchOrder.CancelUpdates;
end
else
ActFinish.Enabled := false;
end;
procedure TFmPchOrder.RzDBButtonEdit2ButtonClick(Sender: TObject);
Var
sProvNo,sLinkMan : String;
begin
If FEditMode=0 Then Exit;
If RzDBEdit9.Text='' Then Begin
MessageBox(Handle,Pchar('请先指定供应厂商!'),nil,16);
Exit;
End;
sProvNo := CdsPchOrderProvNo.Value;
If SelectProvLinkMan(sProvNo,sLinkMan) Then
CdsPchOrderLinkMan.Value := sLinkMan ;
end;
procedure TFmPchOrder.ActQueryExecute(Sender: TObject);
begin
IFmMain.OnAction(Sender);
end;
initialization
RegisterClass(TFmPchOrder);
finalization
UnRegisterClass(TFmPchOrder);
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -