310 likes | 502 Views
直接 SQL 报表. 叶玫 计算机工程技术学院. 报表定义. 报表:用表格、图表等格式来动态显示数据。帮助企业更方便的访问、格式化数据,把数据信息以可靠和安全的方式呈现给企业用户 BOS IDE 提供三种报表的方式,在项目面板查看. 直接 SQL 报表. 直接 SQL 报表直接使用 SQL 语句对 K3 底层数据库进行查询 把查询返回结果作为报表内容 要求用户熟悉 K3 的后台数据库结构 查看数据库表结构的工具:菜单视图 — 字段描述查询工具. K3 各子系统包含的 物理表.
E N D
直接SQL报表 叶玫 计算机工程技术学院
报表定义 • 报表:用表格、图表等格式来动态显示数据。帮助企业更方便的访问、格式化数据,把数据信息以可靠和安全的方式呈现给企业用户 • BOS IDE提供三种报表的方式,在项目面板查看
直接SQL报表 • 直接SQL报表直接使用SQL语句对K3底层数据库进行查询 • 把查询返回结果作为报表内容 • 要求用户熟悉K3的后台数据库结构 • 查看数据库表结构的工具:菜单视图—字段描述查询工具 K3各子系统包含的物理表
注意:字段描述查询工具只能查找老单据(工业单据)对应的物理表和K3系统原有的辅助物理表,查不到BOS单据的物理表,需要对BOS单据设置之后才能看到注意:字段描述查询工具只能查找老单据(工业单据)对应的物理表和K3系统原有的辅助物理表,查不到BOS单据的物理表,需要对BOS单据设置之后才能看到
BOS单据关联的物理表 • BOS单据可能对应的物理表有四张 1、单据头对应的物理表 2、单据体对应的物理表 3、基础资料字段对应的物理表 4、BOS基础资料(交货地点)对应的物理表 1、2、4三张表是创建BOS单据之后生成的新表; 3是K3原有的表,在字段描述查询工具中可以找到
SQL报表定义 • 案例一:根据入库通知单生成直接SQL报表,分析供应商来料数量 • 报表名:供应商来料数量分析 • 报表内容:供应商所销售的每项物料入中间库的应收、实收数量。用户在调用报表时动态指定具体查询哪个供应商的来料情况 • 报表列标题:供应商、应收数量、实收数量
SQL报表定义 • 案例分析: • 本例简单查询供应商单笔销售的数量情况,不汇总、不统计 • SQL查询要求:以供应商作为查询条件,直接把满足条件的每条分录的应收数量、实收数量返回;需要把字段重命名为中文输出 • 涉及的物理表 t_BosRKD(单据头)、t_BosRKDEntry(单据体)、t_Item(基础资料主表)
t_Item 基础资料主表 • t_Item表存储了所有的标准基础资料 ,包括核算项目和一般基础资料 • 一项基础资料对应表中的一行数据
t_Item 基础资料主表重要字段说明 • FItemID:主键,每项基础资料的唯一标识,称为“基础资料内码”。其他表如果引用了基础资料,建立跟t_Item的主外键关系,引用的都是FItemID字段。字段值是设置基础资料时由后台自动生成,用户不能直接录入。 • FNumber:基础资料代码,是设置基础资料时用户录入的。 • FName:基础资料名称,是设置基础资料时用户录入的。要在报表显示供应商名称,必须返回这个字段
t_BosRKD表(单据头) • 一张单据对应表中的一行数据 • 用到的字段:FID(单据内码)、FSupplier(供应商) • FSupplier是外键,参考t_Item表
t_BosRKDEntry表(单据体) • 所有入库通知单分录数据都存储在该表中,一条分录对应表中一行数据 • 用到的字段:FID(单据内码)、FCommitQty(实收数量) • FID是外键,参考t_BosRKD,说明当前分录属于哪张单据 同一张单据上的分录
t_Item(基础资料主表) FItemID (主键,基础资料唯一标识) t_BOSRKD(入库通知单单据头) FID (主键,单据内码) FSupplier(外键,供应商内码) t_BOSRKDEntry (入库通知单单据体) FEntryID (标识分录) FID (外键,单据内码) 三表关系图
SQL报表定义 • 案例分析: • SQL语句构建 select t_Item.fname as 供应商, FMustQty as 应收数量,FCommitQty as 实收数量 from t_BOSRKDEntry inner join t_BOSRKD on t_BOSRKDEntry.fid= t_BOSRKD.fid inner join t_Item on t_BOSRKD.fsupplier=t_Item.fItemid where t_Item.fname=’某供应商名’ 在报表向导中用”关键字“取代
SQL报表定义 取代where子句查询值的”关键字“ • 生成SQL报表 • 直接SQL报表—新建直接SQL报表,下一步进入自定义报表向导 输入SQL语句
SQL报表定义 • 关键字说明: • BOS把最可能作为SQL查询条件的字段内容(例如基础资料相关字段)作为关键字列出 • 用*关键字*代表值的下限(起始值),用#关键字#代表值的上限(截止值),用@关键字@代表确定值 • 用户可以在已有关键字的基础上增加自定义关键字(关键字维护)
SQL报表定义 • 下一步 SQL语句中的字段名 报表中最后显示的列标题 设置这列在报表中是否可见
SQL报表定义 • 下一步,完成
SQL报表定义 • 测试:右键单击刚生成的报表—直接SQL报表测试 SQl语句where子句中,用关键字取代的部分,F7键选取供应商
SQL报表定义 • 其他操作: • 在报表结果的字体菜单修改字体,美化格式 • 点击”过滤“,会再次弹出报表测试界面,可替换关键字的值,查询其他供应商的销售情况
SQL报表定义 • 案例二:修改“供应商来料数量分析”报表 • 案例1生成的报表,只能看到供应商发货的数量,看不到发货的物料名称,报表内容不完整,在报表中增加显示物料代码、物料名称、交货日期
案例分析 • 增加物料名称,需要修改任务1的SQL语句,把物料名称作为查询结果列 • 和供应商一样,物料也是标准的基础资料,存储在t_Item表,物料名称对应的字段也是fname • t_BOSRKDEntry表(单据体)的FMatID(物料代码)字段,存储的是物料的基础资料内码,外键,参考t_Item表
修改后的SQL语句 select t3.fname 供应商,t4.fnumber 物料代码,t4.fname 物料名称,t2.fmustqty 应收数量,t2.fcommitqty 实收数量,t2.fdeldate 交货日期 from t_bosrkd t1 Inner joint_bosrkdentry t2 Ont1.fid=t2.fid Inner joint_item t3 Ont1.fsupplier=t3.fitemid Inner joint_item t4 Ont2.fmatid=t4.fitemid wheret3.fname='@SuppName@'
SQL报表定义 • 案例三:按时间段汇总总寄存库每项物料的实收总数量 • 报表名:中间库物料实收数量汇总 • 报表内容:按时间段统计每项物料在该时间段的实收总数量,例如统计2012年各项物料的实收总数量。时间以入库通知单上的交货日期为准,用户在调用报表时动态指定查询的时间段。 • 报表列标题:物料代码、物料名称、实收总数量
案例分析 • 本案使用两张物理表: t_BOSRKDEntry(单据体)、t_Item(基础资料主表) • 需要对每项物料的实收数量进行求和,要对物料进行分组,并对实收数量求和 • 分组:Group by • 求和:聚合函数SUM()
SQL语句 • 本案需要按物料分组,然后对物料的实收数量求和 Select FItemID 物料代码, FName 物料名称, sum(FCommitQty) 实收总数量 From t_Item Inner join t_BOSRKDEntry On t_Item.FItemID=t_BOSRKDEntry.fmatID Where FDelDate>=’某年某月某日’ and FDelDate<=’某年某月某日’ Group by FItemID, FName 在报表向导中用”关键字“取代
设置SQL语句和查询关键字 • 调用报表时指定交货日期时间段,查询关键字是日期