存档

2008年8月 的存档

如何编写进度条窗口

2008年8月25日 没有评论

下面3个函数将实现在Navision中打开进度条窗口,并实现更新的操作。

OpenWindow(Text005 : Text[50];TotalNumber : Integer)

//This is created by Yeats.
Window.OPEN(Text005 + ‘@1@@@@@@@@@@@@@@@@@@@@@@@@@’);
g_intK:=TotalNumber;

 

UpdateWindow()
g_intm:=g_intm+1;
EVALUATE(l_ints,FORMAT(ROUND((g_intm/g_intK)*10000,1,’=’)));
Window.UPDATE(1,l_ints);

 

CloseWindow()
Window.CLOSE;

分类: C/AL 标签: ,

NAVTimer 控件的运用

2008年8月24日 没有评论

在Navision中,可以将某个Codeunit使用NAS的NASHandle设置为自动运行,通过对Codeunit的SingleInstance属性设置为Yes,就可以做到只执行一次。

在Nav中添加NAVTimer Automation, 并设置WithEvents为Yes, 这是会自动在Navision中添加上NavTimer::Timer和TimerError事件,通过设置NAVTimer的Interval属性为1000毫秒=1秒.

NavTimer.Enabled:=True 就可以启动NavTimer::Timer事件,并每隔Interval时间执行一次。

分类: C/AL 标签:

任意表调用并读取/修改记录-修改Search Name示例

2008年8月2日 没有评论

首先,增加2组变量.
l_recLocal 类型为RecordRef
l_fldLocal 类型为FieldRef
使用语句为:
l_recLocal.Open(表ID,False/True,’公司名称’);   //True表示临时表
l_fldLocal:=l_recLocal.Field(1);              //表示读取指定表的第一个字段
l_fldLocal.Value(‘修改值’)                    //修改该字段的值,读取可以直接使用l_fldLocal.Value
l_recLocal.Close
格式如上面要求.
l_recLocal可以使用所有Record的操作
l_fldLocal可以使用所有针对字段的操作,如Validate
注意: setRange/setFilter这类过滤操作,需要多l_fldLocal操作,对l_recLocal无效
可以实现跨公司/跨表读取任意数据,可以编写一组CodeUnit,创建局部过程,实现系统的任意Table调用.
针对系统中的所有Search Name和 Search Code,可以通过偏离所有公司/所有表/所有记录查找是否存在Search name/Code记录,如果存在,则将本记录的数据全部设置为空.使用Modifyall(true).
代码如下:
变量定义:
Name DataType Subtype Length
g_recFull RecordRef  
g_fldField FieldRef  
g_recAllobj Record AllObj
g_intI Integer  
g_recField Record Field
g_fleOutput File  
g_strOut OutStream  
g_bolFindOut Boolean  
g_arrSearchID Integer  
g_recAllCompany Record Company
代码:

#Copright By Yeats.
#2009.1.1
#This tools will clear all Search description and Search code.
#This tools will create a file at C:Search Code.txt.
#If you have any question, please contact me directly.
#Email: ncqingyi@Gmail.com
#MSN: qyqingyi@hotmail.com
OnRun()
g_recAllobj.SETRANGE("Object Type",g_recAllobj."Object Type"::Table);
g_fleOutput.CREATE('c:Search Code.txt');
g_fleOutput.CREATEOUTSTREAM(g_strOut);
IF g_recAllobj.FIND('-') THEN BEGIN
g_strOut.WRITE('TableID,TableName,FieldID,FieldName');
REPEAT
g_recFull.OPEN(g_recAllobj."Object ID");
g_recField.RESET;
g_recField.SETRANGE(TableNo,g_recAllobj."Object ID");
IF g_recField.FIND('-') THEN REPEAT
g_fldField:=g_recFull.FIELD(g_recField."No.");
CASE g_fldField.NAME OF
'Search Name','Search City','Search Description':
BEGIN
g_intI+=1;
g_strOut.WRITETEXT();
g_arrSearchID[g_intI,1]:=g_recAllobj."Object ID";
g_arrSearchID[g_intI,2]:=g_recField."No.";
g_strOut.WRITE(FORMAT(g_recAllobj."Object ID")+',');
g_strOut.WRITE('"'+g_recAllobj."Object Name"+'",');
g_strOut.WRITE(''+FORMAT(g_recField."No.")+',');
g_strOut.WRITE('"'+g_fldField.NAME+'"');
END;
END;
UNTIL g_recField.NEXT=0;
g_recFull.CLOSE;
UNTIL g_recAllobj.NEXT=0;
END;
g_fleOutput.CLOSE;
MESSAGE('All Search fields find out. Total %1 Tables please open c:/Search Code.txt view it. Done.',g_intI);
IF CONFIRM('Are you sure to Clear search filed value',TRUE) THEN BEGIN
l_intI:=1;
WHILE l_intI DO BEGIN
g_recAllCompany.RESET;
IF g_recAllCompany.FIND('-') THEN REPEAT
g_recFull.OPEN(g_arrSearchID[l_intI,1],FALSE,g_recAllCompany.Name);
IF g_recFull.FIND('-') THEN REPEAT
g_fldField:=g_recFull.FIELD(g_arrSearchID[l_intI,2]);
g_fldField.VALUE:='';
g_recFull.MODIFY(FALSE);
UNTIL g_recFull.NEXT=0;
g_recFull.CLOSE;
UNTIL g_recAllCompany.NEXT=0;
l_intI+=1;
END;
MESSAGE('All Companys Search filds is clear now.');
END;

分类: C/AL 标签: ,