⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ubill_base.pas

📁 相关的销售服务管理行业的一个软件
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  Panel2.Enabled:=True;
  Panel3.Enabled:=True;
  QryMaster.FieldByName('nBillID').AsString:=TmpBillID;
  QryMaster.FieldByName('nYwType').AsString:=Caption;
  QryMaster.FieldByName('nDateRk').AsString:=frmmain.BM.bmDate;
  QryMaster.FieldByName('nYwMan').AsString:=frmmain.BM.bmMan;
//  QryDetail.MasterSource:=nil;
//  QryDetail.Refresh;

 { QryDetail.Filtered:=false;
  QryDetail.FilterGroup:=fgPendingRecords;
  QryDetail.Filtered:=True;   }
end;

procedure TfrmBill_Base.QryMasterAfterEdit(DataSet: TDataSet);//Pass
begin
 // MasterPost:=false;
  Panel2.Enabled:=True;
  Panel3.Enabled:=True;
end;

procedure TfrmBill_Base.BtnCancelClick(Sender: TObject); //Pass
begin
  if DS<>dsNone then
  begin
   // QryDetail.Cancel;
 //   QryMaster.Cancel; \
    try
      CanScroll:=false;
      QryMaster.CancelBatch;
      //====================================================
      if DBGridEh1.DataSource = nil then exit;
      //====================================================
      QryDetail.CancelBatch;
    finally
      CanScroll:=true;
    end;

  //  MasterPost:=true;
    Panel2.Enabled:=False;
    if DS=dsChange then
    begin
      Proc_NewBill.Close;
      Proc_NewBill.Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
      Proc_NewBill.Parameters.ParamByName('@AddOrDel').Value:=1;
      Proc_NewBill.ExecProc;
    end;

    DS:=dsNone;
  end;
  Panel2.Enabled:=false;
  Panel3.Enabled:=false;
end;

procedure TfrmBill_Base.BtnAddClick(Sender: TObject);  //Pass
begin
  if DS=dsNone then
  begin
    GetTmpBillID;
    QryMaster.Insert;
    DS:=dsAdd;
  end else

  if DS=dsAdd then
  begin
    BtnSaveClick(Sender);
    if DS<>dsNone then Exit;//保存出错
    DS:=dsAdd;
    GetTmpBillID;
    QryMaster.Insert;
  end else

  if Application.MessageBox('是否保存刚刚修改的数据','提示',33)=1 then
  begin
    BtnSaveClick(Sender);
    if DS<>dsNone then Exit;//保存出错
    GetTmpBillID;
    QryMaster.Insert;
    DS:=dsAdd;
  end else
  begin
    BtnCancelClick(Sender);
    GetTmpBillID;
    QryMaster.Insert;
    DS:=dsAdd;
  end;
    Edit1.SetFocus;

  DBGridEh1.DataSource := nil;
end;

procedure TfrmBill_Base.BtnChangeClick(Sender: TObject);        //Pass
begin
  if QryMaster.RecordCount=0 then Exit;

  if DBGridEh1.DataSource=nil then
    DBGridEh1.DataSource := DataSource2;
  FullGd(QryLoadField,DBGridEh1,RepOrder.Caption,1,trim(DBEdit3.text));

  if trim(QryMaster.FieldByName('nShMan').AsString)<>'' then
  begin
    Application.MessageBox('该单据已审核,不能修改','提示',64);
    Exit;                         
  end;

  With ProcCanChange do
  begin
    Close;
    Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
    Parameters.ParamByName('@CanChange').Value:='Y';
    ExecProc;
  //  showmessage(Parameters.ParamByName('@CanChange').Value );
    if trim(Parameters.ParamByName('@CanChange').Value)='N' then
    begin
      Application.MessageBox('单据冲突,该单据不能修改。'+#13+'如要修改,建议使用红字单据回冲','提示',64);
      Exit;
    end;
  end;

  if DS=dsNone then
  begin
    QryMaster.Edit;
    DS:=dsChange;
    Proc_NewBill.Close;
    Proc_NewBill.Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
    Proc_NewBill.Parameters.ParamByName('@AddOrDel').Value:=0;
    Proc_NewBill.ExecProc;
  end else

  if Application.MessageBox('是否保存刚刚修改的数据','提示',33)=1 then
  begin
    BtnSaveClick(Sender);
    if DS=dsNone then
    begin
      DS:=dsChange;
      QryMaster.Edit;
      Proc_NewBill.Close;
      Proc_NewBill.Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
      Proc_NewBill.Parameters.ParamByName('@AddOrDel').Value:=0;
      Proc_NewBill.ExecProc;
    end else Exit;

  end else
    begin
      BtnCancelClick(Sender);
      DS:=dsChange;
      QryMaster.Edit;
      Proc_NewBill.Close;
      Proc_NewBill.Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
      Proc_NewBill.Parameters.ParamByName('@AddOrDel').Value:=0;
      Proc_NewBill.ExecProc;
    end;
end;

procedure TfrmBill_Base.BtnSaveClick(Sender: TObject);    //Pass
var
  NewCode:String;
  iCount,i:integer;
begin
  if (QryDetail.state=dsEdit) or (QryDetail.state=dsInsert) then
    QryDetail.Post;

  case DS of
  dsNone:
  begin
    Application.MessageBox('当前没有进入编辑状态','提示',64);
    Exit;
  end;

  dsAdd:
  begin

    if QryDetail.RecordCount=0 then
    begin
      Application.MessageBox('单据细节不能为空','提示',64);
      DBGridEh1.SetFocus;
      Exit;
    end;
    With QryDetail do
    begin
      First;
      While not Eof do
      begin
      if not (NoError()) then
      begin
        for i:=0 to DBGridEh1.Columns.Count-1 do
        begin
          if DBGridEh1.Columns[i].FieldName=qryDetail.Fields[ErrorField].FieldName then
          Begin
            DBGridEh1.SelectedIndex:=i;
            Break;
          end;
        end;
        DBGridEh1.SetFocus;
        ErrorField:=-1;
        Exit;
      end;
      Next;
      end;
    end;

    ADOProc1.Close;
    ADOProc1.Parameters.ParamByName('@Type').Value:=Caption;
    ADOProc1.Parameters.ParamByName('@nDate').Value:=frmMain.BM.bmDate;
    ADOProc1.Parameters.ParamByName('@Code').Value:='aa';

    try
      LocalCon.BeginTrans;
      ADOProc1.ExecProc;

      NewCode:=trim(ADOProc1.Parameters.ParamByName('@Code').Value);

      if TmpBillID<>NewCode then
      begin
        QryDetail.First;
        iCount:=QryDetail.RecordCount;

        for i:=0 to iCount-1 do
        begin
          if QryDetail.State=dsBrowse then
            QryDetail.Edit;
          QryDetail.FieldByName('nBillid').AsString:= NewCode;
          QryDetail.Post;
          QryDetail.Next;           
        end;

        QryMaster.FieldByName('nBillID').AsString:=NewCode;
        QryMaster.Post;
      end;
      try
      CanScroll:=False;
      if RepOrder.Caption = '7' then
      begin
        ADOQSFtype.close;
        ADOQSFtype.sql.Add('select nSFTCode,nSFName from s_SFtype where nSFName=:PnSFName');
        ADOQSFtype.Parameters.ParamByName('PnSFName').value:='前期数据';
        ADOQSFtype.open;
        QryMaster.FieldByName('nSfTtype').AsString:=ADOQSFtype.FieldByName('nSFTCode').asstring;
        ADOQSFtype.close;
      end;
      QryMaster.UpdateBatch;
      QryDetail.UpdateBatch;
      CanScroll:=true;


        Application.MessageBox('保存成功','提示',64);
        panel2.Enabled:=false;
        Panel3.Enabled:=false;
      Except
        CanScroll:=true;
        Application.MessageBox('保存失败,请重试','提示',64);
        LocalCon.RollbackTrans;
        DS:=dsAdd;
        Exit;
      end;
      ADOProc2.Parameters.ParamByName('@Type').Value:=
        ADOProc1.Parameters.ParamByName('@Type').Value;
      ADOProc2.Parameters.ParamByName('@nDate').Value:=
        ADOProc1.Parameters.ParamByName('@nDate').Value;
      ADOProc2.ExecProc;
      localcon.CommitTrans;
      Panel2.Enabled:=false;

      Proc_NewBill.Close;
      Proc_NewBill.Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
      Proc_NewBill.Parameters.ParamByName('@AddOrDel').Value:=1;
      Proc_NewBill.ExecProc;

    except
      localcon.RollbackTrans;
    end;
  end;

  dsChange:
  begin
    try
      QryMaster.UpdateBatch;
      QryDetail.UpdateBatch;
    except
      Application.MessageBox('保存失败,请重试','提示',64);
      DS:=dsChange;
      Exit;
    end;
    Panel2.Enabled:=false;

    Proc_NewBill.Close;
    Proc_NewBill.Parameters.ParamByName('@BillID').Value:=DBEdit1.Text;
    Proc_NewBill.Parameters.ParamByName('@AddOrDel').Value:=1;
    Proc_NewBill.ExecProc;
  end;
  end;
  DS:=dsNone;
end;
//==========================================
procedure TfrmBill_Base.DBGridEh1ColEnter(Sender: TObject);      //Pass
var
  i:integer;
begin
  DBGridEh1.Options:=DBGridEh1.Options+[dgEditing];
  if DS=dsNone then
  begin
    DBGridEh1.Options:=DBGridEh1.Options-[dgEditing];
    Exit;
  end;

  if (ErrorField<>-1) and (ErrorField<>DBGridEh1.SelectedIndex) then
  begin
    for i:=0 to DBGridEh1.Columns.Count-1 do
    begin
      if DBGridEh1.Columns[i].FieldName=QryDetail.Fields[ErrorField].FieldName then
      begin
        DBGridEh1.SelectedIndex:=i;
        Break;
      end;
    end;
    ErrorField:=-1;
  end else
  begin
    if (trim(DBGridEh1.Columns[DBGridEh1.SelectedIndex].FieldName)='nbatch')
       and (not QryDetail.FieldByname('bBatch').AsBoolean) then
    begin
      DBGridEh1.Options:=DBGridEh1.Options-[dgEditing];
      Exit;
    end;

    if (trim(DBGridEh1.Columns[DBGridEh1.SelectedIndex].FieldName)='nPosition')  then
    begin
      if DBGridEh1.Columns[DBGridEh1.SelectedIndex].PickList.Count<=0 then
      begin
        DBGridEh1.Options:=DBGridEh1.Options-[dgEditing];
        Exit;
      end;
    end;

 {   if (trim(DBGridEh1.Columns[DBGridEh1.SelectedIndex].FieldName)='nColor')
       and (not QryDetail.FieldByname('bColor').AsBoolean) then
    begin
      DBGridEh1.Options:=DBGridEh1.Options-[dgEditing];
      Exit;
    end; }
  end;
end;

procedure TfrmBill_Base.DBGridEh1GetEditText(Sender: TObject; ACol,
  ARow: Integer; var Value: String);
begin
{  if bCanEdit(ACol-1) then
  begin
    DBGridEh1.Columns[ACol-1].ReadOnly:=false;
    QryDetail.Edit;

  end
  else
    DBGridEh1.Columns[ACol-1].ReadOnly:=true;

 { if (Value<>'') and (QryDetail.FieldByName(DBGridEh1.Columns[ACol-1].FieldName).AsString<>Value) then
  begin
    QryDetail.Edit;
    QryDetail.FieldByName(DBGridEh1.Columns[ACol-1].FieldName).AsString:=Value;
    QryDetail.Post;
 // end;       }
end;

function TfrmBill_Base.bCanEdit(iCol:Integer): Boolean;
begin
  Result:=false;
{  if (iCol=1) or (iCol=5) or (iCol=6) then
  begin
    Result:=true;
    Exit;
  end;

  if DBGridEh1.Columns[iCol].FieldName='nGoodCode' then
  begin
    result:=true;
    Exit;
  end;

  if DBGridEh1.Columns[iCol].FieldName='nFsCount' then
  begin
    result:=true;
    Exit;
  end;

  if DBGridEh1.Columns[iCol].FieldName='nfsprice' then          
  begin
    result:=true;
    Exit;
  end;

  if DBGridEh1.Columns[iCol].FieldName='nMemo' then
  begin
    result:=true;
    Exit;
  end;

  if DBGridEh1.Columns[iCol].FieldName='nCus1' then
  begin
    result:=true;
    Exit;
  end;

  if DBGridEh1.Columns[iCol].FieldName='nCus2' then
  begin
    result:=true;                                          
    Exit;
  end;

  if (GDI.bBatch) and (UpperCase(trim(DBGridEh1.Columns[iCol].FieldName))=UpperCase('nbatch')) then
  begin
    result:=true;
    Exit;
  end;

  if (GDI.bColor) and (UpperCase(trim(DBGridEh1.Columns[iCol].FieldName))=UpperCase('ncolor')) then
  begin
    result:=true;
    Exit;
  end;

  if (DBGridEh1.Columns[iCol].PickList.Count>1) and (UpperCase(trim(DBGridEh1.Columns[iCol].FieldName))=UpperCase('nPosition')) then
  begin
    result:=true;
    Exit;
  end;        }

end;

procedure TfrmBill_Base.BtnAuditingClick(Sender: TObject);      //Pass
var
  Audi_Man:String;
  TmpI:integer;
begin
  if (QryDetail.State=dsBrowse) and (QryMaster.State=dsBrowse) and (DS=dsNone) then
  begin
    if btnAuditing.Caption='审核' then
    begin
      Audi_Man:=frmmain.BM.bmMan;
      btnAuditing.Caption:='弃审';
    end else
    begin
      Audi_Man:='';
      btnAuditing.Caption:='审核';
    end;

    QryMaster.Edit;
    QryMaster.FieldByName('nShMan').AsString:=Audi_Man;
    QryMaster.Post;
    try
      QryMaster.UpdateBatch;
    except
      QryMaster.CancelBatch;
      Application.MessageBox('操作失败','提示',64);
      if btnAuditing.Caption='审核' then
      begin
        btnAuditing.Caption:='弃审';
      end else
      begin
        btnAuditing.Caption:='审核';
      end;
    end;
  end else
  begin
    tmpI:=Application.MessageBox('是否保存刚刚修改过的数据?','提示',35);
    if tmpI=6 then
    begin
      BtnSaveClick(Sender);
      if DS=dsNone then BtnAuditingClick(Sender);
    end else
    if tmpI=7 then
    begin
      BtnCancelClick(Sender);
      if DS=dsNone then BtnAuditingClick(Sender);
    end else
    begin
      Exit;
    end;
  end;
end;

procedure TfrmBill_Base.QryDetailnfspriceSetText(Sender: TField;   //Pass
  const Text: String);
begin
  if QryDetail.FieldByName('nFsCount').AsFloat<>0 then
    if text='' then
      QryDetail.FieldByName('nFsJine').Value:=0
    else
      QryDetail.FieldByName('nFsJine').Value:=StrToFloat(Text)*QryDetail.FieldByName('nFsCount').AsFloat;
//    QryDetail.FieldByName('nFsJine').Value:=formatfloat('#0.00',
//      StrToFloat(Text)*QryDetail.FieldByName('nFsCount').AsFloat);
  QryDetail.FieldByName('nfsprice').AsString:=Text;
end;

procedure TfrmBill_Base.QryDetailnFsCountSetText(Sender: TField;    //Pass
  const Text: String);
begin
  if QryDetail.FieldByName('nfsprice').AsFloat<>0 then
    if text='' then
      QryDetail.FieldByName('nFsJine').Value:=0
    else
      QryDetail.FieldByName('nFsJine').Value:=StrToFloat(Text)*QryDetail.FieldByName('nfsprice').AsFloat;
//    QryDetail.FieldByName('nFsJine').Value:=formatfloat('#0.00',
//      StrToFloat(Text)*QryDetail.FieldByName('nfsprice').AsFloat);
  QryDetail.FieldByName('nFsCount').AsString:=Text;

  if RepOrder.Caption = '7' then
  begin
    if QryDetail.FieldByName('nFsCount').AsFloat<>0 then
      if text='' then
        QryDetail.FieldByName('nfsprice').Value:=0
      else
        QryDetail.FieldByName('nfsprice').Value:=QryDetail.FieldByName('nFsJine').AsFloat/StrToFloat(Text);
//    QryDetail.FieldByName('nFsJine').Value:=formatfloat('#0.00',
//      StrToFloat(Text)*QryDetail.FieldByName('nFsCount').AsFloat);
    QryDetail.FieldByName('nFsCount').AsString:=Text;
  end;
end;

procedure TfrmBill_Base.GetTmpBillID;                               //
begin
  ADOProc3.Close;

  ADOProc3.Parameters.ParamByName('@Type').Value:=Caption;
  ADOProc3.Parameters.ParamByName('@nDate').Value:=frmMain.BM.bmDate;
  ADOProc3.Parameters.ParamByName('@Code').Value:='aa';

  ADOProc3.ExecProc;

  TmpBillID:=trim(ADOProc3.Parameters.ParamByName('@Code').Value);

end;

procedure TfrmBill_Base.QryMasterAfterScroll(DataSet: TDataSet);  //Pass
begin
  if CanScroll then
  begin
    if Trim(QryMaster.FieldByName('nShMan').AsString)='' then
      BtnAuditing.Caption:='审核'

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -