存档

2009年7月 的存档

通过Codeunit 1自定义跟踪表

2009年7月24日 没有评论

下面的代码实现在Navision中自定义需要跟踪记录的表,并进行记录跟踪。

 

首先,在CodeUnit 1 的GetGlobalTableTriggerMask中加入下面的代码。

GetGlobalTableTriggerMask(TableID : Integer) : Integer

//This is created by Yeats.

IF (TableID=83) OR (TableID=7316) OR (TableID=7317) OR (TableID=7320) OR (TableID=7321) THEN

EXIT(11);

1 表示记录插入

10 表示记录 修改

4 表示记录删除

1+10 11表示记录插入和修改

1+10+4 15表示记录插入和修改/删除

1+4 5表示记录插入和删除

10+4 14表示记录修改和删除

再在下面的代码

OnGlobalInsert(RecRef : RecordRef)

OnGlobalModify(RecRef : RecordRef;xRecRef : RecordRef)

OnGlobalDelete(RecRef : RecordRef)

OnGlobalRename(RecRef : RecordRef;xRecRef : RecordRef)

加入对应的代码就可以进行记录跟踪。

其中RecRef表示当前记录,xRecRef表示修改前的记录。

分类: C/AL 标签: ,

Navision中进行人民币大小写转换

2009年7月24日 没有评论

名称

数据类型

子类型

长度

数组大小

strSZ

Text

 

100

10

ChineseSZ

Text

 

100

 

i

Integer

 

 

 

ChineseDW

Text

 

100

 

strDW

Text

 

100

15

strAmount

Text

 

100

 

s

Text

 

30

 

mynum

Text

 

255

 

tempS

Integer

 

 

 

k

Text

 

30

 

ResultM

Text

 

255

 

以上为变量定义.

输入变量为 l_intAmount, Decimal类型.

 

//This is created by Yeats.

ChineseSZ:=’零壹贰叁肆伍陆柒捌玖’;

FOR i:=1 TO 10 DO BEGIN

  strSZ[i] := COPYSTR(ChineseSZ,(i-1)*2+1,2);

END;

ChineseDW:=’分角元拾佰仟万拾佰仟亿拾佰仟’;

FOR i:=1 TO 14 DO BEGIN

  strDW[i] := COPYSTR(ChineseDW,(i-1)*2+1,2);

END;

l_intAmount:=ABS(ROUND(l_intAmount*100,1,’=’));

strAmount:=FORMAT(l_intAmount,0,'<Integer><Decimals>’);

FOR i := 1 TO STRLEN(strAmount) DO BEGIN

    s:= COPYSTR(strAmount, i, 1);

    EVALUATE(tempS,s);

    mynum := strSZ[tempS+1];

    k:=mynum+strDW[STRLEN(strAmount)+1-i];

    ResultM:=ResultM+k;

END;

FOR i :=1 TO STRLEN(ResultM) DO BEGIN

  IF COPYSTR(ResultM,i,4)=’零仟’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’零’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

 

  IF COPYSTR(ResultM,i,4)=’零佰’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’零’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

 

  IF COPYSTR(ResultM,i,4)=’零拾’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’零’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

 

  IF COPYSTR(ResultM,i,4)=’零角’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’零’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

  IF COPYSTR(ResultM,i,4)=’零分’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+”+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

 

  IF COPYSTR(ResultM,i,4)=’零零’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’零’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

 

  IF COPYSTR(ResultM,i,4)=’零亿’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’亿’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

 

  IF COPYSTR(ResultM,i,4)=’零万’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’万’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

  IF COPYSTR(ResultM,i,4)=’零元’ THEN BEGIN

    ResultM:=COPYSTR(ResultM,1,i-1)+’元’+COPYSTR(ResultM,i+4,1000);

    i:=1;

  END;

  i+=1;

END;

IF COPYSTR(ResultM,STRLEN(ResultM)-1,2)=’元’ THEN

  ResultM:=ResultM+zs;

EXIT(ResultM);

分类: C/AL 标签: , ,

使用Ado访问Navision Item表

2009年7月24日 没有评论

Navision在SQL Server中存储时,会进行语义转换。

/ 在 SQL Server中转换为_

. 在SQL Server中转换为_

 

采用Adodb连接SQL 2008的语句.

"Driver={SQL Server Native Client 10.0};uid=sa;password=xxxx;server=.;DATABASE=CRONUS;AutoTranslate=No"

AutoTranslate=No 表示不强制转换字符。

 

如果使用 本地Windows帐号认证,则使用:

使用 Trusted_Connection=Yes, 表示 信任连接

"Driver={SQL Server Native Client 10.0};Trusted_Connection=Yes;server=.;DATABASE=CRONUS;AutoTranslate=No"

 

接着使用rs.open “select * from [Company Name$ITEM] 就可以得到物料表。

$分隔后就表示 其中一个公司下的某个表。

分类: Office 标签: