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

📄 frmbarautop.~pas

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

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, FrmRootAddP, StdCtrls, Buttons, ExtCtrls, ComCtrls, dxCntner,
  dxEditor, dxExEdtr, dxEdLib, Spin, DB, ADODB, Gauges, Mask, ToolEdit;

type
  TFrmBarAuto = class(TFrmRootAdd)
    GroupBox1: TGroupBox;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    GroupBox2: TGroupBox;
    dxButtonEdit1: TdxButtonEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    dxButtonEdit2: TdxButtonEdit;
    dxButtonEdit3: TdxButtonEdit;
    dxButtonEdit4: TdxButtonEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    Label7: TLabel;
    Edit3: TEdit;
    GroupBox3: TGroupBox;
    Label8: TLabel;
    EditStart: TdxButtonEdit;
    Label9: TLabel;
    SpinEdit1: TSpinEdit;
    Label10: TLabel;
    EditBarCode: TEdit;
    Gauge1: TGauge;
    btnHistory: TButton;
    procedure BtnCancelClick(Sender: TObject);
    procedure dxButtonEdit1ButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure ShowForm(ctype:String);
    procedure dxButtonEdit2ButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure dxButtonEdit3ButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    procedure BtnSaveClick(Sender: TObject);
    procedure dxButtonEdit4ButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    Function GetMax(ctype:String):String;
    procedure FormShow(Sender: TObject);
    procedure EditStartButtonClick(Sender: TObject;
      AbsoluteIndex: Integer);
    Function CheckInv:Boolean;
    procedure SaveBarcode;
    procedure SetBar;
    procedure RadioButton1Click(Sender: TObject);
    procedure RadioButton2Click(Sender: TObject);
    Function  ExistSBarCode:Integer;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnHistoryClick(Sender: TObject);
  private
    { Private declarations }
  public
    cVen,cInv,cColor,cSize:String;
    iInv:Integer; 
    { Public declarations }
  end;

var
  FrmBarAuto: TFrmBarAuto;

implementation

uses FrmPoPInventoryP, FrmPoPInvDefineP, FrmPoPVenP, DataDmP, FrmMainP,
  UntPoPHisBarCode;

{$R *.dfm}

procedure TFrmBarAuto.BtnCancelClick(Sender: TObject);
begin
  inherited;
  Close;
end;

procedure TFrmBarAuto.dxButtonEdit1ButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
  if RadioButton1.Checked then
     ShowForm('01');
  if RadioButton2.Checked then
     ShowForm('02');
  SetBar;
end;

procedure TFrmBarAuto.ShowForm(ctype: String);
begin
   Application.CreateForm(tFrmPoPInventory,FrmPoPInventory);
   FrmPoPInventory.Label2.Caption:=ctype;
   if FrmPoPInventory.ShowModal =mrok then
     begin
       cInv              :=FrmPoPInventory.QryInv.FieldByName('cInvCode').AsString;
       dxButtonEdit1.Text:=FrmPoPInventory.QryInv.FieldByName('cInvCode').AsString;
       Edit1.Text        :=FrmPoPInventory.QryInv.FieldByName('cInvName').AsString;
       Edit2.Text        :=FrmPoPInventory.QryInv.FieldByName('cInvStd').AsString;
     end;
   FrmPoPInventory.Free;
   FrmPoPInventory:=nil;
end;

procedure TFrmBarAuto.dxButtonEdit2ButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
   Application.CreateForm(tFrmPoPInvDefine,FrmPoPInvDefine);
   FrmPoPInvDefine.QryDefine.Close;
   FrmPoPInvDefine.QryDefine.Parameters.ParamByName('id').Value:=20;
   FrmPoPInvDefine.QryDefine.Open;
   if FrmPoPInvDefine.ShowModal =mrok then
     begin
       cColor              :=  FrmPoPInvDefine.QryDefine.FieldByName('cAlias').AsString;
       dxButtonEdit2.Text  :=  FrmPoPInvDefine.QryDefine.FieldByName('cValue').AsString;
     end;
   FrmPoPInvDefine.Free;
   FrmPoPInvDefine:=nil;
  SetBar; 
end;

procedure TFrmBarAuto.dxButtonEdit3ButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
   Application.CreateForm(tFrmPoPInvDefine,FrmPoPInvDefine);
   FrmPoPInvDefine.QryDefine.Close;
   FrmPoPInvDefine.QryDefine.Parameters.ParamByName('id').Value:=21;
   FrmPoPInvDefine.QryDefine.Open;
   if FrmPoPInvDefine.ShowModal =mrok then
     begin
       cSize               :=  FrmPoPInvDefine.QryDefine.FieldByName('cAlias').AsString;
       dxButtonEdit3.Text  :=  FrmPoPInvDefine.QryDefine.FieldByName('cValue').AsString;
     end;
   FrmPoPInvDefine.Free;
   FrmPoPInvDefine:=nil;
  SetBar;
end;

procedure TFrmBarAuto.BtnSaveClick(Sender: TObject);
var cType:String;
begin
  inherited;
  if not CheckInv then Abort;
  DataDm.DeletePCIDTabe(DataDm.ConDataSys,'LsBarData');
  if Length(EditStart.Text)<>6 then
    begin
       Application.MessageBox(Pchar('条码起始长度必须为6!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Abort;
    end;
  if RadioButton1.Checked then cType:='01';
  if RadioButton2.Checked then cType:='02';
  if StrToIntDef(EditStart.Text,1)<StrToInt(GetMax(cType)) then
    begin
       Application.MessageBox(Pchar('条码起始小于系统计数('+GetMax(cType)+')!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Abort;
    end;
if Application.MessageBox('确定要生成条形码?','信息',MB_OKCANCEL+ MB_ICONINFORMATION)= IDOK  Then
    begin
     SaveBarcode;
    end;
end;

procedure TFrmBarAuto.dxButtonEdit4ButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
   Application.CreateForm(tFrmPoPVen,FrmPoPVen);
   FrmPoPVen.Edit1.Text:=dxButtonEdit4.Text;
   if FrmPoPVen.ShowModal =mrok then
     begin
       cVen                :=  FrmPoPVen.QryVen.FieldByName('cVencode').AsString;
       dxButtonEdit4.Text  :=  FrmPoPVen.QryVen.FieldByName('cVencode').AsString;
       Edit3.Text          :=  FrmPoPVen.QryVen.FieldByName('cVenName').AsString;
     end;
   FrmPoPVen.Free;
   FrmPoPVen:=nil;
  SetBar;
end;

function TFrmBarAuto.GetMax(ctype:String): String;
 Function TranNumber(iNum:Integer):String;
 begin
    Result:=IntToStr(iNum);
    while length(Result)<6 do
     Result:='0'+Result;
 end;
Var LsQry:TADOQuery;
    ii:Integer;
begin
  LsQry:=TADOQuery.Create(Self);
  LsQry.Connection:=DataDm.ConDataSys;
  LsQry.SQL.Add('select max(right(cbarcode,6)) as cNum from barcode');
  LsQry.SQL.Add('where cbarcode like '''+EditBarCode.Text+'%''');
  LsQry.SQL.Add(' And  (cType='''+ctype+''')');
  LsQry.Open;
  ii:=StrToIntDef(LsQry.FieldByName('cNum').AsString,0)+1;
  LsQry.Destroy;
  Result:=TranNumber(ii);
end;

procedure TFrmBarAuto.FormShow(Sender: TObject);
begin
  inherited;
  iInv:=7;
end;

procedure TFrmBarAuto.EditStartButtonClick(Sender: TObject;
  AbsoluteIndex: Integer);
begin
  inherited;
  if not CheckInv then Abort;
  if RadioButton1.Checked and (length(EditBarCode.Text)=13) then
     EditStart.Text:=GetMax('01');
  if RadioButton2.Checked and (length(EditBarCode.Text)=11) then
     EditStart.Text:=GetMax('02');

end;

function TFrmBarAuto.CheckInv: Boolean;
begin
  Result:=True;
  if Length(cInv)<>iInv then
    begin
       Application.MessageBox(Pchar('存货代码长度必须为'+IntToStr(iInv)+'!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Result:=False;
       Exit;
    end;
  if (COPY(cInv,3,1)<'1') OR (COPY(cInv,3,1)>'9') then
    begin
       Application.MessageBox(Pchar('存货代码第3位必须为数字(4-9)!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Result:=False;
       Exit;
    end;
  if (COPY(cInv,4,1)<'1') OR (COPY(cInv,4,1)>'4') then
    begin
       Application.MessageBox(Pchar('存货代码第4位必须为(1-4)数字!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Result:=False;
       Exit;
    end;
  if Length(cColor)<>2 then
    begin
       Application.MessageBox(Pchar('颜色代码长度必须为2!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Result:=False;
       Exit;
    end;
  if (Length(cSize)<>2) and (RadioButton1.Checked) then
    begin
       Application.MessageBox(Pchar('尺码代码长度必须为2!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Result:=False;
       Exit;
    end;
  if Length(cVen)<>2 then
    begin
       Application.MessageBox(Pchar('供应商代码长度必须为2!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Result:=False;
       Exit;
    end;
    
end;

procedure TFrmBarAuto.SaveBarcode;
 Function TranNumber(iNum:Integer):String;
 begin
    Result:=IntToStr(iNum);
    while length(Result)<6 do
     Result:='0'+Result;
 end;
var LsQry:TADOQuery;
    ii,iNumber:Integer;
    cType,LsYear:String;
    LsDate:TDate;
begin
  if RadioButton1.Checked  then
     cType:='01';
  if RadioButton2.Checked  then
     cType:='02';
  LsQry:=TADOQuery.Create(Self);
  LsQry.Connection:=DataDm.ConDataSys;
  LsQry.SQL.Add('Select * from LsbarData');
  LsQry.SQL.Add('where (cbarcode=''1'')');
  LsQry.Open;
  iNumber:=StrToInt(EditStart.Text);
  LsYear :=copy(cInv,3,2);
  LsDate :=DataDm.GetSysDateTime;
  Gauge1.Visible:=True;
  for ii:=1 to SpinEdit1.Value do
   begin
     LsQry.Append;
     LsQry.FieldByName('cType').AsString        :=cType;
     LsQry.FieldByName('dDate').AsDateTime      :=LsDate;
     LsQry.FieldByName('cBarCode').AsString     :=EditBarCode.Text+TranNumber(iNumber);
     LsQry.FieldByName('cYearSeason').AsString  :=LsYear;
     LsQry.FieldByName('cMarker').AsString      :=DataDm.Maker;
     LsQry.FieldByName('PCID').AsString         :=FrmMain.PCID;
     LsQry.FieldByName('cInvCode').AsString     :=cInv;
     LsQry.FieldByName('cInvName').AsString     :=Edit1.Text;
     LsQry.FieldByName('cInvBarCode').AsString  :=EditBarCode.Text;     
     LsQry.FieldByName('cFree1').AsString       :=dxButtonEdit2.Text;
     LsQry.FieldByName('cFree2').AsString       :=dxButtonEdit3.Text;
     LsQry.Post;
     Gauge1.Progress:=ii *100 div SpinEdit1.Value;
     iNumber:=iNumber+1;
   end;
  Gauge1.Visible:=False;
  if ExistSBarCode>0 then
     begin
       Application.MessageBox(Pchar('条码已存在,请重新生成!'),'信息',MB_OK+ MB_ICONINFORMATION);
       Abort;
     end;
  LsQry.Close;
  LsQry.SQL.Clear;
  LsQry.SQL.Add('insert into BarCode("cType","cBarCode","cYearSeason","dDate","cMarker")');
  LsQry.SQL.Add('select  cType,cBarCode,cYearSeason,dDate,cMarker');
  LsQry.SQL.Add('From LsBarData');
  LsQry.SQL.Add('Where (PCID ='''+FrmMain.PCID+''')');
  Try
    LsQry.ExecSQL;
    btnHistory.Visible:=True;
    Application.MessageBox(Pchar('自动生成条码清单成功!'),'信息',MB_OK+ MB_ICONINFORMATION);
 Except
    Application.MessageBox(Pchar('自动生成条码清单失败!'),'信息',MB_OK+ MB_ICONINFORMATION);
    Abort;
 end;

  LsQry.Close;
  LsQry.Connection:=DataDm.AdoConUfsoft;
  LsQry.SQL.Clear;
  LsQry.SQL.Add('insert into InventoryBarCodeSet("cInvCode","cInvName","cBarCode","cRuleId","cAssignId","cFree1","cFree2","bAbandon")');
  LsQry.SQL.Add('select DISTINCT cInvCode,cInvName,cInvBarCode,1,1,cFree1,cFree2,0');
  LsQry.SQL.Add('From LsBarData');
  LsQry.SQL.Add('Where (PCID ='''+FrmMain.PCID+''')');
//  LsQry.SQL.SaveToFile('c:\1.txt');
  Try
    LsQry.ExecSQL;
    btnHistory.Visible:=True;
    Application.MessageBox(Pchar('自动生成用友条码参照清单成功!'),'信息',MB_OK+ MB_ICONINFORMATION);
 Except
 end;

    LsQry.Destroy;
end;

procedure TFrmBarAuto.SetBar;
begin
 if RadioButton1.Checked then
    EditBarCode.Text:=cInv+cColor+cSize+cVen;
 if RadioButton2.Checked then
    EditBarCode.Text:=cInv+cColor+cVen;
end;

procedure TFrmBarAuto.RadioButton1Click(Sender: TObject);
begin
  inherited;
  SetBar;
end;

procedure TFrmBarAuto.RadioButton2Click(Sender: TObject);
begin
  inherited;
  SetBar;
end;

function TFrmBarAuto.ExistSBarCode: Integer;
Var LsQry:TADOQuery;
begin
  LsQry:=TADOQuery.Create(Self);
  LsQry.Connection:=DataDm.ConDataSys;
  LsQry.SQL.Add('select count(*) as iNum from LsBarData');
  LsQry.SQL.Add('where cBarCode in  (select cBarCode from barcode)');
  LsQry.SQL.Add('and (PCID ='''+FrmMain.PCID+''')');
  LsQry.Open;
  Result:=LsQry.FieldByName('iNum').AsInteger;
  LsQry.Destroy;
end;

procedure TFrmBarAuto.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  inherited;
  DataDm.DeletePCIDTabe(DataDm.ConDataSys,'LsBarData');
end;

procedure TFrmBarAuto.btnHistoryClick(Sender: TObject);
begin
  inherited;
  Application.CreateForm(TFrmPoPHisBarCode,FrmPoPHisBarCode);
  FrmPoPHisBarCode.RadioButton1.Checked:=True;
  FrmPoPHisBarCode.ShowModal;
  FrmPoPHisBarCode.Free;
  FrmPoPHisBarCode:=nil;
end;

end.

⌨️ 快捷键说明

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