如何打印收银小票

dywfada 2007-10-24 10:40:11
请问有什么方法可以往DBF表里面INSERT INTO一条记录,打印机同时就开始打印,再往DBF表里INSERT INTO一条记录,打印机又接着刚才的地方继续打印,直到用户不再往DBF表里INSERT INTO记录了,打印机才结束打印,把纸退出来?这样就可以节省好多时间,不用客人等那么久,呵呵。
...全文
142 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanbolantian 2007-10-31
  • 打赏
  • 举报
回复
呵呵,这有点类似于超市中的打印方式,但我一直觉得有个疑问,
如果采用这种方式,客人是不用等待太长时间,但万一某个物品,
输入电脑后,客人又提出取消,那整张单据不都是要作废?
dfwxj 2007-10-31
  • 打赏
  • 举报
回复
如果采用这种方案,那顾客发生退货的时候可以输入负数冲减
dywfada 2007-10-31
  • 打赏
  • 举报
回复
郁闷,还是找不到解决的方法。
十豆三 2007-10-24
  • 打赏
  • 举报
回复
也可以将被插入数据的表属于数据库DBC,然后对这个表设置触发器,当INSERT 时执行上面?语句向打印机。

可以用?命令,也可以用???命令,参考VFP自带帮助。
十豆三 2007-10-24
  • 打赏
  • 举报
回复
在插入INSERT INTO 语句之后用?向打印送一条。

如:

*SET PRINTER TO NAME GETPRINTER() &&设定打印机 此句可放在程序初始化代码中
*SET PRINTER TO NAME 指定打印机名 此句可放在程序初始化代码中
MESSAGEBOX('1')
SET TEXTMERGE ON
SET PRINTER ON
SET CONSOLE OFF
?'---------开始--------'
FOR I=1 TO 5
?TRANSFORM(I)
ENDFOR
?' SDFASDFADKF测试1'
?'1234567890'
?'~!@#$%^&*()_+<>:"?{}|'
?'---------结束--------'
SET PRINTER OFF
SET CONSOLE ON
MESSAGEBOX('2')
SET PRINTER TO
*程序退出时 SET PRINTER TO DEFAULT
dfwxj 2007-10-24
  • 打赏
  • 举报
回复
你在描述问题的时候已经把解决的方案说出来了

先打印出表头,然后用循环,每添加一个记录就向打印机送一条打印,最后打印表尾,用一条空记录来检测结束
wwwwb 2007-10-24
  • 打赏
  • 举报
回复
你这种即打即停,用报表不行,直接发控制码->打印机才行
dywfada 2007-10-24
  • 打赏
  • 举报
回复
如果不用这种方式,还有其它方式吗?比如VFP9.0的报表。
wwwwb 2007-10-24
  • 打赏
  • 举报
回复
控制码参考打印机手册,
参考VFP的???
wwwwb 2007-10-24
  • 打赏
  • 举报
回复
如运行环境是在WINDOWS下:
这种方式要直接发控制码->打印机才行,即控制码+内容,打印机要有硬字库
dywfada 2007-10-24
  • 打赏
  • 举报
回复
以下是我的打印代码,请高手们帮帮忙!!!我用的是VFP9.0,谢谢。

SET PRINTER ON
SET PRINTER FONT 'Fixedsys'
SET DEVICE TO PRINTER &&PROMPT

if len(alltr(custname))=0 and thisform.text2.value=0
return
endif

@ PROW()+1, 0 say ' '
&&@ pROW()+1, 0 SAY '客户姓名:'+custname+iif(len(allt(thisform.cardtype))#0,m_discardid,'')+iif(len(allt(thisform.cardtype))#0,' 卡余额:','')+allt(str(ThisForm.text6.value))+' 日期:'+dtoc(date())
@ pROW()+1, 0 SAY '客户姓名:'+custname+iif(len(allt(thisform.cardtype))#0,' 卡余额:','')+allt(str(ThisForm.text2.value))+' 积分:'+ALLTRIM(STR(thisform.text17.Value))
@ PROW()+1, 0 say '消费日期:'+dtoc(date())
@ pROW()+1, 0 SAY '---------------------------------------------------------------'
@ pROW()+1, 0 SAY '项目名称 金额(元) 用卡'
@ pROW()+1, 0 SAY '---------------------------------------------------------------'
totalprice=0
SELE earning
*set filter to 过渡=='*'
LOCATE FOR ALLTRIM(oddid)==ALLTRIM(thisform.text3.Value)
*go top
DO while .not.eof("earning")
@ pROW()+1, 0 SAY itname
@ pROW(), 28 say allt(str(monet))

IF ifcard
@ pROW(), 37 say '是'
ELSE
@ pROW(), 37 say '否'
ENDIF
totalprice=totalprice+monet
Skip 1
ENDD

SELE earningcom
*set filter to 过渡=='*'
*go top
LOCATE FOR ALLTRIM(oddid)==ALLTRIM(thisform.text3.Value)
DO while .not.eof("earningcom")
@ pROW()+1, 0 SAY 品名
@ pROW(), 28 say allt(str(monet))

IF ifcard
@ pROW(), 37 say '是'
ELSE
@ pROW(), 37 say '否'
ENDIF
totalprice=totalprice+monet
Skip 1
ENDD
&&@ pROW()+2, 0 say iif(len(allt(ThisForm.text7.value))#0,'单号:','')+allt(ThisForm.text7.value)+space(2)+'共计金额:¥'+allt(str(totalprice))+space(2)+'实收金额:¥'+allt(str(thisform.dollar-thisform.usecounter))
@ pROW()+2, 0 say iif(len(allt(thisform.cardtype))#0,m_discardid,'')+space(2)+'共计金额:¥'+allt(str(totalprice))+space(2)+iif(len(allt(ThisForm.text3.value))#0,'单号:','')+allt(ThisForm.text3.value)
@ pROW()+1, 0 SAY '---------------------------------------------------------------'
@ PROW()+1, 0 say '收银员:'+ALLTRIM(thisform.text16.Value)+' TEL:'+dianSy
@ PROW()+1, 0 say ' 谢谢惠顾!'
SET printer off
SET PRINTER TO
SET device to screen

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧