您好, 访客   登录/注册

基于VFP报表条形码CODE128A的研究与实现

来源:用户上传      作者: 武万军 魏学华

  摘要在Visual FoxPro的报表里利用CODE128A码位1或0来控制报表里的竖线是否显示,来实现在VFP报表里显示CODE128A码供条形码枪扫描。
  【关键词】VFP 报表 条形码 CODE128A
  Visual FoxPro简称VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。目前最新版为 Visual FoxPro 9.0,在数据库应用中,处理速度极快,是日常工作中的得力助手。
  随着条形码的出现,它可以标出物品的生产国、制造厂家、商品名称、生产日期、日期等许多信息,因而在商品流通、图书管理、邮政管理、银行系统等许多领域都得到广泛的应用。
  然而Visual FoxPro其报表无法支持UNICODE编码,所以不能像CODE39那样在VFP报表中引用其CODE39字体就可以生成条形码。本文主要研究在VFP报表中如何实现身份证号的CODE128A条形码生成。
  1 CODE128A条形码
  CODE128码是1981年引入的一种高密度条码,CODE128 码可表示从 ASCII 0 到ASCII 127 共128个字符,故称128码。其中包含了数字、字母和符号字符。基于实际运用,本文主要研究CODE128A码,其起始码为103,即为11010000100,终止码为1100011101011。
  2 VFP报表实现CODE128A条形码的思路分析
  2.1 VFP报表与表的转换
  VFP报表与表是可以相互转换的,转换规则为;*.frx对应转换为*.dbf,*.frt对应转换为*.fpt,然后就可以VFP中用use命令可以打开表进行处理了。
  2.2 CODE128A码的生成
  首先,定义一个ns全局变量,用来接受生成的CODE128A码;其次,定义一个107的一维数组并将其赋值,如:
  DIMENSION barcode(107)
  barcode(1+0)="11011001100"
  barcode(1+1)="11001101100"
  …
  barcode(1+106)="11000111010"
  最后生成CODE128A码
  k=LEN(str1)
  ns=""
  IF k>0 then
  totalcode=103
  i=0
  FOR i=1 TO k
  v=SUBSTR(str1,i,1)
  ns=ns+barcode(1+ASC(v)-32)
  totalcode=totalcode+i*(ASC(v)-32)
  NEXT i
  checkcode= MOD(totalcode,103)
  ns= barcode(1+103)+ns
  ns=ns +barcode(1+checkcode)
  ns=ns +barcode(1+106)
  ELSE
  ns="数据为空"
  ENDIF
  2.3 CODE128A码在VFP报表中的表现及控制
  首先,在VFP报表中生成231根竖线。其次,将报表转换成数据表,并将表中的supexpr字段里写入控制语句subs(ns,12,1)="1"(其含义:如果该位为1表示显示,否则不显)。
  3 VFP报表实现CODE128A条形码的实现
  3.1 在VFP中生成一个输入身份证号的表单
  表单上有控件:1个标题控件、1个输入身份证号文本控件、1个打印按钮控件,在[打印报表]按钮的click事件中输入以下几方面的代码:定义一个ns全局变量;定义一个107的一维数组并赋值;生成CODE128A码并将结果赋给ns变量;调用表报文件如:repo form sqbx prev。
  3.2 在VFP中生成一个由231根竖线构成的报表
  首先在VFP报表中画一根竖线,并将报表转换为对应的表后,并修改其高度Height为3333.333,宽度Width为104.167。其次,将此线对应的记录利用copy命令单独生成一个表文件后,利用下面命令生成230根同样的线,并相隔一个像素。
  FOR i=1 TO 230
  SELECT 1
  USE copy128(copy128是那一根线的表)
  REPLACE hpos WITH hpos+104.167
  USE
  SELECT 2
  USE show128(show128是装231根线的表)
  APPEND FROM copy128
  ENDFOR
  MESSAGEBOX('记录添加完成!')
  利用这段代码很快生成231根相同的竖线,并相隔一个像素。
  再其次,控制报表中竖线的是否显示的状态。
  这里要费时些,在对应的表中将231条记录的[supexpr]字段的Memo的值进行修改,subu(ns,12,1)=“1”,其含义为第12根线如果值为1,则显示,否则不显,以此类推。
  最后,运行表单。
  以上结果在Visual FoxPro8.0中测试,并用条形码扫描出正确结果。
  4 结束语
  随着条形码不断地深入运用,我们将不断地探索条形码在Visual FoxPro数据库中的运用,将这些成果运用到我们的工作中去,一定会提高工作效率,提高数据处理的准确度。
  
  参考文献
  [1]刘志海,曾庆良,朱由锋.条形码技术与程序设计[M].北京:清华大学出版社,2009(08).
  [2]张成海,张铎,张志强.条码技术与应用[M].北京:清华大学出版社,2010(02).
  [3]庞其森.利用VFP报表设计制作防伪通知书[J].科学之友,2009(02).
  
  作者单位
  重庆安全技术职业学院重庆市404020

转载注明来源:https://www.xzbu.com/1/view-6415457.htm