Questo articolo si applica a Microsoft Dynamics NAV per le impostazioni locali della lingua spagnola (es).
Sintomi
Se il valore di Sconto pagamento % non è uguale a zero nella versione spagnola di Microsoft Dynamics NAV 2009 Service Pack 1 (SP1), lo sconto pagamento viene calcolato in modo non corretto nella fattura di acquisto e nella fattura di vendita.
Risoluzione
Informazioni sull'aggiornamento rapido
È ora disponibile un hotfix supportato da Microsoft. Tuttavia, è destinato solo a correggere il problema descritto in questo articolo. Applicala solo ai sistemi che stanno riscontrando questo problema specifico. Questo hotfix potrebbe ricevere ulteriori test. Pertanto, se non sei gravemente interessato da questo problema, ti consigliamo di attendere il prossimo Service Pack di Microsoft Dynamics NAV 2009 o la prossima versione di Microsoft Dynamics NAV che contiene questo hotfix.
Nota In casi speciali, gli addebiti normalmente sostenuti per le chiamate al supporto tecnico possono essere annullati se un professionista del supporto tecnico per Microsoft Dynamics e i prodotti correlati determinano che un aggiornamento specifico risolverà il problema. I soliti costi del supporto verranno applicati a domande e problemi di supporto aggiuntivi che non sono idonei per l'aggiornamento specifico in questione.
Informazioni sull'installazione
Microsoft fornisce esempi di programmazione a titolo puramente illustrativo, senza alcuna garanzia espressa o implicita. Ciò include, a titolo esemplificativo e non esaustivo, le garanzie implicite di commerciabilità o idoneità a uno scopo particolare. Questo articolo presuppone che si abbia familiarità con il linguaggio di programmazione oggetto della dimostrazione e con gli strumenti utilizzati per la creazione e il debug delle procedure. I tecnici del supporto Tecnico Microsoft possono spiegare le funzionalità di una particolare procedura, ma non modificarli per fornire funzionalità aggiuntive o creare procedure in base a specifici requisiti.
Nota Prima di installare questo hotfix, verificare che tutti gli utenti client di Microsoft Navision siano disconnessi dal sistema. Sono inclusi gli utenti client di Microsoft Navision Application Services (NAS). Dovresti essere l'unico utente client connesso quando implementi questo hotfix.
Per implementare questo hotfix, è necessario disporre di una licenza per sviluppatori.
È consigliabile assegnare l'ID ruolo "SUPER" all'account utente nella finestra Accessi di Windows o nella finestra Accessi database. Se all'account utente non è possibile assegnare l'ID ruolo "SUPER", è necessario verificare che l'account utente disponga delle autorizzazioni seguenti:
- Autorizzazione modifica per l'oggetto che si desidera modificare.
- Autorizzazione Execute per l'oggetto System Object ID 5210 e per l'oggetto System Object ID 9015.
Nota: non è necessario disporre dei diritti per gli archivi dati a meno che non sia necessario eseguire il ripristino dei dati.
Modifiche al codice
Nota Verifica sempre le correzioni del codice in un ambiente controllato prima di applicare le correzioni ai computer di produzione.
Per risolvere il problema, attenersi alla procedura seguente:
Modificare il codice nella funzione CalculateInvoiceDiscount in Sales-Calc. Codeunit sconto (60) come segue:
Codice esistente 1... SalesSetup@1003 : Record 311; TempServiceChargeLine@1005 : TEMPORARY Record 37; GLAcc@1100000 : Record 15; BEGIN SalesSetup.GET; WITH SalesLine DO BEGIN ...Codice di sostituzione 1
... SalesSetup@1003 : Record 311; TempServiceChargeLine@1005 : TEMPORARY Record 37; GLAcc@1100000 : Record 15; // Add the following line. TempSalesLine@1100001 : TEMPORARY Record 37; // End of the line. BEGIN SalesSetup.GET; WITH SalesLine DO BEGIN ...Codice esistente 2
... (SalesLine2."Prepayment %" = 0) THEN SalesLine2.VALIDATE("Inv. Discount Amount"); // Delete the following lines. IF SalesLine2."Allow Invoice Disc." THEN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": SalesLine2."Inv. Discount Amount" := ROUND(SalesLine2."Line Amount" * CustInvDisc."Discount %" / 100,0.000001); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": SalesLine2."Inv. Discount Amount" := ROUND( (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount" ) * CustInvDisc."Discount %" / 100,0.000001); END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": SalesLine2."Pmt. Disc. Given Amount" := ROUND( (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") * SalesHeader."Payment Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": SalesLine2."Pmt. Disc. Given Amount" := ROUND( (SalesLine2."Line Amount" - SalesLine2."Inv. Discount Amount") * SalesHeader."Payment Discount %" / 100,0.01); END; END; // End of the lines. IF (SalesLine2.Type <> SalesLine2.Type::"Charge (Item)") AND (SalesLine2."Prepayment %" = 0) ...Codice di sostituzione 2
... (SalesLine2."Prepayment %" = 0) THEN SalesLine2.VALIDATE("Inv. Discount Amount"); // Add the following lines. IF SalesLine2."Allow Invoice Disc." THEN BEGIN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempSalesLine."Inv. Discount Amount" := TempSalesLine."Inv. Discount Amount" + SalesLine2."Line Amount" * CustInvDisc."Discount %" / 100; SalesLine2."Inv. Discount Amount" := ROUND(TempSalesLine."Inv. Discount Amount",0.000001); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": BEGIN TempSalesLine."Inv. Discount Amount" := TempSalesLine."Inv. Discount Amount" + (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") * CustInvDisc."Discount %" / 100; SalesLine2."Inv. Discount Amount" := ROUND(TempSalesLine."Inv. Discount Amount",0.000001); END; END; TempSalesLine."Inv. Discount Amount" := TempSalesLine."Inv. Discount Amount" - SalesLine2."Inv. Discount Amount"; END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": BEGIN TempSalesLine."Pmt. Disc. Given Amount" := TempSalesLine."Pmt. Disc. Given Amount" + (SalesLine2."Line Amount" + SalesLine2."Line Discount Amount") * SalesHeader."Payment Discount %" / 100; SalesLine2."Pmt. Disc. Given Amount" := ROUND(TempSalesLine."Pmt. Disc. Given Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempSalesLine."Pmt. Disc. Given Amount" := TempSalesLine."Pmt. Disc. Given Amount" + (SalesLine2."Line Amount" - SalesLine2."Inv. Discount Amount") * SalesHeader."Payment Discount %" / 100; SalesLine2."Pmt. Disc. Given Amount" := ROUND(TempSalesLine."Pmt. Disc. Given Amount",0.01); END; END; TempSalesLine."Pmt. Disc. Given Amount" := TempSalesLine."Pmt. Disc. Given Amount" - SalesLine2."Pmt. Disc. Given Amount"; END; // End of the lines. IF (SalesLine2.Type <> SalesLine2.Type::"Charge (Item)") AND (SalesLine2."Prepayment %" = 0) ...Modificare il codice nella funzione CalculateInvoiceDiscount nella codeunit Purch.-Calc.Discount (70) come segue:
Codice esistente 1... PurchSetup@1003 : Record 312; TempServiceChargeLine@1005 : TEMPORARY Record 39; GLAcc@1100000 : Record 15; BEGIN PurchSetup.GET; WITH PurchLine DO BEGIN ...Codice di sostituzione 1
... PurchSetup@1003 : Record 312; TempServiceChargeLine@1005 : TEMPORARY Record 39; GLAcc@1100000 : Record 15; // Add the following line. TempPurchLine@1100001 : TEMPORARY Record 39; // End of the line. BEGIN PurchSetup.GET; WITH PurchLine DO BEGIN ...Codice esistente 2
... (PurchLine2."Prepayment %" = 0) THEN PurchLine2.VALIDATE("Inv. Discount Amount"); // Delete the following lines. IF PurchLine2."Allow Invoice Disc." THEN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": PurchLine2."Inv. Discount Amount" := ROUND(PurchLine2."Line Amount" * VendInvDisc."Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": PurchLine2."Inv. Discount Amount" := ROUND( (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount" ) * VendInvDisc."Discount %" / 100,0.01); END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND( (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") * PurchHeader."Payment Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND( (PurchLine2."Line Amount" - PurchLine2."Inv. Discount Amount") * PurchHeader."Payment Discount %" / 100,0.01); END; END; // End of the lines. IF (PurchLine2.Type <> PurchLine2.Type::"Charge (Item)") AND ...Codice di sostituzione 2
... (PurchLine2."Prepayment %" = 0) THEN PurchLine2.VALIDATE("Inv. Discount Amount"); // Add the following lines. IF PurchLine2."Allow Invoice Disc." THEN BEGIN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempPurchLine."Inv. Discount Amount" := TempPurchLine."Inv. Discount Amount" + PurchLine2."Line Amount" * VendInvDisc."Discount %" / 100; PurchLine2."Inv. Discount Amount" := ROUND(TempPurchLine."Inv. Discount Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": BEGIN TempPurchLine."Inv. Discount Amount" := TempPurchLine."Inv. Discount Amount" + (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") * VendInvDisc."Discount %" / 100; PurchLine2."Inv. Discount Amount" := ROUND(TempPurchLine."Inv. Discount Amount",0.01); END; END; TempPurchLine."Inv. Discount Amount" := TempPurchLine."Inv. Discount Amount" - PurchLine2."Inv. Discount Amount"; END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": BEGIN TempPurchLine."Pmt. Disc. Rcd. Amount" := TempPurchLine."Pmt. Disc. Rcd. Amount" + (PurchLine2."Line Amount" + PurchLine2."Line Discount Amount") * PurchHeader."Payment Discount %" / 100; PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND(TempPurchLine."Pmt. Disc. Rcd. Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempPurchLine."Pmt. Disc. Rcd. Amount" := TempPurchLine."Pmt. Disc. Rcd. Amount" + (PurchLine2."Line Amount" - PurchLine2."Inv. Discount Amount") * PurchHeader."Payment Discount %" / 100; PurchLine2."Pmt. Disc. Rcd. Amount" := ROUND(TempPurchLine."Pmt. Disc. Rcd. Amount",0.01); END; END; TempPurchLine."Pmt. Disc. Rcd. Amount" := TempPurchLine."Pmt. Disc. Rcd. Amount" - PurchLine2."Pmt. Disc. Rcd. Amount"; END; // End of the lines. IF (PurchLine2.Type <> PurchLine2.Type::"Charge (Item)") AND ...Modificare il codice nella funzione CalculateInvoiceDiscount in Service-Calc. Codeunit sconto (5950) come segue:
Codice esistente 1... SalesSetup@1005 : Record 311; ServiceChargeLineNo@1004 : Integer; GLAcc@1100000 : Record 15; BEGIN ServSetup.GET; WITH ServiceLine DO BEGIN ...Codice di sostituzione 1
... SalesSetup@1005 : Record 311; ServiceChargeLineNo@1004 : Integer; GLAcc@1100000 : Record 15; // Add the following line. TempServiceLine@1100001 : TEMPORARY Record 5902; // End of the line. BEGIN ServSetup.GET; WITH ServiceLine DO BEGIN ...Codice esistente 2
... IF (ServiceLine2.Quantity <> 0) AND NOT InvAllow THEN BEGIN ServiceLine2."Pmt. Disc. Given Amount" := 0; ServiceLine2.VALIDATE("Inv. Discount Amount"); // Delete the following lines. IF ServiceLine2."Allow Invoice Disc." THEN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": ServiceLine2."Inv. Discount Amount" := ROUND(ServiceLine2."Line Amount" * CustInvDisc."Discount %" / 100,0.000001); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": ServiceLine2."Inv. Discount Amount" := ROUND( (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount" ) * CustInvDisc."Discount %" / 100,0.000001); END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": ServiceLine2."Pmt. Disc. Given Amount" := ROUND( (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") * ServHeader."Payment Discount %" / 100,0.01); GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": ServiceLine2."Pmt. Disc. Given Amount" := ROUND( (ServiceLine2."Line Amount" - ServiceLine2."Inv. Discount Amount") * ServHeader."Payment Discount %" / 100,0.01); END; END; // End of the lines. ServiceLine2.VALIDATE("Inv. Discount Amount"); ServiceLine2.MODIFY; ...Codice di sostituzione 2
... IF (ServiceLine2.Quantity <> 0) AND NOT InvAllow THEN BEGIN ServiceLine2."Pmt. Disc. Given Amount" := 0; ServiceLine2.VALIDATE("Inv. Discount Amount"); // Add the following lines. IF ServiceLine2."Allow Invoice Disc." THEN BEGIN CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::" ", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempServiceLine."Inv. Discount Amount" := TempServiceLine."Inv. Discount Amount" + ServiceLine2."Line Amount" * CustInvDisc."Discount %" / 100; ServiceLine2."Inv. Discount Amount" := ROUND(TempServiceLine."Inv. Discount Amount",0.000001); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.": BEGIN TempServiceLine."Inv. Discount Amount" := TempServiceLine."Inv. Discount Amount" + (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") * CustInvDisc."Discount %" / 100; ServiceLine2."Inv. Discount Amount" := ROUND(TempServiceLine."Inv. Discount Amount",0.000001); END; END; TempServiceLine."Inv. Discount Amount" := TempServiceLine."Inv. Discount Amount" - ServiceLine2."Inv. Discount Amount"; END; IF GLSetup."Payment Discount Type" = GLSetup."Payment Discount Type"::"Calc. Pmt. Disc. on Lines" THEN BEGIN GLSetup.TESTFIELD("Discount Calculation"); CASE GLSetup."Discount Calculation" OF GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. + Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. + Payment Disc.": BEGIN TempServiceLine."Pmt. Disc. Given Amount" := TempServiceLine."Pmt. Disc. Given Amount" + (ServiceLine2."Line Amount" + ServiceLine2."Line Discount Amount") * ServHeader."Payment Discount %" / 100; ServiceLine2."Pmt. Disc. Given Amount" := ROUND(TempServiceLine."Pmt. Disc. Given Amount",0.01); END; GLSetup."Discount Calculation"::"Line Disc. + Inv. Disc. * Payment Disc.", GLSetup."Discount Calculation"::"Line Disc. * Inv. Disc. * Payment Disc.": BEGIN TempServiceLine."Pmt. Disc. Given Amount" := TempServiceLine."Pmt. Disc. Given Amount" + (ServiceLine2."Line Amount" - ServiceLine2."Inv. Discount Amount") * ServHeader."Payment Discount %" / 100; ServiceLine2."Pmt. Disc. Given Amount" := ROUND(TempServiceLine."Pmt. Disc. Given Amount",0.01); END; END; TempServiceLine."Pmt. Disc. Given Amount" := TempServiceLine."Pmt. Disc. Given Amount" - ServiceLine2."Pmt. Disc. Given Amount"; END; // End of the lines. ServiceLine2.VALIDATE("Inv. Discount Amount"); ServiceLine2.MODIFY; ...
Prerequisiti
Per applicare questo hotfix è necessaria la versione spagnola di Microsoft Dynamics NAV 2009 Service Pack 1.
Informazioni sulla rimozione
Non è possibile rimuovere questo hotfix.
Stato
Microsoft ha confermato che si tratta di un problema relativo ai prodotti elencati nella sezione "Si applica a".
Nota Questo è un articolo "FAST PUBLISH" creato direttamente dall'organizzazione di supporto Microsoft. Le informazioni contenute nel presente documento vengono fornite così come sono in risposta ai problemi emergenti. A causa della velocità di reso disponibile, i materiali possono includere errori tipografici e possono essere modificati in qualsiasi momento senza preavviso. Per altre considerazioni, vedere Condizioni per l'utilizzo .