当前位置: 首页 > news >正文

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

相关文章:

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

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

【复杂网络建模】——基于关联矩阵构建超图网络

目录 一、复杂网络介绍 二、常规的构建方法 三、基于关联矩阵构建超图 一、复杂网络介绍 复杂网络是指由大量相互连接的元素或节点构成的网络,这些节点之间的连接关系通常是非常复杂和多样化的。这种网络结构通常用图论来表示,其中节点表示网络中的个体或元素,边表示它们…...

学习c#的第八天

目录 C# 方法 C# 中定义方法 C# 中调用方法 递归方法调用 参数传递 值参数 引用参数 输出参数 常见题 ref 和 out 的区别 方法中参数的类型有几种 扩展方法 对于复杂引用类型参数传递的控制 C# 方法 C# 中定义方法 在C#中定义方法时&#xff0c;需要遵循以下结构…...

我心目中的分布式操作系统

这是一位网友发给我的文字&#xff0c;我原样复制粘贴发出来给大家&#xff0c;他的观点我不过多评论&#xff0c;也不代表公司和研发团队的立场&#xff0c;但是最后一段本人不同意&#xff0c;因为Laxcus分布式操作系统已经发布了六个版本&#xff0c;在很多领域广泛部署使用…...

新型的铁塔基站“能源管家”

安科瑞 崔丽洁 引言&#xff1a;随着5G基站的迅猛发展&#xff0c;基站的能耗问题也越来越突出&#xff0c;高效可靠的基站配电系统方案&#xff0c;是提高基站能耗使用效率&#xff0c;实现基站节能降耗的重要保证&#xff0c;通过多回路仪表监测每个配电回路的用电负载情况&a…...

数字孪生智慧园区:大数据驱动下的运营管理革新

随着物联网、大数据、云计算等技术的飞速发展&#xff0c;数字孪生技术应运而生&#xff0c;它将物理世界与数字世界紧密连接起来&#xff0c;为各行各业提供了前所未有的解决方案。智慧园区作为城市的重要组成部分&#xff0c;通过数字孪生技术&#xff0c;可以实现更加高效、…...

sqli-labs关卡12(基于post提交的双引号闭合的字符型注入)通关思路

文章目录 前言一、回顾第十一关知识点二、靶场第十二关通关思路1、判断注入点2、爆显位个数3、爆显位位置4、爆数据库名5、爆数据库表名6、爆数据库列名7、爆数据库数据 总结 前言 此文章只用于学习和反思巩固sql注入知识&#xff0c;禁止用于做非法攻击。注意靶场是可以练习的…...

开放领域问答机器人2——开发流程和方案

开放领域问答机器人是指在任何领域都能够回答用户提问的智能机器人。与特定领域问答机器人不同&#xff0c;开放领域问答机器人需要具备更广泛的知识和更灵活的语义理解能力&#xff0c;以便能够回答各种不同类型的问题。 开发开放领域问答机器人的流程和方案可以包括以下步骤…...

pandas 常用45个操作方法(详解)

1、query函数进行数据筛选 相当于 bool 索引 data.query("Graduate_year==2020 & Language==Java")​df.query("Language in [CPP,C,C#]") pandas.DataFrame.query(self, expr, inplace = False, **kwargs)​Expr 评估查询字符inplace=False 修改数…...

PHP判断扫码支付扫码条码支付宝微信区分

微信&#xff1a;用户付款码规则&#xff1a;18位纯数字&#xff0c;前缀以10、11、12、13、14、15开头 支付宝&#xff1a;25~30开头的长度为16~24位的数字&#xff0c;实际字符串长度以开发者获取的付款码长度为准 <?php /*** 判断扫码支付的方式* param string $code 扫…...

一文了解芯片测试项目和检测方法 -纳米软件

芯片检测是芯片设计、生产、制造成过程中的关键环节&#xff0c;检测芯片的质量、性能、功能等&#xff0c;以满足设计要求和市场需求&#xff0c;确保芯片可以长期稳定运行。芯片测试内容众多&#xff0c;检测方法多样&#xff0c;今天纳米软件将为您介绍芯片的检测项目都有哪…...

【npm 错误】:npm ERR! code ERESOLVE、npm ERR! ERESOLVE could not resolve问题

用过npm的小伙伴都会有这么一个情况出现&#xff0c;就是npm install /npm install xxxx 会出现改一连串的错误&#xff0c;如下&#xff1a; 解决办法&#xff1a; 只要在npm install后面加上--legacy-peer-deps就可以解决问题,安装插件也一样 npm install --legacy-peer-dep…...

【FastCAE源码阅读8】调用gmsh生成网格

FastCAE使用gmsh进行网格划分&#xff0c;划分的时候直接启动一个新的gmsh进程&#xff0c;个人猜测这么设计是为了规避gmsh的GPL协议风险。 进行网格划分时&#xff0c;其大体运行如下图&#xff1a; 一、Python到gmshModule模块 GUI操作到Python这步不再分析&#xff0c;比…...

使用LLM-Tuning实现百川和清华ChatGLM的Lora微调

LLM-Tuning项目源码&#xff1a; GitHub - beyondguo/LLM-Tuning: Tuning LLMs with no tears&#x1f4a6;, sharing LLM-tools with love❤️.Tuning LLMs with no tears&#x1f4a6;, sharing LLM-tools with love❤️. - GitHub - beyondguo/LLM-Tuning: Tuning LLMs wit…...

浏览器标签页之间的通信

前言 在开发管理后台页面的时候&#xff0c;会遇到这样一种需求&#xff1a;有一个列表页面&#xff0c;一个新增按钮&#xff0c;一个新增页面&#xff0c;点击新增按钮&#xff0c;在一个新的标签页中打开新增页面。并且&#xff0c;新增后要自动实时的更新列表页面的数据。…...

Semantic Kernel 学习笔记1

1. 挂代理跑通openai API 2. 无需魔法跑通Azure API 下载Semantic Kernel的github代码包到本地&#xff0c;主要用于方便学习python->notebooks文件夹中的内容。 1. Openai API&#xff1a;根据上述文件夹中的.env.example示例创建.env文件&#xff0c;需要填写下方两个内…...

图像二值化阈值调整——Triangle算法,Maxentropy方法

一. Triangle方法 算法描述&#xff1a;三角法求分割阈值最早见于Zack的论文《Automatic measurement of sister chromatid exchange frequency》主要是用于染色体的研究&#xff0c;该方法是使用直方图数据&#xff0c;基于纯几何方法来寻找最佳阈值&#xff0c;它的成立条件…...

监控视频片段合并完整视频|FFmpeg将多个视频片段拼接完整视频|PHP自动批量拼接合并视频

关于环境配置ffmpeg安装使用的看之前文章 哔哩哔哩缓存转码|FFmpeg将m4s文件转为mp4|PHP自动批量转码B站视频 <?php date_default_timezone_set("PRC"); header("Content-type: text/html; charsetutf-8"); set_time_limit(0);// 遍历获取文件 functi…...

client-go controller-runtime kubebuilder

背景 这半年一直做k8s相关的工作&#xff0c;一直接触client-go controller-runtime kubebuilder&#xff0c;但是很少有文章将这三个的区别说明白&#xff0c;直接用框架是简单&#xff0c;但是出了问题就是黑盒&#xff0c;这不符合我的理念&#xff0c;所以这篇文章从头说起…...

【vue 如何解决响应式丢失】

响应式丢失原因 在 Vue 中&#xff0c;响应式丢失通常是由于以下原因导致的&#xff1a; 1. 使用非响应式对象或属性&#xff1a;在 Vue 中&#xff0c;只有使用 Vue 实例的 data 对象中的属性或使用 Vue.set() 方法添加的属性才是响应式的。如果使用普通对象或属性&#xff…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

React19源码系列之 事件插件系统

事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

自然语言处理——Transformer

自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效&#xff0c;它能挖掘数据中的时序信息以及语义信息&#xff0c;但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN&#xff0c;但是…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...