📄 basebilledit.pas
字号:
unit BaseBillEdit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ComCtrls, DBData, ExtCtrls, dxCntner, dxEditor, dxEdLib,
dxDBELib, dxExEdtr, dxTL, dxDBCtrl, dxDBGrid, Mask, ImgList, Db, dxDBEdtr,
ADODB, dxBar, Variants, KsSkinButtons, KsSkinForms, KsSkinLabels,
KsSkinPanels, BaseForm, EditForm, Menus, dxDBTLCl, dxGrClms, se_controls;
type
TfrmBaseBillEdit = class(TfrmBaseForm)
gridMain: TdxDBGrid;
Panel1: TSeSkinPanel;
lblCaption: TSeSkinLabel;
dsMaster: TDataSource;
dsList: TDataSource;
pnlBillTop: TSeSkinPanel;
ADOSetMaster: TADODataSet;
ADOSetList: TADODataSet;
dxBarManager1: TdxBarManager;
bbPrev: TdxBarButton;
bbNext: TdxBarButton;
bbIns: TdxBarButton;
bbEdit: TdxBarButton;
bbDel: TdxBarButton;
bbSetup: TdxBarButton;
bbPrint: TdxBarButton;
PopupMenu1: TdxBarPopupMenu;
pbbPrint: TdxBarButton;
pbbPrintView: TdxBarButton;
pbbPrintCustom: TdxBarButton;
pbbPrintInit: TdxBarButton;
bbOk: TSeSkinButton;
bbExit: TSeSkinButton;
GridPopMenu: TdxBarPopupMenu;
bbCopy: TdxBarButton;
procedure bbExitClick(Sender: TObject);
procedure pbbPrintClick(Sender: TObject);
procedure pbbPrintViewClick(Sender: TObject);
procedure pbbPrintCustomClick(Sender: TObject);
procedure pbbPrintInitClick(Sender: TObject);
procedure bbPrintClick(Sender: TObject);
procedure gridMainKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure bbPrevClick(Sender: TObject);
procedure bbNextClick(Sender: TObject);
procedure bbInsClick(Sender: TObject);
procedure bbDelClick(Sender: TObject);
procedure bbEditClick(Sender: TObject);
procedure gridMainMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure bbOkClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure gridMainCustomDraw(Sender: TObject; ACanvas: TCanvas;
ARect: TRect; ANode: TdxTreeListNode; AColumn: TdxDBTreeListColumn;
const AText: string; AFont: TFont; var AColor: TColor; ASelected,
AFocused: Boolean; var ADone: Boolean);
private
{ Private declarations }
public
bReturn: Boolean;
{ Public declarations }
protected
lID, lMode, lSelectMode, lOneRet: Integer;
bDrawFullGrid: Boolean;
function CheckUnRegister: Boolean;
procedure GridButtonClick(Sender: TObject; AbsoluteIndex: Integer);
procedure GridSelectPrice(Sender: TObject; AbsoluteIndex: Integer);
procedure GetDataField(var sFieldName, sCaption, sWidth, sNoDisPlay, sReadOnly: string);
procedure SetBillDisPlay(sDisPlay: string);
procedure SetBillReadOnly(sRead: string);
procedure SaveGirdWidth;
procedure SetDrawGridSummary(dxGrid: TdxDBGrid);
procedure GridDrawSummaryFooter(Sender: TObject; ACanvas: TCanvas; ARect:
TRect; var AText: string; var AAlignment: TAlignment; AFont: TFont; var AColor:
TColor; var ADone: Boolean);
end;
implementation
uses SysPublic;
{$R *.DFM}
function TfrmBaseBillEdit.CheckUnRegister: Boolean;
begin
Result := False;
if not bSoftRegister and (GetDataSetCount('SELECT * FROM BillIndex') > 100) then
begin
ShowMsg('你使用的是未注册版,您录入的单据已超过100张,不能继续录入,请注册或购买正版!');
Result := True;
end;
end;
procedure TfrmBaseBillEdit.GridButtonClick(Sender: TObject; AbsoluteIndex: Integer);
var
sSql, sSelect, sPeiCi, sWareID, sUnitItem: string;
lOrder: Integer;
begin
sSelect := BaseSelect(BASE_WARE, 1, gridMain.EditingText, lSelectMode, lOneRet);
sWareID := GetCommaStr(sSelect, 1);
sPeiCi := GetCommaStr(sSelect, 2);
if StrToInt2(sWareID) = 0 then
begin
gridMain.CancelEditor;
gridMain.Repaint;
gridMain.ShowEditor;
Exit;
end;
if (ADOSetList.State <> dsEdit) and (ADOSetList.State <> dsInsert) then ADOSetList.Edit;
ADOSetList.FieldByName('WareID').AsInteger := StrToInt2(sWareID);
ADOSetList.FieldByName('WareCode').AsString := FieldIdToName('Ware', sWareID, 'UserCode');
ADOSetList.FieldByName('WareName').AsString := FieldIdToName('Ware', sWareID, 'Name');
ADOSetList.FieldByName('WareUnit').AsString := FieldIdToName('Ware', sWareID, 'Unit');
ADOSetList.FieldByName('Model').AsString := FieldIdToName('Ware', sWareID, 'Model');
ADOSetList.FieldByName('Spec').AsString := FieldIdToName('Ware', sWareID, 'Spec');
ADOSetList.FieldByName('Area').AsString := FieldIdToName('Ware', sWareID, 'Area');
//选择双单位
if bUseTwoUnit then
begin
sUnitItem := FieldIdToName('Ware', sWareID, 'Unit') + #13 + FieldIdToName('Ware', sWareID, 'Unit2');
ChangColumnType(gridMain, gridMain.ColumnByFieldName('WareUnit'), TdxDBGridPickColumn);
TdxDBGridPickColumn(gridMain.ColumnByFieldName('WareUnit')).Items.Text := sUnitItem;
TdxDBGridPickColumn(gridMain.ColumnByFieldName('WareUnit')).DropDownListStyle := True;
end
else
begin
gridMain.ColumnByFieldName('WareUnit').ReadOnly := True;
gridMain.ColumnByFieldName('WareUnit').Color := clInfoBk;
end;
ADOSetList.FieldByName('Price').AsString := FieldIdToName('Ware', sWareID, 'Pos_Price');
if lSelectMode = 1 then
begin
lOrder := StrToInt2(GetIniValue(frmData.ADOConnet, 'OutOrder')); //读成本算法
if lOrder = 0 then
sSql := 'SELECT Sum(Total)/iif(Sum(Number)=0,1,Sum(Number)) as ConstPrice FROM WareStock WS WHERE WS.WareID=' + sWareID
else
sSql := 'SELECT Price as ConstPrice FROM WareStock WS WHERE WS.WareID=' + sWareID + ' and Ws.Order=' + sPeiCi;
ADOSetList.FieldByName('ConstPrice').AsString := SqlToFieldValue(sSql, 'ConstPrice');
case lMode of
SALE_ORDER_EDIT, SALE_FORMAL_EDIT, SALE_READY_EDIT, SALE_POS_EDIT:
ADOSetList.FieldByName('PeiCi').AsInteger := StrToInt2(sPeiCi);
end;
end;
case lMode of
SALE_POS_EDIT:
begin
ADOSetList.FieldByName('Number').AsFloat := 1;
with gridMain do
if isEof or (DataLink.DataSet.RecNo = DataLink.DataSet.RecordCount) then
DataLink.DataSet.Append
else
DataLink.DataSet.Next;
Exit;
end;
end;
if gridMain.FocusedColumn < gridMain.ColumnCount - 1 then
gridMain.FocusedColumn := gridMain.FocusedColumn + 1;
end;
procedure TfrmBaseBillEdit.GridSelectPrice(Sender: TObject; AbsoluteIndex: Integer);
var
sP1, sP2, sSql, s0, s1, s2, s3, s4: string;
lWareID, lIndex: Integer;
ADOSetTmp: TADODataSet;
tsList: TStrings;
begin
sP1 := '';
sP2 := '';
tsList := TStringList.Create;
lWareID := ADOSetList.FieldByName('WareID').AsInteger;
if lWareID <= 0 then Exit;
sSql := 'Select * From Ware WHERE ID=' + IntToStr(lWareID);
ADOSetTmp := TADODataSet.Create(nil);
ADOSetTmp.LockType := ltReadOnly;
OpenDataSet(ADOSetTmp, sSql);
if not ADOSetTmp.IsEmpty then
begin
s0 := Trim(ADOSetTmp.FieldByName('Pos_Price').AsString);
s1 := Trim(ADOSetTmp.FieldByName('Price1').AsString);
s2 := Trim(ADOSetTmp.FieldByName('Price2').AsString);
s3 := Trim(ADOSetTmp.FieldByName('Price3').AsString);
s4 := Trim(ADOSetTmp.FieldByName('Price4').AsString);
end;
sP1 := '参考售价 :' + s0 + #13 + '预设售价1:' + s1 + #13 + '预设售价2:' + s2 + #13 +
'预设售价3:' + s3 + #13 + '预设售价4:' + s4;
sP2 := s0 + #13 + s1 + #13 + s2 + #13 + s3 + #13 + s4;
tsList.Text := sP2;
if ADOSetTmp.Active then ADOSetTmp.Close;
ADOSetTmp.Free;
lIndex := GetListBox('选择商品预设售价', sP1, 0, 'LISTBOX');
if (lIndex >= 0) and (lIndex <= tsList.Count) then
begin
ADOSetList.Edit;
ADOSetList.FieldByName('Price').AsString := tsList.Strings[lIndex];
end
else
begin
gridMain.CancelEditor;
gridMain.Repaint;
gridMain.ShowEditor;
end;
end;
procedure TfrmBaseBillEdit.GetDataField(var sFieldName, sCaption, sWidth,
sNoDisPlay, sReadOnly: string);
var
sSql: string;
ADOSetTmp: TADODataSet;
sFieldNameS, sCaptionS, sWidthS, sNoDisPlayS, sReadOnlyS: string;
begin
ADOSetTmp := nil;
sFieldNameS := '';
sCaptionS := '';
sWidthS := '';
sNoDisPlayS := '';
sReadOnlyS := '';
sSql := 'SELECT * FROM BillSetup WHERE MODE=' + IntToStr(lMode) +
' ORDER BY UserID';
ADOSetTmp := TADODataSet.Create(ADOSetTmp);
ADOSetTmp.LockType := ltReadOnly;
OpenDataSet(ADOSetTmp, sSql);
if not ADOSetTmp.IsEmpty then
while not ADOSetTmp.Eof do
begin
if sFieldName <> '' then
sFieldNameS := sFieldNameS + ADOSetTmp.FieldByName(sFieldName).AsString
+ ',';
if sCaption <> '' then
begin
if Trim(ADOSetTmp.FieldByName('CustomName').AsString) = '' then
sCaptionS := sCaptionS + ADOSetTmp.FieldByName(sCaption).AsString + ','
else
sCaptionS := sCaptionS + ADOSetTmp.FieldByName('CustomName').AsString
+ ',';
end;
if sWidth <> '' then
sWidthS := sWidthS + ADOSetTmp.FieldByName(sWidth).AsString + ',';
if (sFieldName <> '') and (not ADOSetTmp.FieldByName(sNoDisPlay).AsBoolean) then
sNoDisPlayS := sNoDisPlayS + ADOSetTmp.FieldByName(sFieldName).AsString
+ ',';
if (sFieldName <> '') and ADOSetTmp.FieldByName(sReadOnly).AsBoolean then
sReadOnlyS := sReadOnlyS + ADOSetTmp.FieldByName(sFieldName).AsString +
',';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -