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

📄 untbox.pas

📁 二次开发模块 一、条形码的批量生成
💻 PAS
字号:
unit UntBox;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, dxExEdtr, DB, ADODB, dxDBCtrl, dxDBGrid, dxTL, dxCntner,
  StdCtrls, ComCtrls, ExtCtrls, dfsSplitter;

type
  TFrmBox = class(TForm)
    Bevel1: TBevel;
    dfsSplitter1: TdfsSplitter;
    Panel1: TPanel;
    Panel2: TPanel;
    GroupBox1: TGroupBox;
    Label1: TLabel;
    Label2: TLabel;
    Date1: TDateTimePicker;
    Date2: TDateTimePicker;
    GroupBox2: TGroupBox;
    EditBarCode: TEdit;
    GroupBox3: TGroupBox;
    EditMaker: TEdit;
    btnFind: TButton;
    btnClose: TButton;
    Panel3: TPanel;
    Panel4: TPanel;
    Panel6: TPanel;
    btnStart: TButton;
    btnDeleteOne: TButton;
    btnOut2: TButton;
    dxDBGrid2: TdxDBGrid;
    dxDBGrid2BdCode: TdxDBGridMaskColumn;
    QryBox: TADOQuery;
    dsQryBox: TDataSource;
    QryBundle: TADOQuery;
    dsQryBundle: TDataSource;
    dxDBGrid3: TdxDBGrid;
    dxDBGrid3cBarCode: TdxDBGridMaskColumn;
    btnSave: TButton;
    dxDBGrid3ID: TdxDBGridColumn;
    QryBarCode: TADOQuery;
    dsQryBarCode: TDataSource;
    btnDrop: TButton;
    dxDBGrid3BDCode: TdxDBGridColumn;
    Label3: TLabel;
    Label4: TLabel;
    Panel5: TPanel;
    dxDBGrid1: TdxDBGrid;
    dxDBGrid1ID: TdxDBGridColumn;
    dxDBGrid1BoxCode: TdxDBGridMaskColumn;
    dxDBGrid1dDate: TdxDBGridMaskColumn;
    dxDBGrid1cMaker: TdxDBGridMaskColumn;
    Panel7: TPanel;
    btnOut1: TButton;
    btnDelete: TButton;
    Panel8: TPanel;
    Panel9: TPanel;
    btnOut3: TButton;
    dxDBGrid4: TdxDBGrid;
    dxDBGrid4ID: TdxDBGridColumn;
    dxDBGrid4BDCode: TdxDBGridColumn;
    dxDBGrid4cBarCode: TdxDBGridMaskColumn;
    LsBarCode: TADOQuery;
    dsLsBarCode: TDataSource;
    dxDBGrid4BoxCode: TdxDBGridColumn;
    dxDBGrid4dDate: TdxDBGridColumn;
    dxDBGrid4cMaker: TdxDBGridColumn;
    btnShow: TButton;
    btnHide: TButton;
    Label5: TLabel;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnCloseClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnFindClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnStartClick(Sender: TObject);
    procedure QryBundleNewRecord(DataSet: TDataSet);
    procedure dxDBGrid2KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure QryBundleBeforePost(DataSet: TDataSet);
    procedure QryBundleAfterPost(DataSet: TDataSet);
    procedure btnDeleteOneClick(Sender: TObject);
    procedure btnOut2Click(Sender: TObject);
    procedure btnDropClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
    procedure btnOut1Click(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
    procedure btnHideClick(Sender: TObject);
    procedure btnShowClick(Sender: TObject);
    procedure btnOut3Click(Sender: TObject);
    function GetBundleInBox: Integer;    
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmBox: TFrmBox;

implementation

uses DataDmP, SUFunctionP, FrmMainP;

{$R *.dfm}

procedure TFrmBox.FormClose(Sender: TObject; var Action: TCloseAction);
begin
 Action:=caFree;
 FrmBox:=nil;
end;

procedure TFrmBox.btnCloseClick(Sender: TObject);
begin
   Close;
end;

procedure TFrmBox.FormCreate(Sender: TObject);
begin
  Date1.Date:=Date();
  Date2.Date:=Date();
  EditMaker.Text:=DataDm.Maker;
  SUFunction.SetSequenceCol(dxDBGrid1ID);
  SUFunction.SetSequenceCol(dxDBGrid3ID);
  SUFunction.SetSequenceCol(dxDBGrid4ID);    
end;

procedure TFrmBox.btnFindClick(Sender: TObject);
begin
  QryBox.Close;
  QryBox.SQL.Clear;
  QryBox.SQL.Add('select DISTINCT BoxCode,dDate,cMaker from Box');
  QryBox.SQL.Add('Where (dDate >='''+DateToStr(Date1.Date)+''')');
  QryBox.SQL.Add(' and  (dDate <='''+DateToStr(Date2.Date)+''')');
  if EditMaker.Text<>'' then
     QryBox.SQL.Add('and (cMaker like ''%'+EditMaker.Text+'%'')');
  if EditBarCode.Text<>'' then
    begin
     QryBox.SQL.Add('and (BoxCode   like ''%'+EditBarCode.Text+'%'')');
     QryBox.SQL.Add(' Or (BDCode    like ''%'+EditBarCode.Text+'%'')');
     QryBox.SQL.Add(' Or (cBarCode  like ''%'+EditBarCode.Text+'%''))');
    end;
  QryBox.Open;

  QryBundle.Close;
  QryBundle.SQL.Clear;
  QryBundle.SQL.Add('select * from LsBoxMain');
  QryBundle.SQL.Add('where  (PCID ='''+FrmMain.PCID+''')');
  QryBundle.Open;

  QryBarCode.Close;
  QryBarCode.SQL.Clear;
  QryBarCode.SQL.Add('select * from LsBoxList');
  QryBarCode.SQL.Add('where  (PCID ='''+FrmMain.PCID+''')');
  QryBarCode.Open;
  
end;

procedure TFrmBox.FormShow(Sender: TObject);
begin
  btnFind.Click;
end;

procedure TFrmBox.btnStartClick(Sender: TObject);
begin
    btnHide.Click;
    QryBundle.Append;
    dxDBGrid2.SetFocus;
    dxDBGrid2.FocusedField:=QryBundle.FieldByName('BdCode');
end;

procedure TFrmBox.QryBundleNewRecord(DataSet: TDataSet);
begin
  QryBundle.FieldByName('PCID').AsString:=FrmMain.PCID;
end;

procedure TFrmBox.dxDBGrid2KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key=vk_return  then
    begin
      if QryBundle.RecNo=-1 then
         begin
            QryBundle.Post;
            QryBundle.Append;
        end
      else
        QryBundle.Next;
    end;
end;

procedure TFrmBox.QryBundleBeforePost(DataSet: TDataSet);
Var ii:Integer;
    LsQry:TADOQuery;
    LsStr:String;
begin
   ii:=QryBarCode.RecordCount;
   LsStr:=QryBundle.FieldByName('BDCode').AsString;
   LsQry:=TADOQuery.Create(Self);
   LsQry.Connection:=DataDm.ConDataSys;
   LsQry.SQL.Add('select count(*) as iNum from dbo.LsBoxMain');
   LsQry.SQL.Add('Where (PCID='''+FrmMain.PCID+''')');
   LsQry.SQL.Add(' AND  (BDCODE='''+LsStr+''')');
   LsQry.Open;
   if (LsQry.FieldByName('iNum').AsInteger>=1) then
     begin
      Application.MessageBox(Pchar('包条形码<'+LsStr+'>重复,请检查!'),'信息',MB_OK+ MB_ICONINFORMATION);
      QryBundle.Cancel;
      Abort;
     end;
   LsQry.Close;
   LsQry.SQL.Clear;
   LsQry.SQL.Add('Insert into LsBoxList("BDCode","cBarCode","PCID")');
   LsQry.SQL.Add('select BDCode,cBarCode,'''+FrmMain.PCID+''' as PCID  from bundle');
   LsQry.SQL.Add('where (bdcode='''+LsStr+''')');
   LsQry.ExecSQL;
   QryBarCode.Close;
   QryBarCode.Open;
   if ii=QryBarCode.RecordCount then
     begin
      Application.MessageBox(Pchar('包条形码<'+LsStr+'>无效,请检查!'),'信息',MB_OK+ MB_ICONINFORMATION);
      QryBundle.Cancel;
      Abort;
     end;
   LsQry.Destroy;  
end;

procedure TFrmBox.QryBundleAfterPost(DataSet: TDataSet);
begin
  Label3.Caption:='包:'+IntToStr(QryBundle.RecordCount);
  Label4.Caption:='件:'+IntToStr(QryBarCode.RecordCount);
end;

procedure TFrmBox.btnDeleteOneClick(Sender: TObject);
Var LsQry:TADOQuery;
    LsStr:String;
begin
  if QryBundle.RecordCount>0 then
    begin
      if Application.MessageBox('确定要删除此包的条码?','信息',MB_OKCANCEL+ MB_ICONINFORMATION)= IDOK  Then
           begin
               LsStr:=QryBundle.FieldByName('BDCode').AsString;
               LsQry:=TADOQuery.Create(Self);
               LsQry.Connection:=DataDm.ConDataSys;
               LsQry.SQL.Add('Delete from dbo.LsBoxList');
               LsQry.SQL.Add('Where (PCID='''+FrmMain.PCID+''')');
               LsQry.SQL.Add(' AND  (BDCODE='''+LsStr+''')');
               LsQry.ExecSQL;
               LsQry.Destroy;
               QryBarCode.Close;
               QryBarCode.Open;
               QryBundle.Edit;
               QryBundle.Delete;
                Label3.Caption:='包:'+IntToStr(QryBundle.RecordCount);
                Label4.Caption:='件:'+IntToStr(QryBarCode.RecordCount);
           end;
    end;
end;

procedure TFrmBox.btnOut2Click(Sender: TObject);
begin
  SUFunction.DBGridSaveToFile(dxDBGrid3,'包条形码.xls');
end;

procedure TFrmBox.btnDropClick(Sender: TObject);
Var LsQry:TADOQuery;

begin
  if QryBundle.RecordCount>0 then
    begin
      if Application.MessageBox('确定要删除此包的条码?','信息',MB_OKCANCEL+ MB_ICONINFORMATION)= IDOK  Then
           begin
               LsQry:=TADOQuery.Create(Self);
               LsQry.Connection:=DataDm.ConDataSys;
               LsQry.SQL.Add('Delete from dbo.LsBoxList');
               LsQry.SQL.Add('Where (PCID='''+FrmMain.PCID+''')');
               LsQry.ExecSQL;
               LsQry.SQL.Clear;
               LsQry.SQL.Add('Delete from dbo.LsBoxMain');
               LsQry.SQL.Add('Where (PCID='''+FrmMain.PCID+''')');
               LsQry.ExecSQL;
               LsQry.Destroy;
               QryBundle.Close;
               QryBundle.Open;
               QryBarCode.Close;
               QryBarCode.Open;
                Label3.Caption:='包:'+IntToStr(QryBundle.RecordCount);
                Label4.Caption:='件:'+IntToStr(QryBarCode.RecordCount);
           end;
    end;
end;

procedure TFrmBox.btnSaveClick(Sender: TObject);
Var LsQry:TADOQuery;
    LsDate:TDate;
    cYearMonth,LsCode:String;
    ii:Integer;
begin
  if QryBarCode.RecordCount=0 then Abort;
      ii:=GetBundleInBox;
      if ii>0 then
        begin
         Application.MessageBox(Pchar('共'+IntToStr(ii)+'包条形码已在历史包清单中,请检查!'),'信息',MB_OK+ MB_ICONINFORMATION);
         Abort;
        end;
      LsCode:='2'+FrmMain.GetPCID;
      LsDate:=DataDm.GetSysDateTime;
      cYearMonth:=DataDm.GetSysYearMonth;
      LsQry:=TADOQuery.Create(Self);
      LsQry.Connection:=DataDm.ConDataSys;
      LsQry.SQL.Add('insert into Box("BoxCode","BDCode","cYearMonth","dDate","cMaker","cBarCode")');
      LsQry.SQL.Add('select '''+LsCode+''' as BoxCode,BDCode,'''+cYearMonth+''' as cYearMonth,'''+DateToStr(LsDate)+''' as dDate,'''+DataDm.Maker+''' as cMaker,cBarCode from LsBoxList');
      LsQry.SQL.Add('where  (PCID ='''+FrmMain.PCID+''')');
      Try
        LsQry.ExecSQL;
      Except
         Application.MessageBox(Pchar('条形已经扫描过,请检查!'),'信息',MB_OK+ MB_ICONINFORMATION);
         Abort;
      end;
      LsQry.Destroy;
      DataDm.DeletePCIDTabe(DataDm.ConDataSys,'LsBoxMain');
      DataDm.DeletePCIDTabe(DataDm.ConDataSys,'LsBoxList');
      QryBox.Close;
      QryBox.Open;
      QryBox.Last;
      QryBundle.Close;
      QryBundle.Open;
      QryBarCode.Close;
      QryBarCode.Open;

end;

procedure TFrmBox.btnOut1Click(Sender: TObject);
begin
   SUFunction.DBGridSaveToFile(dxDBGrid1,'箱条形码列表_'+DataDm.Maker+'.xls');
end;

procedure TFrmBox.btnDeleteClick(Sender: TObject);
Var LsQry:TADOQuery;
    ii:Integer;
begin
  if QryBox.RecordCount=0 then Abort;
  if Application.MessageBox('确定要删除此箱条码?','信息',MB_OKCANCEL+ MB_ICONINFORMATION)= IDOK  Then
       begin
          ii:=QryBox.RecNo;
          LsQry:=TADOQuery.Create(Self);
          LsQry.Connection:=DataDm.ConDataSys;
          LsQry.SQL.Add('delete from Box');
          LsQry.SQL.Add('where (BoxCode='''+QryBox.FieldByName('BoxCode').AsString+''')');
          LsQry.ExecSQL;
          LsQry.Destroy;
          QryBox.Close;
          QryBox.Open;
          QryBox.MoveBy(ii-1)
      end;

end;

procedure TFrmBox.btnHideClick(Sender: TObject);
begin
   Panel8.Visible:=False;
end;

procedure TFrmBox.btnShowClick(Sender: TObject);
begin
   LsBarCode.Close;
   if QryBox.RecordCount=0 then Abort;
   LsBarCode.Parameters.ParamByName('boxcode').Value:=QryBox.FieldByName('boxcode').AsString;
   LsBarCode.Open;
   Label5.Caption:='件:'+IntToStr(LsBarCode.RecordCount);
   Panel8.Visible:=True;
end;

procedure TFrmBox.btnOut3Click(Sender: TObject);
begin
   SUFunction.DBGridSaveToFile(dxDBGrid1,'箱条形码_'+DataDm.Maker+'.xls');
end;

function TFrmBox.GetBundleInBox: Integer;
Var LsQry:TADOQuery;
begin
   LsQry:=TADOQuery.Create(Self);
   LsQry.Connection:=DataDm.ConDataSys;
   LsQry.SQL.Add('select count(*) as iNum from dbo.LsBoxMain');
   LsQry.SQL.Add('Where (PCID='''+FrmMain.PCID+''')');
   LsQry.SQL.Add('And (BDCode in (select BDCode from Box))');
   LsQry.Open;
   Result:= LsQry.FieldByName('iNum').AsInteger;
   LsQry.Destroy;
end;

end.

⌨️ 快捷键说明

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