inpal 发表于 2013-2-24 15:15:42

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:13:06

本帖最后由 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

琴墨留香 发表于 2013-11-1 12:58:02

楼主,首先感谢你做了一个这么好的教程,然后还是感谢你做了这么好的教程,最后还是感谢你做了这么好的教程{:soso_e104:}
忽然之间我怎么发现,我毕业后从事了ERP的工作脑子好像变得死板多了,一点儿创意也没有了,汗颜啊,:L我也得争取多研究研究啊!

reignaman 发表于 2013-2-25 15:34:51


    学习了!

burnway 发表于 2013-3-31 16:03:50

这个确实不错,好用,已经测试成功:o:o:(

cpmodel 发表于 2013-3-1 19:58:48

刚开始的话,还不错,我很久以前用过这种,还有VBA形式的,不过现在是架设Web服务器,然后让他们通过网页访问!这样比较灵活,安全!

xiaoq. 发表于 2013-3-1 17:19:10

高手又把excel用活了

jia332 发表于 2013-2-25 15:32:06

inpal 发表于 2013-2-25 15:27 static/image/common/back.gif
在上面的图片里已经说明了,刷新数据只要在表格上有字的部分右击点刷新就行了,或者在EXCEL“数据”标签 ...

十分感谢楼主{:soso_e100:} 好人啊

jia332 发表于 2013-2-25 13:15:32

学习了, 怎么刷新excel中的数据,楼主能不能提供一种方法

inpal 发表于 2013-2-24 15:20:56

本帖最后由 inpal 于 2013-2-24 16:47 编辑

沙发自己坐了。。。。。。顺便补充一下,这种方法可以运用到其他的各种报表,比如采购模块,生产模块,可以快速的查出自己想要的数据,可扩展性蛮强的,可以做好多辅助性的动作,可以缓解“加密盒已饱和”的情况。当然配合数据字典你就能做出好多好多好玩的。喜欢的就顶一下吧,新手不容易

睡醒的我 发表于 2013-2-24 16:54:54

嗯,不错,不过很早就知道了,还是顶一下

shasha7788 发表于 2013-2-24 16:59:38

学习了:victory:

point09k 发表于 2013-2-24 17:18:41

好东西,学习一下,收藏之。

wozengcong 发表于 2013-2-24 18:00:38

嗯,不错,不过很早就知道了,还是顶一下

永恒的爱恋 发表于 2013-2-25 09:15:34

好想法啊,

zhdl2004 发表于 2013-2-25 10:48:33

好东西学习学习

zhipeng_lu 发表于 2013-2-25 11:16:36

学习了{:soso_e181:}

plain 发表于 2013-2-25 11:45:43

嗯,不错,非常感谢

jiangyuxinlove 发表于 2013-2-25 13:18:44

    学习了!

inpal 发表于 2013-2-25 15:27:11

jia332 发表于 2013-2-25 13:15 static/image/common/back.gif
学习了, 怎么刷新excel中的数据,楼主能不能提供一种方法

在上面的图片里已经说明了,刷新数据只要在表格上有字的部分右击点刷新就行了,或者在EXCEL“数据”标签上有个连接属性,在里面设置刷新时间,或者设置打开表格自动刷新数据
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: EXCEL 调用SQL 取用友数据做表