符号和前缀
在上一课中,我们讨论了各种 TDL 组件,如定义、属性、函数、符号前缀、变量等。
在 TDL 中,有一些符号用于特定目的。有些符号用作访问说明符,即主要用于访问方法、变量、字段、公式等的值。有些用于一般用途,例如修饰符。
访问说明符/符号前缀
一般符号
@和@@的用法
Formula
在 TDL 中,大型复杂计算可以分解为更小的简单计算或以公式表示的表达式。可以使用符号前缀 @ 和 @@ 访问使用这些公式计算的值。
Formula的命名约定
● 不区分大小写
● 只允许使用字母数字字符
● 定义时空间不敏感。但是,在部署或使用相同的过程中,不允许有空格
Formula分类
● 局部Formula
● 全局Formula
使用 @ 定义局部Formula
局部Formula是可以在任何接口定义中定义和检索的公式。局部公式的范围仅在当前定义范围内。如果公式特定于某个定义并且任何其他定义都不需要,则通常会定义局部公式。
可以使用符号前缀 @ 访问局部公式的值。
例如:
[Field : CompanyNameandAddress]
Set as : “Tally India Pvt Ltd, No 23 & 24, AMR Tech Park II, Hongasandra,Bangalore”
此代码也可以使用局部Formula编写为:
[Field : CompanyNameandAddress]
Company : “Tally India Pvt Ltd, ”
Address : “No 23 & 24, AMR Tech Park II, Hongasandra, ”
City : “Bangalore”
Set as : @Company + @Address + @City
使用 @@ 定义全局公式
全局公式是一种在定义一次时可全局使用的公式。换句话说,所有定义都可以访问全局公式值。当在许多位置需要一个公式时,定义一个全局公式。可以使用符号前缀@@ 访问全局公式的值。全局公式也可以称为系统公式。所有全局公式必须在 [ System: Formula ]定义中定义。
例如:
[System : Formula]
AmtWidth : 20
[Field : RepTitleAmt]
Width : @@AmtWidth
[Field : RepDetailAmt]
Width : @@AmtWidth
[Field : RepTotalAmt]
Width : @@AmtWidth
在此示例中,所有字段都采用相同的宽度。如果需要更改字段的宽度,则仅在[System : Formula] 定义部分进行更改。此更改将应用到所有字段,使用全局公式 AmtWidth 。
# 和 ## 的用法
在 TDL 中,符号前缀 # 可用于:
● 使用# 引用字段
● 使用# 修改现有定义
使用 # 引用字段
符号前缀 # 用于从另一个字段中检索值。
例如:
[Field : HW]
Set as : “Hello World”
[Field : HW1]
Set as : #HW
在本例中,字段“HW”中的值设置为字段“HW1”。换句话说,通过使用#HW,字段HW1设置为“Hello World”。
使用 # 修改现有定义
符号前缀 # 也用于修改现有定义。可以更改定义的属性。例如,在“line”定义中添加新字段。
例如:
[#Menu : Gateway of Tally]
Add : Key Item : Hello World: H : Display : HWReport
Title : “Tally Gateway”
[#Field : LedParticulars]
Width : 50
在此示例中,现有菜单“Gateway of Tally”(默认菜单)已更改为添加项目“Hello World”,并且菜单标题已更改为“Tally Gateway”。现有字段“LedParticulars”也已更改为将其属性“宽度”设置为 50。
使用##从变量中访问值
顾名思义,变量是一个命名的数据容器,可以在需要时进行更改。在 TDL 中,变量可以分为局部变量和全局变量。局部变量仅在特定报表中保留其值。另一方面,全局变量根据“变量”定义在整个会话期间或永久保留其值。稍后我们将了解有关变量的更多信息。
可以使用符号前缀## 访问变量的值。局部变量和全局变量都可以使用## 检索。首先检查局部变量。在未找到局部变量的情况下,假定全局变量值。
例如:
[Field : FGField]
Set as : ##RTitle
[Report : DBLedReport]
Title : if ##LedgerName = “ ” then “Daybook” else “Ledger Report”
$和$$的用法
使用 $ 访问方法
可以使用方法或 UDF 提取对象中的任何信息。$ 前缀用于调用或部署来自任何对象的方法或 UDF 的值,其中术语“方法”和“对象”是特定于 TDL 的。这将在接下来的部分中更深入地介绍。
上下文通过 $
● 检查当前对象内是否为内部方法或UDF
● 用户定义方法
● 系统公式
● 将上下文更改为父对象并重复上述步骤
例如
[Field : My Field]
Set as : $Name
此代码片段显示关联对象的方法“Name”的值。
使用 $$ 调用内部函数
在 TDL 中,函数是内置的,TDL 程序员可以使用这些函数。函数可以接受零个或多个参数来对参数执行特定任务并返回一个值。将参数传递给函数时,不允许使用空格和特殊字符,方括号 () 除外。如果函数参数需要表达式,可以用括号()括起来,从而将表达式的结果作为参数返回给Function。
例如:
[Field : Current Date]
Set as : $$MachineDate
[Field : Credit Amt]
Set as : if $$IsDr:$ClosingBalance then 0 else $ClosingBalance
[Field : StringPart Field]
Set as : $$StringPart($Email:Company:##SVCurrentCompany):0:5
使用 ;, ;; 注释代码 和 /**/
评论增加了可读性。在 TDL 中,可以使用符号前缀给出注释,即。;, ;; 和 /* */。符号前缀;用于零件行注释,;; 用于单行注释,/* */ 用于多行注释。TDL 解释器将忽略 /* 和 */ 中包含的所有行作为注释。
单行注释允许使用单分号 (;) 作为注释,但作为标准编码实践,建议使用双分号 (;;)。
例如:
/*
This code explains the usage of Multi-Line Commenting
as well as Single Line Commenting.
*/
;; Altering Menu ‘Gateway of Tally’
[#Menu : Gateway of Tally]
Add : Key Item : Comment : C : Display: Comment
;; Menu Item alteration ends here
行继续字符 (+)
行继续字符 (+) 用于将较长的行拆分为多个较短的行。通过这样做,程序员可以看到整行而无需向左或向右滚动。这也有助于更快地理解和调试代码。
例如:
/*
This code explains the mechanism of breaking a line into Multiple Lines using + */
;; Altering Menu ‘Gateway of Tally’
[#Menu: Gateway of Tally]
Add : Key Item : Before : @@locQuit : LineCtn : C : Display : +
LineCtn : NOT $$IsEmpty:$$SelectedCmps
注意 :当您使用运算符 + 连接字符串 并且结果字符串的大小超过 2048 个字节或字符时,使用行继续符 + 的操作将 终止。在这种情况下,您可以使用函数 $$SPrintf 进行连接。
公开方法和创建过程 (_)
符号前缀 (_) 用于向 ODBC 公开方法。通过在集合名称前加上 _,它变成了一个过程,可以通过将参数作为变量传递来从外部引用。
;; Exposing Methods within the Objects to ODBC
[#Object : Ledger]
_Difference : $ClosingBalance - $OpeningBalance
;; Creating Procedures to be referenced externally
[Collection : _LedBills]
Type : Bills
Child of : #UName
SQLParms : UName
SQLValues: Bill No : $Name
SQLValues: Bill Date : $$String:$BillDate:UniversalDate
重新初始化定义 (*)
这类似于“#”(修改)和“!”等运算符。(选项)。当“*”用于现有定义时,定义的所有属性都将被覆盖。这在需要用新代码完全替换现有定义内容时非常有用。
例如:
[*Field : MyField]
Width : 20% Page
Set as : “This Field has been reinitialized”
可选定义 (!)
符号前缀!用于定义可选定义。'Switch' 和 'Option' 是可以被各种定义使用的属性,例如菜单、表单、部件、行、字段、集合、按钮、键、导入文件和导入对象,以在 TDL 中提供条件结果。但是,它们不能与报表、颜色、样式、变量、系统公式、系统变量、系统 UDF、边框和对象定义一起使用。
仅当满足逻辑条件时,原始定义的属性才会被可选定义的属性覆盖。换句话说,如果逻辑条件返回 TRUE,则可选定义的属性将成为原始定义的一部分,否则它们将被忽略,原始定义保持不变。
语法:
Option : <Optional Definition> : <Logical Condition>
Switch : Label : <Optional Definition> : <Logical Condition>
Switch 和 Option 之间的区别在于,执行带有相同标签的“Switch”语句,直到找到满足条件。相反,'Option' 按顺序执行所有符合给定条件的 Option 语句。带有不同标签的 Switch 语句类似于 Option 语句,因为所有 Switch 语句都将针对给定条件执行。
Option实例
[Line : MFTBDetails]
Fields : MFTBName
Right Fields : MFTBDrAmt, MFTBCrAmt
Option : MFTBDtlsClsgG1000 : $ClosingBalance > 1000
Option : MFTBDtlsClsgL1000 : $ClosingBalance < 1000
[!Line : MFTBDtlsClsgG1000]
Local : Field : MFTBDrAmt : Style : Normal Bold
Local : Field : MFTBCrAmt : Style : Normal Bold
[!Line : MFTBDtlsClsgL1000]
Local : Field : MFTBDrAmt : Style : Normal
Local : Field : MFTBCrAmt : Style : Normal
在此代码段中,将检查两个选项中指定的条件,并执行满足给定条件的选项。在这种情况下,可能会满足多个条件并被执行。
Swith实例:
[Line : MFTBDetails] Fields : MFTBName
Right Fields : MFTBDrAmt, MFTBCrAmt
Switch : Case 1 : MFTBDtlsClsgG1000 : $ClosingBalance > 1000
Switch : Case 1 : MFTBDtlsClsgL1000 : $ClosingBalance < 1000
[!Line : MFTBDtlsClsgG1000]
Local : Field : MFTBDrAmt : Style : Normal Bold
Local : Field : MFTBCrAmt : Style : Normal Bold
[!Line : MFTBDtlsClsgL1000]
Local : Field : MFTBDrAmt : Style : Normal
Local : Field : MFTBCrAmt : Style : Normal
在这段代码片段中,switch语句中指定的条件将被逐个检查。满足给定条件的第一个语句将被执行,与“Option”不同,标签“Case 1”内的所有其他语句将不会被进一步执行。如果需要,可以通过指定不同的标签来实现类似于“选项”的行为。
学习成果
● 访问说明符和通用符号是 TDL 中使用的不同的特殊符号。
● 访问说明符@ 和@@ 分别用于访问本地和全局公式的值。
● # 可用于引用字段或修改现有定义。
● ## 用于访问本地或全局变量的值。
● $ 用于访问方法或UDF,$$ 用于调用函数。
标签:定义,符号,公式,TDL,Field,使用,前缀 来源: https://www.cnblogs.com/ljys/p/16475211.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。