debit,credit,日记帐就是每天都要登的帐-CarlZeng

日记帐就是每天都要登的帐明细帐是根据总帐开设科目登记的总帐是依据一级科目开设的所谓总帐,不是手工记帐下的总帐意思。而是帐务处理的意思。在总帐模块中,可以完成财务日常处理全部业务。包括制单、审核、记帐、出科目汇总表、科目总帐、明细帐等。===========================debit,credit,在会计理论中,借贷本身无意义.故会计借贷平衡则存在以下四个方面,即资产增资产减,资产增…

日记帐就是每天都要登的帐

明细帐是根据总帐开设科目登记的

总帐是依据一级科目开设的

所谓总帐,不是手工记帐下的总帐意思。而是帐务处理的意思。在总帐模块中,可以完成财务日常处理全部业务。包括制单、审核、记帐、出科目汇总表、科目总帐、明细帐等。

===========================

debit,credit,

在会计理论中,借贷本身无意义.

故会计借贷平衡则存在以下四个方面,即

资产增资产减,资产增负债(或权益)增,

负债(或权益)增负债减.负债(或权益)减资产减.

资产类、成本、费用类 会计科目金额增加就记借方,如减少就记贷方;

负债、权益、收入类 会计科目增加就记贷方,如减少就记借方。

laiyuan:

借贷本身无意义,(就好像是1读YI,但为什麽把1叫YI,而不叫其他的发音呢?这道理是一样的),但它所代表的含义是明确的,我们可以理解为增减的意思,对於资产类而言借方为增加额,贷方为减小额,对於负债或所有者权益类则贷方为增加额,借方为减少额.故会计借贷平衡则存在以下四个方面,即资产增资产减,资产增负债(或权益)增,负债(或权益)增负债减.负债(或权益)减资产减.
所以,我倒认为,在会计教学中,为了便於初学者理解,直接用增减代替借贷可能会好理解点.
例如,我借了甲方现金1000元,则我的资产增加了1000元,同时我的负债也增加了1000元.所以,借方为现金1000元,贷方为其他应付款1000元(即负债增加了1000元),同理也可以运用於其他三个会计平衡方面,一样的理解.
就如楼主所讲的例子,乙企业代收甲企业缴交消费税, ,当收到存款10元时,资产增加10元的同时,负债也增加了10元(之所以是负债,是因为这个款是代收代缴的,你迟早要付出这笔款),於是分录为借:银行存款,贷:应交税金//后来缴税的时候,资产减小了10元负债同时也减少了10元.所以就会有借:应交税金,贷:银行存款.
这种借贷的含义感觉的确和生活中的借贷含义不一样,我当初刚学时也是想不通,但我上面说了,它并无意义,有意义的是业务的性质和你分析出来的增减结果.
http://zhidao.baidu.com/question/8452779.html

compiere简易介绍及个人看法-CarlZeng

基于全球开源排名第一的开源软件Compiere基础上开发的软件,开源的如果用户有这种能力完全可以开发(二次开发)POS系統、接口系统等。。。企业资源计划也叫企业资源规划(简称ERP),在 Web 上、零 售点(POS )上,您的订单被流线般地处理;您可以更合理的管理您的库存,客户管理,发票自动处……一切超乎您的想象。ComPiere为中小规模(SME)企业在全球化的分销及服务提供完整的解决方案,涵…

基于全球开源排名第一的开源软件Compiere基础上开发的软件,开源的如果用户有这种能力完全可以开发(二次开发)POS系統、接口系统等。。。

企业资源计划也叫企业资源规划(简称ERP),在 Web 上、零 售点(POS )上,您的订单被流线般地处理;您可以更合理的管理您的库存,客户管理,发票自动处……一切超乎您的想象。

ComPiere为中小规模(SME)企业在全球化的分销及服务提供完整的解决方案,涵盖了从客户管理、供应链管理到财务管理的所有领域。这一高价值的商业应用程序,易于安装、实施、使用,您甚至可以自行安装和实施这套系统(略懂 Oracle 和 Java 技术)

快速的深层次的开发,都需要花钱买技术文档的拉。。。

有很多企业很喜欢免费的erp,ok来吧 只要你能把compiere的java源码吃透,一切都是免费的。呵呵~ 可是吃完他要花多长时间呢?
我相信 对于company来说干这件事比花钱买一套系统代价更大!
我相信 对于个人来说搞定这件事情比找一份报酬更高的工作更有难度,如果真的可以摆平并达到比较理想的二次开发境界,那么对于个人已经没有留在原来的company为其提供免费erp的理由了。

对于国外的这种理念,我本人还是非常欣赏!这必然是国内software发展的一个方向,软件真的已经不是软件了!软件是服务!

baidu空间提交评论的脚本,在netsuite中的应用。-CarlZeng

ok,让我们来分析一下,当用户输入完相应信息点击’发表评论’按钮时,触发:checkcmtform() (由 可得) 代码如下: function checkcmtform() { if(checkname(“spBlogCmtor”)&&checkeandu(“spBlogCmtURL”)&&checktext(“spBlogCmtText”)&&cmtfull()) { s…

ok,让我们来分析一下,当用户输入完相应信息点击’发表评论’按钮时,触发:checkcmtform()

(由<form name=”form1″ id=”popFormSubmit” action=”/%CC%EC%CF%C2%BF%F1%C0%BD/commit” method=”post” onSubmit=”return checkcmtform()”>

可得)

代码如下:

function checkcmtform()

{

if(checkname(“spBlogCmtor”)&&checkeandu(“spBlogCmtURL”)&&checktext(“spBlogCmtText”)&&cmtfull())

{

submitForm();

return true;

}

else

{

return false;

}

}

var g_pop=null;

function submitForm()

{

g_pop=new Popup({ contentType:1,isReloadOnClose:false,width:340,height:80});

g_pop.setContent(“title”,”添加评论”);

g_pop.setContent(“contentUrl”,””);

g_pop.setContent(“someDisabledBtn”,”btn_ok”);

g_pop.build();

G(“popFormSubmit”).target=g_pop.iframeIdName;

g_pop.show();

}

function g_close_pop()

{

g_pop.close();

}

这样,一个g_pop.setContent(“title”,”添加评论”);就开始创建一个窗体,并且蒙版了一个层,防止用户误操作影响提交相关评论到后台的功能。

http://hi.baidu.com/js/popup.js

if(!Array.prototype.push){

Array.prototype.push=function(){

var startLength=this.length;

for(var i=0;i<arguments.length;i++)this[startLength+i]=arguments[i];

return this.length}};

function G(){var elements=new Array();

for(var i=0;i<arguments.length;i++)

{var element=arguments[i];if(typeof element==’string’)element=document.getElementById(element);if(arguments.length==1)return element;elements.push(element)};return elements};

Function.prototype.bind=function(object){var __method=this;return function(){__method.apply(object,arguments)}};Function.prototype.bindAsEventListener=function(object){var __method=this;return function(event){__method.call(object,event||window.event)}};Object.extend=function(destination,source){for(property in source){destination[property]=source[property]};return destination};if(!window.Event){var Event=new Object()};Object.extend(Event,{observers:false,element:function(event){return event.target||event.srcElement},isLeftClick:function(event){return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)))},pointerX:function(event){return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft))},pointerY:function(event){return event.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop))},stop:function(event){if(event.preventDefault){event.preventDefault();event.stopPropagation()}else{event.returnValue=false;event.cancelBubble=true}},findElement:function(event,tagName){var element=Event.element(event);while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))element=element.parentNode;return element},_observeAndCache:function(element,name,observer,useCapture){if(!this.observers)this.observers=[];if(element.addEventListener){this.observers.push([element,name,observer,useCapture]);element.addEventListener(name,observer,useCapture)}else if(element.attachEvent){this.observers.push([element,name,observer,useCapture]);element.attachEvent(‘on’+name,observer)}},unloadCache:function(){if(!Event.observers)return;for(var i=0;i<Event.observers.length;i++){Event.stopObserving.apply(this,Event.observers[i]);Event.observers[i][0]=null};Event.observers=false},observe:function(element,name,observer,useCapture){var element=G(element);useCapture=useCapture||false;if(name==’keypress’&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))name=’keydown’;this._observeAndCache(element,name,observer,useCapture)},stopObserving:function(element,name,observer,useCapture){var element=G(element);useCapture=useCapture||false;if(name==’keypress’&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))name=’keydown’;if(element.removeEventListener){element.removeEventListener(name,observer,useCapture)}else if(element.detachEvent){element.detachEvent(‘on’+name,observer)}}});Event.observe(window,’unload’,Event.unloadCache,false);var Class=function(){var _class=function(){this.initialize.apply(this,arguments)};for(i=0;i<arguments.length;i++){superClass=arguments[i];for(member in superClass.prototype){_class.prototype[member]=superClass.prototype[member]}};_class.child=function(){return new Class(this)};_class.extend=function(f){for(property in f){_class.prototype[property]=f[property]}};return _class};function space(flag){if(flag==”begin”){var ele=document.getElementById(“ft”);if(typeof(ele)!=”undefined”&&ele!=null)ele.id=”ft_popup”;ele=document.getElementById(“usrbar”);if(typeof(ele)!=”undefined”&&ele!=null)ele.id=”usrbar_popup”}

else if(flag==”end”){var ele=document.getElementById(“ft_popup”);if(typeof(ele)!=”undefined”&&ele!=null)ele.id=”ft”;ele=document.getElementById(“usrbar_popup”);if(typeof(ele)!=”undefined”&&ele!=null)ele.id=”usrbar”}};var Popup=new Class();Popup.prototype={iframeIdName:’ifr_popup’,initialize:function(config){this.config=Object.extend({contentType:1,isHaveTitle:true,scrollType:’no’,isBackgroundCanClick:false,isSupportDraging:true,isShowShadow:true,isReloadOnClose:true,width:400,height:300},config||{});this.info={shadowWidth:4,title:””,contentUrl:””,contentHtml:””,callBack:null,parameter:null,confirmCon:””,alertCon:””,someHiddenTag:”select,object,embed”,someDisabledBtn:””,someHiddenEle:””,overlay:0,coverOpacity:40};this.color={cColor:”#EEEEEE”,bColor:”#FFFFFF”,tColor:”#709CD2″,wColor:”#FFFFFF”};this.dropClass=null;this.someToHidden=[];this.someToDisabled=[];if(!this.config.isHaveTitle)this.config.isSupportDraging=false;this.iniBuild()},setContent:function(arrt,val){if(val!=”){switch(arrt){case ‘width’:this.config.width=val;break;case ‘height’:this.config.height=val;break;case ‘title’:this.info.title=val;break;case ‘contentUrl’:this.info.contentUrl=val;break;case ‘contentHtml’:this.info.contentHtml=val;break;case ‘callBack’:this.info.callBack=val;break;case ‘parameter’:this.info.parameter=val;break;case ‘confirmCon’:this.info.confirmCon=val;break;case ‘alertCon’:this.info.alertCon=val;break;case ‘someHiddenTag’:this.info.someHiddenTag=val;break;case ‘someHiddenEle’:this.info.someHiddenEle=val;break;case ‘someDisabledBtn’:this.info.someDisabledBtn=val;break;case ‘overlay’:this.info.overlay=val}}},iniBuild:function(){G(‘dialogCase’)?G(‘dialogCase’).parentNode.removeChild(G(‘dialogCase’)):function(){};var oDiv=document.createElement(‘span’);oDiv.id=’dialogCase’;

document.body.appendChild(oDiv)},build:function(){var baseZIndex=10001+this.info.overlay*10;var showZIndex=baseZIndex+2;this.iframeIdName=’ifr_popup’+this.info.overlay;var path=”http://img.baidu.com/hi/img/”;var close=’‘;var cB=’filter: alpha(opacity=’+this.info.coverOpacity+’);opacity:’+this.info.coverOpacity/100+’;’;var cover=’

‘;var mainBox=’

‘+’

‘;if(!this.config.isBackgroundCanClick){G(‘dialogCase’).innerHTML=cover+mainBox;G(‘dialogBoxBG’).style.height=document.body.scrollHeight}else G(‘dialogCase’).innerHTML=mainBox;Event.observe(G(‘dialogBoxClose’),”click”,this.reset.bindAsEventListener(this),false);if(this.config.isSupportDraging){dropClass=new Dragdrop(this.config.width,this.config.height,this.info.shadowWidth,this.config.isSupportDraging,this.config.contentType);G(“dialogBoxTitle”).style.cursor=”move”};this.lastBuild()},lastBuild:function(){var confirm=’

‘+this.info.confirmCon+’

 

‘;var alert=’

‘+this.info.alertCon+’

‘;var baseZIndex=10001+this.info.overlay*10;var coverIfZIndex=baseZIndex+4;if(this.config.contentType==1){var openIframe=”

“;var coverIframe=”

“;G(“dialogBody”).innerHTML=openIframe+coverIframe}else if(this.config.contentType==2){G(“dialogBody”).innerHTML=this.info.contentHtml}else if(this.config.contentType==3){G(“dialogBody”).innerHTML=confirm;Event.observe(G(‘dialogOk’),”click”,this.forCallback.bindAsEventListener(this),false);Event.observe(G(‘dialogCancel’),”click”,this.close.bindAsEventListener(this),false)}

else if(this.config.contentType==4){G(“dialogBody”).innerHTML=alert;Event.observe(G(‘dialogYES’),”click”,this.close.bindAsEventListener(this),false)}},reBuild:function(){G(‘dialogBody’).height=G(‘dialogBody’).clientHeight;this.lastBuild()},show:function(){this.hiddenSome();this.middle();if(this.config.isShowShadow)this.shadow()},forCallback:function(){return this.info.callBack(this.info.parameter)},shadow:function(){var oShadow=G(‘dialogBoxShadow’);var oDialog=G(‘dialogBox’);oShadow[‘style’][‘position’]=”absolute”;oShadow[‘style’][‘background’]=”#000″;oShadow[‘style’][‘display’]=””;oShadow[‘style’][‘opacity’]=”0.2″;oShadow[‘style’][‘filter’]=”alpha(opacity=20)”;oShadow[‘style’][‘top’]=oDialog.offsetTop+this.info.shadowWidth;oShadow[‘style’][‘left’]=oDialog.offsetLeft+this.info.shadowWidth;oShadow[‘style’][‘width’]=oDialog.offsetWidth;oShadow[‘style’][‘height’]=oDialog.offsetHeight},middle:function(){if(!this.config.isBackgroundCanClick)G(‘dialogBoxBG’).style.display=”;var oDialog=G(‘dialogBox’);oDialog[‘style’][‘position’]=”absolute”;oDialog[‘style’][‘display’]=”;var sClientWidth=document.body.clientWidth;var sClientHeight=document.body.clientHeight;var sScrollTop=document.body.scrollTop;var sleft=(document.body.clientWidth/2)-(oDialog.offsetWidth/2);var iTop=-80+(sClientHeight/2+sScrollTop)-(oDialog.offsetHeight/2);var sTop=iTop>0?iTop:(sClientHeight/2+sScrollTop)-(oDialog.offsetHeight/2);if(sTop<1)sTop="20";if(sleft<1)sleft="20";oDialog['style']['left']=sleft;oDialog['style']['top']=sTop},reset:function(){if(this.config.isReloadOnClose){top.location.reload()};this.close()},close:function(){G('dialogBox').style.display='none';if(!this.config.isBackgroundCanClick)G('dialogBoxBG').style.display='none';if(this.config.isShowShadow)G('dialogBoxShadow').style.display='none';G('dialogBody').innerHTML='';this.showSome()},hiddenSome:function(){var tag=this.info.someHiddenTag.split(",");if(tag.length==1&&tag[0]=="")tag.length=0;for(var i=0;iparseInt(this.oObj.style.top)+25)iTop=iTop+12;this.oObj.style.left=iLeft;this.oObj.style.top=iTop;if(this.showShadow){G(‘dialogBoxShadow’).style.left=iLeft+this.shadowWidth;G(‘dialogBoxShadow’).style.top=iTop+this.shadowWidth};this.dragData={x:Event.pointerX(event),y:Event.pointerY(event)};document.body.style.cursor=”move”},mouseup:function(event){if(!this.IsDraging)return;if(this.contentType==1)G(“iframeBG”).style.display=”none”;document.onmousemove=null;document.onmouseup=null;var mousX=Event.pointerX(event)-(document.documentElement.scrollLeft||document.body.scrollLeft);var mousY=Event.pointerY(event)-(document.documentElement.scrollTop||document.body.scrollTop);if(mousX<1||mousY<1||mousX>document.body.clientWidth||mousY>document.body.clientHeight){this.oObj.style.left=this.backData[“x”];this.oObj.style.top=this.backData[“y”];if(this.showShadow){G(‘dialogBoxShadow’).style.left=this.backData.x+this.shadowWidth;G(‘dialogBoxShadow’).style.top=this.backData.y+this.shadowWidth}};this.IsDraging=false;document.body.style.cursor=””;Event.stopObserving(document,”selectstart”,this.returnFalse,false)},returnFalse:function(){return false}};

说白了还是用了prototype库变了一下向来实现一个窗口,这样增强了用户体验。

在netsuite中,当你的脚本写得操作100多行时,我感觉就很有必要由一个蒙版层在引导用户操作。

防止用户在相关事务没有处理完之前关闭或者刷新了该窗体。

比如我在设计多币种报价时,用户的需求:必须是随意的用户切换主界面上的币种字段时,来完成所有这张销售订单货品的币种换算工作,

这样无论你如何优化这个脚本,系统还是需要时间去读去相关的汇率信息,然后完成换算,在赋值结束操作。

在运算过程中就很有必要添加一个用户增强用户体验度的窗体,提示用户,耐心等候。

[http://www.totemsuite.com/SAAS](http://www.totemsuite.com/SAAS)

author:zeng.chuanzhuo

appendFormDataToURL完成导出,netsuite导出csv-CarlZeng

footer_actions 是netsuite中 所有系统列表form页面都存在的对象,就是页脚那些可以用来排序,过滤等等的对象,我们可以对这些对象进行操作,包括定制,系统完成您操作后的动态刷新当前页面的功能。这个四个对象是包括在form:foot_actions中的,是四个隐藏的对象,在界面上无法查看到,是系统内置的用来动态管理其自身功能的变量。比如在导出时候:document.forms[‘…

footer_actions 是netsuite中 所有系统列表form页面都存在的对象,就是页脚那些可以用来排序,过滤等等的对象,我们可以对这些对象进行操作,包括定制,系统完成您操作后的动态刷新当前页面的功能。

<input type=hidden name=’sortcol’ value=’Transaction_TRANDATE_raw’>

<input type=hidden name=’sortdir’ value=’ASC’>
<input type=hidden name=’csv’ value=’HTML’>
<input type=hidden name=’OfficeXML’ value=’F’>

这个四个对象是包括在form:foot_actions中的,是四个隐藏的对象,在界面上无法查看到,是系统内置的用来动态管理其自身功能的变量。

比如在导出时候:

document.forms[‘footer_actions’].elements.csv.value=’Export’;

//document.forms[‘footer_actions’].elements.OfficeXML.value=’F’;

document.location.replace(appendFormDataToURL(‘/app/accounting/transactions/transactionlist.csv?searchtype=Transaction’));

csv被变成Export时,在用appendFormDataToURL才会发生导出动作哦!~

function appendFormDataToURL(url,omit) {
var footer = document.getElementById(‘div__footer’);
var elem, frm = parent.document.forms[‘footer_actions’];
if (isValEmpty(url)) url = ”
for (var i = 0; i < frm.elements.length; i++) {
elem = frm.elements[i];
if (elem.name.length == 0 || elem.name == omit || elem.name.indexOf(‘inpt_’) == 0) continue;
if (elem.type==’select-one’)
url = addParamToURL(url, elem.name, escape(parent.getSelectValue(elem)));
else if (isMultiSelect(elem))
url = addParamToURL(url, elem.name, escape(getMultiSelectValues(elem)));
else if (elem.type==’radio’)
url = addParamToURL(url, elem.name, escape(getRadioValue(elem)));
else if (elem.type==’checkbox’)
url = addParamToURL(url, elem.name, (elem.checked ? ‘T’ : ‘F’));
else if (elem.type==’text’)
url = addParamToURL(url, elem.name, escape(elem.value));
else if (elem.type==’hidden’ && elem.name != ‘frame’)
url = addParamToURL(url, elem.name, encode(elem.value));
}
return url; }

这个隐含的API中调用到了系统公开的一个API:addParamToURL和一个escape方法:

addParamToURL(param, value, dynamic)
Adds a URL parameter to this column. Should only be called after calling setURL(xxx)
Parameters
? param {string} – The parameter name added to the URL
? value {string} – The parameter value added to the URL
? dynamic {boolean} – If true, then the parameter value is actually an alias that is
calculated per row

————————

escape 方法

String 对象编码以便它们能在所有计算机上可读,
**escape(**_charString_**)**
必选项 charstring 参数是要编码的任意 String 对象或文字。

说明

escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 “%20” 。
字符值大于 255 的以 %uxxxx 格式存储。
注意 escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURIencodeURIComponent 方法。

要求

版本 1

请参阅

encodeURI 方法 | encodeURIComponent 方法 |String 对象 | unescape 方法

Zach Nelson(NetSuite CEO) is comming to beijing today,netsuite中国-CarlZeng

Zach Nelson 扎克-尼尔森 is comming..netsuite中国 http://www.totemsuite.comI will show him the most important Product Developed by TotemSuite(SuiteTalk).:Dear Respected Zach , Glad to see you, I am pleased to…

Zach Nelson 扎克-尼尔森 is comming..

netsuite中国 http://www.totemsuite.com

I will show him the most important Product Developed by TotemSuite(SuiteTalk).

:Dear Respected Zach , Glad to see you, I am pleased to be able to introduce the solution provided by TotemSuite.I will show you in three Part . ok, let’s begin?

1. First part is about offline client , This application is design for offline some part of NetSuite Database, For Example , the customer record, the addressbook and the contact information, the activity data include event、task, The transaction offline is for supportcase.

user can new or edit all of these data without Internet which can’t get that in some of hometowns in China. then update the data to NetSuite online database, synchronize these data the target of design the application.

This solution is prepare for customer’ company handle some offline operation.

2.The secend part is about finacal intergration to Chinese local FinanceSystem , export some of NetSuite transactions to a China standard format.I will show you that , this’s the file.

This solution is prepare for Chinese Finance customization. With solution we can use NetSuite to print Chinese local invoice. include SuiteScript solution Online Export and Suitetalk Online search and batch export.

3.The third part is about ,website intergration , use can design the website using powerfull CMS ( Content Management System ) system. then integrate the item data to NetSuite ERP,Transaction date synchronize to NetSuite database.

This solution is prepare for Chinese b2b、b2c Ecommerce mode web store, use the localize Content Management System Intergrate with NetSuite powerful ERP and CRM. We can handle almost any Demand of our customer In WebSite Field.

This is the end of my introduce, I hope you liked it. Thanks

VLOOKUP函数对查找内容列排序增加效率-CarlZeng

VLOOKUP函数对查找内容列排序增加效率, 默认是认为true,即已经排序,只从上到下查找一遍即可。效率很高, 而如果false,精确匹配值。 关于VLOOKUP函数的用法 “Lookup”的汉语意思是”查找”,在Excel中与”Lookup”相关的函数有三个:VLOOKUP、HLOOKUO和LOOKUP。下面介绍VLOOKUP函数的用法。 一、功能 在表格的首列查找指定的数据,并返回…

VLOOKUP函数对查找内容列排序增加效率,

默认是认为true,即已经排序,只从上到下查找一遍即可。效率很高,

而如果false,精确匹配值。

关于VLOOKUP函数的用法

“Lookup”的汉语意思是”查找”,在Excel中与”Lookup”相关的函数有三个:VLOOKUP、HLOOKUO和LOOKUP。下面介绍VLOOKUP函数的用法。

一、功能
在表格的首列查找指定的数据,并返回指定的数据所在行中的指定列处的数据。

二、语法
标准格式:
VLOOKUP(lookup_value,table_array,col_index_num , range_lookup)

三、语法解释
VLOOKUP(lookup_value,table_array,col_index_num,range_lookup)可以写为:
VLOOKUP(需在第一列中查找的数据,需要在其中查找数据的数据表,需返回某列值的列号,逻辑值True或False)
1.Lookup_value为”需在数据表第一列中查找的数据”,可以是数值、文本字符串或引用。
2.Table_array 为”需要在其中查找数据的数据表”,可以使用单元格区域或区域名称等。
⑴如果 range_lookup 为 TRUE或省略,则 table_array 的第一列中的数值必须按升序排列,否则,函数 VLOOKUP 不能返回正确的数值。
如果 range_lookup 为 FALSE,table_array 不必进行排序。
⑵Table_array 的第一列中的数值可以为文本、数字或逻辑值。若为文本时,不区分文本的大小写。
3.Col_index_num 为table_array 中待返回的匹配值的列序号。
Col_index_num 为 1 时,返回 table_array 第一列中的数值;
Col_index_num 为 2 时,返回 table_array 第二列中的数值,以此类推。
如果Col_index_num 小于 1,函数 VLOOKUP 返回错误值 #VALUE!;
如果Col_index_num 大于 table_array 的列数,函数 VLOOKUP 返回错误值 #REF!。
4.Range_lookup 为一逻辑值,指明函数 VLOOKUP 返回时是精确匹配还是近似匹配。如果为 TRUE 或省略,则返回近似匹配值,也就是说,如果找不到精确匹配值,则返回小于lookup_value 的最大数值;如果 range_value 为 FALSE,函数 VLOOKUP 将返回精确匹配值。如果找不到,则返回错误值 #N/A。

四、应用例子
A B C D
1 编号 姓名 工资 科室
2 2005001 周杰伦 2870 办公室
3 2005002 萧亚轩 2750 人事科
4 2005006 郑智化 2680 供应科
5 2005010 屠洪刚 2980 销售科
6 2005019 孙楠 2530 财务科
7 2005036 孟庭苇 2200 工 会

A列已排序(第四个参数缺省或用TRUE)
VLOOKUP(2005001,A1:D7,2,TRUE) 等于”周杰伦”
VLOOKUP(2005001,A1:D7,3,TRUE) 等于”2870″
VLOOKUP(2005001,A1:D7,4,TRUE) 等于”办公室”
VLOOKUP(2005019,A1:D7,2,TRUE) 等于”孙楠”
VLOOKUP(2005036,A1:D7,3,TRUE) 等于”2200″
VLOOKUP(2005036,A1:D7,4,TRUE) 等于”工 会”
VLOOKUP(2005036,A1:D7,4) 等于”工 会”

若A列没有排序,要得出正确的结果,第四个参数必须用FALSE
VLOOKUP(2005001,A1:D7,2,FALSE) 等于”周杰伦”
VLOOKUP(2005001,A1:D7,3,FALSE) 等于”2870″
VLOOKUP(2005001,A1:D7,4,FALSE) 等于”办公室”
VLOOKUP(2005019,A1:D7,2,FALSE) 等于”孙楠”
VLOOKUP(2005036,A1:D7,3,FALSE) 等于”2200″
VLOOKUP(2005036,A1:D7,4,FALSE) 等于”工 会”

五、关于TRUE和FALSE的应用
先举个例子,假如让你在数万条记录的表格中查找给定编号的某个人,假如编号已按由小到大的顺序排序,你会很轻松地找到这个人;假如编号没有排序,你只好从上到下一条一条地查找,很费事。
用VLOOKUP查找数据也是这样,当第一列已排序,第四个参数用TRUE(或确省),Excel会很轻松地找到数据,效率较高。当第一列没有排序,第四个参数用FALSE,Excel会从上到下一条一条地查找,效率较低。

Training Agenda netsuite-CarlZeng

2008-12-12Agenda Topics – Day OneWelcomeCourse objectivesTopics and Agenda for entire courseNavigating the ApplicationLogging into NetSuiteGetting around the applicationLists vs. Transactions vs. Setu…

2008-12-12

Agenda Topics – Day One

Welcome

  • Course objectives
  • Topics and Agenda for entire course

Navigating the Application

  • Logging into NetSuite
  • Getting around the application
  • Lists vs. Transactions vs. Setup Menus
  • Using help
  • Global & Quick search
  • Setting Personal Preferences

Break

Navigating the Application continued…

  • Customizing your Home Dashboard
  • Direct List Editing
  • Tips & Tricks

NetSuite Users and Roles

  • Users & Roles overview
  • Customizing roles in NetSuite
  • Assigning roles (giving access)
  • Dashboards are based on the role type
  • Student Exercises (15 minutes)

Lunch and Break

Managing Your Activities and Calendar

  • Calendar overview
  • Activities definition
  • Setting calendar preferences
  • Event Scheduler
  • Phone Calls, Tasks & Events
  • Creating activities from entity & transaction records
  • The full circle: the activities sub tab on entity records
  • Outlook Integration – high level overview

General Ledge

· Creating journal entries

· Journal entry approval

· Viewing the G/L impact of transactions

· Creating memorized transactions

· Enter memorized transactions

· Financial reporting

· Student Exercises (15 minutes)

Accounts Payable

  • Accounts Payable overview
  • Billing purchase orders
  • Entering a bill directly
  • Paying bills in NetSuite
  • Entering vendor credits

Break

Accounts Receivable

  • Invoice to Payment process
    • Billing sales orders
    • Entering a New Cash Sale (no fulfillment)
    • Entering a New Invoice (no fulfillment)
    • Record customer deposits
    • Accept customer payments
  • Generating customer statements
  • Issue customer credit memos
  • Issue customer refunds
  • Student Exercises (15 minutes)

Purchasing

  • Purchasing overview
  • Review accounting preferences for purchasing
  • Enter a purchase order
  • Receive items from a purchase order
  • Partial receipts
  • Order Items screen
  • Student Exercises (15 minutes)

Agenda Topics – Day Two

Inventory Management

· Multi-location inventory

· Volume Pricing for Multiple Units of Measure

· Re-order point Reminders

· Inventory Adjustment

· Inventory Transfer

· Receive Purchase Order

· Fulfill Sales Orders

· Create Current Inventory Status Report

· Student Exercises (15 minutes)

Sales Order

  • Sales order management overview
    • Sales order transactions (to invoice, to cash sale)
    • Sales order forms (standard, invoice, cash sale)
    • Types of fulfillment
  • Enable order management features
  • Order management process:
    • Enter a sales order
    • Approve sales orders
    • Fulfill sales orders
    • Partial fulfillment

· Student Exercises (15 minutes)

Break

Sales Force Automation

  • SFA overview
  • Setting up Sales Force Automation
    • Enable features for SFA
    • Create customer statuses
    • Set sales preferences
    • Setup employees as sales reps
    • Create sales rules
    • Create sales territories
    • Create online customer forms (online leads)

Lunch and Break

Sales Force Automation continued…

  • Day-to-day Sales Force Automation Processing:
    • Enter a lead
    • Locate and view leads (and leads list)
    • Creating opportunity records
    • Generating and emailing quotes/estimates
    • Converting quote/estimate to a sales order
    • Reporting

· Student Exercises (15 minutes)

Marketing Automation

  • Marketing campaign overview
  • Setup Marketing Automation:
    • Enable features
    • Authenticate campaign email addresses
    • Setup marketing preferences
  • Create & Manage Marketing Campaign Emails
    • Create marketing groups
    • Create campaign email template
    • Create and schedule the campaign

Break

Special Point One

· sales item configuration,

· customer database configuration,

· accounts (for bookkeeping) configuration

·

Special Point Two

· customizing forms for sales contract,

· customizing forms for delivery slip,

· customizing forms for quotes

· customizing forms for invoices

Summary and Conclusion

SuiteScript > Apply script to Assembly and Kit-CarlZeng

Path:Customization > Scripting > Scripts > NewLimitation:Client script can’t apply to Assembly and Kit item type, Even in Netsuite 2014.2 versionOptio…

Path:

Customization > Scripting > Scripts > New

Limitation:

Client script can’t apply to Assembly and Kit item type, Even in Netsuite 2014.2 version

Option:

– In the custom form of Assembly or Kit item, you will be able to apply scripts related to those item type

SuiteScript 2.0 Error: SSS_INVALID_SRCH_FILTER_EXPR_TYPE-CarlZeng

Issue: a search throw error SSS_INVALID_SRCH_FILTER_EXPR_TYPE Malformed search filter expression, first two elements must be strings. Sample code that

Issue: a search throw error SSS_INVALID_SRCH_FILTER_EXPR_TYPE 

Malformed search filter expression, first two elements must be strings. 

Sample code that causing error: 

var strFormulaNumeric = ‘CASE {custrecord_abc_id}’; for (var i = 0; i < this.arrPriceTblId.length; i++) {

 strFormulaNumeric += ' WHEN \'' + this.arrPriceTblId[i] + '\' THEN ' + (i + 1);

}
strFormulaNumeric += ' ELSE 0 END';

… var arrColumns = [];

arrColumns.push(search.createColumn({

 name : 'formulanumeric',

 formula : strFormulaNumeric,

 sort : search.Sort.DESC

}));

… var strFormulaFilter = ‘formulanumeric:’ + strFormulaNumeric; var arrFilters = [
[ ‘isinactive’, ‘is’, ‘F’ ], ‘AND’,
[ strFormulaFilter,
search.Operator.GREATERTHAN, 0 ] ];

Solution:

var arrFilters = [
[ ‘isinactive’, ‘is’, ‘F’ ], ‘AND’,
[ String(strFormulaFilter),
search.Operator.GREATERTHAN, 0 ] ];

We convert strFormulaFilter to a string again in JS, that works great 🙂

Great Idea:

When we have formula in the column, we sort it well; it’s the best way to roll out data as specific reqirement;  works perfect 🙂

Thanks site: 

Notes from: 

My best guess is that the Rhino interpreter parses string concatenation expressions into different Java classes than string literals/variables. The NetSuite API then fails to consider those classes when validating that an argument is a javascript “string”.

https://netsuitehub.com/forums/reply/re-record-getvalue-errors-if-field-name-is-built-programatically-5/

https://www.flowinglink.com/suitescript-2-0-sss_invalid_srch_filter_expr_type/


SuiteLet Building Block to Select Record SuiteLet页面动态加载搜索结果后附加选择功能-CarlZeng

SuiteLet Building Block to Select Record SuiteLet页面动态加载搜索结果后附加选择功能

Requirement

Allow a selection of a saved search. Then redraw the form with a button to ‘Submit’.

Fill or Update Search ID.(I.e. “Public Search: Sample to Select Record”), submit to redirect.

笔者的这篇开发,主要是用于给一个工具拓充一项功能,功能:可以将系统中任意的搜索结果动态加载到页面,然后给每一个搜索结果行提供勾选框,选中勾选框后提交数据到后台,生成相应流程的基础数据。

Status

1. Updated “Select Record Suitelet” to be dynamic generated columns(base on saved search).
2. Included Record Type and Internal ID column(saved search no need to add those column)
3. After click submit, log shows: “Selected strRecType: inventoryadjustment, journalentry, journalentry. Selected strRecId: 12, 16, 22”.

Supported: formula column fields in saved search.(dynamic naming for custom columns in SuiteLet)

Screenshoot

Main Page of Utility SuiteLet:

Main Page of Utility SuiteLet

View Historical generated/submited records and proceed status

View Historical generated/submited records and proceed status

Embedded SuiteLet to NetSuite Customer UI/page 嵌入客户页面, 直接获取父(主)记录

Embedded SuiteLet to NetSuite Customer UI/page 嵌入客户页面, 直接获取父(主)记录

After release, 发布生产

After release, 发布生产