NetSuite 固定资产报表自定义原理及应用

NetSuite固定资产模块一直处于功能迭代更新中,目前23.2的版本能够支持报表的局部自定义,比如增加原值或已折旧期间,甚至固定资产自定义字段等。但是当我们在实际项目中,会遇到一些挑战,例如:

  • 固定资产原值字段是增加上了,但是“汇总行”为啥没有数值?
  • 能否实现“期初、发生、结余”的固定资产报表,与资产负债表相呼应?
  • 能否调整格式,因为目前的列都挤在了一起,太难看了。

这些问题都不是可以通过前台“报表定制”界面实现的。

当我们深入分析了代码后,发现可以通过UI之下的功能来回应上述的需求。

我们来描述一下固定资产报表客制的基本原理。

  • 报表客制UI,也就是NetSuite的“Customize FAM Report Template”,可以进行客制字段的数据定义,这是客制报表数据集的来源。客制字段的命名特征为“_cfN_”。其中N为数字,代表不同的固定资产报表类型。
  • 系统会生成“XML”格式的客制模板,保存在文件柜中。目录因系统设定不同,可以在固定资产System Setup中的Report参数“FOLDER TO USE FOR REPORTING (INTERNAL ID) ”中配置。
  • 当生成报表时,系统会把相应数据按照“报表客制表”定义的数据源拉出,然后调用“高级PDF”功能,按照“XML客制模板”进行内容输出。“高级PDF”功能就是我们做各类“高级”打印模板的工具。这个工具支持Freemarker,所以能做出很多的变化,包括编程和格式定义。这对我们是至关重要的。

了解了上述架构,我们就可以着眼于XML格式的客制模板了。客制完成后,可以在固定资产的System Setup中报表模板中进行选择。

下面是一个“期初、发生、结余”的固定资产报表的模板,供参考。

<head>
    <meta charset="utf-8" />
    <link name="NotoSansThai" type="font" subtype="opentype" 
          src="NetSuiteFonts/NotoSansThai-Regular.ttf" 
          src-bold="NetSuiteFonts/NotoSansThai-Bold.ttf" 
          src-italic="NetSuiteFonts/NotoSansThai-Regular.ttf" 
          src-bolditalic="NetSuiteFonts/NotoSansThai-Bold.ttf" 
          bytes="2" />
    <style>
        body {
            font-family: Arial, Verdana, Helvetica, NotoSansThai, stsong, msung, mhei, heiseimin, heiseikakugo, hygothic, hysmyeongjo;
            font-size: 10px;
        }
    </style>
    <macrolist>
      <macro id="pagenum">
        <p align="right">
           Page <pagenumber/> of <totalpages/>
        </p>
      </macro>
    </macrolist>
</head>
<body size="420mm 297mm" footer="pagenum">
    <#assign lineIndex = 0>
    <#assign listSize = report.recmachcustrecord_assetregister_repparent?size>
    <#list report.recmachcustrecord_assetregister_repparent as line>
        <#assign lineIndex = lineIndex + 1>
        <#assign lineType = line.custrecord_assetregister_linetype>
        <#if lineType == "sub_header">
        <p style="font-size: 18px; color: #003399">Asset Register Report</p>
        <table>
            <tr>
                <td colspan="20" style="font-weight: bold; font-size: 12px;"><p align="center">Fixed Assets Management <#if line.custrecord_assetregister_sub != "">- ${line.custrecord_assetregister_sub} <#if line.custrecord_assetregister_currency != "">${line.custrecord_assetregister_currency}</#if></#if></p></td>
            </tr>
            <tr>
                <td colspan="20"><p align="center">${line.custrecord_assetregister_posting}<#if line.custrecord_assetregister_acctgbook != '0'> - ${line.custrecord_assetregister_acctgbook}</#if></p></td>
            </tr>
            <tr>
                <td colspan="20"><p align="center">${line.custrecord_assetregister_altdep} - ${report.custrecord_assetregisterrep_selected}</p></td>
            </tr>
            <tr>
                <td colspan="20"><p align="center">${report.custrecord_assetregisterrep_startdate?string["MMM d, yyyy"]} - ${report.custrecord_assetregisterrep_enddate?string["MMM d, yyyy"]}<br/></p></td>
            </tr>
            <tr>
                <td style="font-weight: bold;" rowspan="2"><p align="left">Asset Type</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="left">ID</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="left">Name</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="left">Depreciation Start Date</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="left">AL</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="left">RL</p></td>
                <td style="font-weight: bold;" colspan="3"><p align="center">Beginning Balance</p></td>
				<td style="font-weight: bold;" rowspan="2"><p align="right">Acquisitions</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="right">Depreciation</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="right">Transfers</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="right">Revaluations</p></td>
                <td style="font-weight: bold;" rowspan="2"><p align="right">Disposals</p></td>
				<td style="font-weight: bold;" colspan="3"><p align="center">Ending Balance</p></td>
            </tr>
            <tr>
                <td style="font-weight: bold;"><p align="center">Cost</p></td>
                <td style="font-weight: bold;"><p align="center">Depreciation</p></td>
                <td style="font-weight: bold;"><p align="center">Net Book Value</p></td>
				<td style="font-weight: bold;"><p align="center">Cost</p></td>
                <td style="font-weight: bold;"><p align="center">Depreciation</p></td>
                <td style="font-weight: bold;"><p align="center">Net Book Value</p></td>
            </tr>
            <#elseif lineType == "horizontal_rule">
            <tr>
                <td colspan="6"></td>
                <td colspan="11" style="border-top-style: solid; border-top-width: 1px;" margin-bottom="1px"> </td>
            </tr>
            <#elseif lineType == "double_horizontal_rule">
            <tr>
                <td colspan="6"></td>
                <td colspan="11" style="border-top-style: solid; border-top-width: 1px;" margin-bottom="1px"> </td>
            </tr>
            <tr>
                <td colspan="6"></td>
                <td colspan="11" style="border-top-style: solid; border-top-width: 1px;" margin-bottom="4px"> </td>
            </tr>
        </table> <#if lineIndex lt listSize-1><pbr /><br /></#if>
            <#else>
            <tr>
                <#if lineType == "type_header">
                       <td colspan="20" ><br /></td>
                <#else>
                    <#if lineType == "type_total">
                    <td colspan="6"> </td>
                    <#else>
                    <td><p align="left">${line.custrecord_assetregister_assettype}</p></td>
                    <td><p align="left">${line.custrecord_assetregister_assetid}</p></td>
                    <td><p align="left">${line.custrecord_assetregister_assetname}</p></td>
                    <td><p align="left">${line.custrecord_assetregister_deprstartdate}</p></td>
                    <td><p align="left">${line.custrecord_assetregister_assetlife}</p></td>
                    <td><p align="left">${line.custrecord_assetregister_assetlife-line.custrecord_cf0_assetlifeunits}</p></td>
                    </#if>
					<#assign additions = line.custrecord_assetregister_additions>
					<#assign transfers = line.custrecord_assetregister_transfers>
					<#assign revaluation = line.custrecord_assetregister_revaluation>
					<#assign writedown = line.custrecord_assetregister_writedown>
					<#assign sale = line.custrecord_assetregister_sale>
					<#assign disposals = line.custrecord_assetregister_disposals>
                    <td><p align="right">${line.custrecord_assetregister_begincost?string["#,##0.00;(#,##0.00)"]}</p></td>
                    <td><p align="right">${line.custrecord_assetregister_begindepr?string["#,##0.00;(#,##0.00)"]}</p></td>
                    <td><p align="right">${line.custrecord_assetregister_beginbal?string["#,##0.00;(#,##0.00)"]}</p></td>
                    <td><p align="right">${line.custrecord_assetregister_additions?string["#,##0.00;(#,##0.00)"]}</p></td>
                    <td><p align="right">${line.custrecord_assetregister_depreciation?string["#,##0.00;(#,##0.00)"]}</p></td>
                    <td><p align="right">${line.custrecord_assetregister_transfers?string["#,##0.00;(#,##0.00)"]}</p></td>
                    <td><p align="right">${(revaluation+writedown)?string["#,##0.00;(#,##0.00)"]}</p></td>
					<td><p align="right">${(line.custrecord_assetregister_sale+line.custrecord_assetregister_disposals)?string["#,##0.00;(#,##0.00)"]}</p></td>
					<td><p align="right">${(line.custrecord_assetregister_begincost+additions-transfers-revaluation-writedown-sale-disposals)?string["#,##0.00;(#,##0.00)"]}</p></td>
					<td><p align="right">${(line.custrecord_assetregister_begindepr+line.custrecord_assetregister_depreciation)?string["#,##0.00;(#,##0.00)"]}</p></td> 
                    <td><p align="right">${line.custrecord_assetregister_netbookvalue?string["#,##0.00;(#,##0.00)"]}</p></td>

                </#if>
            </tr>
            </#if>
        
    </#list>
        
    <#if report.recmachcustrecord_assetregister_repparent_zerov?size gt 0>
        <br /><p style="font-size: 10px; font-weight: bold">Subsidiaries with zero values</p>
        <#list report.recmachcustrecord_assetregister_repparent_zerov as line>
            <p style="font-size: 10px;">${line.custrecord_assetregister_sub}</p>
        </#list>
    </#if>
</body>

 如果有任何关于NetSuite的问题,欢迎来谈。邮箱:service@truston.group

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/136545.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python:Unittest框架快速入门:用例、断言、夹具、套件、HTML报告、ddt数据驱动

快速看了套Unittest的入门教程 软件测试全套资料赠送_哔哩哔哩_bilibili软件测试全套资料赠送是快速入门unittest测试框架&#xff01;全实战详细教学&#xff0c;仅此一套&#xff01;的第1集视频&#xff0c;该合集共计11集&#xff0c;视频收藏或关注UP主&#xff0c;及时了…

servlet 的XML Schema从哪边获取

servlet 6.0的规范定义&#xff1a; https://jakarta.ee/specifications/servlet/6.0/ 其中包含的三个XML Schema&#xff1a;web-app_6_0.xsd、web-common_6_0.xsd、web-fragment_6_0.xsd。但这个页面没有给出下载的链接地址。 正好我本机有Tomcat 10.1.15版本的源码&#…

【Web自动化测试】如何生成高质量的测试报告

运行了所有测试用例&#xff0c;控制台输入的结果&#xff0c;如果很多测试用例那也不能够清晰快速的知道多少用例通过率以及错误情况。 web自动化测试实战之批量执行测试用例场景: 运行 AllTest.py 文件后得到的测试结果不够专业&#xff0c;无法直观的分析测试结果,我们能否…

文心一言 VS 讯飞星火 VS chatgpt (133)-- 算法导论11.2 5题

五、用go语言&#xff0c;假设将一个具有n个关键字的集合存储到一个大小为 m 的散列表中。试说明如果这些关键字均源于全域U&#xff0c;且|U|>nm&#xff0c;则U 中还有一个大小为n 的子集&#xff0c;其由散列到同一槽位中的所有关键字构成&#xff0c;使得链接法散列的查…

数据结构:树的存储结构(孩子兄弟表示法,树和森林的遍历)

目录 1.树的存储结构1.双亲表示法&#xff08;顺序存储&#xff09;1.优缺点 2.孩子表示法&#xff08;顺序链式存储&#xff09;3.孩子兄弟表示法&#xff08;链式存储&#xff09;4.森林与二叉树的转换 2.树的遍历1.先根遍历2.后根遍历3.层序遍历 3.森林的遍历1.先序遍历2.中…

接口自动化测试之Requests模块详解

Python中&#xff0c;系统自带的urllib和urllib2都提供了功能强大的HTTP支持&#xff0c;但是API接口确实太难用了。Requests 作为更高一层的封装&#xff0c;在大部分情况下对得起它的slogan——HTTP for Humans。 让我们一起来看看 Requests 这个 HTTP库在我们接口自动化测试…

阿里云ACK(Serverless)安装APISIX网关及APISIX Ingress Controller

在k8s上安装apisix全家&#xff0c;通过helm安装很简单&#xff0c;但是会遇到一些问题。 安装 首先登录阿里云控制台&#xff0c;在ACK集群详情页&#xff0c;进入CloudShell&#xff0c;执行下面helm命令安装apisix、apisix-ectd、apisix-dashboard和apisix-ingress-contro…

springboot的配置信息的设置和读取(application.properties/application.yml)

springboot提供了两种配置信息的文件格式&#xff0c;application.properties和application.yml&#xff0c;基于直接明了&#xff0c;使用方便和高效的前提下下面的配置均采用yml格式配置&#xff0c; 注意 yml采用缩减方式来排列键后面紧跟冒号&#xff0c;然后空格&#x…

git的分支及标签使用及情景演示

目录 一. 环境讲述 二.分支 1.1 命令 1.2情景演练 三、标签 3.1 命令 3.2 情景演示 ​编辑 一. 环境讲述 当软件从开发到正式环境部署的过程中&#xff0c;不同环境的作用如下&#xff1a; 开发环境&#xff1a;用于开发人员进行软件开发、测试和调试。在这个环境中…

揭秘:车企如何利用5R模式在数位行销领域取得突破

01 车企进入“大逃杀”时间 汽车行业一边是出口“捷报频传”&#xff0c;一边是内销“压力山大”。 内销的难&#xff0c;在之前中部某省的政府“骨折价”补贴掀起的“价格战”中已经可见一斑。这一颇具标志性的事件反映了汽车行业&#xff0c;尤其是燃油车行业正处在巨大的转…

python实现一个简介桌面倒计时小程序

本章内容主要是利用python制作一个简单的桌面倒计时程序&#xff0c;包含开始、重置 、设置功能。 目录 一、效果演示 二、程序代码 一、效果演示 二、程序代码 #!/usr/bin/python # -*- coding: UTF-8 -*- """ author: Roc-xb """import tkin…

HslCommunication模拟西门子读写数据

导入HslCommunication C#端代码&#xff08;上位机&#xff09; 这里要注意的是上位机IP用的当前电脑的IP。 using HslCommunication; using HslCommunication.Profinet.Siemens; using System; using System.Collections.Generic; using System.ComponentModel; using Syste…

Linux之基础开发工具gdb调试器的使用(三)

文章目录 一、Linux调试器-gdb使用1、安装gdb2、背景3、Debug和release4、区分Debug和release 二、Linux调试器-gdb命令演示1、显示指定行之后的代码&#xff08;自动记录最后一条指令&#xff09;2、断点1、打印断点2、查看断点3、删除断点4、使能&#xff08;禁用/开启&#…

基于C#+WPF编写的调用讯飞星火大模型工具

工具源码&#xff1a;https://github.com/lishuangquan1987/XFYun.SparkChat 工具效果截图&#xff1a; 支持流式输出: 其中ApiKey/ApiSecret/AppId需要自己到讯飞星火大模型官网去注册账号申请&#xff0c;免费的。 申请地址&#xff1a;https://xinghuo.xfyun.cn/ 注册之…

Leetcode—2469.温度转换【简单】

2023每日刷题&#xff08;二十六&#xff09; Leetcode—2469.温度转换 实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ double* convertTemperature(double celsius, int* returnSize) {double* ans (double *)malloc(sizeof(do…

ValueError: ‘x‘ and ‘y‘ must have the same size

ValueError: ‘x’ and ‘y’ must have the same size 问题描述 出错代码 axes[0].errorbar(dates_of_observation, observed_lai, yerrstd_lai, fmt"o")X是观测的日期&#xff0c;16天&#xff0c;而且数据也是对应的16个&#xff0c;为什么不对应呢&#xff1f;…

字节面试:请说一下DDD的流程,用电商系统为场景

说在前面 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业字节、如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的面试题&#xff1a; 谈谈你的DDD落地经验&#xff1f; 谈谈你对DDD的理解&…

C++语法---模板进阶知识

绪论​ “那些看似不起波澜的日复一日&#xff0c;会在某天让你看到坚持的意义。”本篇文章主要写到非类型的模板参数、模板的特化、模板的分离编译问题、以及适配器和仿函数的使用讲解&#xff0c;在之前已经将模板的基本使用进行了学习&#xff08;可见c模板&#xff09;话不…

fastANI-基因组平均核酸一致性(ANI)计算

文章目录 简介安装使用Many to Man-使用基因组路径作为输入One to One 结果其他参数说明可视化两个基因组之间的保守区域并行化 简介 FastANI 是为快速计算全基因组平均核苷酸同一性&#xff08;Average Nucleotide Identity&#xff0c;ANI&#xff09;而开发的&#xff0c;无…

【学习笔记】Understanding LSTM Networks

Understanding LSTM Networks 前言Recurrent Neural NetworksThe Problem of Long-Term DependenciesLSTM Networks The Core Idea Behind LSTMsStep-by-Step LSTM Walk ThroughForget Gate LayerInput Gate LayerOutput Gate Layer Variants on Long Short Term MemoryConclus…