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

📄 univta.pas

📁 DELPHI编写的商场收银POS机源代码
💻 PAS
字号:
unit UNIVTA;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Mask, DBCtrls, Grids, DBGrids, ComCtrls, Buttons, ToolWin,
  SPComm, Menus, ExtCtrls, Gauges, JLOOKUP, JEdit, Db, DBTables;

type
  TFMIVTA = class(TForm)
    MainMenu1: TMainMenu;
    F1: TMenuItem;
    Comm1: TComm;
    AREA_TOOL: TPanel;
    Label6: TLabel;
    Gauge: TGauge;
    Label8: TLabel;
    BCP_LIGHT: TShape;
    BTNCLR: TBitBtn;
    BTNBCP: TBitBtn;
    BTNQUT: TBitBtn;
    BTNINS: TBitBtn;
    GroupBox1: TGroupBox;
    LBBGENO: TLabel;
    LBIACNT: TLabel;
    IACNT: TJEDIT;
    BGENO: JLOOKUPBOX;
    GRID: TStringGrid;
    GroupBox2: TGroupBox;
    BTN_IVTA_DEL: TSpeedButton;
    Label4: TLabel;
    SpeedButton1: TSpeedButton;
    DBGrid1: TDBGrid;
    ED_TOTAL_CNT: TLabel;
    BitBtn4: TBitBtn;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    BTN_IVTA_DELS: TSpeedButton;
    ED_BGENO: JLOOKUPBOX;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    procedure FormCreate(Sender: TObject);
    procedure BTNQUTClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BGENOKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure F1Click(Sender: TObject);
    procedure F2Click(Sender: TObject);
    procedure F3Click(Sender: TObject);
    procedure F5Click(Sender: TObject);
    procedure F6Click(Sender: TObject);
    procedure F7Click(Sender: TObject);


    procedure BGENOExit(Sender: TObject);
    procedure BTNINSClick(Sender: TObject);
    procedure GRIDKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure GRIDDblClick(Sender: TObject);
    procedure BTNBCPClick(Sender: TObject);
    procedure BTNCLRClick(Sender: TObject);
    procedure Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    procedure BTN_IVTA_DELClick(Sender: TObject);
    procedure SpeedButton1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure IACNTKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BTN_IVTA_DELSClick(Sender: TObject);
  private
    { Private declarations }
    TOTAL_REC : INTEGER;
    PROCEDURE INSERT_TO_IVTA(T_BGENO, T_IACNT :STRING);
    PROCEDURE UPDATE_TO_IVTA(T_BGENO, T_IACNT :STRING);

    PROCEDURE ADD_TO_GRID;
    PROCEDURE REMOVE_TO_GRID;
    PROCEDURE CLEAR_TO_GRID;
  public
    { Public declarations }
  end;


var
  FMIVTA: TFMIVTA;

implementation

uses sysini, un_utl, fm_utl, DB_UTL, MAIND, URCOLLECT,
     UNIVTAD;

{$R *.DFM}

PROCEDURE TFMIVTA.INSERT_TO_IVTA(T_BGENO, T_IACNT :STRING);
BEGIN
  FMIVTAD.QINS.SQL.Clear;
  FMIVTAD.QINS.SQL.Add('INSERT INTO IVTA ');
  FMIVTAD.QINS.SQL.Add('(BGENO, IACNT, IADAT, IATME )');
  FMIVTAD.QINS.SQL.Add('VALUES (');
  FMIVTAD.QINS.SQL.Add(''''+T_BGENO+''',');
  FMIVTAD.QINS.SQL.Add('  '+INTTOSTR(STRTOINTDEF(T_IACNT,0))+'  ,');
  FMIVTAD.QINS.SQL.Add( _DT+DATETOSTR(DATE)+_DT +',');
  FMIVTAD.QINS.SQL.Add(''''+TIME_GET_24H(TIME)+''')');
  FMIVTAD.QINS.EXECSQL;
END;

PROCEDURE TFMIVTA.UPDATE_TO_IVTA(T_BGENO, T_IACNT :STRING);
BEGIN
  FMIVTAD.QINS.SQL.Clear;
  FMIVTAD.QINS.SQL.Add('UPDATE IVTA ');
  FMIVTAD.QINS.SQL.Add('SET ');
  FMIVTAD.QINS.SQL.Add(' IACNT = IACNT + '+ INTTOSTR(STRTOINTDEF(T_IACNT,0)) +',');
  FMIVTAD.QINS.SQL.Add(' IADAT = '+_DT+DATETOSTR(DATE)+_DT+',');
  FMIVTAD.QINS.SQL.Add(' IATME = '''+TIME_GET_24H(TIME)+''' ');
  FMIVTAD.QINS.SQL.Add('WHERE BGENO = '''+T_BGENO+'''');
  FMIVTAD.QINS.EXECSQL;
END;

PROCEDURE TFMIVTA.ADD_TO_GRID;
VAR I, J, T_CNT : INTEGER;
BEGIN
  BGENO.SetFocus;
  BGENO.SelectAll;

  IF BGENO.FIND_QUERY_IDNO(BGENO.TEXT) = '' THEN
     BEGIN
     SHOWMESSAGE('产品条形码输入错误, 找不到此产品!');
     EXIT;
     END;

  //算笔数
  FOR I := 1 TO GRID.ROWCOUNT DO
      BEGIN
      J := I;
      IF TRIM(GRID.Cells[1,I]) =  '' THEN BREAK;
      END;

  FOR I := (J+1) DOWNTO 2 DO
      BEGIN
      Grid.Cells[0,I] := Grid.Cells[0,I-1] ;
      Grid.Cells[1,I] := Grid.Cells[1,I-1] ;
      Grid.Cells[2,I] := Grid.Cells[2,I-1] ;
      Grid.Cells[3,I] := Grid.Cells[3,I-1] ;
      END;

  Grid.Cells[0,I] :=  INTTOSTR(TOTAL_REC);     //('  序号');
  Grid.Cells[1,I] :=  BGENO.TEXT;     //('  条 码');
  Grid.Cells[2,I] :=  BGENO.T_LABEL.TEXT;  //  项 目 品 名');
  Grid.Cells[3,I] :=  IACNT.TEXT;  //('数量');

  INC(TOTAL_REC);

  //算总数量
  T_CNT := 0;
  FOR I := 1 TO GRID.ROWCOUNT DO
      BEGIN
      T_CNT := T_CNT+STRTOINTDEF(GRID.Cells[3,I],0);
      IF TRIM(GRID.Cells[1,I]) =  '' THEN BREAK;
      END;

  ED_TOTAL_CNT.Caption := '总数量 ' + INTTOSTR(T_CNT) + ' 笔';
  BGENO.TEXT           := '';
END;

PROCEDURE TFMIVTA.REMOVE_TO_GRID;
VAR I , J :INTEGER;
BEGIN
  DEC(TOTAL_REC);

  FOR I := 1 TO GRID.ROWCOUNT DO
      BEGIN
      IF I >= Grid.Row THEN
        BEGIN
        Grid.Cells[0,I] := Grid.Cells[0,I+1] ;
        Grid.Cells[1,I] := Grid.Cells[1,I+1] ;
        Grid.Cells[2,I] := Grid.Cells[2,I+1] ;
        Grid.Cells[3,I] := Grid.Cells[3,I+1] ;
        END;
      IF TRIM(GRID.Cells[1,I+1]) =  '' THEN BREAK;
      END;

  //整理序号
  FOR I := 1 TO GRID.ROWCOUNT DO
      BEGIN
      GRID.Cells[0,I] := INTTOSTR(TOTAL_REC - I + 1);
      IF TRIM(GRID.Cells[1,I+1]) =  '' THEN BREAK;
      END;

  Grid.Row := 1;
END;

PROCEDURE TFMIVTA.CLEAR_TO_GRID;
VAR I : INTEGER;
BEGIN
  DEC(TOTAL_REC);
  FOR I := 1 TO GRID.ROWCOUNT DO Grid.Rows[I].Clear;
  Grid.Row := 1;
END;

procedure TFMIVTA.FormCreate(Sender: TObject);
begin
  IF FormExists('FMIVTAD')=FALSE THEN Application.CreateForm(TFMIVTAD,  FMIVTAD  );

  TRY
    FMIVTAD.Database.Connected := TRUE; // 连接数据库
  EXCEPT
    SHOWMESSAGE('数据库无法连接, 请设置好盘点数据库再重新激活!');
    CLOSE;
  END;

  FMIVTAD.UIVTA.DeleteSQL.CLEAR;
  FMIVTAD.UIVTA.DeleteSQL.Add('DELETE FROM IVTA ');
  FMIVTAD.UIVTA.DeleteSQL.Add('WHERE BGENO = :OLD_BGENO');

  Grid.Cols[0].Add('NO');
  Grid.Cols[1].Add(' 产品条形码 ');
  Grid.Cols[2].Add('     项 目 品 名');
  Grid.Cols[3].Add('数量');

  FMIVTAD.QIVTA.CLOSE;
  FMIVTAD.QIVTA.OPEN;

  TOTAL_REC := 0;

  IF COLLECT_PORT = 0 THEN COMM1.CommName := 'COM1';
  IF COLLECT_PORT = 1 THEN COMM1.CommName := 'COM2';
  IF COLLECT_PORT = 2 THEN COMM1.CommName := 'COM3';
  IF COLLECT_PORT = 3 THEN COMM1.CommName := 'COM4';

  TRY
    _BCP_DATA := '';
    IF TEST_OPEN_FILE(COMM1.CommName) = TRUE THEN COMM1.StartComm;
  EXCEPT
    SHOWMESSAGE('无法打开通讯连接端口, 请检查设置再重新进入程序!');
  END;

end;

procedure TFMIVTA.FormShow(Sender: TObject);
begin
  BGENO.SetFocus;
end;

procedure TFMIVTA.BTNQUTClick(Sender: TObject);
begin
  close;
end;

procedure TFMIVTA.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  TRY
    COMM1.StopComm;
  FINALLY
    FMIVTAD.Free;
    FMIVTA.RELEASE;
  END;
end;

procedure TFMIVTA.BGENOKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  IF KEY = 13 THEN
     BEGIN
     IACNT.SelectAll;
     IACNT.SetFocus;
     END;
end;

procedure TFMIVTA.IACNTKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  IF KEY = 13 THEN ADD_TO_GRID;
end;

procedure TFMIVTA.F1Click(Sender: TObject);
begin
  ADD_TO_GRID;
end;

procedure TFMIVTA.BGENOExit(Sender: TObject);
begin
  IF BGENO.FIND_QUERY_IDNO(BGENO.TEXT) = '' THEN
     BEGIN
     SHOWMESSAGE('产品条形码输入错误, 找不到此产品!');
     BGENO.SetFocus;
     BGENO.SelectAll;
     EXIT;
     END;
end;

procedure TFMIVTA.GRIDKeyDown(Sender: TObject; var Key: Word;  Shift: TShiftState);
begin
  IF KEY = 13 THEN  REMOVE_TO_GRID;
end;

procedure TFMIVTA.GRIDDblClick(Sender: TObject);
begin
  REMOVE_TO_GRID;
end;

procedure TFMIVTA.BitBtn1Click(Sender: TObject);
begin
  REMOVE_TO_GRID;
end;

procedure TFMIVTA.BitBtn2Click(Sender: TObject);
begin
  CLEAR_TO_GRID;
end;

procedure TFMIVTA.BTNINSClick(Sender: TObject);
VAR T_RIENO : STRING;
    I : INTEGER;
    QDBCHECK : TQUERY;
begin
  //算笔数
  FOR I := 1 TO GRID.ROWCOUNT DO
    BEGIN
    IF TRIM(GRID.Cells[1,I]) =  '' THEN BREAK;
    Gauge.MaxValue := I;
    END;

  TRY
    QDBCHECK := TQUERY.Create(APPLICATION.Owner);
    QDBCHECK.DatabaseName := 'DB_IVTT';

    FOR I := 1 TO GRID.ROWCOUNT DO
      BEGIN
      IF TRIM(GRID.Cells[1,I]) =  '' THEN BREAK;
      Gauge.Progress := I;

      QDBCHECK.SQL.Clear;
      QDBCHECK.SQL.Add('SELECT COUNT(*) FROM IVTA');
      QDBCHECK.SQL.Add('WHERE BGENO = '''+ Grid.Cells[1,I] +'''');
      QDBCHECK.Close;
      QDBCHECK.Open;

      IF QDBCHECK.Fields[0].AsInteger <= 0 THEN
         BEGIN
         INSERT_TO_IVTA(Grid.Cells[1,I],Grid.Cells[3,I]);
         END ELSE BEGIN
         UPDATE_TO_IVTA(Grid.Cells[1,I],Grid.Cells[3,I]);
         END;

      END;

  FINALLY
    QDBCHECK.Free;
  END;

  //CLEAR
  CLEAR_TO_GRID;

  TOTAL_REC := 0;
  Gauge.Progress := 0;

  FMIVTAD.QIVTA.SQL.CLEAR;
  FMIVTAD.QIVTA.SQL.ADD('SELECT * FROM IVTA');
  FMIVTAD.QIVTA.SQL.ADD('ORDER BY IADAT DESC, IATME');
  FMIVTAD.QIVTA.CLOSE;
  FMIVTAD.QIVTA.OPEN;
end;

procedure TFMIVTA.BTNBCPClick(Sender: TObject);
VAR I : INTEGER;
    T_LIST : TSTRINGS;
    T_BGENO, T_QTY , STR: STRING;
    L_BGENO: INTEGER;
begin
  T_LIST := TSTRINGLIST.Create;
  T_LIST.Text := _BCP_DATA;
  L_BGENO := STRTOINTDEF(UNSETREAD('SYSSET','SET_BGENO'),13);
  
  FOR I := 0 TO T_LIST.Count -1 DO
    BEGIN
    STR := T_LIST.Strings[I];
    IF TRIM(STR) = '' THEN CONTINUE;   //空白跳过

    T_BGENO := TRIM(COPY(STR,1,L_BGENO  ));
    T_QTY   := TRIM(COPY(STR,L_BGENO+1,5));
    T_QTY   := INTTOSTR(STRTOINTDEF(T_QTY,1));

    BGENO.Text := T_BGENO;
    IACNT.Text := T_QTY;
    ADD_TO_GRID;
    END;
end;

procedure TFMIVTA.BTNCLRClick(Sender: TObject);
VAR N : INTEGER;
begin
  BCP_LIGHT.Visible := FALSE;
  _BCP_DATA := '';

  FOR N := 1 TO GRID.RowCount -1 DO
    BEGIN
    GRID.Rows[N].Text := '';
    IF (TRIM(GRID.Rows[N  ].Text) = '') AND (TRIM(GRID.Rows[N+1].Text) = '') AND
       (TRIM(GRID.Rows[N+2].Text) = '') THEN BREAK;
    END;
end;

procedure TFMIVTA.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;  BufferLength: Word);
BEGIN
  _BCP_DATA := _BCP_DATA + PCHAR(BUFFER);
  BCP_LIGHT.Visible := TRUE;

  IF BCP_LIGHT.Brush.Color <> CLBLUE THEN
     BCP_LIGHT.Brush.Color := CLBLUE ELSE
     BCP_LIGHT.Brush.Color := CLRED  ;

  IF POS(#26,_BCP_DATA) >= 1 THEN
     SHOWMESSAGE('传输完成!'+#10#13+'下次传输时, 请先清除资料,请勿连续传两次!');
end;

procedure TFMIVTA.BTN_IVTA_DELClick(Sender: TObject);
begin
  FMIVTAD.QINS.SQL.CLEAR;
  FMIVTAD.QINS.SQL.ADD('DELETE  FROM IVTA');
  FMIVTAD.QINS.ExecSQL;

  FMIVTAD.QIVTA.CLOSE;
  FMIVTAD.QIVTA.OPEN;
end;

procedure TFMIVTA.BTN_IVTA_DELSClick(Sender: TObject);
begin
  FMIVTAD.QIVTA.Delete;
  FM_DB_QUERY_UPDATE(FMMAIND.DATABASE,FMIVTAD.QIVTA);
end;

procedure TFMIVTA.SpeedButton1Click(Sender: TObject);
begin
  FMIVTAD.QIVTA.First;
  WHILE NOT FMIVTAD.QIVTA.EOF DO
    BEGIN
    IF ED_BGENO.Text = FMIVTAD.QIVTA.FieldByName('BGENO').AsString THEN BREAK;
    FMIVTAD.QIVTA.NEXT;
    END;
end;

procedure TFMIVTA.F2Click(Sender: TObject);
begin
  REMOVE_TO_GRID;
end;

procedure TFMIVTA.F3Click(Sender: TObject);
begin
  CLEAR_TO_GRID;
end;

procedure TFMIVTA.F5Click(Sender: TObject);
begin
if FMIVTAD.QIVTA.IsEmpty=false then begin
  FMIVTAD.QIVTA.Delete;
  FM_DB_QUERY_UPDATE(FMMAIND.DATABASE,FMIVTAD.QIVTA);
  end;
  end;

procedure TFMIVTA.F6Click(Sender: TObject);
begin
  FMIVTAD.QINS.SQL.CLEAR;
  FMIVTAD.QINS.SQL.ADD('DELETE  FROM IVTA');
  FMIVTAD.QINS.ExecSQL;

  FMIVTAD.QIVTA.CLOSE;
  FMIVTAD.QIVTA.OPEN;
end;

procedure TFMIVTA.F7Click(Sender: TObject);
VAR T_RIENO : STRING;
    I : INTEGER;
    QDBCHECK : TQUERY;
begin
  //算笔数
  FOR I := 1 TO GRID.ROWCOUNT DO
    BEGIN
    IF TRIM(GRID.Cells[1,I]) =  '' THEN BREAK;
    Gauge.MaxValue := I;
    END;

  TRY
    QDBCHECK := TQUERY.Create(APPLICATION.Owner);
    QDBCHECK.DatabaseName := 'DB_IVTT';

    FOR I := 1 TO GRID.ROWCOUNT DO
      BEGIN
      IF TRIM(GRID.Cells[1,I]) =  '' THEN BREAK;
      Gauge.Progress := I;

      QDBCHECK.SQL.Clear;
      QDBCHECK.SQL.Add('SELECT COUNT(*) FROM IVTA');
      QDBCHECK.SQL.Add('WHERE BGENO = '''+ Grid.Cells[1,I] +'''');
      QDBCHECK.Close;
      QDBCHECK.Open;

      IF QDBCHECK.Fields[0].AsInteger <= 0 THEN
         BEGIN
         INSERT_TO_IVTA(Grid.Cells[1,I],Grid.Cells[3,I]);
         END ELSE BEGIN
         UPDATE_TO_IVTA(Grid.Cells[1,I],Grid.Cells[3,I]);
         END;

      END;

  FINALLY
    QDBCHECK.Free;
  END;

  //CLEAR
  CLEAR_TO_GRID;

  TOTAL_REC := 0;
  Gauge.Progress := 0;

  FMIVTAD.QIVTA.SQL.CLEAR;
  FMIVTAD.QIVTA.SQL.ADD('SELECT * FROM IVTA');
  FMIVTAD.QIVTA.SQL.ADD('ORDER BY IADAT DESC, IATME');
  FMIVTAD.QIVTA.CLOSE;
  FMIVTAD.QIVTA.OPEN;
end;

end.

⌨️ 快捷键说明

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