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

📄 unit2.pas

📁 PosEasy收银系统源码,Pos机前后台管理代码
💻 PAS
📖 第 1 页 / 共 5 页
字号:
      //当输入占用时,
      //告诉控件读入整个缓冲区。
      mainform.MSComm1.InputLen := 0;
      //打开端口。
      mainform.MSComm1.PortOpen := True;
      //将 attention 命令送到调制解调器。
      mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($41) + '       THANKS'+Chr(13);
      mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($42) + 'TOTAL     '+edit2.Text+ Chr(13); //确保
      //关闭串行端口。
      mainform.MSComm1.PortOpen := False;
    end;
   end
   else
   begin
    tmpaction:='折让';
    mainform.SetFocus;
   end;
  end;
  end;

 if key='+' then        //收款
  begin
   if (mainform.Edit1.Text='') or (strtofloat(mainform.edit1.text)=0) then
    begin
    messagebox(handle,'还没有交易数据!','确认',MB_OK+MB_ICONINFORMATION);
    key:=chr(0);
    exit;
    end;
    application.CreateForm(Tform3,form3);
    form3.showmodal;
  end;
 if key=']' then        //售货员
  begin
   application.CreateForm(Tformsaler,formsaler);
   formsaler.showmodal;
  end;

 if key='[' then        //运费
  begin
   if Messagebox(handle,'确实是运费吗?','提示',MB_OKCANCEL+MB_ICONINFORMATION)=IDOK  then
   begin
    if row>=1 then
      begin

         //事物开始
         form1.database1.StartTransaction;
         try
         //取得pos机编号
          tmpposcode:=trim(mainform.Labelposcode.text);
          with mainform.queryInsert do
           begin
            tmpsql:='select max(sno) as Msno from trade';// where clerk=''123''';

            close;
            sql.Clear;
            sql.Add(tmpsql);
            prepare;
            try
             open;
            except
             //messagebox(mainform.handle,'数据库连接失败','错误',MB_OK+MB_ICONERROR);
             exit;
            end;
           end;
          if mainform.queryInsert['msno']=null then
            sno:=0
          else
            sno:=mainform.queryInsert['msno']+1;

           tmpdate:=formatdatetime('yyyy-mm-dd',now);
           tmptime:=formatdatetime('hh:nn:ss',now);
           tmpclerk:=mainform.editclerk.text;
           tmpbkclerk:=mainform.editbkclerk.text;
           tmpsaler:=mainform.editsaler.text;
           for i:=0 to row-1 do
            begin
             with mainform.queryInsert do
              begin
               tmpsql:='Insert Into trade(op,ecr,clerk,tmpclerk,saler,saledate,saletime,sno,orgtotal,total,totaldis,totalsub,';
               tmpsql:=tmpsql+'pay1,pay2,pay3,pay4,pay5,pay6,change,dept,code,name,discount,num,price,amount,sub,imark)';
               tmpsql:=tmpsql+' values(''G'','''+tmpposcode+''','''+tmpclerk+''','''+tmpbkclerk+''','''+tmpsaler+''','''+tmpdate+''','''+tmptime+''',';
               tmpsql:=tmpsql+''''+inttostr(sno)+''',0,0,0,0,0,0,0,0,0,0,0,'''+mainform.stringGrid1.cells[2,i]+''','''+mainform.stringGrid1.cells[0,i]+''','''+mainform.stringGrid1.cells[1,i]+''',';
               tmpsql:=tmpsql+''''+mainform.stringGrid1.cells[5,i]+''',:gcount,';
               tmpsql:=tmpsql+':tmpdj,:tmpje,:tmpzr,''0'')';

               close;
               sql.clear;
               sql.add(tmpsql);
               parambyname('gcount').asinteger:=-strtoint(mainform.stringGrid1.cells[4,i]);
               parambyname('tmpdj').asfloat:= strtofloat(mainform.stringGrid1.cells[3,i]);
               parambyname('tmpje').asfloat:= -strtofloat(mainform.stringGrid1.cells[6,i]);
               parambyname('tmpzr').asfloat:= strtofloat(mainform.stringGrid1.cells[7,i]);
               prepare;

               execsql;

              end;
           end;

         with mainform.queryInsert do
           begin

             tmpsql:='Insert Into trade(op,ecr,clerk,tmpclerk,saler,saledate,saletime,sno,orgtotal,total,totaldis,totalsub,';
             tmpsql:=tmpsql+'pay1,pay2,pay3,pay4,pay5,pay6,change,dept,code,name,discount,num,price,amount,sub,imark)';
             tmpsql:=tmpsql+' values(''T'','''+tmpposcode+''','''+tmpclerk+''','''+tmpbkclerk+''','''+tmpsaler+''','''+tmpdate+''','''+tmptime+''',';
             tmpsql:=tmpsql+''''+inttostr(sno)+''',:ysje,:xjje,0,0,:pay1,:pay2,:pay3,:pay4,:pay5,:pay6,:change,''T'',''T'',';
             tmpsql:=tmpsql+'''T'',0,0,';
             tmpsql:=tmpsql+'0,0,0,''0'')';
             close;
             sql.clear;
             sql.add(tmpsql);
             parambyname('ysje').asfloat:= -strtofloat(edit1.text);
             parambyname('xjje').asfloat:= -strtofloat(edit2.text);


             parambyname('pay1').asfloat:= -strtofloat(edit2.text);
             parambyname('pay2').asfloat:= 0;
             parambyname('pay3').asfloat:= 0;
             parambyname('pay4').asfloat:= 0;
             parambyname('pay5').asfloat:= 0;           //店内票据
             parambyname('pay6').asfloat:= 0;           //挂帐

             parambyname('change').asfloat:=strtofloat(edit2.text);

             prepare;

             execsql;

           end;
       //事物提交

        form1.database1.Commit;
      except
        form1.database1.Rollback;
        messagebox(mainform.handle,'现在转入单机模式','提示',MB_OK);
        mainform.Labelstate.Caption:='单机';
        form1.database1.Close;
        form1.database1.AliasName:='curposdata';
        form1.database1.Open;
        exit;
      end;


      //打印小票
      try
       printer.BeginDoc;
      { //开钱箱
       printer.canvas.Font.name:='control';
       printer.Canvas.Font.Size:=10;
       printer.Canvas.TextOut(10,10,'A');
      }
       //打印标题
       tmpposcode:=mainform.Labelposcode.text;
       tmpdate:=formatdatetime('yyyy-mm-dd hh:mm',now);
       printer.canvas.Font.name:='宋体 4.7cpi';
       printer.Canvas.Font.Size:=16;
       printer.Canvas.TextOut(80,10,'运费收据');  //swordzj
       printer.canvas.Font.name:='宋体 8.9cpi';
       printer.Canvas.Font.Size:=8;
       printer.Canvas.TextOut(5,30,'收款机:'+tmpposcode+'    '+'收款员:'+mainform.editclerk.Text);  //打印pos机编号呵日期
       printer.Canvas.TextOut(5,45,'日期:'+tmpdate+'   ');
       printer.Canvas.TextOut(10,60,'编码   品名    单价    数量    金额');
       //打印横线
       printer.Canvas.TextOut(10,70,'---------------------------');
       //打印数据
       for i:=0 to row-1 do
       begin
        printer.Canvas.TextOut(0,80+i*15,mainform.stringGrid1.cells[0,i]+' '+mainform.stringGrid1.cells[1,i]+' '+mainform.stringGrid1.cells[3,i]+'   '+mainform.stringGrid1.cells[4,i]+'   '+mainform.stringGrid1.cells[6,i]);
       end;
       //打印横线
       printer.Canvas.TextOut(10,row*15+85,'---------------------------');
       //打印总计
       tmpreceive:='0';
       tmpback:=edit1.Text;

       printer.Canvas.TextOut(20,row*15+100,'运费金额:'+tmpback);
       //printer.Canvas.textOut(20,row*15+110,'实收金额:'+tmpreceive+'  '+'找零:'+tmpback);


       //打印欢迎词
       printer.Canvas.TextOut(50,row*15+130,'谢谢惠顾  欢迎再来!');
       printer.Canvas.TextOut(50,row*15+140,' ');
       printer.Canvas.TextOut(50,row*15+150,' ');
       printer.Canvas.TextOut(50,row*15+160,' ');
       printer.Canvas.TextOut(50,row*15+170,' ');
       printer.Canvas.TextOut(50,row*15+180,' ');
       printer.Canvas.TextOut(50,row*15+190,' ');
       printer.Canvas.TextOut(50,row*15+200,' ');
       printer.Canvas.TextOut(50,row*15+210,' ');
       printer.Canvas.TextOut(50,row*15+220,' ');
       printer.EndDoc;

      except
       printer.Abort;
       exit;
      end;



     //清除数据
      for i:=0 to row-1 do
      for j:=0 to 7 do
       begin
        mainform.stringGrid1.Cells[j,i]:='';
       end;
        mainform.edit1.text:='';
        mainform.edit2.text:='';
        mainform.edit3.text:='';
        mainform.Editsaler.Text:='';
        mainform.Edittotalsub.Text:='';

       row:=0;
   end;
  end;
 end;

 if (key<>'.') and(key<>'0') and (key<>'1') and (key<>'2') and (key<>'3') and (key<>'4') and (key<>'5') and (key<>'6') and (key<>'7') and (key<>'8') and (key<>'9') and (key<>chr(8)) then
 key:=chr(0);

end;

procedure Tmainform.StringGrid1KeyPress(Sender: TObject; var Key: Char);
var
 selerow,maxrow,i,j:integer;
 tmphj:real;

begin
  if key='p' then            //上页
  begin
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
    postmessage(stringgrid1.handle,WM_KEYDOWN,VK_UP,0);
  end;
 if key='q' then            //下页
  begin
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);
   postmessage(stringgrid1.handle,WM_KEYDOWN,VK_DOWN,0);

  end;
 if key='/' then         //即时退货
  begin
    selerow:=stringGrid1.Selection.Top;
    if (row>0) and (selerow<=(row-1)) then
    if Messagebox(handle,'您确实要取消该商品吗?','提示',MB_OKCANCEL+MB_ICONINFORMATION)=IDOK  then
    begin
        stringGrid1.Rows[selerow].Clear;
       for i:=1 to row do
       begin
        if i>selerow then
        begin
         stringGrid1.Rows[i-1].Text:=stringGrid1.Rows[i].Text;
        end;
       end;
     stringGrid1.Rows[row].Clear;
     row:=row-1;

     tmphj:=0;
     for i:=0 to row-1 do
       begin
        tmphj:=tmphj+strtofloat(stringGrid1.Cells[6,i]);
       end;
     if row=0 then
     begin
       edit1.text:='0';
       edit2.text:='0';
     end
     else
     begin
       edit1.text:=formatfloat('0.00',tmphj);
       if (edit3.text='') or (edit3.text='0') then
         edit2.text:=formatfloat('0.00',tmphj)
       else
         edit2.text:=formatfloat('0.00',tmphj*strtofloat(edit3.text)/100);
     end;

     if mainform.IsShowed then
     begin
       //客显显示
       //使用 COM1。
       mainform.MSComm1.CommPort :=1;
       //9600 波特,无奇偶校验,8 位数据,一个停止位。
       mainform.MSComm1.Settings := '9600,N,8,1';
       //当输入占用时,
       //告诉控件读入整个缓冲区。
       mainform.MSComm1.InputLen := 0;
       //打开端口。
       mainform.MSComm1.PortOpen := True;
       //将 attention 命令送到调制解调器。
       mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($41) + '       THANKS'+ Chr(13); //确保
       mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($42) + 'TOTAL     '+formatfloat('#,##0.00',tmphj) + Chr(13); //确保
       //关闭串行端口。
       mainform.MSComm1.PortOpen := False;
     end;
    end;

  end;

  if (key='l') and (row>0) then     //立即更正
  begin
    maxrow:=row-1;
    stringGrid1.Rows[maxrow].Clear;
    row:=row-1;
    pcodeedit.SetFocus;

    tmphj:=0;
    for i:=0 to row-1 do
       begin
        tmphj:=tmphj+strtofloat(stringGrid1.Cells[6,i]);
       end;


       edit1.text:=formatfloat('0.00',tmphj);
       if (edit3.text='') or (edit3.text='0') then
         edit2.text:=formatfloat('0.00',tmphj)
       else
         edit2.text:=formatfloat('0.00',tmphj*strtofloat(edit3.text)/100);

     if mainform.IsShowed then
     begin
      //客显显示
      //使用 COM1。
      mainform.MSComm1.CommPort :=1;
      //9600 波特,无奇偶校验,8 位数据,一个停止位。
      mainform.MSComm1.Settings := '9600,N,8,1';
      //当输入占用时,
      //告诉控件读入整个缓冲区。
      mainform.MSComm1.InputLen := 0;
      //打开端口。
      mainform.MSComm1.PortOpen := True;
      //将 attention 命令送到调制解调器。
      mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($41) + '       THANKS'+ Chr(13); //确保
      mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($42) + 'TOTAL     '+formatfloat('#,##0.00',tmphj) + Chr(13); //确保
      //关闭串行端口。
      mainform.MSComm1.PortOpen := False;
     end;
  end;
 if key='h' then      //取消交易
 begin
  for i:=0 to row-1 do
      for j:=0 to 7 do
       begin
        mainform.stringGrid1.Cells[j,i]:='';
       end;
       mainform.edit1.text:='';
       mainform.edit2.text:='';
       mainform.edit3.text:='';
       mainform.Editsaler.Text:='';
       mainform.Edittotalsub.Text:='';
       row:=0;

      if mainform.IsShowed then
      begin
       //客显显示
       //使用 COM1。
       mainform.MSComm1.CommPort :=1;
       //9600 波特,无奇偶校验,8 位数据,一个停止位。
       mainform.MSComm1.Settings := '9600,N,8,1';
       //当输入占用时,
       //告诉控件读入整个缓冲区。
       mainform.MSComm1.InputLen := 0;
       //打开端口。
       mainform.MSComm1.PortOpen := True;
       //将 attention 命令送到调制解调器。
       mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($41) + '       THANKS'+ Chr(13); //确保
       mainform.MSComm1.Output := Chr($1B) + Chr($51) + Chr($42) + 'TOTAL     '+'0.00' + Chr(13); //确保
       //关闭串行端口。
       mainform.MSComm1.PortOpen := False;
      end;
 end;
 if key='+' then        //收款
  begin
   if (mainform.Edit1.Text='') or (strtofloat(mainform.edit1.text)=0) then
    begin
     messagebox(handle,'还没有交易数据!','确认',MB_OK+MB_ICONINFORMATION);
     key:=chr(0);
     exit;
    end;
    application.CreateForm(Tform3,form3);
    form3.showmodal;
  end;
 if (key='.') or(key='0') or (key='1') or(key='2') or (key='3') or (key='4') or (key='5') or (key='6') or (key='7') or (key='8') or (key='9') then
  begin
   pcodeedit.SetFocus;
   postmessage(pcodeedit.handle,WM_KEYDOWN,ord(key),0);
  end;

⌨️ 快捷键说明

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