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

📄 wsvouchereditsy.pas

📁 企业ERP管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    Connection := Self.Connection;
    CommandText := Format('SELECT :VoucherID = MAX(%s) FROM %sMaster WHERE %0:s < %2:d AND RecordState <> ''删除''',
      [VoucherIDField.FieldName, VoucherTableName, VoucherIDField.AsInteger]);
    with Parameters[0] do
    begin
      Direction := pdOutput;
      DataType := ftInteger;
    end;
 //   showmessage(CommandText);
    Execute;
    if VarIsNull(Parameters[0].Value) then Result := -1
    else Result := Parameters[0].Value;
  finally
    Free;
  end;
end;

function TWSVoucherEditSYForm.GetVoucherIDField: TField;
begin
  Result := MasterDataSet.Fields[0];
end;

procedure TWSVoucherEditSYForm.InitReport(Report: TQuickRep);
begin
  Report.ReportTitle := Caption;
end;

procedure TWSVoucherEditSYForm.InternalCancel;
begin
  if Assigned(MasterDataSet) then
    with MasterDataSet do if State in dsEditModes then Cancel;
  if Assigned(DetailDataSet) then
    with DetailDataSet do CancelBatch;
end;

procedure TWSVoucherEditSYForm.InternalSave;
begin
  if Assigned(MasterDataSet) then
    with MasterDataSet do if State in dsEditModes then Post;
  if Assigned(DetailDataSet) then
    with DetailDataSet do UpdateBatch;
end;

procedure TWSVoucherEditSYForm.New;
begin
  with MasterDataSet do
  begin
    Close;
    Parameters.ParamByName(VoucherIDField.FieldName).Value := Null;
    Open;
    Append;
    FieldByName('Code').AsString := GetMaxCode('Code', VoucherTableName + 'Master', number);
  end;
  with DetailDataSet do
  begin
    Close;
    Parameters.ParamByName(VoucherIDField.FieldName).Value := Null;
    Open;
  end;
  //胡建平 2002-11-07
  FOldMasterDataSetAfterPost:=MasterDataSet.AfterPost;
  MasterDataSet.AfterPost:=MasterDataSetAfterPost;
  UpdateGrid;
end;

procedure TWSVoucherEditSYForm.NewActionExecute(Sender: TObject);
begin
  inherited;
  if not PromptSave then Exit;
  New;
end;

procedure TWSVoucherEditSYForm.NewDetailActionExecute(Sender: TObject);
begin
  inherited;
  DetailDataSet.Append;
end;

procedure TWSVoucherEditSYForm.NextActionExecute(Sender: TObject);
var
  VoucherID: Integer;
begin
  inherited;
  if not PromptSave then Exit;
  Cancel;
  VoucherID := GetNextVoucherID;
  if VoucherID < 0 then Close
  else Open(VoucherID);
end;

procedure TWSVoucherEditSYForm.Open(VoucherID: Integer);
begin
  with MasterDataSet do
  begin
    Close;
    Parameters.ParamByName(VoucherIDField.FieldName).Value := VoucherID;
    Open;
  end;
  with DetailDataSet do
  begin
    Close;
    Parameters.ParamByName(VoucherIDField.FieldName).Value := VoucherID;
    Open;
    FOldDetailDataSetOnNewRecord := DetailDataSet.OnNewRecord;
    DetailDataSet.OnNewRecord := DetailDataSetNewRecord;
  end;
  UpdateGrid;
end;

procedure TWSVoucherEditSYForm.Print(Preview: Boolean);
begin
  with CreateQRBuilder do
  try
    Active := True;
    InitReport(TQuickRep(Report));
    Report.PrevFormStyle := fsStayOnTop;
    Report.PreviewInitialState := wsMaximized;
    if Preview then Report.Preview
    else Report.Print;
  finally
    Free;
  end;
end;

procedure TWSVoucherEditSYForm.PrintActionExecute(Sender: TObject);
begin
  inherited;
  Print(False);
end;

procedure TWSVoucherEditSYForm.PrintPreviewActionExecute(Sender: TObject);
begin
  inherited;
  Print(True);
end;

procedure TWSVoucherEditSYForm.PriorActionExecute(Sender: TObject);
var
  VoucherID: Integer;
begin
  inherited;
  if not PromptSave then Exit;
  Cancel;
  VoucherID := GetPriorVoucherID;
  if VoucherID < 0 then Close
  else Open(VoucherID);
end;

function TWSVoucherEditSYForm.PromptSave: Boolean;
begin
  Result := True;
  if Modified then
    case Application.MessageBox(PChar(SConfirmSaveVoucher), PChar(Caption),
      MB_ICONQUESTION or MB_YESNOCANCEL) of
      IDYES: Save;
      IDCANCEL: Result := False;
    end;
end;

procedure TWSVoucherEditSYForm.Save;
var
  InParentTrans: Boolean;
begin
  if MasterDataSet.FieldByName('RecordState').AsString = '提交' then
    raise Exception.Create('单据已提交,不能再修改,如有问题,可用红字冲销!');
  InParentTrans := Connection.InTransaction;
  if not InParentTrans then Connection.BeginTrans;
  try
    InternalSave;
    if not InParentTrans then Connection.CommitTrans;
  except
    if not InParentTrans then Connection.RollbackTrans;
    raise;
  end;
end;

procedure TWSVoucherEditSYForm.SaveActionExecute(Sender: TObject);
begin
  inherited;
  Save;
end;

function TWSVoucherEditSYForm.GetMailBody: string;
var
  I,J: Integer;
  DF, DH, DR,TempStr,TempStr1: string;
  DS: TDataSource;
  Field: TField;
begin
  TempStr  :='          ';
  TempStr1 :='          ';
  with TopPanel do
    for I := 0 to ControlCount - 1 do
    begin
      if IsPublishedProp(Controls[I], 'DataField') then
      begin
        DF := GetStrProp(Controls[I], 'DataField');
        DS := TDataSource(GetObjectProp(Controls[I], 'DataSource'));
        if (DS <> nil) and (DS.DataSet <> nil) then
        begin
          Field := DS.DataSet.FindField(DF);
          if Field <> nil then
            Result := Result + '%0D%0A' + Field.DisplayLabel + ': ' + Field.DisplayText;
        end;
      end;
    end;
  for I := 0 to DBGrid.Columns.Count - 1 do
  begin
    j:=Length(trim(DBGrid.Columns[I].Title.Caption));
    if DH = '' then
      if j<10 then DH :=trim(DBGrid.Columns[I].Title.Caption)+copy(Tempstr1,j,10-j)
        else DH :=DBGrid.Columns[I].Title.Caption
    else
      if j<10 then DH := DH + '%09%09' + trim(DBGrid.Columns[I].Title.Caption)+copy(Tempstr1,j,10-j)
        else DH := DH + '%09%09' + DBGrid.Columns[I].Title.Caption;
  end;
  Result := Result + '%0D%0A%0D%0A' + DH;
  DetailDataSet.First;
  while not DetailDataSet.Eof do
  begin
    for I := 0 to DBGrid.Columns.Count-1  do
    begin
      j:=Length(trim(DBGrid.Columns[I].Field.DisplayText));
      if DR = '' then
      if j<10 then  DR :=trim(DBGrid.Columns[I].Field.DisplayText)+copy(Tempstr,J,10-J)
          else DR :=trim(DBGrid.Columns[I].Field.DisplayText)
      else
      if j<10 then  DR :=DR + '%09%09' +TRIM(DBGrid.Columns[I].Field.DisplayText)+copy(Tempstr,J,10-J)
          else DR :=DR + '%09%09' +DBGrid.Columns[I].Field.DisplayText;
    end;
    Result := Result + '%0D%0A' + DR;
    DetailDataSet.Next;
    DR := '';
  end;
//  with CreateQRBuilder do
//  try
//    Active := True;
//    InitReport(TQuickRep(Report));
//    FileName := GetTempFileName('WSVoucherMail');
//    ShowMessage(FileName);
//    Report.ExportToFilter(TQRCommaSeparatedFilter.Create(FileName));
//    AssignFile(F, FileName);
//    Reset(F);
//    FS := TFileStream.Create(FileName, fmOpenRead);
//    try
//      SetLength(Result, FS.Size + 1);
//      FS.Read(Result, FS.Size);
//    finally
//      FS.Free;
//    end;
//    ShowMessage(Result);
//  finally
//    Free;
//  end;
end;


procedure TWSVoucherEditSYForm.SendAsMailActionExecute(Sender: TObject);
begin
  inherited;
  ShellExecute(HWND_DESKTOP, 'OPEN', PChar('mailto:?subject='+caption+' -- ' +VocherNoDBEdit.Text + '&body=' + GetMailBody), nil, nil, SW_SHOW);
//  ShowMessage(GetMailBody);
end;

procedure TWSVoucherEditSYForm.SubmitActionExecute(Sender: TObject);
begin
  inherited;
  if MasterDataSet.FieldByName('RecordState').AsString  = '提交' then
  begin
    showmessage('单据已经提交,不需重复!') ;
    exit;
  end;
  if Modified and (Application.MessageBox('提交之前需先保存,是否立即保存?',
    PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO) then Exit;
  with MasterDataSet do
  begin
    Edit;
    FieldByName('RecordState').AsString := '提交';
    Post;
  end;
  Save;
end;

procedure TWSVoucherEditSYForm.UpdateGrid;
var  I: Integer;
begin
  with DBGrid do
  begin
    FooterRowCount := 0;
    Columns[0].Footer.ValueType := fvtStaticText;
    Columns[0].Footer.Value := '合计:';
    Columns[0].Footer.Alignment := taCenter;
    for I := 0 to Columns.Count -  1 do
    begin
      if Columns[I].Field is TNumericField then
      if Pos('Price',Columns[I].FieldName)<=0 then
        Columns[I].Footer.ValueType := fvtSum;
    end;
    {GoodsLookup.DataSource := DataSource;
    for I := 0 to Columns.Count - 1 do
    begin
      if Pos('GOOD', UpperCase(Columns[I].FieldName)) > 0 then
      begin
        GoodsLookup.DataField := Columns[I].FieldName;
        Columns[I].ControlType := ctCustomControl;
        Columns[I].CustomControl := GoodsLookup;
        Break;
      end;
    end;  }
    FooterRowCount := 1;
  end;
end;

procedure TWSVoucherEditSYForm.GoodsLookupButtonClick(Sender: TObject;
  Button: TLookupWindowBtn);
var
  F: TField;
begin
  inherited;
  with TQLDBLookupComboBox(Sender) do
  begin
    F := DataSource.DataSet.FieldByName(DataField);
    if F.Lookup then F := F.DataSet.FieldByName(F.KeyFields);
    case Button of
      lbNew:;
      lbEdit:;
      lbSetNull:
        begin
          F.DataSet.Edit;
          F.Clear;
          CloseUp(False);
        end;
    end;
  end;
end;

procedure TWSVoucherEditSYForm.SaveAsActionExecute(Sender: TObject);
var
  TempDS: TADODataSet;
  OldID, I: Integer;
  Field: TField;
begin
  inherited;
  OldID := VoucherIDField.AsInteger;
  if not PromptSave then Exit;
  DetailDataSet.DisableControls;
  try
    New;
    TempDS := TADODataSet.Create(Self);
    try
      TempDS.Connection := Connection;
      TempDS.CommandText := Format('SELECT * FROM %sMaster WHERE ID = %d',
        [VoucherTableName, OldID]);
      TempDS.Open;
      for I := 0 to MasterDataSet.FieldCount - 1 do
      begin
        Field := MasterDataSet.Fields[I];
        if  not (Field.Lookup or Field.Calculated or Field.ReadOnly)  and
          (Field <> VoucherIDField) and not SameText(Field.FieldName, 'Code') and
          not SameText(Field.FieldName, 'RecordState') and
          not SameText(Field.FieldName, 'CreateDate') and
          not SameText(Field.FieldName, 'CreateUserID') then
          Field.Value := TempDS.FieldByName(Field.FieldName).Value;
      end;
      TempDS.Close;
      TempDS.CommandText := Format('SELECT * FROM %sDetail WHERE MasterID = %d',
        [VoucherTableName, OldID]);
      TempDS.Open;
      while not TempDS.Eof do
      begin
        DetailDataSet.Append;
        for I := 0 to DetailDataSet.FieldCount - 1 do
        begin
          Field := DetailDataSet.Fields[I];
          if not (Field.Lookup or Field.Calculated or Field.ReadOnly) and
            not SameText(Field.FieldName, 'MasterID') then
            Field.Value := TempDS.FieldByName(Field.FieldName).Value;
        end;
        DetailDataSet.Post;
        TempDS.Next;
      end;
    finally
      TempDS.Free;
    end;
  finally
    DetailDataSet.EnableControls;
  end;
end;

type TQLDBGridCracker = class(TQLDBGrid);

procedure TWSVoucherEditSYForm.GoodsLookupCloseUp(Sender: TObject);
begin
  inherited;
//  if DetailDataSet.State in dsEditModes then
end;

procedure TWSVoucherEditSYForm.ImportActionExecute(Sender: TObject);
begin
  inherited;
//  FindShowForm(TWSVoucherImportForm,'');
  ShowImportForm('','','');
end;

procedure TWSVoucherEditSYForm.DBGridEnter(Sender: TObject);
var  I: Integer;
begin
  inherited;
//  if not DBGrid.Enabled then exit;
//  with DBGrid do
//  begin
//    if Columns.Count<=1 then exit;
//    FooterRowCount := 0;
//    Columns[0].Footer.ValueType := fvtStaticText;
//    Columns[0].Footer.Value := '合计:';
//    Columns[0].Footer.Alignment := taCenter;
//    for I := 0 to Columns.Count -  1 do
//      if Columns[I].Field is TNumericField then
//      if Pos('Price',Columns[I].FieldName)<=0 then
//        Columns[I].Footer.ValueType := fvtSum;
//    FooterRowCount := 1;
//  end;
end;

procedure TWSVoucherEditSYForm.WriteOffActionExecute(Sender: TObject);
begin
  inherited;
  if Modified and (Application.MessageBox('是否注销此凭单?',
    PChar(Caption), MB_ICONQUESTION or MB_YESNO) = IDNO) then Exit;
  with MasterDataSet do
  begin
    Edit;
    FieldByName('RecordState').AsString := '注销';
    Post;
  end;
  Save;

end;

procedure TWSVoucherEditSYForm.VourcherEditSYExportActionExecute(
  Sender: TObject);
begin
  inherited;
  { DONE -cUI : 添加导出 DBGrid 的内容的代码}
  ExportDBGridToExcel(DBGrid, GetKeyState(VK_SHIFT) and $80000 = $80000,
    Caption, Hint, DBGrid.Hint);
end;

end.

⌨️ 快捷键说明

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