📄 unposau.pas
字号:
//小数无条件四舍五入
IF _TB_AUTO_ROUND = TRUE THEN _TB_BG_TPRICE := FLOATTOINT_ROUND( _TB_DISC_PERCENT *_TB_BG_BGPST )
ELSE _TB_BG_TPRICE := FLOATTOINT( _TB_DISC_PERCENT *_TB_BG_BGPST );
END;
PROCEDURE GRID_ADD;
VAR I , J:INTEGER;
BEGIN
WITH FMPOSA DO
BEGIN
IF TRIM(_TB_BG_BGENO) = '' THEN EXIT;
//算笔数
FOR I := 1 TO 200 DO
BEGIN
J := I;
IF TRIM(OUT_GRID.Cells[1,I]) = '' THEN BREAK;
END;
FOR I := (J+1) DOWNTO 1 DO OUT_GRID.Rows[I].Text := OUT_GRID.Rows[I-1].Text;
OUT_GRID.Cells[1,1] := _TB_BG_BGENO;
OUT_GRID.Cells[2,1] := _TB_BG_BGNAM;
OUT_GRID.Cells[3,1] := INTTOSTR (_TB_BG_CNT ); //此笔数量
OUT_GRID.Cells[4,1] := FLOATTOSTR(_TB_BG_SPRICE); //此笔单价
OUT_GRID.Cells[5,1] := FLOATTOSTR(_TB_BG_TPRICE); //此笔单价
OUT_GRID.Cells[6,1] := INTTOSTR (_TB_BG_BGQTN ); //库存数量
OUT_GRID.Cells[7,1] := _TB_BG_BGKIN ; //分类
END;
END;
FUNCTION RE_INPUT(T_BGENO:STRING):BOOLEAN;
VAR I , J :INTEGER;
T_QTY :INTEGER;
T_PRICE : REAL;
BEGIN
WITH FMPOSA DO
BEGIN
//重复刷, 合并成一笔==================================================
IF _TB_RE_INPUT = FALSE THEN
BEGIN //重复刷, 不 自动合并成一笔
FOR I := 1 TO 200 DO
BEGIN
IF (OUT_GRID.Cells[1,I] = T_BGENO) THEN
BEGIN
CASE MessageDlg('此产品已刷过, 是否继续存入? '+#10#13+
#10#13+'按 YES 合并成一笔'+
#10#13+'按 NO 分开成两笔'+
#10#13+'按 ESC 取消输入'
,mtConfirmation,[mbYes,mbNo,mbCancel],0) OF
mrYES :
BEGIN
T_QTY := STRTOINTDEF (OUT_GRID.Cells[3,I],1) + 1;
T_PRICE := STRTOFLOATDEF(OUT_GRID.Cells[4,I],0);
OUT_GRID.Cells[3,I] := INTTOSTR(STRTOINTDEF(OUT_GRID.Cells[3,I],1)+1);
OUT_GRID.Cells[5,I] := FLOATTOSTR(T_QTY * T_PRICE);
_TB_DSP_CHANGED:= FALSE; //已更动, 客显要更新
RESULT := TRUE;
ED_INPUT_SETFOCUS;
EXIT;
END;
mrNO :
BEGIN
ED_INPUT_SETFOCUS;
RESULT := FALSE;
BREAK;
END;
ELSE BEGIN
ED_INPUT_SETFOCUS;
RESULT := FALSE;
EXIT;
END;
END; //CASE
END; //IF
IF TRIM(OUT_GRID.Cells[1,I+1]) = '' THEN BREAK;
END;
END ELSE BEGIN //重复刷, 自动合并成一笔
FOR I := 1 TO 200 DO
BEGIN
IF (OUT_GRID.Cells[1,I] = T_BGENO) THEN
BEGIN
T_QTY := STRTOINTDEF (OUT_GRID.Cells[3,I],1) + 1;
T_PRICE := STRTOFLOATDEF(OUT_GRID.Cells[4,I],0);
OUT_GRID.Cells[3,I] := INTTOSTR(STRTOINTDEF(OUT_GRID.Cells[3,I],1)+1);
OUT_GRID.Cells[5,I] := FLOATTOSTR(T_QTY * T_PRICE);
_TB_DSP_CHANGED:= FALSE; //已更动, 客显要更新
RESULT := TRUE;
ED_INPUT_SETFOCUS;
EXIT;
END; //IF
IF TRIM(OUT_GRID.Cells[1,I+1]) = '' THEN BREAK;
END; // FOR
END; // IF
//重复刷, 合并成一笔==================================================
END;
END;
PROCEDURE FINISHI; //完成结帐
VAR FINISHI_REC, I : INTEGER;
T_BGENO, T_BGNAM, T_BGCNT, T_BGCOS, T_BGCOT, T_BGKIN, T_PAIPN : STRING; //是否打印发票
BEGIN
//发票机, 打印位置从一开始
INVOICE_COUNTER := 0;
_TB_INV_PAGE := 0;
IF ( _TB_PRN_PRINTING = TRUE) THEN FINISHI_OPEN_CASHBOX; //是否打印发票 - 开钱柜
// 检查要结帐的共有几笔 =====================================================
FOR I := 1 TO 200 DO
BEGIN
FINISHI_REC := I;
IF TRIM(FMPOSA.OUT_GRID.Cells[1,I+1]) = '' THEN BREAK;
END;
FMPOSAF1.Gauge.MaxValue := _TB_TOTAL_REC + 5;
FINISHI_DSP_TOTAL; FMPOSAF1.Gauge.AddProgress(1); DELAY(5); //完成结帐_ 价格显示
IF (_TB_PRACTICE_MODE <= 0) THEN //练习模式
BEGIN
FMPOSAF1.Gauge_SUB.MaxValue := FINISHI_REC;
FINISHI_SAVE_POSA; FMPOSAF1.Gauge.AddProgress(1); DELAY(5); //完成结帐_ POSA 主表
FINISHI_SAVE_POSB; FMPOSAF1.Gauge.AddProgress(1); DELAY(5); //完成结帐_ POSB 明细
FINISHI_SAVE_POSG; FMPOSAF1.Gauge.AddProgress(1); DELAY(5); //完成结帐_ POSG 礼券
END;
IF (_TB_PRACTICE_MODE <= 0) OR (_TB_PRACTICE_MODE = 1) THEN //练习模式
IF _TB_PRN_PRINTING = TRUE THEN
BEGIN
FMPOSAF1.Gauge_SUB.MaxValue := FINISHI_REC;
FINISHI_PRN_IVOICE_TITLE; //完成结帐_ 打印发票 开头
// 检查要结帐的共有几笔 =====================================================
FOR I := 1 TO FMPOSAF1.Gauge_SUB.MaxValue DO
BEGIN
FMPOSAF1.Gauge_SUB.AddProgress(1);
T_BGENO := FMPOSA.OUT_GRID.Cells[1,I];//产品条形码
T_BGNAM := FMPOSA.OUT_GRID.Cells[2,I];//产品名称
T_BGCNT := FMPOSA.OUT_GRID.Cells[3,I];//产品数量
T_BGCOS := FMPOSA.OUT_GRID.Cells[4,I];//产品单价
T_BGCOT := FMPOSA.OUT_GRID.Cells[5,I];//产品总价
FINISHI_PRN_IVOICE_TITLE; //完成结帐_ 打印发票 开头
FINISHI_PRN_IVOICE_CONTENT(T_BGENO,T_BGNAM,T_BGCNT,T_BGCOS,T_BGCOT); //完成结帐_ 打印发票 项目
IF TRIM(FMPOSA.OUT_GRID.Cells[1,I+1]) = '' THEN BREAK;
END;
FINISHI_PRN_IVOICE_END; //完成结帐_ 打印发票 结尾
END;
FMPOSAF1.Gauge.AddProgress(1); DELAY(5);
END;
PROCEDURE FINISHI_SAVE_POSA; //完成结帐_ POSA 主表
VAR QCHECK : TQUERY;
T_PACDT : TDATETIME;
BEGIN
//读取销售编号 //此次结帐编号
_TB_PAENO := TABLEFINDMAXCNT2('POSA','PAENO', EDATE_TO_CDATE(DATETOSTR(_TB_INSERT_DATE)) , 5, 1 );
IF CHECK_CDATE(_TB_CARD_PACDT, FALSE) = TRUE THEN
T_PACDT := STRTODATE(CDATE_TO_EDATE(_TB_CARD_PACDT)); //信用卡到期日
TRY
QCHECK := TQUERY.Create(APPLICATION.Owner);
QCHECK.DatabaseName := 'MAIN';
QCHECK.SQL.CLEAR;
QCHECK.SQL.Add('INSERT INTO POSA');
QCHECK.SQL.Add(' ( PAENO, PAIDE, BMENO, BNENO, PAIPN, PAIVO, PACIV, PADAT, PATME, PACNT, PACOT, PACOG, ');
QCHECK.SQL.Add(' PACNO, PACDT, PACNA, PACKD, PABCK, PABCN, PACPD, PAWEK ) ');
QCHECK.SQL.Add(' VALUES ');
QCHECK.SQL.Add(' (:PAENO,:PAIDE,:BMENO,:BNENO,:PAIPN,:PAIVO,:PACIV,:PADAT,:PATME,:PACNT,:PACOT,:PACOG, ');
QCHECK.SQL.Add(' :PACNO,:PACDT,:PACNA,:PACKD,:PABCK,:PABCN,:PACPD,:PAWEK ) ');
QCHECK.ParamByName('PAENO').AsString := _TB_PAENO; //销售编号
QCHECK.ParamByName('PAIDE').AsString := _TB_NUMBER; //柜台号码
QCHECK.ParamByName('BMENO').AsString := _TB_BMEM_BMENO; //会员编号
QCHECK.ParamByName('BNENO').AsString := _TB_USER_NUMBER; //员工编号
QCHECK.ParamByName('PAIPN').AsBoolean := _TB_PRN_PRINTING; //是否打印发票
QCHECK.ParamByName('PAIVO').AsString := _TB_INV_NO; //发票号码
QCHECK.ParamByName('PACIV').AsString := _TB_PACIV; //统一编号
QCHECK.ParamByName('PADAT').AsDatetime := _TB_INSERT_DATE; //销售日期
QCHECK.ParamByName('PATME').AsString := TIME_GET_24H(TIME); //销售时间
QCHECK.ParamByName('PACNT').AsFloat := _TB_TOTAL_QTY; //产品数量
QCHECK.ParamByName('PACOT').AsFloat := _TB_TOTAL_PRICE; //产品总价
QCHECK.ParamByName('PACOG').AsFloat := _TB_TOTAL_CASH; //收入金额
QCHECK.ParamByName('PACNO').AsString := _TB_CARD_PACNO; //信用卡号
QCHECK.ParamByName('PACDT').AsDatetime := T_PACDT; //信用卡到期日
QCHECK.ParamByName('PACNA').AsFloat := _TB_CARD_PACNA; //信用卡金额
QCHECK.ParamByName('PACKD').AsString := _TB_CARD_PACKD; //信用卡类别
QCHECK.ParamByName('PABCK').AsBoolean := False; //发票作废
QCHECK.ParamByName('PABCN').AsBoolean := False; //资料回存
QCHECK.ParamByName('PACPD').AsBoolean := False; //信用卡付费
QCHECK.ParamByName('PAWEK').AsString := INTTOSTR(DayOfWeek(_TB_INSERT_DATE)); //星期几
TRY QCHECK.ExecSQL; except SHOWMESSAGE('POSA 无法新增!'); end;
//更新会员消费
IF TRIM(_TB_BMEM_BMENO) <> '' THEN
BEGIN
QCHECK.SQL.Clear;
QCHECK.SQL.ADD('UPDATE BMEM SET');
QCHECK.SQL.ADD(' BMBYR = BMBYR + '+FLOATTOSTR(_TB_TOTAL_PRICE)+',');
QCHECK.SQL.ADD(' BMBTO = BMBTO + '+FLOATTOSTR(_TB_TOTAL_PRICE)+',');
QCHECK.SQL.ADD(' BMBPO = BMBPO + '+FLOATTOSTR(_TB_TOTAL_PRICE)+'/'+INTTOSTR(_TB_SET_BMBPO)+',');
QCHECK.SQL.ADD(' BMBTM = BMBTM + 1 ,');
QCHECK.SQL.ADD(' BMBDT = '+_DT+ DATETOSTR(_TB_INSERT_DATE) +_DT);
QCHECK.SQL.ADD(' WHERE BMENO = '''+_TB_BMEM_BMENO+'''');
try QCHECK.ExecSQL; except SHOWMESSAGE('BMEM 无法更新!'); end;
END;
//更新业务业绩
IF TRIM(_TB_USER_NUMBER) <> '' THEN
BEGIN
QCHECK.SQL.Clear;
QCHECK.SQL.ADD('UPDATE BSAL SET');
QCHECK.SQL.ADD(' BASYR = BASYR + '+FLOATTOSTR(_TB_TOTAL_PRICE)+',');
QCHECK.SQL.ADD(' BASTO = BASTO + '+FLOATTOSTR(_TB_TOTAL_PRICE)+',');
QCHECK.SQL.ADD(' BASDT = '+_DT+ DATETOSTR(_TB_INSERT_DATE) +_DT);
QCHECK.SQL.ADD(' WHERE BAENO = '''+_TB_USER_NUMBER+'''');
try QCHECK.ExecSQL; except SHOWMESSAGE('BSAL 无法更新!'); end;
END;
FINALLY
QCHECK.Free;
END;
END;
PROCEDURE FINISHI_SAVE_POSB; //完成结帐_ POSB 明细
VAR QCHECK, QUPD : TQUERY;
I : INTEGER;
T_PBENO, T_BGENO, T_BGNAM, T_BGCNT, T_BGCOS, T_BGCOT, T_BGKIN, T_BGQTN :STRING;
BEGIN
TRY
QCHECK := TQUERY.Create(APPLICATION.Owner);
QCHECK.DatabaseName := 'MAIN';
QUPD := TQUERY.Create(APPLICATION.Owner);
QUPD .DatabaseName := 'MAIN';
QCHECK.SQL.CLEAR;
QCHECK.SQL.Add('INSERT INTO POSB');
QCHECK.SQL.Add(' ( PAENO, PBENO, BGQTN, BGENO, BGCNT, BGCOS, BGCOT ) ');
QCHECK.SQL.Add(' VALUES ');
QCHECK.SQL.Add(' (:PAENO,:PBENO,:BGQTN,:BGENO,:BGCNT,:BGCOS,:BGCOT ) ');
//存入数据库
WITH FMPOSA DO
BEGIN
FOR I := 1 TO 200 DO
BEGIN
FMPOSAF1.Gauge.AddProgress(1);
T_PBENO := TABLEFINDMAXITM('POSB','PAENO',_TB_PAENO,'PBENO',3,1);//销售ITEM
T_BGENO := OUT_GRID.Cells[1,I];//产品条形码
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -