RDLC REPORTING:
· Display fixed decimal places =FormatNumber(ROUND(SUM(Fields!Line_CBM.value),3),3)
· DISPLAY ONLY DATE: =format(Fields!Date.Value,"dd/MM/yyyy")
· Display data on header nav 2009 rdlc
· Add text box in body =Fields!COMPINFO_GSTREGNO.Value and set to hidden
Then go to header add textbox =reportitems!companyGstRegNo.Value
· If the report is going to multiple blank pages set the Top ,Left,right and bottom margin in report properties.
· Print new line
· Fields!customeridname.Value & vbcrlf & Fields!address1_line1.Value & vbcrlf & Fields!address1_line2.Value & vbcrlf & Fields!address1_line3.Value
Hide Dublicate values in
=iif(Fields!YourField.Value = Previous(Fields!YourField.Value), True, False)
01/01/2001 AS MONTH YEAR
=Format(CDate(Fields!A.Value), "MMMM yyyy")
SSRS - Serial number for the group column
We were developing a report which contain a group (grouped by Product) and the group contain a detail row in it. We wanted to show Serial Number for the Products, we trying to use RowNumber function in SSRS but it didn’t come up as expected. Finally we found the solution from Web which was written by Bilal Hani- a Microsoft Community Contributor as how to “add serial number to grouping column in SSRS Tablix”.
1. Open the report properties (right click on blank area outside the layout and click properties) or (Menu-->Report-->Report Properties)
2. Click on the code pane on the left
3. In the code window enter below script
Dim Counter as integer=0
public function getGroupCounter() as Integer
Counter=Counter+1
return Counter
end function
4. Go to the properties of the group (based on which group you need the group serial number)
5. Click the variables tab on the left
6. Click on Add and set Name as GroupCountValue and set the expression (in the expression window) as =Code.getGroupCounter, click ok and close the window.
7. Now in the textbox where you want to display the group number, set the expression as =Variables!GroupCountValue.Value
Make 0 as blank
Iif(quantity=0,””,quantity)
Repeat Table Header on each page:
1)in the grouping pane, click on the small triangle and select "Advanced Mode" to show static members:
1. verify that you have the properties grid turned on (in BI Development Studio use F4, in Report Builder go to the "View" tab and select "Properties")
2. select the corresponding (static) item in the row group hierarchy
3. in the properties grid:
- set KeepWithGroup to After
- set RepeatOnNewPage to true for repeating headers
- set FixedData to true for keeping headers visible
- set KeepWithGroup to After
- set RepeatOnNewPage to true for repeating headers
- set FixedData to true for keeping headers visible
=======================================================================
Shared Data50000 as Object
Public Function GetData(Num as Integer, Group as integer) as Object
if Group = 50000 and Cstr(Choose(2, Split(Cstr(Data50000),Chr(177))))>"" then
Return Cstr(Choose(Num, Split(Cstr(Data50000),Chr(177))))
end if
End Function
Public Function SetData(NewData as Object,Group as integer)
If Group = 50000 and NewData <> "" Then
Data50000 = NewData
end if
End Function
In Body:(CustDet) and set to hidden
add expression
=Fields!BilltoCustomerNo_SalesHeader.Value+ chr(177) +
Fields!BilltoName_SalesHeader.Value+ chr(177)
In Header add expression
=code.SetData(reportitems!CustDet.Value, 50000)
Header Values
=code.GetData(1, 50000)
=code.GetData(2, 50000)
(Fields!GroupingField.Value = ReportItems!LastValueOfGroup.Value)
=====================================================================
RTC
======================================================================
RTC:
Add report in Page:
Add Cardpart in Card
Create a page as Cardpart and in designer after the Container add Group type indent the fields.
Make CardPart sourcetable primary key same as Card sourcetable
InCard source table on insert trigger add below code
IF NOT ins.GET("Document Type","No.") THEN
BEGIN
ins.INIT;
ins."Document Type":="Document Type";
ins."No.":="No.";
ins.INSERT;
END;
· Make relationship between two pages (part)
User ProviderID
http://plataan.typepad.com/microsoftdynamics/2010/04/linking-parts-on-a-page-using-the-providerid-property.html
2)
Search for Salesperson is disabled.
Add a new secondary key (salesperson code) in the table
3) Nav 2009 RTC Add field in Header or Footer
Add a field in Body and give name to text box and change it to hidden
In Header or Footer add field expression as reportitems!field.Value
For Dates, the Regional and Language Options in Windows is used to select the actual format that is used. The table below shows the Fields that will be used to build the various formats. This table, incidentally, corresponds to the Regional setting for a European country/region.
Date
Format
Example
<Closing><Day,2>-<Month,2>-<Year>
0
05-04-03
<Closing><Day,2>-<Month,2>-<Year>
1
05-04-03
<Day,2><Month,2><Year><Closing>D
2
050403D
<Closing><Year>-<Month,2>-<Day,2>
3
03-04-05
<Closing><Day>. <Month Text> <Year4>
4
5. April 2003
<Closing><Day,2><Month,2><Year>
5
050403
<Closing><Year><Month,2><Day,2>
6
030405
<Day,2><Filler Character, >. <Month Text,3> <Year4>
7
5. Apr 2003
XML format
9
2003-04-05
The following table shows how these formats will change if the Regional and Language Options is set to "United States."
US Date
Format
Example
<Closing><Month,2>/<Day,2>/<Year>
0
04/05/03
<Closing><Month,2>/<Day,2>/<Year>
1
04/05/03
<Month,2><Day,2><Year><Closing>D
2
040503D
<Closing><Year>/<Month,2>/<Day,2>
3
03/04/05
<Month Text> <Closing><Day>, <Year4>
4
April 5, 2003
<Closing><Month,2><Day,2><Year>
5
040503
<Closing><Year><Month,2><Day,2>
6
030405
<Day,2><Filler Character, >. <Month Text,3> <Year4>
7
5. Apr 2003
use dotnet class Regex.
variables:
Name DataType Subtype Length
Regex | DotNet | System.Text.RegularExpressions.Regex.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Match | DotNet |System.Text.RegularExpressions.Match.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Name DataType Subtype Length
Regex | DotNet | System.Text.RegularExpressions.Regex.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Match | DotNet |System.Text.RegularExpressions.Match.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
the code:
Match := Regex.Match('h123xxx', '\d+'); // text value = h123xxx
MESSAGE(Match.Value); // gives you 123
Match := Regex.Match('h123xxx', '\d+'); // text value = h123xxx
MESSAGE(Match.Value); // gives you 123
How to Set View Mode on Pages as Defau
...
Declare WshShell as Automation Variable for 'Windows Script Host Object Model'.WshShell
In OnOpenPage Trigger:
...
IF ISCLEAR(WshShell) THEN
CREATE(WshShell,FALSE,TRUE);
WshShell.SendKeys('^+V');//Ctrl+Shift+V
here the command for the Edit in case of
WshShell.SendKeys('^+E') //Ctrl+Shift+E
Declare WshShell as Automation Variable for 'Windows Script Host Object Model'.WshShell
In OnOpenPage Trigger:
...
IF ISCLEAR(WshShell) THEN
CREATE(WshShell,FALSE,TRUE);
WshShell.SendKeys('^+V');//Ctrl+Shift+V
here the command for the Edit in case of
WshShell.SendKeys('^+E') //Ctrl+Shift+E
Function key
WshShell.SendKeys('{F5}{F5}'); //Ctrl+Shift+E
Replace string function in Navision
ReplaceString(String:Text[250];FindWhat:Text[250];ReplaceWith:Text[250]) NewString:Text[250]
WHILE STRPOS(String,FindWhat) > 0 DO
String := DELSTR(String,STRPOS(String,FindWhat)) + ReplaceWith + COPYSTR(String,STRPOS(String,FindWhat) + STRLEN(FindWhat));
NewString := String;
Subform setselectionfilter:
Create a variable PurchaseLine
CurrPage . SETSELECTIONFILTER ( PurchaseLine );
// you can also test purposes here MESSAGE (FORMAT (PurchaseLine.COUNT)) settle.
IF PurchaseLine . FindSet THEN BEGIN
REPEAT
// whatever you intends test with the selected records
UNTIL PurchaseLine . NEXT = 0 ;
END ;
// you can also test purposes here MESSAGE (FORMAT (PurchaseLine.COUNT)) settle.
IF PurchaseLine . FindSet THEN BEGIN
REPEAT
// whatever you intends test with the selected records
UNTIL PurchaseLine . NEXT = 0 ;
END ;
========================================================================
FILTER RECORDS ON PAGE
OnFindRecord(Which : Text[1024]) : Boolean
exit(find(which) and ShowThisRecord);
OnNextRecord(Steps : Integer) : Integer
create a local variable
Local Variables
Name | DataType
ResultSteps | Integer
then add the following code
REPEAT
ResultSteps := NEXT(Steps);
UNTIL (ResultSteps = 0) OR (ShowThisRecord);
EXIT(ResultSteps);
exit(find(which) and ShowThisRecord);
OnNextRecord(Steps : Integer) : Integer
create a local variable
Local Variables
Name | DataType
ResultSteps | Integer
then add the following code
REPEAT
ResultSteps := NEXT(Steps);
UNTIL (ResultSteps = 0) OR (ShowThisRecord);
EXIT(ResultSteps);
ShowThisRecord() : Boolean
g_recPH2.GET("Document Type","Document No.")
IF g_recPH2."Assigned User ID" = USERID THEN
EXIT(TRUE)
===============================================================================
* NAV 2009 Run Report From RUN
Dynamicsnav:////runreport?report=50000
User ProviderID
http://plataan.typepad.com/microsoftdynamics/2010/04/linking-parts-on-a-page-using-the-providerid-property.html
RTC:
How to Set View Mode on Pages as Defau lt
RTC:
Attach report in Page:
g_recSH.GET("Document Type","No.");
CurrPage.SETSELECTIONFILTER(g_recSH);
REPORT.RUNMODAL(50000,TRUE,FALSE,g_recSH);
Or
CLEAR(g_recSIH);
g_recSIH.SETRECFILTER;
REPORT.RUNMODAL(REPORT::"Invoice",TRUE,FALSE,g_recSIH);
CurrPage.SETSELECTIONFILTER(g_recSH);
REPORT.RUNMODAL(50000,TRUE,FALSE,g_recSH);
Or
CLEAR(g_recSIH);
g_recSIH.SETRECFILTER;
REPORT.RUNMODAL(REPORT::"Invoice",TRUE,FALSE,g_recSIH);
Add Cardpart in Card
Create a page as Cardpart and in designer after the Container add Group type indent the fields.
Make CardPart sourcetable primary key same as Card sourcetable
InCard source table on insert trigger add below code
IF NOT ins.GET("Document Type","No.") THEN
BEGIN
ins.INIT;
ins."Document Type":="Document Type";
ins."No.":="No.";
ins.INSERT;
END;
Search for Salesperson is disabled.
Add a new secondary key (salesperson code) in the table
use dotnet class Regex.
variables:
Name DataType Subtype Length
Regex | DotNet | System.Text.RegularExpressions.Regex.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Match | DotNet |System.Text.RegularExpressions.Match.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Name DataType Subtype Length
Regex | DotNet | System.Text.RegularExpressions.Regex.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
Match | DotNet |System.Text.RegularExpressions.Match.'System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'
the code:
Match := Regex.Match('h123xxx', '\d+'); // text value = h123xxx
MESSAGE(Match.Value); // gives you 123
Match := Regex.Match('h123xxx', '\d+'); // text value = h123xxx
MESSAGE(Match.Value); // gives you 123
How to Set View Mode on Pages as Defau
...
Declare WshShell as Automation Variable for 'Windows Script Host Object Model'.WshShell
In OnOpenPage Trigger:
...
IF ISCLEAR(WshShell) THEN
CREATE(WshShell,FALSE,TRUE);
WshShell.SendKeys('^+V');//Ctrl+Shift+V
here the command for the Edit in case of
WshShell.SendKeys('^+E') //Ctrl+Shift+E
Declare WshShell as Automation Variable for 'Windows Script Host Object Model'.WshShell
In OnOpenPage Trigger:
...
IF ISCLEAR(WshShell) THEN
CREATE(WshShell,FALSE,TRUE);
WshShell.SendKeys('^+V');//Ctrl+Shift+V
here the command for the Edit in case of
WshShell.SendKeys('^+E') //Ctrl+Shift+E
Function key
WshShell.SendKeys('{F5}{F5}'); //Ctrl+Shift+E
Replace string function in Navision
ReplaceString(String:Text[250];FindWhat:Text[250];ReplaceWith:Text[250]) NewString:Text[250]
WHILE STRPOS(String,FindWhat) > 0 DO
String := DELSTR(String,STRPOS(String,FindWhat)) + ReplaceWith + COPYSTR(String,STRPOS(String,FindWhat) + STRLEN(FindWhat));
NewString := String;
Subform setselectionfilter:
Create a variable PurchaseLine
CurrPage . SETSELECTIONFILTER ( PurchaseLine );// you can also test purposes here MESSAGE (FORMAT (PurchaseLine.COUNT)) settle.IF PurchaseLine . FindSet THEN BEGIN
REPEAT
// whatever you intends test with the selected records UNTIL PurchaseLine . NEXT = 0 ;END ;
REPEAT
// whatever you intends test with the selected records UNTIL PurchaseLine . NEXT = 0 ;END ;
FILTER RECORDS ON PAGE
OnFindRecord(Which : Text[1024]) : Boolean
exit(find(which) and ShowThisRecord);
OnNextRecord(Steps : Integer) : Integer
create a local variable
Local Variables
Name | DataType
ResultSteps | Integer
then add the following code
REPEAT
ResultSteps := NEXT(Steps);
UNTIL (ResultSteps = 0) OR (ShowThisRecord);
EXIT(ResultSteps);
exit(find(which) and ShowThisRecord);
OnNextRecord(Steps : Integer) : Integer
create a local variable
Local Variables
Name | DataType
ResultSteps | Integer
then add the following code
REPEAT
ResultSteps := NEXT(Steps);
UNTIL (ResultSteps = 0) OR (ShowThisRecord);
EXIT(ResultSteps);
ShowThisRecord() : Boolean
g_recPH2.GET("Document Type","Document No.")
IF g_recPH2."Assigned User ID" = USERID THEN
EXIT(TRUE)
Lookup record:
ReplyDeletepg_SalesInvList.SETTABLEVIEW(recSalesHdr);
pg_SalesInvList.EDITABLE(FALSE);
pg_SalesInvList.LOOKUPMODE := TRUE;
IF pg_SalesInvList.RUNMODAL IN [ACTION::OK,ACTION::LookupOK] THEN BEGIN
pg_SalesInvList.GETRECORD(recSalesHdr);
"Tax Invoice No." := recSalesHdr."Posting No.";
END;
Print Report of Different Data Item:
ReplyDeleteCurrPage.SETSELECTIONFILTER(Rec);
rsSalesHdr.RESET;
rsSalesHdr.SETRANGE("Whse. Source No.", "No.");
IF rsSalesHdr.FINDFIRST THEN;
REPORT.RUNMODAL(REPORT::"Delivery Order",TRUE,FALSE,rsSalesHdr);
Print Report of Different Data Item:
ReplyDeleteCurrPage.SETSELECTIONFILTER(Rec);
rsSalesHdr.RESET;
rsSalesHdr.SETRANGE("Whse. Source No.", "No.");
IF rsSalesHdr.FINDFIRST THEN;
REPORT.RUNMODAL(REPORT::"Delivery Order",TRUE,FALSE,rsSalesHdr);
Find Start Date of the month / Last date of the month
ReplyDeletedatFirstDayofMonth := DMY2DATE(1,DATE2DMY(TODAY,2),DATE2DMY(TODAY,3));
datLastDayofMonth := CALCDATE('<1M>',datFirstDayofMonth)-1;
Get Invoice No from shipment
ReplyDeleteg_fnGetFromSalesInvoiceLine()
g_recSSL.RESET;
g_recSSL.SETRANGE("Document No.","No.");
g_recSSL.SETRANGE(Type,g_recSSL.Type::Item);
IF g_recSSL.FINDFIRST THEN
REPEAT
CLEAR(TempSalesInvLine);
g_recSSL.GetSalesInvLines(TempSalesInvLine);
IF TempSalesInvLine.FINDFIRST THEN
cdeDocNO := TempSalesInvLine."Document No.";
REPEAT
IF TempSalesInvLine."Document No." <> cdeDocNO THEN
ERROR('Shipment has multiple Invoices.Cannot Print the Report');
UNTIL TempSalesInvLine.NEXT =0 ;
UNTIL g_recSSL.NEXT = 0;
g_recSIH.GET(TempSalesInvLine."Document No.");
https://community.dynamics.com/nav/f/34/t/180552
ReplyDeletehttps://community.dynamics.com/nav/b/navteam/archive/2013/11/14/microsoft-dynamics-nav-2013-r2-pllp-toolkit-released
https://msdn.microsoft.com/en-us/library/ee414196(v=nav.90).aspx
Get Previous record
ReplyDeleteSalesLine2.COPY(Rec);
IF SalesLine2.NEXT(-1) = 0 THEN
MESSAGE('NC')
ELSE BEGIN
SalesLine2.RESET;
SalesLine2.ASCENDING(FALSE);
SalesLine2.SETRANGE("Document Type","Document Type");
SalesLine2.SETRANGE("Document No.","Document No.");
SalesLine2.SETFILTER("Line No.",'<%1',"Line No.");
IF SalesLine2.FINDFIRST THEN REPEAT
IF (blnFound = FALSE) AND (SalesLine2.Type = SalesLine2.Type::" ") AND (SalesLine2."No." = '') THEN BEGIN
MESSAGE(SalesLine2.Description);
blnFound := TRUE;
END;
UNTIL SalesLine2.NEXT = 0;
END;
Setselection filter on form/page
ReplyDeleteTempItem.DELETEALL;
CurrPage.SETSELECTIONFILTER(Item);
IF Item.FINDSET THEN
REPEAT
TempItem := Item;
TempItem.INSERT;
UNTIL Item.NEXT = 0;
//Test our selection worked
TempItem.RESET;
IF TempItem.FINDSET THEN
REPEAT
MESSAGE(TempItem."No.");
UNTIL TempItem.NEXT = 0;
IF ItemList.RUNMODAL= ACTION::LookupOK THEN
ItemList.GetSelectedItems(TempItem);
Example
ReplyDeleteProgress indicator based on Item DataItem
Create a report with Item as the dataitem.
Put the code below in the prescribed triggers.
Define the variables, Run the report
The TotalCount will adjust per the filters you enter on the report so the
progression bar is always on time.
Variables
Name DataType
Window Dialog
TotalCount Integer
Counter Integer
Item - OnPreDataItem()
Window.OPEN('Processing: @1@@@@@@@@@@@@@@@');
TotalCount := COUNT;
Item - OnAfterGetRecord()
Counter := Counter + 1;
Window.UPDATE(1,ROUND(Counter / TotalCount * 10000, 1));
Item - OnPostDataItem()
Window.CLOSE;
How-to use Dialog Box with Progress Indicator
Try using a dialog box, but instead of using (ex. '#1######') you use
(ex. @1@@@@@@@@@@@@@). The "@" sign signifies that you want to use
progress bar indicator.
Source http://groups.yahoo.com/group/Navision-Knowledge-Village/
Name ConstValue
ReplyDeleteText032 Creating general journal lines...\\
Text033 Employee Code #1##########\
Text034 Status @2@@@@@@@@@@@@@@@@@@@@
Employee Master - OnPreDataItem()
Window.OPEN(Text032 + Text033 +Text034);
TotalCount := COUNT;
Employee Master - OnAfterGetRecord()
Window.UPDATE(1,EmpID);
Counter := Counter + 1;
Window.UPDATE(2,ROUND(Counter / TotalCount * 10000, 1));
Employee Master - OnPostDataItem()
Window.CLOSE;
https://www.dynamics101.com/inventory-reconciliation-part-ii-understanding-inventory-transactions/
ReplyDeleteSetSelection:
ReplyDelete{
Route.RESET;
RouteList.SETTABLEVIEW(Route);
RouteList.EDITABLE(FALSE);
RouteList.LOOKUPMODE := TRUE;
IF RouteList.RUNMODAL IN [ACTION::OK,ACTION::LookupOK] THEN BEGIN
RouteList.g_fnSetSelection(Route);
IF Route.FINDSET THEN REPEAT
IF g_txtRouteFilter = '' THEN
g_txtRouteFilter := Route."Route Code"
ELSE
g_txtRouteFilter += '|' + Route."Route Code";
UNTIL
Route.NEXT = 0;
END;
}