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

news2024/11/17 9:25:42

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java Web——前端HTML入门

目录 HTML&CSS3&JavaScript简述 1. HTML概念 2. 超文本 3. 标记语言 4. HTML基础结构 5. HTML基础词汇 6. HTML语法规则 7. VS Code 推荐使用的插件 8. 在线帮助文档 HTML&CSS3&JavaScript简述 HTML 主要用于网页主体结构的搭建&#xff0c;像一个毛坯…

【FAQ】Gradle开发问题汇总

1. buildSrc依赖Spring Denpendency时报错 来自预编译脚本的插件请求不能包含版本号。请从有问题的请求中删除该版本&#xff0c;并确保包含所请求插件io.spring.dependency-management的模块是一个实现依赖项 解决方案 https://www.5axxw.com/questions/content/uqw0grhttps:/…

怎么做到高性能网络IO?

为什么要做高性能网络IO。主要是解决c10&#xff0c;c10M问题 最开始的时候我们走的内核协议栈&#xff0c;走内核协议栈其实性能比较低&#xff0c;因为我们之前介绍的时候需要拷贝两次 但是我们采用用户态协议栈可以少拷贝一次&#xff0c;可以大大提高效率&#xff0c; 步骤…

阿里系APP崩了?回应来了!

最近&#xff0c;阿里云遭遇了一场可怕的疑似故障&#xff0c;引起了广泛的关注和热议。各种消息纷传&#xff0c;阿里云盘崩了&#xff0c;淘宝又崩了&#xff0c;闲鱼也崩了&#xff0c;连钉钉也不幸中招。这一系列故障让人不禁发问&#xff1a;阿里系的APP都崩了&#xff0c…

计算机中丢失msvcr120.dll文件怎么修复?找不到msvcr120.dll五种完美修复方案

今天我想和大家分享的是关于“msvcr120.dll丢失的问题的5个解决方法”。在我们日常的工作生活中&#xff0c;或许大家都曾遇到过这样的问题&#xff0c;那么&#xff0c;了解它的解决方法是非常必要的。 首先&#xff0c;让我们来了解一下msvcr120.dll是什么文件。简单来说&am…

零基础算法还原01以及使用python和JS还原C++部分细节

题目一 使用jadx 打开algorithmbase_10.apk JAVA层 使用Frida获取先生成的随机字符串 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 // 定义一个名为hook_js的JavaScript函数 function hook_js(){ // 使用Java.perform()函数来…

Git Commit 之道:规范化 Commit Message 写作指南

1 commit message 规范 commit message格式都包括三部分&#xff1a;Header&#xff0c;Body和Footer <type>(<scope>): <subject><body><footer>Header是必需的&#xff0c;Body和Footer则可以省略 1.1 Header Type&#xff08;必需&#xf…

【Qt之Model/View】编程

Model/View编程介绍 Qt包含一组使用模型/视图架构来管理数据和用户呈现的关系的视图类。此架构引入的功能分离使开发人员可以更灵活地自定义项的呈现方式&#xff0c;并提供标准的模型接口&#xff0c;以允许各种数据源与现有项视图一起使用。在本文档中&#xff0c;我们简要介…

qemu 之 uboot、linux 启动

目录 编译uboot、kernel 编译启动从 uboot 中引导启动 linux注参考 本文主要说明 arm64 在 qemu 上的相关启动。 编译 使用的是 qemu-8.1.1 版本&#xff0c;编译命令如下: ../configure --cc/usr/local/bin/gcc --prefix/home/XXX/qemu_out --enable-virtfs --enable-slir…

网络原理-UDP/TCP详解

一. UDP协议 UDP协议端格式 由上图可以看出&#xff0c;一个UDP报文最大长度就是65535. • 16位长度&#xff0c;表示整个数据报&#xff08;UDP首部UDP数据&#xff09;的最大长度&#xff08;注意&#xff0c;这里的16位UDP长度只是一个标识这个数据报长度的字段&#xff0…

[Android]修改应用包名、名称、版本号、Icon以及环境判断和打包

1.修改包名 在Android Studio中更改项目的包名涉及几个步骤&#xff1a; 打开项目结构: 在Android Studio中&#xff0c;确保您处于Android视图模式&#xff08;在左侧面板顶部有一个下拉菜单可以选择&#xff09;。 重命名包名: 在项目视图中&#xff0c;找到您的包名&…

Linux如何修改主机名(hostname)(亲测可用)

文章目录 背景Linux如何修改主机名&#xff08;hostname&#xff09;方法方法1. 使用 hostnamectl 命令示例 2. 编辑 /etc/hostname 文件注意事项 背景 我创建虚拟机的时候没设置主机名&#xff0c;现在显示localhost&#xff0c;有点尴尬&#x1f605;&#xff1a; 需要重新设…

深入了解JVM和垃圾回收算法

1.什么是JVM&#xff1f; JVM是Java虚拟机&#xff08;Java Virtual Machine&#xff09;的缩写&#xff0c;是Java程序运行的核心组件。JVM是一个虚拟的计算机&#xff0c;它提供了一个独立的运行环境&#xff0c;可以在不同的操作系统上运行Java程序。 2.如何判断可回收垃圾…

单链表按位序与指定结点 删除

按位序删除(带头结点) #define NULL 0 #include<stdlib.h>typedef struct LNode {int data;struct LNode* next; }LNode, * LinkList;//按位序删除&#xff08;带头结点&#xff09; bool ListInsert(LinkList& L, int i, int& e) {if (i < 1)return false;L…

【Java 进阶篇】JQuery DOM操作:轻松驾驭网页内容的魔法

在前端开发的舞台上&#xff0c;DOM&#xff08;文档对象模型&#xff09;是我们与网页内容互动的关键。而JQuery作为一个轻量级的JavaScript库&#xff0c;为我们提供了便捷而强大的DOM操作工具。在本篇博客中&#xff0c;我们将深入探讨JQuery的DOM内容操作&#xff0c;揭开这…

基于Matlab+ AlexNet神经网络的动物识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Matlab和AlexNet神经网络的动物识别系统可以用于自然图像识别等场景&#xff0c;以下是一个基本的介绍设计步骤…

ARM64 linux并发与同步之内存屏障

1.2 内存屏障 1.2.1 概念理解 原理部分比较苦涩难懂&#xff0c;我们先不过多详细介绍这部分的由来和经过&#xff0c;接下来着重讲解什么用途和实现&#xff1b; ARM64架构中提供了3条内存屏障指令。 数据存储屏障(Data Memory Barrier, DMB)指令。数据同步屏障(Data Synch…

Thinkphp8 - 连接多个数据库

// 数据库连接配置信息connections > [mysql > [// 数据库类型type > mysql,// 服务器地址hostname > 127.0.0.1,// 数据库名database > thinkphp,// 用户名username > env(DB_USER, root),// 密码password >…

Yolo自制detect训练

Install 把代码拉下来 GitHub - ultralytics/yolov5 at v5.0 然后 pip install -r requirements.txt 安装完了,运行一下detect.py即可 结果会保存在对应的目录下 Intro ├── data:主要是存放一些超参数的配置文件(这些文件(yaml文件)是用来配置训练集和测试集还有验…

clouldcompare工具使用

文章目录 1.界面1.1 布局1.3 视觉显示方向1.4 放大镜1.5 建立旋转中心2.快速入门2.1 剪裁2.2 多点云拼接 1.界面 1.1 布局 参考&#xff1a;https://blog.csdn.net/lovely_yoshino/article/details/129595201 1.3 视觉显示方向 1.4 放大镜 1.5 建立旋转中心 2.快速入门 2.1 …