一、赢通A5、A8、A6、T6、I7、I8标签小票/样式设计(视频),欢迎初学者下载观看学习:
如若不能下载,请注册一个帐号就可以下载了。
二、请注意:以下函数未注明的则是A5、A6、I7通用,注明了的则是A5/A6/I7专用。
计算列的使用方法:相关单据→设置→增加新列→计算列→输入以下语句→确定。
进入表达式编辑器:相关单据设置→增加新列→计算列→计算列表达式框右边选“...”号进入表达式编辑器:
或者报表样式、商品价签、条码标签设计器中→点“+/=”按钮→右边放下该列双击该列→表达式框右边选“...”号进入表达式编辑器:(特别注意:是单引号 ' ,不要用双引号。)
三、下面详细讲述一些常用计算列的使用方法: 2021-07-06更新
1. 批发取多包装明细,将反算出来的多包装取为几列,使用“gf_item_qty_unit”函数
gf_item_qty_unit(as_item_no,ad_qty,ai_all,ai_order,ai_have_unit)
as_item_no:商品内部码
ad_qty:数量(如批发数量为不含多包装数量now_qty,含多包装数量sub_qty)
ai_all:要显示几个单位,比如要显示3个单位,ai_all = 3
ai_order:这个值是第几个单位,大单位就是 ai_order=3,小包装就是 ai_order =2 ,最小单位就是 ai_order =1
ai_have_unit:1,显示单位,0,不显示单位
gf_item_qty_unit( item_no , sub_qty ,3,3,1) 显示3个单位中第3个单位总数量,显示单位
(其实其它报表也可以,要注意数量列名sub_qty不同报表/单据不一样)
函数使用方法(以2个单位为例,要注意数量列名sub_qty不同报表/单据不一样):
相关单据→设置→增加新列→计算列→输入以下语句:
gf_item_qty_unit( item_no , sub_qty ,2,2,1) 显示 X箱
gf_item_qty_unit( item_no , sub_qty ,2,1,1) 显示 Y个
gf_item_qty_unit( item_no , sub_qty ,2,2,0) 显示 X
gf_item_qty_unit( item_no , sub_qty ,2,1,0) 显示 Y
2. 库存取包装明细:(其实其它报表也可以,要注意数量列名sub_qty不同报表/单据不一样)
gf_item_qty_disp(item_no, stock_qty ) 库存类报表
gf_item_qty_disp(item_no, sub_qty ) 批发、零售销售类报表
用于取商品多包装合计,如:6箱7件8瓶,若取各列的值,请使用多包装明细函数(见1小节)
3. 报表、档案、模块取商品档案库存:
gf_item_stock_qty(参数1,参数2,参数3):
参数1:商品内部码列;
参数2:机构仓库列,所有机构 用 '';
参数3:是否为实时库存 '1'-实时库存 '0'-当前库存;
例如:gf_item_stock_qty(item_no,'0001','1')
4. 用计算列取数据库表数据,db_data函数用法
db_data1,db_data2
用db_data1~db_data6函数
后面的数字代表参数的数量
db_data2('select item_name from t_item_info where item_no=?',item_no)
db_data3('select item_name from t_item_info where item_subno = ? or item_barcode =? ','0001','0001')
参数1:查询SQL ,里面有两个?,?
参数2:用于代替第一个?号,
参数3:用于代替第二个?号,
用后面的参数值去替换前面相应的SQL里的?号,然后得到一条完整的SQL,执行这个SQL,就是这个函数的返回值,固定值要用单引号
要注意:参数若用字段名,该字段名必须在该单据、报表中存在,可以通增计算列编辑框中看得到,否则无法取到。
例如:
条码标签打印中用语句直接取商品档案条码:
db_data2('select item_barcode from t_item_info where item_no=?',item_no)
条码标签打印中用语句直接取商品档案货号:
db_data2('select item_subno from t_item_info where item_no=?',item_no)
其它出入库表取包装明细:
gf_item_qty_disp(db_data2('select item_no from t_item_info where item_subno=?',item_subno), sub_qty )
A5前台零售查询—单据支付列表—在这里添加一个营业员列:
db_data2(~"select max(sale_man) from t_pos_sale_detail where 『单据编号』 = ?~", 『单据编号』)
5. 显示该货号的条码列,用于多包装商品只显示基本包装的条码:
db_data2('select item_barcode from t_item_info where item_no=?',item_no)
A6服装,条码标签打印时,取商品档案中主条码(不是主码):
db_data2("select item_barcode from t_item_Info where item_subno=?",item_subno)
在库存查询表中,增加计算列提取商品档案的商品备注1:
db_data2(~"select item_bytxt1 from t_item_info where item_no=?~",item_no)
A5、A6在批发、入库单,增加计算列提取商品成本价:(最后0001条件是指总部仓库)
db_data3('select cost_price from t_branch_stock where item_no=? and branch_no = ?',item_no,'0001')
IF语句和db_data函数混合使用,取批发销售单是否审核标志:
if(db_data2('select app_sign from t_cust_sale_master where sheet_no =?',sheet_no)='1','审','未审')
6. string函数使用方法:
打印商品价签、条码标签时,零售价只显示2位小数(系统设置是3位小数,用于精确入库):
string(sale_price,'0.00')
入库单的日期取月份,要注意在表达式编辑框中选列:
right(left(string(create_date),7),2)
取今天时间作为打印时间:
'打印日期:' + string(today(),'yyyy-mm-dd' + ' ' + String(Now(), 'hh:mm:ss '))
7. 打印商品价签、条码标签时,称重商品取斤(档案是公斤价)的零售价:
(这里注意,是按货号位数判断,普通商品建议设置为6位)显示斤价格,商品档案中是公斤价格:
if(len(sub_no)=5,price/2,price)
if(len(item_subno)=5,sale_price/2,sale_price)
if语句的用法:
if( b, t, f ) 。如果条件b成立,则结果为t,否则 结果为f
8. 批发销售单【已付金额】转换成大写形式,文本列转数据列:
gf_num_to_rmb(Dec(Describe('cdw_paid_amt$$.text')))
因已付金额列是个文本列,要用Describe 取文本值,再转成数值型,最后使用大写函数转换。
很多场合会用到DEC函数,用于将字符型字段转为数值型字段,才可以使用比如格式化函数string等,如:
进销差:
if(item_in_price=0,~"0~", db_data2(~"select item_sale_price- item_in_price from t_item_info where item_subno=? and item_in_price>0~",item_subno) )
进售差价率:
if(item_in_price=0,~"0~",string(db_data2(~"select left((item_sale_price- item_in_price)/item_sale_price*100,5) from t_item_info where item_subno=? and item_in_price>0~",item_subno))+~"%~")
进销差价均价:
string(Dec(db_data1('select avg(item_sale_price - item_in_price) from t_item_info where item_in_price>0 and item_sale_price>0')),'0.00')
进销差价均价率:
db_data1('select left(avg((item_sale_price - item_in_price)/item_sale_price)*100,5) from t_item_info where item_in_price>0 and item_sale_price>0')+'%'
9. A6取机构商品价格函数:
gf_item_branch_price(商品内码,机构仓库,价格类型),用于连锁时取该机构商品的实际价格:
gf_item_branch_price(item_no, stock_branch_no ,'S')
S代表零售价,V代表会员价,P代表批发价,I代表进价,Z1—Z9代表自定义价格
请注意:一般用于商品零售明细、库存查询、批发销售报表,报表明细区有机构的均可以使用。
10. A6自定义报表显示颜色尺码名称函数:(用于报表取商品颜色尺码称名,默认只有编号)
尺码:db_data2(~"select size_name from t_item_size where size_no=?~", yt_size )
颜色: db_data2(~"select color_name from t_item_color where color_no=?~",yt_color)
请注意:一般用于商品零售明细、库存查询、批发销售报表,报表明细区有机构的均可以使用。
11. 前台小票设计器中取单号后四位、小票大字体函数:(用于特定的小票格式)
小票设计器中小票号取后四位:right(sheet_no,4)
小票大字体行指令gf_big():添加行为gf_big('ABC'),小票上会打出ABC为大写的。
请注意:将以上格式放入小票设计器→新增行/编辑行→数据中,小票机要支持大字体指令。
12. 配出单中取总部的库存数:(在总部使用)
db_data2(~"select real_qty = a.stock_qty - IsNull(b.sale_qty,0.00) from t_branch_stock a left join view_stock_real b on a.item_no=isnull(b.item_No,a.item_no) where isnull(b.branch_no,0001)=0001 and a.branch_no=0001 and a.item_no=?~",item_no)
请注意:在后其单据中可以使用gf_item_stock_qty(item_no,'0001','1')函数来取库存。
13.小数四舍五入函数:(在任意单据中使用)
取批发折扣2位小数产四舍五入:round( discount, 2 )
请注意:保留discount的两位小数,并四舍五入,当然也可以在其它单据用string(item_in_price,'0.00')来取两位小数。
14.商品促销信息函数:(在任意单据中使用)
取商品促销信息:gf_item_ps_price_info(商品内码,单位类型) 如:gf_item_ps_price_info(item_no,0)
请注意:这里单位类型是从0开始的,0代表基本单位,1代表第一个多单位,依此类推。
15.组装商品明细函数:(在任意单据中使用,获得组装商品的明细及数量)
取组装商品组成成分:gf_get_zz_detail(商品内码,组装商品数量,每行显示数量) 如:gf_get_zz_detail(item_no,sub_qty,3)
表示:取某个组装商品,现在数量的,组装商品明细,一行显示3个,超出则多行显示。
请注意:每行显示数量超出会自动显示2行或者多行。
16.商品多行显示函数:(在任意单据中使用,用于将指定内容按指定字符数拆分成多行显示或打印)
将商品按指定字符数多行显示:gf_str_split(商品名称,每行显示字符数) 如:gf_str_split(item_name,10)
表示:取某个商品的商品名称,每行显示10个,多出的显示下一行。
请注意:这里的item_name可以用其它字符列代替,比如规格等。
17.会员余额函数:(在会员类报表或者单据中使用)
储值余额:gf_vip_get_save_amt(vip_no)
赠送余额:gf_vip_get_give_amt(vip_no)
返利余额:gf_vip_get_ret_amt(vip_no)
零钱余额:gf_vip_get_zero_amt(vip_no)
请注意:这个是取会员储值、赠送、返利、零钱帐户的金额,需要汇总要用”+“运行符进行运算。
18.商品采购在途数量函数:(在销售类报表或者单据中使用)
获取商品采购在途数量的函数:gf_item_cg_order_qty(item_no,'')
请注意:这个是取采购订单总数量,常用于一些采购报表取订单总数量。
19.获取应付、应收款函数:(在往来帐类报表或者单据中使用)
获取应付款函数,货商应付款:gf_get_sup_money(sup_no),客户应收款:gf_get_cust_money(cust_no)
请注意:这个是取货商或客户总应付应收,常用于一些采购汇总报表、销售汇总报表获取货商、客户应收应付汇总情况。
20.获取加盟店应收款金额的函数:(在往来帐类报表或者单据中使用)
获取应付款函数,货商应付款:gf_get_branch_money(fb_branch_no)
请注意:这个是取加盟店应付应收汇总,常用于加盟店应收应付类报表。
21.全局函数 gf_item_stock_qty_zb获取当前商品的总部仓库库存:(在要货申请单中使用)
全局函数,获取当前商品的总部仓库库存:gf_item_stock_qty_zb
请注意:这个是货商客户应收汇总,常用于一些应收应付汇总报表获取应收款情况。
22.获得客户、货商本单之前的欠款金额函数:(在业务单据中使用)
获得客户本单之前的欠款金额:gf_cust_upper_sheet_money(sheet_no,'1')
获得货商本单之前的欠款金额:gf_sup_upper_sheet_money(sheet_no,'1');
请注意:这个是货商、客户欠款金额,常用于一些批发销售、退货、入库等单据使用。
23.商品名称分行函数:(在条码打印、标签打印、前台小票、业务单据中使用)
比如每行8个汉字,最多两行,添加两个计算列(第一行):gf_str_split_sect(item_name,16,1)
比如每行8个汉字,最多两行,添加两个计算列(第二行):gf_str_split_sect(item_name,16,2);
请注意:请在在条码打印、标签打印、前台小票、业务单据中使用,A3、A5、A6名称超长,要拆成多行打印的,要用 gf_str_split_sect(每节长度,第几节) 这个函数,不要用left,left会把汉字拆成乱码。A8、I7、I8、T6的可以用left,不会有问题。
24.小票套打支行方式分行函数:(在套打小票中使用)
只能在小票套打中使用:gf_get_sale_pays(sheet_no,每行显示支付数,'分隔符','不包含的支付方式编号')
请注意:请在小票套打格式中使用。
四、其它函数的使用方法(只是一部分,更多函数可以参见软件计算列中有说明或者咨询客服):
取时间:
string(today(),'yyyy-mm-dd')
String(Now(), 'hh:mm:ss')
取固定长度行号:
right("00000000"+getrow(),8)
取打印次数:
'共打印' + db_data1('select prn_times from sys_t_sheet_change where sheet_no=?',sheet_no) + '次'
'公司' + db_data1('select branch_name from bi_t_branch_info where branch_no=?',branch_no) + '公司'
取数据不要小数点:
string(truncate(item_sale_price,0))
mid( string(item_sale_price), 0, 4 )
string(item_sale_price)
销售明细取会员名称:
db_data1('select vip_name from t_vip_info where card_id=?',vip_no)
前台取收银员名称:
db_data1('select oper_name From t_operator_i where oper_id=?',db_data1('select oper_id from t_sale_master where sheet_no=?',sheet_no))
取仓库名:
db_data1("select branch_name from t_branch_info where branch_no=?",db_data1("select branch_no from t_inout_store_master where sheet_no=?",sheet_no))
大写单个金额:
pub_f_num_to_cn(金额表单式,4)
1分 2角 3元 4十元 5百 6千 7万
例如:做面包、生日蛋糕的都可以这样在标签上打印下面这些日期
保质期天数:
real(db_data1('select valid_day from t_item_info where item_subno=?',item_subno))
生产日期(就是今天):
string(today(),'yyyy-mm-dd')
有效期到:
string(RelativeDate(today(),real(db_data1('select valid_day from t_item_info where item_subno=?',item_subno))),'yyyy-mm-dd')
单据、报表显示商品库存:
db_data2('select stock_qty from t_branch_stock where item_no=? and branch_no=? ',item_no,'0001')
五、其它高级计算列示例(只是一部分,更多函数可以参见软件计算列中有说明或者咨询客服):
批发单中取客户手机号码:
db_data2('select b.cust_tel from t_cust_sale_master a, t_cust_info b where a.cust_No=b.cust_no and a.sheet_No=?',sheet_No)
批发销售单中取客户名称:
db_data2(~"select cust_name from t_cust_info where cust_no=?~",describe(~"cdw_cust_No$$.text~"))
品牌名称:
db_data2('select a.brand_name from t_item_brand a,t_item_info b where a.item_brand=b.item_brand and b.item_no=?',item_No)
单据中添加操作员的名字而非代码:
dbdata2('select user_name from t_sys_user where user_id=?',describe('cdw_user_id$$'))
现有的操作员的那列不要删,要把其宽度弄为0
前台套打中取总样数:db_data2('select count(distinct(item_no)) from view_pos_sale_detail where sheet_no=?',sheet_No)
折扣计算列:如8.8折
if(real_price/org_price<1,string(real_price/org_price*10)+"折","")
批发销售单中打印多种支付方式:
db_data3('select a.total_amt from t_cust_accout_master a,t_cust_accout_detail b where a.sheet_no =b.sheet_No and b.voucher_no=? and a.pay_way=?',sheet_no,'01')
操作流程:1. 做批发销售单,在单据中点快速结算,使用现金结算部分货款。2. 也是快速结算,使用其他支付方式结算完剩余货款。
打印格式中,添加上面给的计算列,‘01’代表的的支付方式现金,其他的支付方式按具体的输入,支付方式的查看点在“基本档案”下面的“支付方式”中看。
台账中取货商名称:db_data2(~"select b.sup_name from t_cg_in_master a,t_sup_info b where a.sup_no=b.sup_No and a.sheet_no=?~", voucher_no)
台账中取客户名称:db_data2('select b.cust_name from t_cust_sale_master a,t_cust_info b where a.cust_no=b.cust_No and a.sheet_no=?',voucher_no)
取税额函数:db_data3('select inside_tax_amt from view_pos_sale_detail where sheet_no=? and item_no=?',sheet_no,item_no)
批发销售单中取会员的积分:
报表打印中:if(isnull(db_data2(~"select sum(a.value_amt) from t_vip_money a,t_vip_info b where a.money_type=5 and a.vip_no =b.vip_No and b.vip_dispno=? group by a.vip_no~",describe(~"cdw_vip_dispno$$.text~"))),~"0~",db_data2(~"select sum(a.value_amt) from t_vip_money a,t_vip_info b where a.money_type=5 and a.vip_no =b.vip_No and b.vip_dispno=? group by a.vip_no~",describe(~"cdw_vip_dispno$$.text~")))
布局设置中:if(isnull(db_data2(~"select sum(a.value_amt) from t_vip_money a,t_vip_info b where a.money_type=5 and a.vip_no =b.vip_No and b.vip_dispno=? group by a.vip_no~",vip_dispno)),0,dec(db_data2(~"select sum(a.value_amt) from t_vip_money a,t_vip_info b where a.money_type=5 and a.vip_no =b.vip_No and b.vip_dispno=? group by a.vip_no~",vip_dispno)))
标签中增加如果有会员特价就显示会员特价,如果没有就显示会员价,如果会员价也没有就显示为空的:
if( sv_price>0,string(sv_price),if( vip_price>0,string( vip_price),""))
预付款结余金额:db_data2('select sum(total_amt-use_amt) from t_cust_prepay_flow where cust_No=? group by cust_No',describe('cdw_cust_No$$.text'))
前台套打中添加会员累计消费金额:db_data2(~"select a.collect_amt from t_vip_collect a,t_vip_info b where a.vip_No=b.vip_no and b.vip_dispno=?~",vip_dispno)
批发销售单中添加已生效未生效、部分付款、全部付款、未付款信息:
已生效未生效:
if (db_data2(~"select app_sign from t_cust_sale_master where sheet_no=?~",sheet_No)=~"1~",~"已生效~",~"未生效~")
部分付款、全部付款、未付款信息:
if (db_data2(~"select app_sign from t_cust_sale_master where sheet_no=?~",sheet_No)=~"1~",case( db_data2(~"select case when sheet_amt-order_amt-paid_amt-free_amt=sheet_amt then 0 when sheet_amt-order_amt-paid_amt-free_amt>0 then 1 else 2 end from t_cust_accout_flow where sheet_No=?~",sheet_No) when ~"0~" then ~"没有付款~" when ~"1~" then ~"部分付款~" else ~"全部付款~") ,~"~")
批量修改采购,出库默认为大单位:
update t_item_unit set is_cg=1,is_pf=1 where unit_type='1'
update t_item_unit set is_cg=0,is_pf=0 where unit_type='0'
i7餐饮的账单支付列表中添加赠送金额:
赠送金额:dec(db_data2(~"select isnull(sum(org_price),0) from view_cypos_fullbill_detail where give_yes =1 and bill_No=?~",bill_No))
结算单中取单据的业务类型:
db_data2('SELECT a.sheet_name FROM dbo.t_sys_module_no a,t_cust_accout_flow b where a.module_code=b.trans_no and b.sheet_No=?',voucher_no)
批发销售单中取收支账户名称:
db_data2('select a.visa_name from t_visa_info a,t_cust_accout_master b,(select max(sheet_No) sheet_No from t_cust_accout_detail where voucher_no=?) c where a.visa_no=b.visa_no and b.sheet_No=c.sheet_no ',sheet_No)
批发销售单中增加预付冲销显示:
if(dec(db_data2(~"select convert(varchar(100),cast (prepay_amt as numeric(18,2))) from t_cust_accout_detail where voucher_no=?~",sheet_No))>0,'预付金额:'+db_data2(~"select convert(varchar(100),cast (prepay_amt as numeric(18,2))) from t_cust_accout_detail where voucher_no=?~",sheet_No),'')
营业员名称:
db_data2('select b.emp_name from view_pos_sale_detail a,t_emp_info b where a.sale_man=b.emp_no and a.sheet_no=?',sheet_no)
营业员编号:
db_data2('select a.sale_man from view_pos_sale_detail a where a.sheet_no=?',sheet_no)
批发销售单中显示支付金额(不含免付、预付):
db_data2('select paid_amt from t_cust_accout_flow where sheet_no=?',sheet_no)
在收支费用表-收支明细里面添加一个计算列显示其它支出表里面的备注信息:
明细备注:db_data3('select mx_memo from t_visa_detail where sheet_no=? and fees_NO=? ',sheet_No,fees_No)
单据备注:db_data2('select memo from t_visa_master where sheet_no=?',sheet_No)
批发销售单中添加件跟包的单位数量(只限两个单位):
1、大包装的计算列:if(dec(db_data2(~"SELECT count(*) FROM t_item_unit WHERE item_no=?~",item_no))>1 , int(『数量小计』/dec(db_data2(~"SELECT isnull(item_pack,0) FROM t_item_unit WHERE item_no=? AND unit_type=1~",item_no))),0)
2、小单位的计算列:if(dec(db_data2(~"SELECT count(*) FROM t_item_unit WHERE item_no=?~",item_no))>1 , mod (sub_qty,dec(db_data2(~"SELECT isnull(item_pack,0) FROM t_item_unit WHERE item_no=? AND unit_type=1~",item_no))),sub_qty)
a、大包装数量后加单位:if(dec(db_data2(~"SELECT count(*) FROM t_item_unit WHERE item_no=?~",item_no))>1 , string(int(『数量小计』/dec(db_data2(~"SELECT isnull(item_pack,0) FROM t_item_unit WHERE item_no=? AND unit_type=1~",item_no))))+db_data2(~"SELECT item_unit_No FROM t_item_unit WHERE item_no=? AND unit_type=1~",item_no),~"~")
b、大包装数量合计:if(sum(if(dec(db_data2(~"SELECT count(*) FROM t_item_unit WHERE item_no=?~",item_no))>1 , int(『数量小计』/dec(db_data2(~"SELECT isnull(item_pack,0) FROM t_item_unit WHERE item_no=? AND unit_type=1~",item_no))),0))>0,string(sum(if(dec(db_data2(~"SELECT count(*) FROM t_item_unit WHERE item_no=?~",item_no))>1 , int(『数量小计』/dec(db_data2(~"SELECT isnull(item_pack,0) FROM t_item_unit WHERE item_no=? AND unit_type=1~",item_no))),0)))+~"件~",~"~")
档案中添加现有机构默认的库存数量:
gf_item_stock_qty(item_no,db_data2('SELECT param_data FROM t_sys_param WHERE param_id=?','gs_defa_branch'),'1')
标签中添加打印失效日期(在现有系统时间上加上档案中的有效日期):
db_data2(~"SELECT CONVERT(varchar(100), dateadd(dd,item_valid_day,getdate()), 23) FROM t_item_info WHERE item_No=?~",item_No)
小票上当实价为0的时候,打印赠送两个字:
if(string(real_price)='0','赠送',string(real_price,'0.00'))
批发单中添加客户上次退货时间和金额以及客户最近一次结算日期跟金额:
上次退货时间和金额:
db_data4(~"select top 1 convert(varchar(100),oper_date,23)+?+cast(sheet_amt-order_amt-paid_amt-free_amt as varchar(12)) from t_cust_accout_flow where trans_no=? and cust_no =? order by 『单据编号』 desc~",~"退货~",~"RI~",db_data2(~"select cust_no from t_cust_accout_flow where sheet_no=?~",sheet_no))
最近一次结算日期跟金额:
db_data4(~"select top 1 convert(varchar(100),a.app_date,23)+?+CONVERT(VARCHAR(10),cast(a.pay_amt as NUMERIC(18,2)) ),a.sheet_no from t_cust_accout_master a WHERE not EXISTS (SELECT 1 FROM t_cust_accout_detail b WHERE b.voucher_no=? AND a.sheet_no=b.sheet_no) AND a.cust_no=? ORDER BY a.sheet_no DESC~",~"付款~",sheet_no,db_data2(~"select cust_no from t_cust_accout_flow where sheet_no=?~",sheet_no))
截取名字:
if(len(item_name)>20,left(item_name,20),item_name)
if(len(item_name)>20,right(item_name,len(item_name)-20),'')
20代表10个汉字,根据需求变化。
截取名字时,当名字中既有汉字又有数字的时候,可能出现乱码,最好使用如下:
if(lenw(item_name)>20,leftw(item_name,20),item_name)
if(lenw(item_name)>20,rightw(item_name,lenw(item_name)-20),'')
20代表20个汉字,根据需求变化。 (责任编辑:赢通软件管理团队) |