Document Approval in Nav2009 IN
navuser1
Member Posts: 1,334
Hi all,
I’m working on Document Approval in NAV2009 (Local DB). I have finished the Document Approval Setup for the Purchase Order. And then create a Purchase Order and click the Function menu Send Approval Request. It gives the msg window as …
I have searched the Table Approval Entry (ID 454) but I have found no records though system gives the above msg.
If I'm wrong then please currect me!
After the Code review I have found that if the PO is created without Purchaser Code than the Document approval system will give the above msg without creating any actual entry.
Kindly reply.
I’m working on Document Approval in NAV2009 (Local DB). I have finished the Document Approval Setup for the Purchase Order. And then create a Purchase Order and click the Function menu Send Approval Request. It gives the msg window as …
I have searched the Table Approval Entry (ID 454) but I have found no records though system gives the above msg.
If I'm wrong then please currect me!
After the Code review I have found that if the PO is created without Purchaser Code than the Document approval system will give the above msg without creating any actual entry.
Kindly reply.
Now or Never
0
Comments
-
can u show ur approval user setup0
-
mohana_cse06 wrote:can u show ur approval user setup
Hi Mohana,
Thanks for your quick reply. I have solved this issue by changing value of the field Approval type from Sales Pers./Purchaser to Approver in the Approval Templates form (ID 668).
Though I think Document Approval system should not give the msg
when it does not create any entry.
Comment please.Now or Never0 -
-
i got entries even if i have Approval type = Sales Pers./Purchaser0
-
mohana_cse06 wrote:i got entries even if i have Approval type = Sales Pers./Purchaser
fine
see the function named FindApproverPurchase of function named SendPurchaseApprovalRequest in codeunit 439.FindApproverPurchase(PurchaseHeader : Record "Purchase Header";ApprovalSetup : Record "Approval Setup";AppTemplate : Record "Approval T AddApproversTemp.RESET; AddApproversTemp.DELETEALL; CalcPurchaseDocAmount(PurchaseHeader,ApprovalAmount,ApprovalAmountLCY); CASE AppTemplate."Approval Type" OF =>AppTemplate."Approval Type"::"Sales Pers./Purchaser": BEGIN => IF PurchaseHeader."Purchaser Code" <> '' THEN BEGIN CASE AppTemplate."Limit Type" OF AppTemplate."Limit Type"::"Approval Limits": BEGIN UserSetup.SETCURRENTKEY("Salespers./Purch. Code"); UserSetup.SETRANGE("Salespers./Purch. Code",PurchaseHeader."Purchaser Code"); IF NOT UserSetup.FIND('-') THEN ERROR(Text008,UserSetup."User ID",UserSetup.FIELDCAPTION("Salespers./Purch. Code"), UserSetup."Salespers./Purch. Code") ELSE BEGIN ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",PurchaseHeader."Purchaser Code", ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); ApproverId := UserSetup."Approver ID"; IF NOT UserSetup."Unlimited Purchase Approval" AND ((ApprovalAmountLCY > UserSetup."Purchase Amount Approval Limit") OR (UserSetup."Purchase Amount Approval Limit" = 0)) THEN BEGIN UserSetup.RESET; UserSetup.SETCURRENTKEY("User ID"); UserSetup.SETRANGE("User ID",ApproverId); REPEAT IF NOT UserSetup.FIND('-') THEN ERROR(Text006,ApproverId); ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UserSetup.SETRANGE("User ID",UserSetup."Approver ID"); UNTIL UserSetup."Unlimited Purchase Approval" OR ((ApprovalAmountLCY <= UserSetup."Purchase Amount Approval Limit") AND (UserSetup."Purchase Amount Approval Limit" <> 0))OR (UserSetup."User ID" = UserSetup."Approver ID") END; END; CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0; END; AppTemplate."Limit Type"::"Request Limits": BEGIN IF PurchaseHeader."Document Type" <> PurchaseHeader."Document Type"::Quote THEN ERROR(STRSUBSTNO(Text026,FORMAT(AppTemplate."Limit Type"),FORMAT(PurchaseHeader."Document Type"::Quote))) ELSE BEGIN UserSetup.SETCURRENTKEY("Salespers./Purch. Code"); UserSetup.SETRANGE("Salespers./Purch. Code",PurchaseHeader."Purchaser Code"); IF NOT UserSetup.FIND('-') THEN ERROR(Text008,UserSetup."User ID",UserSetup.FIELDCAPTION("Salespers./Purch. Code"), UserSetup."Salespers./Purch. Code"); UserSetup.RESET; UserSetup.SETRANGE("User ID",USERID); IF NOT UserSetup.FIND('-') THEN ERROR(Text005,USERID); ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); IF NOT UserSetup."Unlimited Request Approval" AND ((ApprovalAmountLCY > UserSetup."Request Amount Approval Limit") OR (UserSetup."Request Amount Approval Limit" = 0)) THEN REPEAT UserSetup.SETRANGE("User ID",UserSetup."Approver ID"); IF NOT UserSetup.FIND('-') THEN ERROR(Text005,USERID); ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL UserSetup."Unlimited Request Approval" OR ((ApprovalAmountLCY <= UserSetup."Request Amount Approval Limit") AND (UserSetup."Request Amount Approval Limit" <> 0)) OR (UserSetup."User ID" = UserSetup."Approver ID"); CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0; END; END; AppTemplate."Limit Type"::"No Limits": BEGIN UserSetup.SETCURRENTKEY("Salespers./Purch. Code"); UserSetup.SETRANGE("Salespers./Purch. Code",PurchaseHeader."Purchaser Code"); IF NOT UserSetup.FIND('-') THEN ERROR(Text008,UserSetup."User ID",UserSetup.FIELDCAPTION("Salespers./Purch. Code"), UserSetup."Salespers./Purch. Code") ELSE BEGIN ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",PurchaseHeader."Purchaser Code", ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0; END; END; END; END; END; AppTemplate."Approval Type"::Approver: BEGIN UserSetup.SETRANGE("User ID",USERID); IF NOT UserSetup.FIND('-') THEN ERROR(Text005,USERID); CASE AppTemplate."Limit Type" OF AppTemplate."Limit Type"::"Approval Limits": BEGIN ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); IF NOT UserSetup."Unlimited Purchase Approval" AND ((ApprovalAmountLCY > UserSetup."Purchase Amount Approval Limit") OR (UserSetup."Purchase Amount Approval Limit" = 0)) THEN REPEAT UserSetup.SETRANGE("User ID",UserSetup."Approver ID"); IF NOT UserSetup.FIND('-') THEN ERROR(Text005,USERID); ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL UserSetup."Unlimited Purchase Approval" OR ((ApprovalAmountLCY <= UserSetup."Purchase Amount Approval Limit") AND (UserSetup."Purchase Amount Approval Limit" <> 0)) OR (UserSetup."User ID" = UserSetup."Approver ID"); CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0; END; AppTemplate."Limit Type"::"Request Limits": BEGIN IF PurchaseHeader."Document Type" <> PurchaseHeader."Document Type"::Quote THEN ERROR(STRSUBSTNO(Text026,FORMAT(AppTemplate."Limit Type"),FORMAT(PurchaseHeader."Document Type"::Quote))) ELSE BEGIN UserSetup.SETRANGE("User ID",USERID); IF NOT UserSetup.FIND('-') THEN ERROR(Text005,USERID); ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); IF NOT UserSetup."Unlimited Request Approval" AND ((ApprovalAmountLCY > UserSetup."Request Amount Approval Limit") OR (UserSetup."Request Amount Approval Limit" = 0)) THEN REPEAT UserSetup.SETRANGE("User ID",UserSetup."Approver ID"); IF NOT UserSetup.FIND('-') THEN ERROR(Text005,USERID); ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL UserSetup."Unlimited Request Approval" OR ((ApprovalAmountLCY <= UserSetup."Request Amount Approval Limit") AND (UserSetup."Request Amount Approval Limit" <> 0)) OR (UserSetup."User ID" = UserSetup."Approver ID"); END; CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0; END; AppTemplate."Limit Type"::"No Limits": BEGIN ApproverId := UserSetup."Approver ID"; IF ApproverId = '' THEN ApproverId := UserSetup."User ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",PurchaseHeader."Purchaser Code", ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0; END; END; END; AppTemplate."Approval Type"::" ": BEGIN CheckAddApprovers(AppTemplate); IF AddApproversTemp.FIND('-') THEN REPEAT ApproverId := AddApproversTemp."Approver ID"; MakeApprovalEntry( DATABASE::"Purchase Header",PurchaseHeader."Document Type",PurchaseHeader."No.",'', ApprovalSetup,ApproverId,AppTemplate."Approval Code",UserSetup,ApprovalAmount,ApprovalAmountLCY, PurchaseHeader."Currency Code",AppTemplate,0); UNTIL AddApproversTemp.NEXT = 0 ELSE ERROR(Text027); END; END; EntryApproved := FALSE; DocReleased := FALSE; WITH ApprovalEntry DO BEGIN INIT; SETRANGE("Table ID",DATABASE::"Purchase Header"); SETRANGE("Document Type",PurchaseHeader."Document Type"); SETRANGE("Document No.",PurchaseHeader."No."); SETRANGE(Status,Status::Created); IF FINDSET(TRUE,FALSE) THEN REPEAT IF "Sender ID" = "Approver ID" THEN BEGIN Status := Status::Approved; MODIFY; END ELSE IF NOT IsOpenStatusSet THEN BEGIN Status := Status::Open; MODIFY; IsOpenStatusSet := TRUE; IF ApprovalSetup.Approvals THEN ApprovalMgtNotification.SendPurchaseApprovalsMail(PurchaseHeader,ApprovalEntry); END; UNTIL NEXT = 0; SETFILTER(Status,'=%1|%2|%3',Status::Approved,Status::Created,Status::Open); IF FIND('-') THEN REPEAT IF Status = Status::Approved THEN EntryApproved := TRUE ELSE EntryApproved := FALSE; UNTIL NEXT = 0; IF EntryApproved THEN DocReleased := ApproveApprovalRequest(ApprovalEntry); DispMessage := FALSE; IF NOT DocReleased THEN BEGIN PurchaseHeader.Status := PurchaseHeader.Status::"Pending Approval"; PurchaseHeader.MODIFY(TRUE); DispMessage := TRUE; END; IF DocReleased THEN IF TestPurchasePrepayment(PurchaseHeader) AND (PurchaseHeader."Document Type" = PurchaseHeader."Document Type"::Order) THEN BEGIN PurchaseHeader.Status := PurchaseHeader.Status::"Pending Prepayment"; PurchaseHeader.MODIFY(TRUE); MESSAGE(Text128,PurchaseHeader."Document Type",PurchaseHeader."No."); END ELSE BEGIN MESSAGE(Text003,PurchaseHeader."Document Type",PurchaseHeader."No."); END; EXIT(TRUE); END;
If this function unable to Make Approval Entry (by MakeApprovalEntry) though the function SendPurchaseApprovalRequest will give the msg as
This is not correct.Now or Never0 -
mohana_cse06 wrote:i got entries even if i have Approval type = Sales Pers./Purchaser
Create a PO without Purchaser Code and then try. :-$Now or Never0 -
am getting following error0
-
mohana_cse06 wrote:am getting following error
this error does not create any sense. When you try to create a Approval Entry it gives there is no entry with the filter.....
8)Now or Never0
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.7K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 323 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions
