📄 wsvouchereditsy.pas
字号:
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 + -