Myyntitilastoraportin (112), Asiakas/nimikemyynti-raportin (113), Varasto – asiakasmyynti -raportin (713) tai Microsoft Dynamics NAV 2009 Service Pack 2009 Service Pack 1:n Asiakastilastot-lomakkeen (151) tuotto on virheellinen.

Käytetään kohteeseen
Dynamics NAV 2009 Service Pack 1

Tämä artikkeli koskee Microsoft Dynamics NAV -ohjelmaa kaikissa maissa ja kaikilla kielialueilla.

Ongelman ilmenemistapa

Oletetaan, että luot myyntitilauksen, jolla on nimikekulun kustannukset Microsoft Dynamics NAV 2009 Service Pack 1 :ssä (SP1). Kun suoritat Myyntitilastot-raportin (112), Asiakas/nimikemyynti-raportin (113), "Varasto – asiakasmyynti -raportin (713) tai Asiakastilastot-lomakkeen (151), tulos on virheellinen. Nimikekulun kustannukset eivät sisälly näihin raportteihin.

Syy

Tämä ongelma ilmenee, koska järjestelmä laskee kustannussumman käyttämällä tietoja, joissa on asiakaslähdetyyppi näissä raporteissa.

Ratkaisu

Hotfix-tiedot

Tuettu hotfix-korjaus on nyt saatavilla Microsoftilta. Sen tarkoituksena on kuitenkin korjata vain tässä artikkelissa kuvattu ongelma. Käytä sitä vain järjestelmissä, joissa on tämä ongelma. Tämä hotfix-korjaus voi saada lisätestejä. Jos ongelma ei siis vaikuta sinuun vakavasti, suosittelemme odottamaan seuraavaa Microsoft Dynamics NAV 2009 Service Pack -pakettia tai seuraavaa Microsoft Dynamics NAV -versiota, joka sisältää tämän hotfix-korjauksen.

Huomautus Erityistapauksissa tukipuheluista tavallisesti aiheutuvat maksut voidaan peruuttaa, jos Microsoft Dynamicsin ja siihen liittyvien tuotteiden teknisen tuen asiantuntija määrittää, että tietty päivitys ratkaisee ongelmasi. Tavanomaiset tukikustannukset koskevat muita tukikysymyksiä ja -ongelmia, jotka eivät ole oikeutettuja kyseiseen päivitykseen.

            
          

Asennustiedot

Microsoft tarjoaa ohjelmointiesimerkkejä vain havainnollistamista varten ilman ilmaistua tai oletettua takuuta. Tämä sisältää muun muassa oletetut takuut soveltuvuudesta kaupankäynnin kohteeksi tai sopivuudesta tiettyyn tarkoitukseen. Tässä artikkelissa oletetaan, että tunnet ohjelmointikielen, jota esitellään, sekä työkalut, joita käytetään toimintosarjojen luomiseen ja virheenkorjaukseen. Microsoftin tukihenkilöt voivat auttaa selittämään tietyn menettelyn toiminnallisuuden, mutta he eivät muokkaa näitä esimerkkejä niin, että ne tarjoaisivat lisätoimintoja tai laativat menetelmiä erityisvaatimusten täyttämiseksi.

Huomautus Varmista ennen tämän hotfix-korjauksen asentamista, että kaikki Microsoft Navision -asiakasohjelman käyttäjät ovat kirjautuneet ulos järjestelmästä. Tämä koskee myös Microsoft Navision Application Services (NAS) -asiakaskäyttäjiä. Sinun pitäisi olla ainoa asiakaskäyttäjä, joka on kirjautunut sisään, kun otat tämän hotfix-korjauksen käyttöön.

Jotta voit ottaa tämän hotfix-korjauksen käyttöön, sinulla on oltava kehittäjän käyttöoikeus.

Suosittelemme, että käyttäjätilille, joka on Windowsin kirjautumisikkunassa tai Tietokannan kirjautumiset -ikkunassa, määritetään "SUPER"-roolitunnus. Jos käyttäjätilille ei voi määrittää "SUPER"-roolitunnusta, sinun on varmistettava, että käyttäjätilillä on seuraavat käyttöoikeudet:

  • Muutettavan objektin Muokkaa-käyttöoikeus.
  • System Object ID 5210 -objektin ja System Object ID 9015 -objektin Suoritus-oikeus.

                
Huomautus Sinulla ei tarvitse olla oikeuksia tietosäilöihin, ellei sinun tarvitse korjata tietoja.

Koodin muutokset

Huomautus Testaa koodikorjaukset aina valvotussa ympäristössä, ennen kuin otat korjaukset käyttöön tuotantotietokoneissasi.
Voit ratkaista tämän ongelman seuraavasti:

  1. Muuta asiakas- ja nimikemyyntiraportin (113) koodia seuraavasti:
    Olemassa oleva koodi 1

        OnPreReport=BEGIN
                      CustFilter := Customer.GETFILTERS;
                      ItemLedgEntryFilter := "Value Entry".GETFILTERS;
                      PeriodText := "Value Entry".GETFILTER("Posting Date");
    
                      IF PrintToExcel THEN
                        MakeExcelInfo;
                    END;
    

    Korvaava koodi 1

        OnPreReport=BEGIN
                      CustFilter := Customer.GETFILTERS;
                      ItemLedgEntryFilter := "Item Ledger Entry".GETFILTERS;
                      PeriodText := "Item Ledger Entry".GETFILTER("Posting Date");
    
                      IF PrintToExcel THEN
                        MakeExcelInfo;
                    END;
    

    Nykyinen koodi 2

                { 10  ;TextBox      ;0    ;0    ;18150;423  ;SourceExpr="Value Entry".TABLECAPTION + ': ' + ItemLedgEntryFilter;
                                                             DataSetFieldName=Value_Entry__TABLECAPTION__________ItemLedgEntryFilter }
    

    Korvaava koodi 2

                { 10  ;TextBox      ;0    ;0    ;18150;423  ;SourceExpr="Item Ledger Entry".TABLECAPTION + ': ' + ItemLedgEntryFilter;
                                                             DataSetFieldName=Value_Entry__TABLECAPTION__________ItemLedgEntryFilter }
    

    Olemassa oleva koodi 3

            DataItemIndent=1;
            DataItemTable=Table5802;
            DataItemTableView=SORTING(Source Type,Source No.,Item No.,Posting Date)
                              WHERE(Source Type=CONST(Customer));
            OnPreDataItem=BEGIN
                            ValueEntryBuffer.RESET;
                            ValueEntryBuffer.DELETEALL;
    
                            NextEntryNo := 1;
                          END;
    
            OnAfterGetRecord=BEGIN
                               ValueEntryBuffer.SETRANGE("Item No.", "Item No.");
    
                               IF NOT ValueEntryBuffer.FIND('-') THEN BEGIN
                                 ValueEntryBuffer.INIT;
                                 ValueEntryBuffer."Entry No." := NextEntryNo;
                                 ValueEntryBuffer."Item No." := "Item No.";
                                 ValueEntryBuffer.INSERT;
    
                                 NextEntryNo := NextEntryNo + 1;
                               END;
    
                               ValueEntryBuffer."Invoiced Quantity" := ValueEntryBuffer."Invoiced Quantity" + "Invoiced Quantity";
                               ValueEntryBuffer."Sales Amount (Actual)" := ValueEntryBuffer."Sales Amount (Actual)" + "Sales Amount (Actual)";
                               ValueEntryBuffer."Cost Amount (Actual)" := ValueEntryBuffer."Cost Amount (Actual)" + "Cost Amount (Actual)";
                               ValueEntryBuffer."Discount Amount" := ValueEntryBuffer."Discount Amount" + "Value Entry"."Discount Amount";
                               ValueEntryBuffer."Cost Amount (Non-Invtbl.)" := ValueEntryBuffer."Cost Amount (Non-Invtbl.)" + "Cost Amount (Non-Invtbl.)";
                               ValueEntryBuffer.MODIFY;
                             END;
    
            ReqFilterFields=Item No.,Inventory Posting Group,Posting Date;
            DataItemLink=Source No.=FIELD(No.),
                         Posting Date=FIELD(Date Filter),
                         Global Dimension 1 Code=FIELD(Global Dimension 1 Filter),
                         Global Dimension 2 Code=FIELD(Global Dimension 2 Filter);
    

    Korvaava koodi 3

            DataItemIndent=1;
            DataItemTable=Table32;
            DataItemTableView=SORTING(Source Type,Source No.,Item No.,Variant Code,Posting Date)
                              WHERE(Source Type=CONST(Customer));
            OnPreDataItem=BEGIN
                            ValueEntryBuffer.RESET;
                            ValueEntryBuffer.DELETEALL;
    
                            NextEntryNo := 1;
                          END;
    
            OnAfterGetRecord=BEGIN
                               ValueEntryBuffer.SETRANGE("Item No.", "Item No.");
    
                               IF NOT ValueEntryBuffer.FIND('-') THEN BEGIN
                                 ValueEntryBuffer.INIT;
                                 ValueEntryBuffer."Entry No." := NextEntryNo;
                                 ValueEntryBuffer."Item No." := "Item No.";
                                 ValueEntryBuffer.INSERT;
    
                                 NextEntryNo := NextEntryNo + 1;
                               END;
                               CALCFIELDS("Sales Amount (Actual)","Cost Amount (Actual)","Cost Amount (Non-Invtbl.)");
                               ValueEntryBuffer."Invoiced Quantity" := ValueEntryBuffer."Invoiced Quantity" + "Invoiced Quantity";
                               ValueEntryBuffer."Sales Amount (Actual)" := ValueEntryBuffer."Sales Amount (Actual)" + "Sales Amount (Actual)";
                               ValueEntryBuffer."Cost Amount (Actual)" := ValueEntryBuffer."Cost Amount (Actual)" + "Cost Amount (Actual)";
    
                               ValueEntry.SETCURRENTKEY("Item Ledger Entry No.");
                               ValueEntry.SETRANGE("Item Ledger Entry No.","Entry No.");
                               IF ValueEntry.FINDSET THEN
                                 REPEAT
                                   ValueEntryBuffer."Discount Amount" := ValueEntryBuffer."Discount Amount" + ValueEntry."Discount Amount";
                                 UNTIL ValueEntry.NEXT = 0;
    
                               ValueEntryBuffer."Cost Amount (Non-Invtbl.)" := ValueEntryBuffer."Cost Amount (Non-Invtbl.)" + "Cost Amount (Non-Invtbl.)";
                               ValueEntryBuffer.MODIFY;
                             END;
    
            ReqFilterFields=Item No.,Posting Date;
            DataItemLink=Source No.=FIELD(No.),
                         Posting Date=FIELD(Date Filter),
                         Global Dimension 1 Code=FIELD(Global Dimension 1 Filter),
                         Global Dimension 2 Code=FIELD(Global Dimension 2 Filter);
    
  2. Muuta asiakas- ja nimikemyyntiraportin (113) MakeExcelInfo@5-funktion koodia seuraavasti:
    Aiemmin luotu koodi

        BEGIN
          ExcelBuf.AddInfoColumn("Value Entry".GETFILTERS,FALSE,'',FALSE,FALSE,FALSE,'');
    

    Korvaava koodi

        BEGIN
          ExcelBuf.AddInfoColumn("Item Ledger Entry".GETFILTERS,FALSE,'',FALSE,FALSE,FALSE,''); 
    
  3. Lisää uusi paikallinen muuttuja Varasto – asiakasmyynti -raportin Julkaise-funktioon ja määritä muuttuja seuraavasti:

    • Nimi: ItemLedgerEntry@1001
    • Tietotyyppi: Tietue
    • Pituus: 32
  4. Muuta koodia Arvotapahtuma - OnAfterGetRecord-käynnistimessä Varasto - Asiakasmyynti -raportissa (713) seuraavasti:
    Aiemmin luotu koodi

    IF "Expected Cost" THEN
    CurrReport.SKIP;
    
    Profit := "Sales Amount (Actual)" + "Cost Amount (Actual)" + "Cost Amount (Non-Invtbl.)";
    
    IF ISSERVICETIER THEN
    IF "Source No." <> '' THEN
    

    Korvaava koodi

    IF "Expected Cost" THEN
      CurrReport.SKIP;
    
    //Add the following lines.
    WITH ItemLedgerEntry DO BEGIN
    SETRANGE("Entry No.","Item Ledger Entry No.");
    IF FINDFIRST THEN BEGIN
     CALCFIELDS("Sales Amount (Actual)","Cost Amount (Actual)","Cost Amount (Non-Invtbl.)");
    Profit := "Sales Amount (Actual)" + "Cost Amount (Actual)" + "Cost Amount (Non-Invtbl.)";
    END;
    END;
    //End of the lines.
    
    IF ISSERVICETIER THEN
     IF "Source No." <> '' THEN
    
  5. Muuta NonInvtblCostAmt-funktion koodia Kustannusten laskutoimituksen hallinnan koodissa (5836) seuraavasti:
    Aiemmin luotu koodi

            END;
          END;
    
          //Delete the following lines.
          PROCEDURE NonInvtblCostAmt@29(VAR Customer@1001 : Record 18) : Decimal;
          VAR
            ValueEntry@1000 : Record 5802;
          BEGIN
            WITH ValueEntry DO BEGIN
          //End of the lines.
    
              SETCURRENTKEY("Source Type","Source No.");
              SETRANGE("Source Type","Source Type"::Customer);
              SETRANGE("Source No.",Customer."No.");
    

    Korvaava koodi

            END;
          END;
    
          //Add the following lines.
          PROCEDURE NonInvtblCostAmt@29(VAR Customer@1001 : Record 18) CostAmtNonInvtbl : Decimal;
          VAR
            ItemLedgerEntry@1000 : Record 32;
          BEGIN
            WITH ItemLedgerEntry DO BEGIN
          //End of the lines.
    
              SETCURRENTKEY("Source Type","Source No.");
              SETRANGE("Source Type","Source Type"::Customer);
              SETRANGE("Source No.",Customer."No.");
    
  6. Muuta NonInvtblCostAmt-funktion koodia Kustannusten laskutoimituksen hallinnan koodissa (5836) seuraavasti:
    Aiemmin luotu koodi

              SETFILTER("Global Dimension 1 Code",Customer."Global Dimension 1 Filter");
              SETFILTER("Global Dimension 2 Code",Customer."Global Dimension 2 Filter");
    
              //Delete the following lines.
              CALCSUMS("Cost Amount (Non-Invtbl.)");
              EXIT("Cost Amount (Non-Invtbl.)");
              //End of the lines.
    
            END;
          END;
    

    Korvaava koodi

              SETFILTER("Global Dimension 1 Code",Customer."Global Dimension 1 Filter");
              SETFILTER("Global Dimension 2 Code",Customer."Global Dimension 2 Filter");
    
              //Add the following lines.
              IF FINDSET THEN
                REPEAT
                  CALCFIELDS("Cost Amount (Non-Invtbl.)");
                  CostAmtNonInvtbl += "Cost Amount (Non-Invtbl.)";
                UNTIL NEXT = 0;
              EXIT(CostAmtNonInvtbl);
              //End of the lines.
    
            END;
          END;
    

Edellytykset

Tämän hotfix-korjauksen ottaminen käyttöön edellyttää Microsoft Dynamics NAV 2009 Service Pack 1:n asentamista.

Poistotiedot

Et voi poistaa tätä hotfix-korjausta.

Tila

Microsoft on vahvistanut tämän olevan ongelma niissä Microsoftin tuotteissa, jotka ovat listattuna Koskee seuraavia tuotteita -osiossa.

Huomautus Tämä on FAST PUBLISH -artikkeli, joka on luotu suoraan Microsoftin tukiorganisaatiosta. Tässä annetut tiedot annetaan sellaisenaan vastauksena uusiin ongelmiin. Koska materiaalit ovat nopeasti käytettävissä, ne voivat sisältää typografisia virheitä, ja niitä voidaan muuttaa milloin tahansa ilman ennakkoilmoitusta. Lisätietoja on ohjeaiheessa Käyttöehdot .