EXCEL 调用SQL 取用友数据做表
刚在坛子上晃,见有用EXCEL连接SQL做的,但是那种方法不直观,现在我用多图的方式来演示下如何做一份现存量查询表,当然 这数据是可以更新的哦。以U890为例:
首先,打开EXCEL表依次点击数据→获取数据→自其他来源→来自SQL SERVER
在接下来的数据连接向导中填上数据库的地址用户名和密码
2,选择用友的帐套数据库
在下面你将看到数据库中的好多表
选择现存量表,V_CURRENTSTOCK,
下一步→完成
完成后跳出导入数据的框框,因为之前打开电子表格的时候我默认选择了A1
所以这里直接确定
然后你就能看见已经把现存量的数据表拉取电子表格里了
隐藏掉我们不需要的列 只留下存货编码和现存量两列,由于这张表里没有存货名称和规格,我们还要另外再取一张表就是存货档案的表
打开SHEET2
再次重复上面的步骤取出存货档案的表在SHEET2中
已经取出的数据放在了SHEET2中了,接下来我们就要把存货名称和规格型号引到SHEET1中
在SHEET1中新建两列,用VLOOKUP 把存货名称和规格型号从SHEET2中引过来
做好的表就像下图一样
当然,如果数据有变更的话,直接在表上有数据的地方右击点击刷新,电子表格就和SQL SERVER再次连接取数了。
如果你发现你用EXCEL查找的时候 存货名称查不到。请在查询框框下面点击选项,然后在查找范围里选择“值”
嘎嘎,一张现存量查询的表就做完了 ,发给你们的仓库去用吧,除了做单人员以外的需要查现存量的就可以使用了。条件是他们的电脑网络能够连接到ERP的服务器。
想更新数据?右键刷新就行了哦,当然如果懒的话,可以在连接属性里设置打开表格自动更新数据,还可以设置多长时间刷新一次哦。
刚接触用友,最近在做REPORTING SERVER 报表,在论坛是第二次发帖,琢磨出来点东西就想个大伙分享,请各位有钱的砸钱没钱的捧人场,多图编辑好烦的。各位!!!!看你们的了。 本帖最后由 APOLLOOOOO 于 2014-10-9 18:20 编辑
用友UFO的报表运行速度慢,公式编辑界面差,我们老早就不用UFO了,都是用Excel+SQL做报表,如现金流量表查询脚本代码:
/***现金流量表凭证查询***/
--USE UFDATA_201_2014 --连接指定数据库
DECLARE @_YEAR smallint = 2014 --确定查询年度
DECLARE @CodeLin varchar(20) =(SELECTCODINGRULE
FROM GradeDef_Base
WHERE KEYWORD = 'code' AND iyear = @_YEAR)
DECLARE @CodeLin1 int = LEFT (@CodeLin , 1)
DECLARE @CodeLin2 int = SUBSTRING (@CodeLin , 2 ,1) + @CodeLin1
DECLARE @CodeLin3 int = SUBSTRING (@CodeLin , 3 ,1) + @CodeLin2
DECLARE @CodeLin4 int = SUBSTRING (@CodeLin , 4 ,1) + @CodeLin3
WITH code_CTE AS (SELECT ccode, ccode_name, igrade, bcash | bbank AS 现金
FROM code
WHERE iyear = @_YEAR) --科目公用表表达式 (CTE)
,GL_accvouch2 AS (SELECT GL_accvouch.iyear AS 年
,GL_accvouch.iperiod AS 月
,DAY (GL_accvouch.dbill_date) AS 日
,GL_accvouch.csign AS 凭证类别
,GL_accvouch.i_id
,GL_accvouch.ino_id AS 凭证编号
,现金科目 = CAST((SELECTcode_CTE.现金
FROM code_CTE
WHEREGL_accvouch.ccode = code_CTE.ccode)
AS int)
FROMGL_accvouch
WHEREGL_accvouch.iperiod BETWEEN 1 AND 12
AND GL_accvouch.iflag IS NULL
AND GL_accvouch.iyear = @_YEAR
) --判断现金分录
SELECT 凭证.iyear AS 年
,凭证.iperiod AS 月
,DAY (凭证.dbill_date) AS 日
,记帐标志 = CASEWHEN凭证.ibook = 1 THEN '√' ELSE NULL END
,凭证.csign AS 凭证类别
,凭证.ino_id AS 凭证编号
,凭证.cdigest AS 摘要
,凭证.ccode AS 科目编码
,code.ccode_name AS 科目名称
,LEFT (凭证.ccode , @CodeLin1) AS 一级编码
,一级科目 = (SELECTcode_CTE.ccode_name
FROM code_CTE
WHERELEFT (凭证.ccode , @CodeLin1) = code_CTE.ccode)
,二级编码 = CASE WHEN code.igrade > 1 THEN LEFT (凭证.ccode,@CodeLin2) ELSE NULL END
,二级科目 = CASE WHEN code.igrade > 1
THEN (SELECTcode_CTE.ccode_name
FROM code_CTE
WHERELEFT (凭证.ccode , @CodeLin2) = code_CTE.ccode)
ELSE NULL END
,现金科目 = CASE WHEN (SELECTcode_CTE.现金
FROM code_CTE
WHERE凭证.ccode = code_CTE.ccode) = 1 THEN '√'
ELSE NULL END
,SIGN((SELECT SUM(现金科目)
FROMGL_accvouch2
WHERE GL_accvouch2.年 = @_YEAR
AND GL_accvouch2.月 = 凭证.iperiod
AND GL_accvouch2.凭证类别 = 凭证.csign
AND GL_accvouch2.凭证编号 = 凭证.ino_id)) AS 流量标志
,主表项目 = CASE WHEN ((SELECT SUM(现金科目)
FROMGL_accvouch2
WHERE GL_accvouch2.年 = @_YEAR
AND GL_accvouch2.月 = 凭证.iperiod
AND GL_accvouch2.凭证类别 = 凭证.csign
AND GL_accvouch2.凭证编号 = 凭证.ino_id)) = 0
THEN NULL--非流量凭证无主表项目
WHEN (SELECTcode_CTE.现金
FROM code_CTE
WHERE凭证.ccode = code_CTE.ccode) = 1
THEN '现金'
WHEN LEFT (凭证.ccode , @CodeLin3) IN (66018001,66018002)
THEN '支付给职工以及为职工支付的现金' --自营工资福利
WHEN LEFT (凭证.ccode , @CodeLin3) =660303
THEN '汇率变动对现金的影响额'--汇兑损益
WHEN LEFT (凭证.ccode , @CodeLin3) BETWEEN 12210009 AND 12210011
THEN '购买商品、接受劳务支付的现金'--自营备用金与押金
WHEN LEFT (凭证.ccode , @CodeLin2) =122100
THEN '销售商品、提供劳务收到的现金'--其他自营流水
WHEN LEFT (凭证.ccode , @CodeLin2) IN (660101,660102)
THEN '支付给职工以及为职工支付的现金'--工资福利
WHEN LEFT (凭证.ccode , @CodeLin2) IN (660302,660303)
THEN '收到的其他与经营活动有关的现金'--财务费用之利息收入、汇兑损益
WHEN LEFT (凭证.ccode , @CodeLin1) IN (1121,1122,6001,6041,6051)
THEN '销售商品、提供劳务收到的现金'
--应收票据、应收账款、主营收入、租赁收入、其他收入
WHEN LEFT (凭证.ccode , @CodeLin1) IN (1221,6301,6711)
THEN '收到的其他与经营活动有关的现金'--其他应收、营业外收支
WHEN LEFT (凭证.ccode , @CodeLin1) IN (1405,1801,2202,6401,6402,6601,6603)
THEN '购买商品、接受劳务支付的现金'
--库存商品、长期待摊、应付账款、主营与其他业务成本、销售与财务费用
WHEN LEFT (凭证.ccode , @CodeLin1) IN (2221,6403,6801)
THEN '支付的各项税费'--税费
WHEN LEFT (凭证.ccode , @CodeLin1) =6111
THEN '取得投资收益所收到的现金'
WHEN LEFT (凭证.ccode , @CodeLin1) IN (1601,1604,1701)
THEN '购建固定资产、无形资产和其他长期资产所支付的现金'
WHEN LEFT (凭证.ccode , @CodeLin1) IN (4001,4002)
THEN '吸收投资所收到的现金'
WHEN LEFT (凭证.ccode , @CodeLin1) =4104
THEN '分配股利利润或偿付利息所支付的现金'
ELSE NULL
END
,附表项目 = CASE
WHEN LEFT (凭证.ccode , @CodeLin1) =4103 THEN '净利润'
WHEN LEFT (凭证.ccode , @CodeLin1) =1602 THEN '固定资产折旧'
WHEN LEFT (凭证.ccode , @CodeLin1) =1801 THEN '待摊费用减少(减:增加)'
WHEN LEFT (凭证.ccode , @CodeLin1) =6603 THEN '财务费用'
WHEN LEFT (凭证.ccode , @CodeLin1) =6111 THEN '投资损失(减:收益)'
WHEN LEFT (凭证.ccode , @CodeLin1) =1405 THEN '存货的减少(减:增加)'
WHEN LEFT (凭证.ccode , @CodeLin1) IN (1122,1221)
THEN '经营性应收项目的减少(减:增加)'
WHEN LEFT (凭证.ccode , @CodeLin1) IN (2202,2221)
THEN '经营性应付项目的增加(减:减少)'
ELSE NULL
END
,凭证.md AS 借方金额
,凭证.mc AS 贷方金额
FROM GL_accvouch AS 凭证
LEFT OUTER JOIN code ON 凭证.ccode = code.ccode
WHERE 凭证.iperiod BETWEEN 1 AND 12
AND 凭证.iflag IS NULL
AND 凭证.iyear = @_YEAR
--过虑非法月分(期初数据可能会显示0月等)与作废凭证、筛选年度
AND (((SELECT SUM(现金科目)
FROMGL_accvouch2
WHERE GL_accvouch2.年 = @_YEAR
AND GL_accvouch2.月 = 凭证.iperiod
AND GL_accvouch2.凭证类别 = 凭证.csign
AND GL_accvouch2.凭证编号 = 凭证.ino_id)) > 0
OR LEFT (凭证.ccode , @CodeLin1)
IN (1122,1221,1405,1602,1801,2202,2221,4103,6111,6603))
ORDER BY 1,2,5,6
楼主,首先感谢你做了一个这么好的教程,然后还是感谢你做了这么好的教程,最后还是感谢你做了这么好的教程{:soso_e104:}
忽然之间我怎么发现,我毕业后从事了ERP的工作脑子好像变得死板多了,一点儿创意也没有了,汗颜啊,:L我也得争取多研究研究啊!
学习了! 这个确实不错,好用,已经测试成功:o:o:( 刚开始的话,还不错,我很久以前用过这种,还有VBA形式的,不过现在是架设Web服务器,然后让他们通过网页访问!这样比较灵活,安全! 高手又把excel用活了 inpal 发表于 2013-2-25 15:27 static/image/common/back.gif
在上面的图片里已经说明了,刷新数据只要在表格上有字的部分右击点刷新就行了,或者在EXCEL“数据”标签 ...
十分感谢楼主{:soso_e100:} 好人啊
学习了, 怎么刷新excel中的数据,楼主能不能提供一种方法 本帖最后由 inpal 于 2013-2-24 16:47 编辑
沙发自己坐了。。。。。。顺便补充一下,这种方法可以运用到其他的各种报表,比如采购模块,生产模块,可以快速的查出自己想要的数据,可扩展性蛮强的,可以做好多辅助性的动作,可以缓解“加密盒已饱和”的情况。当然配合数据字典你就能做出好多好多好玩的。喜欢的就顶一下吧,新手不容易 嗯,不错,不过很早就知道了,还是顶一下 学习了:victory: 好东西,学习一下,收藏之。 嗯,不错,不过很早就知道了,还是顶一下 好想法啊,
好东西学习学习 学习了{:soso_e181:} 嗯,不错,非常感谢 学习了! jia332 发表于 2013-2-25 13:15 static/image/common/back.gif
学习了, 怎么刷新excel中的数据,楼主能不能提供一种方法
在上面的图片里已经说明了,刷新数据只要在表格上有字的部分右击点刷新就行了,或者在EXCEL“数据”标签上有个连接属性,在里面设置刷新时间,或者设置打开表格自动刷新数据