Questo articolo si applica a Microsoft Dynamics NAV per le impostazioni locali della lingua russa (ru).
Sintomi
Si supponga di installare l'aggiornamento critico locale PS59774 e l'aggiornamento critico locale PS60060 per la versione russa di Microsoft Dynamics NAV 2009 R2. Per ulteriori informazioni, visita i seguenti siti Web Microsoft:
- Aggiornamento critico locale per Microsoft Dynamics NAV 2009 RU "Modifiche nel calcolo dei contributi assicurativi per malattia - Nuovo modello per modulo NDFL-2
- Персонал и зарплата. Регистр налога на дододи зизиескиг лия Microsoft Dynamics NAV 2009 R2 - Россия
Dopo aver registrato la correzione per un documento relativo alle retribuzioni, il sistema popola gli importi nella contabilità generale (C/G) per la correzione. Tuttavia, gli importi sono diversi dagli importi contenuti nei movimenti C/G per il documento di retribuzioni originale.
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 dell'assistenza Microsoft possono aiutare a spiegare la funzionalità di una particolare procedura. Tuttavia, non modificheranno questi esempi per fornire funzionalità aggiuntive o costruire procedure che soddisfino i vostri requisiti specifici.
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 in Payroll Document – Calculatecodeunit (17404). A tale scopo, procedere come segue:
Creare una nuova funzione nel modo seguente:
LOCAL PROCEDURE IsCorrDocument@1210011(DocumentNo@1210000 : Code[20]) : Boolean; VAR PayrollDocument@1210001 : Record 17414; BEGIN IF PayrollDocument.GET(DocumentNo) THEN EXIT(PayrollDocument.Correction); END;Modificare il codice nella funzione Ritenuta. A questo scopo, procedere come segue:
Aggiungere una variabile locale e quindi specificare la variabile nel modo seguente:
- Nome: Firma
- Tipo di dati: Integer
Modificare il codice nel modo seguente:
Codice esistente 1... IF RangeHeader.FIND('+') THEN; FundTax := (PayrollDocLine."Element Type" = PayrollDocLine."Element Type"::Funds); ...Codice di sostituzione 1
... IF RangeHeader.FIND('+') THEN; // Add the following lines. IF TaxableGross >= 0 THEN Sign := 1 ELSE Sign := -1; // End of the added lines FundTax := (PayrollDocLine."Element Type" = PayrollDocLine."Element Type"::Funds); ...Codice esistente 2
... // Delete the following line. SETFILTER("Over Amount",'<%1',TaxableGross); IF NOT FIND('+') THEN BEGIN SETRANGE("Over Amount"); IF NOT FIND('-') THEN EXIT(0); END; // Delete the following lines. ReturnValue := "Tax Amount" + ((TaxableGross - "Over Amount") * "Tax %" / 100.0); IF ReturnValue < 0 THEN ReturnValue := 0; IF ("Max Deduction" > 0) AND (ReturnValue > "Max Deduction") THEN ReturnValue := "Max Deduction"; // End of the deleted lines. ...Codice di sostituzione 2
... // Add the following line. SETFILTER("Over Amount",'<%1',ABS(TaxableGross)); IF NOT FIND('+') THEN BEGIN SETRANGE("Over Amount"); IF NOT FIND('-') THEN EXIT(0); END; // Add the following lines. ReturnValue := "Tax Amount" + ((TaxableGross - Sign * "Over Amount") * "Tax %" / 100.0); IF (ReturnValue < 0) AND NOT IsCorrDocument(PayrollDocLine."Document No.") THEN ReturnValue := 0 ELSE IF ("Max Deduction" > 0) AND (ABS(ReturnValue) > "Max Deduction") THEN ReturnValue := Sign * "Max Deduction"; // End of the added lines. ...
Modificare il codice in Payroll Document – Post codeunit (17405). A questo scopo, procedere come segue:
Creare una nuova funzione nel modo seguente:
... LOCAL PROCEDURE GetSignFactor@1210010(Amount@1170000000 : Decimal) : Integer; BEGIN IF Amount >= 0 THEN EXIT(1); EXIT(-1); END; ...Modificare il codice nel trigger Onrun nel modo seguente:
Codice esistente... PostedPayrDocLineToGenJnlLine(PostedPayrollDocLine,GenJnlLine); // Delete the following lines. IF Correction THEN GenJnlLine.VALIDATE(Amount,-PayrollDocBuffer."Tax Amount") ELSE GenJnlLine.VALIDATE(Amount,PayrollDocBuffer."Tax Amount"); // End of deleted lines. PayrollElement.GET(PayrollDocBuffer."Element Code"); ...Codice sostitutivo
... PostedPayrDocLineToGenJnlLine(PostedPayrollDocLine,GenJnlLine); // Add the following line. GenJnlLine.VALIDATE(Amount,PayrollDocBuffer."Tax Amount"); ...Modificare il codice nella funzione Aggrega imposte. A questo scopo, procedere come segue:
Aggiungere una variabile locale e quindi specificare la variabile nel modo seguente:
- Nome: Firma
- Tipo di dati: Integer
Modificare il codice nel modo seguente:
Codice esistente... PayrollDocBuffer.RESET; PayrollDocBuffer.SETRANGE("Element Code",PayrollDocLineFund."Element Code"); IF PayrollDocBuffer.FINDSET THEN REPEAT // Delete the following line. YTDTaxableAmount := YTDTaxableAmount + PayrollDocBuffer."Base Amount"; TempPayrollDocLine2."Employee No." := PayrollDocLineFund."Employee No."; TempPayrollDocLine2."Period Code" := PayrollDocLineFund."Period Code"; TempPayrollDocLine2."Element Code" := PayrollDocLineFund."Element Code"; YTDTaxAmount := PayrollDocCalculate.Withholding(TempPayrollDocLine2,YTDTaxableAmount); // Delete the following line. CurrPeriodTaxAmount := YTDTaxAmount + YTDPostedTaxAmount; PayrollDocBuffer."Tax Amount" := CurrPeriodTaxAmount; PayrollDocBuffer.MODIFY; // Delete the following line. YTDPostedTaxAmount := YTDPostedTaxAmount - CurrPeriodTaxAmount; UNTIL PayrollDocBuffer.NEXT = 0; ...Codice sostitutivo
... PayrollDocBuffer.RESET; PayrollDocBuffer.SETRANGE("Element Code",PayrollDocLineFund."Element Code"); IF PayrollDocBuffer.FINDSET THEN REPEAT // Add the following lines. Sign := GetSignFactor(PayrollDocBuffer."Base Amount"); YTDTaxableAmount := YTDTaxableAmount + Sign * PayrollDocBuffer."Base Amount"; // End of the added lines. TempPayrollDocLine2."Document No." := PayrollDocLineFund."Document No."; TempPayrollDocLine2."Employee No." := PayrollDocLineFund."Employee No."; TempPayrollDocLine2."Period Code" := PayrollDocLineFund."Period Code"; TempPayrollDocLine2."Element Code" := PayrollDocLineFund."Element Code"; YTDTaxAmount := PayrollDocCalculate.Withholding(TempPayrollDocLine2,YTDTaxableAmount); // Add the following line. CurrPeriodTaxAmount := Sign * YTDTaxAmount + Sign * YTDPostedTaxAmount; PayrollDocBuffer."Tax Amount" := CurrPeriodTaxAmount; PayrollDocBuffer.MODIFY; // Add the following line. YTDPostedTaxAmount := YTDPostedTaxAmount - Sign * CurrPeriodTaxAmount; UNTIL PayrollDocBuffer.NEXT = 0; ...
Prerequisiti
Per applicare questo hotfix è necessaria la versione russa di Microsoft Dynamics NAV 2009 R2.
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 .