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

📄 unposau.pas

📁 超市管理系统
💻 PAS
📖 第 1 页 / 共 3 页
字号:

  //小数无条件四舍五入
  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 + -