📄 univta.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 + -