跳转至

使用计算脚本做表单

使用计算脚本做表单示例代码:

#include "数据字典";
(function(){
    //项目编号、项目名称、项目类型、项目负责人、合同金额、已开票金额、已到账金额
    var doc = getCurrentDocument();
    var projectId= doc.getItemValueAsString("签进合同ID");
    var projectName="";
    var sql=" select item_项目编号,item_项目名称,item_项目类型,item_项目负责人,合同金额_bak as item_已开合同金额,开票金额_bak as item_已开票金额, ";
    sql +="  到账金额_bak as item_已到帐金额 ,domainid  from tlk_项目 where item_项目编号 in ";
    sql += "(select distinct item_项目编号 from tlk_签进合同明细 where parent ='"+projectId+"' and item_项目编号 is not null ";
    sql +=" and item_项目编号 <> '')";
    var query = queryBySQL(sql);
    var html="";
    if(query!=null){
        html+="<table cellSpacing='0' cellPadding='1' width='100%' align='center' style='border:solid #cccccc;border-width:1px 0px 0px 1px;'><tbody> ";
        html+=" <tr style='line-height:22px;'> ";
        html+="         <td style='align:center;font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=200px;' >项目名称</td>  ";
        html+="         <td style='align:center;font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=50px' >项目编号</td> ";
        html+="         <td style='align:center;font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=50px' >项目类型</td>  ";
        html+="         <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;'  >项目负责人</td> ";
        html+="         <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=100px' >项目合同金额(元)</td> ";
        html+="         <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=100px' >已开票金额(元)</td> ";
        html+="         <td style='font-size:larger;font-family: Arial;border:solid #cccccc;border-width:0px 1px 1px 0px;background-color:#EFF0F1;width=100px' >已到账金额(元)</td> ";
        html+="</tr>";
        for(var its = query.iterator();its.hasNext();){
            var datas=its.next();  
            var xmNum=datas.getItemValueAsString("项目编号");
            var xmName=datas.getItemValueAsString("项目名称");
            var xmType_x=datas.getItemValueAsString("项目类型");
            var xmTypeName=getProjectTyle(xmType_x);
            var xmFzPeo_id=datas.getItemValueAsString("项目负责人");
            var xmFzPeo_name="";
            if(xmFzPeo_id!=null && xmFzPeo_id.trim().length>0){
                var userDoc=getUserById(xmFzPeo_id);
                if(userDoc!=null){
                    xmFzPeo_name=userDoc.getName();
                }
            }
            var xm_htMon=datas.getItemValueAsDouble("已开合同金额");
            var xm_kpMon=datas.getItemValueAsDouble("已开票金额");
            var xm_dzMon=datas.getItemValueAsDouble("已到帐金额");
            html+="<tr><td>"+xmName;
            html+="</td><td>"+xmNum;
            html+="</td><td>"+xmTypeName;
            html+="</td><td>"+xmFzPeo_name;
            html+="</td><td>"+xm_htMon;
            html+="</td><td>"+xm_kpMon;
            html+="</td><td>"+xm_dzMon;
            html+="</td></tr>";

        }
        html+=" </tbody></table>";
    }
    return html;
})();

脚本说明

该脚本使用计算脚本功能在表单中动态生成HTML表格。通过查询数据库获取项目相关信息,并以表格形式展示在表单的计算脚本字段中。

脚本功能

  1. 引入数据字典: 使用 #include "数据字典" 引入数据字典,可以使用自定义函数如 getProjectTyle()
  2. 查询项目数据: 根据当前文档的"签进合同ID"查询关联的项目信息
  3. 生成HTML表格: 动态生成包含项目信息的HTML表格
  4. 数据展示: 展示项目编号、项目名称、项目类型、项目负责人、合同金额、已开票金额、已到账金额等信息

关键步骤说明

1. 引入数据字典

#include "数据字典";

2. 查询数据

var sql=" select item_项目编号,item_项目名称,item_项目类型,item_项目负责人,合同金额_bak as item_已开合同金额,开票金额_bak as item_已开票金额, ";
sql +="  到账金额_bak as item_已到帐金额 ,domainid  from tlk_项目 where item_项目编号 in ";
sql += "(select distinct item_项目编号 from tlk_签进合同明细 where parent ='"+projectId+"' and item_项目编号 is not null ";
sql +=" and item_项目编号 <> '')";
var query = queryBySQL(sql);

3. 生成HTML表格

  • 创建表格头部(表头)
  • 遍历查询结果
  • 生成表格行(数据行)
  • 返回完整的HTML字符串

关键函数说明

  • #include "数据字典": 引入数据字典,可以使用自定义函数
  • getCurrentDocument(): 获取当前文档对象
  • queryBySQL(sql): 执行SQL查询
  • getProjectTyle(xmType_x): 从数据字典获取项目类型名称
  • getUserById(id): 根据用户ID获取用户对象
  • userDoc.getName(): 获取用户名称

使用场景

  • 在表单中动态展示关联数据
  • 生成统计报表
  • 展示主子表关联信息
  • 数据汇总展示
  • 自定义数据展示格式

扩展示例

示例1:简化版表格生成

(function(){
    var doc = getCurrentDocument();
    var sql = "select domainid,item_字段1,item_字段2 from tlk_表单名 where parent='"+doc.getId()+"'";
    var query = queryBySQL(sql);
    var html = "<table border='1'><tr><th>字段1</th><th>字段2</th></tr>";

    if(query != null){
        for(var it = query.iterator(); it.hasNext(); ){
            var data = it.next();
            html += "<tr>";
            html += "<td>" + data.getItemValueAsString("字段1") + "</td>";
            html += "<td>" + data.getItemValueAsString("字段2") + "</td>";
            html += "</tr>";
        }
    }
    html += "</table>";
    return html;
})();

示例2:带样式的表格

(function(){
    var doc = getCurrentDocument();
    var sql = "select domainid,item_名称,item_金额 from tlk_表单名";
    var query = queryBySQL(sql);
    var html = "<table style='width:100%;border-collapse:collapse;'>";
    html += "<thead><tr style='background-color:#f0f0f0;'>";
    html += "<th style='border:1px solid #ccc;padding:8px;'>名称</th>";
    html += "<th style='border:1px solid #ccc;padding:8px;'>金额</th>";
    html += "</tr></thead><tbody>";

    if(query != null){
        for(var it = query.iterator(); it.hasNext(); ){
            var data = it.next();
            html += "<tr>";
            html += "<td style='border:1px solid #ccc;padding:8px;'>" + data.getItemValueAsString("名称") + "</td>";
            html += "<td style='border:1px solid #ccc;padding:8px;'>" + data.getItemValueAsDouble("金额") + "</td>";
            html += "</tr>";
        }
    }
    html += "</tbody></table>";
    return html;
})();

HTML表格样式说明

脚本中使用的表格样式:

  • cellSpacing='0': 单元格间距为0
  • cellPadding='1': 单元格内边距为1
  • border:solid #cccccc: 边框颜色为灰色
  • background-color:#EFF0F1: 表头背景色为浅灰色
  • font-size:larger: 字体较大
  • font-family: Arial: 字体为Arial

注意事项

  • 计算脚本字段需要设置为"HTML"类型才能正确显示HTML内容
  • SQL查询需要注意性能,避免查询大量数据
  • HTML字符串拼接时注意转义特殊字符
  • 使用 #include 引入数据字典时,确保数据字典文件存在
  • 表格样式可以根据实际需求调整
  • 注意处理空值情况,避免显示异常
  • 用户ID转换为用户名时,需要判断用户是否存在

数据字典函数

如果使用了 #include "数据字典",可以在脚本中使用数据字典中定义的自定义函数,例如:

  • getProjectTyle(typeId): 获取项目类型名称
  • 其他自定义函数根据数据字典定义而定

本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1a4dhso2b0a
文档更新时间: 2023-09-16 06:51 作者:admin