VAT conversion Navision & Business Central (VAT/sales tax)

Nav123: Navision, Showare, OrderApp

Print Friendly, PDF & Email

Brief overview

  1. Make a VAT changeover as soon as possible: Set up new G/L accounts for new tax rates (VAT and input tax).
  2. New creation and setup of the new (VAT) product posting groups.
  3. As soon as possible: Extend the UVA to include the new reporting items for the advance VAT return
  4. Quickest possible: Check if you can display or see the General Product Posting Group (Business Central), Product Posting Group (Navision) and the column VAT Product Posting Group (both versions) in Purchase Orders & Sales Orders, -Invoices,- Credit Notes and if you can edit them. Reading through this tutorial here if all steps are clear and everything is prepared.
  5. On the day before the VAT changeover, after the end of operations, e.g. on 30.6.2020 or 31.12.2020 (Corona economic stimulus package with VAT reduction):
    a) Billing all delivered orders, posting all captured invoices and credit memos.
    b) Running the document conversion (also changes the item master data).
  6. From the first day after the VAT changeover, as needed: Possibly change the (VAT) product posting group per line in the purchase/sales lines, check on each document if the final amount is correct.

Requirements for a simple VAT conversion in Navision or Business Central

If this page is displayed "strangely" here (without image, without formatting, without table of contents), please open it again here.

If you have set up the VAT product posting groups and the product posting groups If you have set up the VAT product posting groups and the product posting groups as I recommend, then you are now off the hook. It will take you about 5 minutes to prepare for the VAT changeover and about another 5 minutes after close of business the day before the VAT changeover to change the VAT. This applies to both the old Navision (Dynamics Nav, Attain) and Business Central. This then also makes(s) the changeover for the sales taxreduction (VAT reduction) for Corona in 2020 (economic stimulus package / stimulus program) very easy, as well as the sales tax increase (VAT increase) following on 12/31/2020 as a result of the 2020 Corona economic stimulus package.

How do you recognize an "easy" setup of the booking groups in Navision / Attain / Business Central? How can you tell that the VAT setup preparation for the VAT changeover is easy? It's simple: please look at your VAT product posting groups and your product posting groups (Navision) or general product posting groups (Business Central). They should look something like this:

Ansicht der Allgemeinen Produktbuchungsgruppen in Navision / Business Central für eine leichte Änderung der Mehrwertsteuer
View of the General Product Booking Groups in Navision / Business Central for a slight change in VAT

Ansicht der Produktbuchungsgruppen in Microsoft Dynamics NAVision / Attain. Auch hier ist die Änderung der Mehrwertsteuer sehr einfach.
View of the product booking groups in Microsoft Dynamics NAVision / Attain. Again, the change of VAT is very simple.

Screenshot (Mehrwertsteuer) Mwst.-Produktbuchungsgruppen  Navision RTC/Business Central
View of (VAT) VAT product posting groups in Microsoft Navision RTC/Business Central.

Screenshot (Mehrwertsteuer) Mwst.-Produktbuchungsgruppen  Microsoft Dynamics NAVision / Attain
View of (VAT) VAT product posting groups in Microsoft Dynamics NAVision / Attain.

Ideally, you have exactly one VAT product posting group and exactly one product posting group per VAT rate to be converted. Maybe two or three. But not ten or a hundred. This is what matters when changing the input tax / VAT!
Note: The product posting groups are only relevant if you have VAT dependent revenue or expense accounts, e.g. 8300 Revenues 19% (SKR03) / 4400 Revenues 19% (SKR04) and 8300 Revenues 7% (SKR03) / 4300 Revenues 7% (SKR04). However, if you have "masses of posting groups", then you are a case for uniform or That doesn't fit. But: The procedure shown here also works in this case! It is only more complex.

If you also have tax dependent expense accounts / purchase of goods accounts (e.g. 3010 (Skr03) / 5300 (SKR04) purchase of goods or goods receipt 7% and 3030 (SKR03) / 5400 (SKR04) purchase of raw materials and supplies 19%), then all the procedures listed and presented here also apply to the purchase accounts.

Datev SKR03 Procedure Note

If you used a Datev connection, then you may need (in consultation with your Datev tax consultant) a different procedure! Datev uses e.g. in SKR03 identical accounts for 7%/5% (revenues 8300, expenses 3300) and 19%/16% (revenues 8400, expenses 8400). Datev recognizes here the input tax or value added tax tax class alone on the basis of the performance period. How Datev processes non-periodic credit notes here is still under clarification).

For this purpose, please also check your UVA (advance VAT return). If this is based on VAT product posting groups and VAT business posting groups, then you will very quickly have the necessary changes for the VAT change in there as well. See below for more information.

You can also perform the entire VAT / input tax change completely by hand, without any conversion tools!

This guide assumes that the setup of the VAT (value added tax) or input tax (input tax) has already been done. There may be a separate guide on how to set up the VAT (value added tax) setup.

Preparation for the VAT change

This guide was specifically created for the year 2020 with the changeover from 19% to 16% and later back to 19%. However, it applies in principle to any VAT conversion / VAT change in Navision / Attain / Business Central. It is also valid in the same way e.g. for the conversion from 7% to 5% and any other tax change.
Tip: Try practicing this changeover in your test environment.

  1. If you still have your old 16% VAT product posting groups from before 1/1/2007, this indicates poor data maintenance, which we should have a chat about. You should not have data older than 10 (11) years in your Navision for various reasons. In this case, however, there is a small relief: you can simply continue to use this setup now!
  2. This section also applies, for example, to the conversion from 7% to 5% and any other tax conversion.
  3. Create the new VAT product posting group, e.g. "16%" or "V16" or "Full16". Simply orientate yourself here on the VAT product posting group to be replaced later.
  4. If required (see above), also create a new matching general product booking group.
  5. Also set up the posting group matrix and the VAT posting matrix to match. Please remember that in all Navision versions you can easily to foolproof (Navision) copy the setup from another posting matrix setup!
Beispiel der Mwst. Buchungsmatrix Einrichtung für 16% im SKR03 für Navision / Business central
Setup of the VAT Posting matrix for 16% in SKR03 in Navision RTC / Business Central
Screenshot der Mehrwertsteuer Buchungsmatrix Einrichtung für 16% im SKR03 in Navision / Attain / Dynamics NAV
Setup of VAT posting matrix for 16% in SKR03 in Navision / Dynamics NAV / Attain
Screenshot der neuen Buchungsgruppen und Mehrwertsteuer Buchungsgruppen in Navision am Beispiel für das Corona Konjunkturpaket 2020 für die Mehrwertsteuer Umstellung

Example of the new product posting groups and VAT product posting groups in Navision using the Corona Stimulus Package 2020 as an example for the VAT conversion.

6. expand your advance VAT return with the new UVA reporting items.
51 Sales at 16% VAT (51 was the reporting position for 16% until 2006, presumably it will also be used for the 16% VAT of the 2020 Corona stimulus package).
?? Sales at 5% VAT (No advance VAT return item number has been announced here at this time for the sales tax change associated with the Corona Stimulus Package).

Sales tax advance return UVA in the "old" Navision (Until 2009R2, e.g. Navision 2.01,2.60,3.01..., Attain):
Financial management or financial accounting, Periodic activities, VAT, VAT. Accounting.

Screenshot der Mehrwertsteuerabrechnung im Navision vor Business Central

Advance VAT return UVA in the "new" Navision, everything from version 2013, 2015, 2016, 2017, 2018. not Business Central:
Ctrl+F3 in the Windows client (opens the search field in the upper right corner), then enter VAT . Directly select the entry VAT . Select here under tasks/Sales tax accounting .

Screenshot der UVA Umsatzsteuervoranmeldung Einrichtung im Navision RTC Windows-Client



Business Central Webclient:
Alt+Q, VAT, if necessary select Show all.
Click on "VAT accounting".

Screenshot der Umsatzsteuervoranmeldung im Business Central Webclient

The "magic word" is VAT accounting every time.
When creating the two new UVA declaration items, use the existing 7% (86) and 19% (81) as a guide.

Conversion of value added tax VAT

Here is described the simple version: By hand, in the evening, after the last posting on the last day of the old VAT (value added tax). If this is organizationally not feasible for you, then you are also a candidate for If all this does not work.

  1. Navision & Business Central: Invoice all orders delivered! Collective invoices where possible, review orders. The reports on unbilled deliveries will help you. You also get a quick overview this way:
    I. after billing, delete all old VK documents: batch processing "Delete completed orders".
    II. Start the table 37 (purchase: table 39) via the Designer ("Run")
Screenshot der Designeransicht, in allen Navisionversionen gleich (außer die DOS Version).
Designer view in Business Central / Navision

III. filtering on the column Del. not fact.xxxx: 0

Ansicht der möglichen Filterfelder in Business Central
View of the possible filters in Business Central

Screenshot eines Filterfeldes in Navision / Attain
View of a filter in Navision / Attain

Note: You must get the same result on all four meaningful filters (See Business Central screenshot)! If you see different lines on different fields with a filter 0, then someone has broken your Navision. You will then also have problems such as sales orders that cannot be billed and therefore cannot be deleted.
IV. Select all rows (CTRL+A), copy them to Excel, and do a pivot analysis on the document number there.
You don't know how to do a pivot analysis in Excel? Then you should talk to me about an Excel training. This function is very easy and fun, you don't need any other BI (Business Intelligence) tool anymore!

As a result, you now have a list in Excel of all sales orders that still have to be invoiced. No offers or invoices or credit notes may appear in this list! This would mean that someone has broken your Navision!

2. Convert your article master data.


Convert the article master data to Navision, Attain, Dynamics NAV


Go to the Item Map (Or Use My Tool) -> VAT Product Entry Group field, Ctrl+H (Find & Replace), and replace the old VAT product entry group with the new one. Repeat this for the product posting group as well, if needed.

This does not work in every Navision, and you also have to convert the receipts to the new VAT. And for the Corona stimulus package 2020 this has to be done 2x: 1x on 6/30/2020 in the evening to the new tax rate of 16% or 5%, and then again on 12/31/2020 to the old tax rates that were valid before Corona and the stimulus package. Better use my conversion tool: It's free!

Convert master data and documents in Business Central with VAT conversion


Here, unfortunately, this nice search & replace function is no longer available. Alternative: Export your article master data via the Rapid Start function (in newer versions: Data Migration), replace the values in Excel, and read the table back again.
But since Navision 2013 / Business Central there is a much simpler tool: The VAT Conversion Tool.

Screenshot zur Änderung des Mehrwertsteuersatzes / Mwst Satzes in Navision ab Version 2013 / Business Central
Change of VAT rate in Navision from version 2013 / Business Central
Start setting up the VAT rate change

I recommend the following settings:
Update G/L accounts: No. Normally you have separate G/L accounts by tax rate, or Neutral G/L accounts, such as the Cost accounts, which do not require conversion.
Update articles, update resources, update article templates:
Both or VAT product posting group. See above for decision.
Update product posting groups: VAT product posting group
Posting sheets: Please post through all posting sheets before the deadline.
Receipts: Apply default settings.

Settings of FastTab Receipts in the VAT rate change setup.


Using the actions, you can set up the conversion specification (which old group to which new group), and on the due date, after billing all deliveries, run the conversion:

Screenshot der Schaltflächen Mehrwertsteuerkonvertierung & Mehrwersteuerumstellung Navision ab 2013 & Business Central
Buttons for VAT conversion and VAT conversion in Navision as of version 2013 and Business Central


This converts all remaining documents to the new tax rates, more precisely to the new posting groups. You will later still need the recalculation.

3. test: enter an order for a normal customer. Navision and Business Central should now calculate the new tax rate.

Program error in some Navision versions with framework orders

I came across this error during a customer changeover. At least I think it is an error.
It manifests itself by the message " You cannot receive more than 0 base units." during the VAT conversion and is caused in the table 39 Purchase Line in the post-processing of the field "Qty. to Receive". in my experience only when using Purchase Framework Orders.


Error message "You cannot receive more than 0 base units" when purchasing blanket orders with Navision VAT change

(Almost) You will also get the same message in Sales, if you also handle framework orders there. In table 37 Sales Line you get the message "You cannot deliver more than 0 base units", also in the postprocessing of the corresponding field "Qty. to Ship". The error pattern described below and the solution are the same for table 37.

IF "Qty. to Receive" = Quantity - "Quantity Received" THEN
InitQtyToReceive
ELSE BEGIN
"Qty. to Receive (Base)" := CalcBaseQty("Qty. to Receive");
InitQtyToInvoice;
END;
IF ((("Qty. to Receive" < 0) XOR (Quantity < 0)) AND (Quantity <> 0) AND ("Qty. to Receive" <> 0)) OR
(ABS("Qty. to Receive") > ABS("Outstanding Quantity")) OR
(((Quantity < 0 ) XOR ("Outstanding Quantity" < 0)) AND (Quantity <> 0) AND ("Outstanding Quantity" <> 0))
THEN
ERROR(
Text008,
"Outstanding Quantity");
IF ((("Qty. to Receive (Base)" < 0) XOR ("Quantity (Base)" < 0)) AND ("Quantity (Base)" <> 0) AND ("Qty. to Receive (Base)" <> 0)) OR
(ABS("Qty. to Receive (Base)") > ABS("Outstanding Qty. (Base)")) OR
((("Quantity (Base)" < 0) XOR ("Outstanding Qty. (Base)" < 0)) AND ("Quantity (Base)" <> 0) AND ("Outstanding Qty. (Base)" <> 0))
THEN
ERROR(
Text009,
"Outstanding Qty. (Base)");

The field "Qty. to Receive (Base)" is not always converted correctly!
This then brought this weird cross combination of values:

Value of the Qty. to receive field in Table 39: It was correctly set to zero during the VAT changeover by the standard Navision report.

and

Value of the field Qty. to receive (Base) in the table 39: It was simply not converted! The first value was correctly set to 0, the base value (i.e. converted to the base unit 1 via the units) was still set to 95 (here the base unit = 1).

In the screenshots you can see that Qty. to Receive was correctly set to zero, while Qty. to receive (base) was simply left at the old value (here 95, because the base unit was 1). This will then throw the error from text009: You cannot receive more than 0 base units.

Oddly enough, I couldn't find an official fix for this in a hurry. So here is my suggested fix:


IF „Qty. to Receive“ = Quantity – „Quantity Received“ THEN
InitQtyToReceive
ELSE BEGIN
„Qty. to Receive (Base)“ := CalcBaseQty(„Qty. to Receive“);
InitQtyToInvoice;
END;




"Qty. to Receive (Base)" := CalcBaseQty("Qty. to Receive");
IF "Qty. to Receive" = Quantity - "Quantity Received" THEN
  InitQtyToReceive
ELSE
  InitQtyToInvoice;

Please pay attention to the preparations!
The conversion offered here works as follows:
It runs through all items & resources (no G/L accounts, no ...), and changes the (VAT) product posting groups according to the default:

Screenshot der neu einzurichtenden Produktbuchungsgruppen in Navision am Beispiel des Konjunkturpakets Corona 2020 für die Mehrwertsteuer Umstellung
Example of new product posting groups & VAT product posting groups to be set up in Navision using the Corona 2020 stimulus package for VAT conversion as an example (set up in Business Central similar).

In the item master, all the (VAT) product posting groups are changed from the value LeftCode) to the value Right (New...) IF the value Right is filled in.

In Purchasing & Sales all remaining item lines & resource lines with quantities will be converted as well (Purchasing Inquiry, Purchasing Order, Sales Quotation, Sales Orders, Purchasing & Sales Invoices & Credit Notes).
Exception: Partially delivered (and thus necessarily partially invoiced) lines: These are split, a new line with new posting groups is entered for the remaining delivery.

The tool is trimmed for the simplest readability, so you can quickly add your own extensions.
I highly recommend an early test run!

This report is based on the Navision standard. Please test it extensively in a test environment. Adjustments that do not integrate cleanly with the standard will not work with this.
Of course, the use of this tool is completely at your own risk. Please check the code to see if it works for you. I explicitly disclaim any liability for this tool in any form.
I can gladly support you with the VAT conversion (2020: VAT reduction in connection with the Corona economic stimulus package) and also check whether this tool, if necessary with modifications, "fits" with you. However, the available dates for this are already scarce on 12.6.2020.

Report for mass transition of items, G/L accounts, undelivered sales orders and purchase orders (all documents in T36 Sales Header & T38 Purchasing Header and related rows).
G/L accounts are not converted with this report, that usually makes no sense. Special cases such as packaging ordinance, empties management, a separate backorder management, etc. are of course not included in this report and must be programmed to fit your database. The logic should be suitable from about Navision 3.01: English fields, Status field in the document header. The code should also be good as a base for AL, I have already removed annoying empty elements. However, Business Central has already built in everything you need to convert VAT and posting groups.

OBJECT Report 50086 VAT Conversion Toolkit RTH
{
  OBJECT-PROPERTIES
  {
    Date=24.06.20;
    Time=15:47:07;
  }
  DATAITEMS
  {
    { PROPERTIES
      {
        DataItemTable=Table27;
        DataItemTableView=SORTING(No.);
        OnAfterGetRecord=BEGIN
                           CLEAR(DoModify);
                           IF "TranslatePPG?"("Gen. Prod. Posting Group") THEN BEGIN
                             VALIDATE("Gen. Prod. Posting Group",TranslatePPG("Gen. Prod. Posting Group"));
                             DoModify := TRUE;
                           END;
                           IF "TranslateVatPPG?"("VAT Prod. Posting Group") THEN BEGIN
                             VALIDATE("VAT Prod. Posting Group",TranslateVatPPG("VAT Prod. Posting Group"));
                             DoModify := TRUE;
                           END;
                           IF DoModify THEN BEGIN
                             MODIFY;
                             Log("No.",'Item Translated',STRSUBSTNO('%1 %2',"Gen. Prod. Posting Group","VAT Prod. Posting Group"));
                           END ELSE
                             CurrReport.SKIP;
                         END;

        ReqFilterFields=No.,Gen. Prod. Posting Group,VAT Prod. Posting Group;
      }
      SECTIONS
      {
        { PROPERTIES
          {
            SectionType=Header;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455000;TextBox;0    ;0    ;3300 ;423  ;FontSize=9;
                                                         FontBold=Yes;
                                                         SourceExpr=TABLECAPTION }
          }
           }
        { PROPERTIES
          {
            SectionType=Body;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455006;TextBox;0    ;0    ;1500 ;423  ;SourceExpr="No." }
            { 1119455008;TextBox;1650 ;0    ;4500 ;423  ;SourceExpr=Description }
          }
           }
      }
       }
    { PROPERTIES
      {
        DataItemTable=Table156;
        DataItemTableView=SORTING(No.);
        OnAfterGetRecord=BEGIN
                           CLEAR(DoModify);
                           IF "TranslatePPG?"("Gen. Prod. Posting Group") THEN BEGIN
                             VALIDATE("Gen. Prod. Posting Group",TranslatePPG("Gen. Prod. Posting Group"));
                             DoModify := TRUE;
                           END;
                           IF "TranslateVatPPG?"("VAT Prod. Posting Group") THEN BEGIN
                             VALIDATE("VAT Prod. Posting Group",TranslateVatPPG("VAT Prod. Posting Group"));
                             DoModify := TRUE;
                           END;
                           IF DoModify THEN BEGIN
                             MODIFY;
                             Log("No.",'Ressource Translated',STRSUBSTNO('%1 %2',"Gen. Prod. Posting Group","VAT Prod. Posting Group"));
                           END ELSE
                             CurrReport.SKIP;
                         END;

        ReqFilterFields=No.,Gen. Prod. Posting Group,VAT Prod. Posting Group;
      }
      SECTIONS
      {
        { PROPERTIES
          {
            SectionType=Header;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455001;TextBox;0    ;0    ;3300 ;423  ;FontSize=9;
                                                         FontBold=Yes;
                                                         SourceExpr=TABLECAPTION }
          }
           }
        { PROPERTIES
          {
            SectionType=Body;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455010;TextBox;1650 ;0    ;4500 ;423  ;SourceExpr=Name }
            { 1119455011;TextBox;0    ;0    ;1500 ;423  ;SourceExpr="No." }
          }
           }
      }
       }
    { PROPERTIES
      {
        DataItemTable=Table36;
        DataItemTableView=SORTING(Document Type,No.);
        DataItemVarName=SaleHeader;
        ReqFilterFields=Document Type,Order Date,Posting Date;
      }
      SECTIONS
      {
        { PROPERTIES
          {
            SectionType=Header;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455002;TextBox;0    ;0    ;3300 ;423  ;FontSize=9;
                                                         FontBold=Yes;
                                                         SourceExpr=TABLECAPTION }
          }
           }
        { PROPERTIES
          {
            SectionType=Body;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455012;TextBox;0    ;0    ;1500 ;423  ;SourceExpr="Document Type" }
            { 1119455014;TextBox;1650 ;0    ;2550 ;423  ;SourceExpr="No." }
          }
           }
      }
       }
    { PROPERTIES
      {
        DataItemIndent=1;
        DataItemTable=Table37;
        DataItemTableView=SORTING(Document Type,Document No.,Line No.)
                          WHERE(Type=FILTER(Item|Resource),
                                No.=FILTER(<>''));
        DataItemVarName=SaleLine;
        OnAfterGetRecord=VAR
                           NewLine@1000000000 : Record 37;
                         BEGIN
                           Log(TABLECAPTION,'Translate',GETPOSITION);
                           IF (Quantity > "Quantity Shipped") OR (Quantity = 0) THEN BEGIN
                             UnlockSalesHeader(SaleHeader);
                             IF "Quantity Shipped" = 0 THEN BEGIN // No Shippment till now
                               IF "TranslatePPG?"("Gen. Prod. Posting Group") THEN BEGIN
                                 VALIDATE("Gen. Prod. Posting Group",TranslatePPG("Gen. Prod. Posting Group"));
                                 DoModify := TRUE;
                               END;
                               IF "TranslateVatPPG?"("VAT Prod. Posting Group") THEN BEGIN
                                 VALIDATE("VAT Prod. Posting Group",TranslateVatPPG("VAT Prod. Posting Group"));
                                 DoModify := TRUE;
                               END;
                               IF DoModify THEN
                                 MODIFY(TRUE);
                             END ELSE BEGIN
                               //Insert the new Line with the outstanding Qty.
                               WITH NewLine DO BEGIN
                                 NewLine := SaleLine;
                                 "Line No." += 1;
                                 "Quantity Shipped" := 0;
                                 "Qty. Shipped (Base)" := 0;
                                 "Return Qty. Received" := 0;
                                 "Return Qty. Received (Base)" := 0;
                                 "Quantity Invoiced" := 0;
                                 "Qty. Invoiced (Base)" := 0;
                                 "Reserved Quantity" := 0;
                                 "Reserved Qty. (Base)" := 0;
                                 "Qty. to Ship" := 0;
                                 "Qty. to Ship (Base)" := 0;
                                 "Return Qty. to Receive" := 0;
                                 "Return Qty. to Receive (Base)" := 0;
                                 "Qty. to Invoice" := 0;
                                 "Qty. to Invoice (Base)" := 0;
                                 "Qty. Shipped Not Invoiced" := 0;
                                 "Return Qty. Rcd. Not Invd." := 0;
                                 "Shipped Not Invoiced" := 0;
                                 "Return Rcd. Not Invd." := 0;
                                 "Qty. Shipped Not Invd. (Base)" := 0;
                                 "Ret. Qty. Rcd. Not Invd.(Base)" := 0;
                                 "Shipped Not Invoiced (LCY)" := 0;
                                 "Return Rcd. Not Invd. (LCY)" := 0;

                                 IF "TranslatePPG?"("Gen. Prod. Posting Group") THEN
                                   VALIDATE("Gen. Prod. Posting Group",TranslatePPG("Gen. Prod. Posting Group"));
                                 IF "TranslateVatPPG?"("VAT Prod. Posting Group") THEN
                                   VALIDATE("VAT Prod. Posting Group",TranslateVatPPG("VAT Prod. Posting Group"));
                                 WHILE NOT INSERT DO
                                   "Line No." += 100;
                                 VALIDATE(Quantity,SaleLine."Outstanding Quantity"); //Nachverarbeitung laufen lassen, z.B. Pfand
                                 MODIFY;
                               END;
                               //Store the old line w/o the outstanding Qty (= 100% Shipped)
                               VALIDATE(Quantity,"Quantity Shipped");
                               MODIFY;
                             END;
                           END;
                         END;

        DataItemLink=Document Type=FIELD(Document Type),
                     Document No.=FIELD(No.);
      }
      SECTIONS
      {
      }
       }
    { PROPERTIES
      {
        DataItemTable=Table38;
        DataItemTableView=SORTING(Document Type,No.);
        DataItemVarName=PurchHeader;
        ReqFilterFields=Document Type,Order Date,Posting Date;
      }
      SECTIONS
      {
        { PROPERTIES
          {
            SectionType=Header;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455003;TextBox;0    ;0    ;3300 ;423  ;FontSize=9;
                                                         FontBold=Yes;
                                                         SourceExpr=TABLECAPTION }
          }
           }
        { PROPERTIES
          {
            SectionType=Body;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455016;TextBox;0    ;0    ;1500 ;423  ;SourceExpr="Document Type" }
            { 1119455017;TextBox;1650 ;0    ;2550 ;423  ;SourceExpr="No." }
          }
           }
      }
       }
    { PROPERTIES
      {
        DataItemIndent=1;
        DataItemTable=Table39;
        DataItemTableView=SORTING(Document Type,Document No.,Line No.)
                          WHERE(Type=FILTER(Item),
                                No.=FILTER(<>''));
        DataItemVarName=PurchLine;
        OnAfterGetRecord=VAR
                           NewLine@1000000000 : Record 39;
                         BEGIN
                           Log(TABLECAPTION,'Translate',GETPOSITION);
                           IF (Quantity > "Quantity Received") OR (Quantity = 0) THEN BEGIN
                             UnlockPurchHeader(PurchHeader);

                             IF ("Quantity Received" = 0) OR "Drop Shipment" THEN BEGIN // No Shippment till now
                               IF "TranslatePPG?"("Gen. Prod. Posting Group") THEN BEGIN
                                 VALIDATE("Gen. Prod. Posting Group",TranslatePPG("Gen. Prod. Posting Group"));
                                 DoModify := TRUE;
                               END;
                               IF "TranslateVatPPG?"("VAT Prod. Posting Group") THEN BEGIN
                                 VALIDATE("VAT Prod. Posting Group",TranslateVatPPG("VAT Prod. Posting Group"));
                                 DoModify := TRUE;
                               END;
                               IF DoModify THEN
                                 MODIFY(TRUE);
                             END ELSE BEGIN
                               //Insert the new Line with the outstanding Qty.
                               WITH NewLine DO BEGIN
                                 NewLine := PurchLine;
                                 "Line No." += 1;
                                 "Quantity Received" := 0;
                                 "Qty. Received (Base)" := 0;
                                 "Quantity Invoiced" := 0;
                                 "Qty. Invoiced (Base)" := 0;
                                 "Reserved Quantity" := 0;
                                 "Reserved Qty. (Base)" := 0;
                                 "Qty. to Receive" := 0;
                                 "Qty. to Receive (Base)" := 0;
                                 "Qty. to Invoice" := 0;
                                 "Qty. to Invoice (Base)" := 0;
                                 "Qty. Rcd. Not Invoiced" := 0;
                                 "Qty. Rcd. Not Invoiced (Base)" := 0;
                                 "Amt. Rcd. Not Invoiced" := 0;

                                 IF "TranslatePPG?"("Gen. Prod. Posting Group") THEN
                                   VALIDATE("Gen. Prod. Posting Group",TranslatePPG("Gen. Prod. Posting Group"));
                                 IF "TranslateVatPPG?"("VAT Prod. Posting Group") THEN
                                   VALIDATE("VAT Prod. Posting Group",TranslateVatPPG("VAT Prod. Posting Group"));
                                 WHILE NOT INSERT DO
                                   "Line No." += 100;
                                 VALIDATE(Quantity,PurchLine."Outstanding Quantity");
                                 MODIFY;
                               END;
                               //Store the old line w/o the outstanding Qty (= 100% Shipped)
                               VALIDATE(Quantity,"Quantity Received");
                               MODIFY;
                             END;
                           END;
                         END;

        DataItemLink=Document Type=FIELD(Document Type),
                     Document No.=FIELD(No.);
      }
      SECTIONS
      {
      }
       }
    { PROPERTIES
      {
        DataItemTable=Table2000000026;
        DataItemTableView=SORTING(Number)
                          WHERE(Number=CONST(1));
        DataItemVarName=LockHeaders;
        OnAfterGetRecord=BEGIN
                           WITH TmpT36 DO BEGIN
                             IF FINDSET THEN REPEAT
                               SaleHeader.GET("Document Type","No.");
                               SaleHeader.Status := TmpT36.Status;
                               SaleHeader.MODIFY;
                             UNTIL NEXT = 0;
                           END;
                           WITH TmpT38 DO BEGIN
                             IF FINDSET THEN REPEAT
                               PurchHeader.GET("Document Type","No.");
                               PurchHeader.Status := TmpT38.Status;
                               PurchHeader.MODIFY;
                             UNTIL NEXT = 0;
                           END;
                         END;

      }
      SECTIONS
      {
        { PROPERTIES
          {
            SectionType=Body;
            SectionWidth=12000;
            SectionHeight=423;
          }
          CONTROLS
          {
            { 1119455005;Label  ;4200 ;0    ;3150 ;423  ;FontSize=9;
                                                         FontBold=Yes;
                                                         CaptionML=[DEU=Fertig....;
                                                                    ENU=finish....] }
          }
           }
      }
       }
  }
CODE
  {
    VAR
      GenProdPostingGrp@1000000000 : Record 251;
      VatProdPostingGrp@1000000001 : Record 324;
      TmpT36@1000000003 : TEMPORARY Record 36;
      TmpT38@1000000004 : TEMPORARY Record 38;
      LogCU@1119455000 : Codeunit 50003;
      DoModify@1000000002 : Boolean;

    PROCEDURE "TranslatePPG?"@1000000002(pOldPPG@1000000000 : Code[10]) : Boolean;
    BEGIN
      IF GenProdPostingGrp.Code <> pOldPPG THEN
        IF NOT GenProdPostingGrp.GET(pOldPPG) THEN
          CLEAR(GenProdPostingGrp);
      EXIT(GenProdPostingGrp."New Gen. Post.Grp" <> '');
    END;

    PROCEDURE TranslatePPG@1000000000(pOldPPG@1000000000 : Code[10]) : Code[10];
    BEGIN
      IF GenProdPostingGrp.Code <> pOldPPG THEN
        GenProdPostingGrp.GET(pOldPPG);
      EXIT(GenProdPostingGrp."New Gen. Post.Grp");
    END;

    PROCEDURE "TranslateVatPPG?"@1000000005(pOldPPG@1000000000 : Code[10]) : Boolean;
    BEGIN
      IF VatProdPostingGrp.Code <> pOldPPG THEN
        IF NOT VatProdPostingGrp.GET(pOldPPG) THEN
          CLEAR(VatProdPostingGrp);
      EXIT(VatProdPostingGrp."New VAT Prod. Posting Group" <> '');
    END;

    PROCEDURE TranslateVatPPG@1000000004(pOldPPG@1000000000 : Code[10]) : Code[10];
    BEGIN
      IF VatProdPostingGrp.Code <> pOldPPG THEN
        VatProdPostingGrp.GET(pOldPPG);
      EXIT(VatProdPostingGrp."New VAT Prod. Posting Group");
    END;

    PROCEDURE UnlockSalesHeader@1000000001(pHeader@1119455000 : Record 36);
    BEGIN
      IF pHeader.Status = pHeader.Status::Released THEN BEGIN
        Log('','Unlock',pHeader.GETPOSITION);
        TmpT36 := pHeader;
        IF TmpT36.INSERT THEN;
        pHeader.Status := pHeader.Status::Open;
        pHeader.MODIFY;
      END;
    END;

    PROCEDURE UnlockPurchHeader@1000000003(pHeader@1119455000 : Record 38);
    BEGIN
      IF pHeader.Status = pHeader.Status::Released THEN BEGIN
        Log('','Unlock',pHeader.GETPOSITION);
        TmpT38 := pHeader;
        IF TmpT38.INSERT THEN;
        pHeader.Status := pHeader.Status::Open;
        pHeader.MODIFY;
      END;
    END;

    PROCEDURE Log@1119455000(pKeyEntry@1000000006 : Text[1024];pLogEntry@1000000002 : Text[1024];pLogDetail@1000000003 : Text[1024]);
    VAR
      TimeOutput@1000000004 : Text[30];
    BEGIN
      LogCU.Log('Report',50085,pKeyEntry,pLogEntry,pLogDetail); //Comment this line if you don't have Logging
    END;

    BEGIN
    END.
  }
}

Recalculation of documents with different VAT (value added tax)

In purchasing, this will be the norm, since they usually receive supplier invoices later. In sales, this should be mainly credit notes, less (preferably: no) invoices. Another problem: old quotations. (Topic is being revised).

Quotations

Quotations are simple. They will inevitably be delivered after the changeover, so they are simply converted to the new tax rate across the board during the document changeover.

Undelivered orders

These are also simple. In this case, everything is the same as in the case of quotations. The performance principle always applies, i.e. the date of delivery (usually the date of leaving our sphere of influence, i.e. the time of goods issue), which is not always true, but is usually done this way.
With my tax conversion all not yet delivered lines are converted, all partially delivered lines are split (old/new tax rate), all completely delivered lines are ignored. Please do not enter any subsequent delivery on already completely delivered lines for these documents!

Purchasing requests

These, too, will inevitably be supplied after the changeover, so they will also be converted to the new tax rate on a flat-rate basis.

Advance payments

Regardless of whether advance payments have been made yourself or received: They're messy. The simplest procedure for tax reductions: Phone your customer and ask how you should transfer back or repay the x.xx euros. Maybe you can steer the conversation in such a way that the customer waives the refund.
Otherwise, it should still be easy to run the document normally. When writing off the advance payment, a difference will remain on the account (the real delivery/invoice was made with the reduced tax rate), just as with cleared credit memos. Maybe you can clear them against another open amount, the reconciliation will be done later during an account reconciliation.
In the event of a tax increase (probably always the case, except in 2020 as part of the Corona stimulus package) think about the possibility of simply paying the difference yourself. Any activity you take on to clear will cost you more than "the few cents difference". Discuss both options with your tax advisor.

Purchasing orders not delivered

These are treated in the same way as the sales orders. The correct tax rate must be checked when entering the invoice.

Purchase orders or sales orders entered before the cutoff date

...with subsequent delivery before the cut-off date

Enter the correct posting group per line in the columns General Product Posting Group (Business Central) or Product Posting Group (Navision) or VAT Product Posting Group (both versions, i.e. Navision as well as Business Central).
Before posting, check with the document statistics whether the correct tax rates have been drawn.

...with delivery after the cut-off date

The correct posting groups should already be entered here due to the document conversion. Check per line in the columns General Product Posting Group (Business Central) or Product Posting Group (Navision) or VAT product posting group (both versions, i.e. Navision as well as Business Central) the correct posting group.
Before posting, check with the document statistics whether the correct tax rates have been drawn.

Credit notes (purchase as well as sale)

Please generate credit notes that refer to a goods delivery via Copy document, do NOT recalculate lines. In this case the(VAT) product posting groups are taken from the original document. However, you can correct the posting groups yourself as you wish according to the last two points.

Vouchers (multi-purpose vouchers, single-purpose vouchers)

These are prickly anyway and must each be incorporated into their processes. Reason: Single-purpose vouchers are -simplified- sales. They must be taxed immediately upon sale with the corresponding tax rate as sales tax via Navision or Business Central - just like a sale of goods. A single-purpose voucher exists if the tax rate of the service subsequently received for it is known when the voucher is sold.
The tax office loves single-purpose vouchers!
In the case of multi-purpose vouchers, on the other hand, the tax rate of the services/goods to be exchanged for them later is not fixed. This can even be the case in a company for a product! If you are e.g. in the catering trade and sell value coupons for meals, then the customer could acquire meals/food/food to take away (To Go) later for the coupon: Reduced tax rate. However, he/she could also use the voucher to take the food in your restaurant premises: Reduced tax rate. With Christmas trees with -I think- 5 tax rates, with coffee drinks with the dependence on the amount of milk and other very very sick ideas of the German tax authorities, this nonsense does not stop for a long time. These vouchers are therefore multi-purpose vouchers, which are to be booked as tax-free turnover (They are thus quite profit or income!) when given to the customer. It is even more exciting with the Corona VAT conversion: Vouchers usually have a term of at least one year. Therefore, it is not known whether Navision or Business Central should post 5%, 7%, 16% or 19%.
Although the tax authorities love single-purpose vouchers (they get their share of the pie immediately), I recommend using and thus accounting for vouchers as multi-purpose vouchers for all the reasons mentioned. Also, I recommend doing this uniformly, i.e., not mixing them. Corona provides the necessary argumentation here.

Single-purpose vouchers that have already been issued are problematic here! These were usually already sold before a tax changeover, and thus taxed at the rate valid up to that point (the VAT was already paid to the tax authorities). And then they are subsequently used to purchase differently taxed services.
There are two options here:
1. "So what": Book the voucher directly against the goods issue. Presumably, even very strict auditors and accountants will turn a blind eye in these exotic cases, because they should also be aware of the madness that was caused here by the legislator once again with their eyes open.
2. credit the voucher with the old tax rate when redeeming it and value it with the new tax rate in the same entry. This results in the difference both in the net value and in the VAT to be paid. Afterwards, the sale of goods / service can be posted against the voucher (now freshly provided with the correct VAT).

Unify the VAT Product posting groups

If you map your product statistics via the product posting groups and -even worse- also via the VAT product posting groups, then you usually have dozens or even hundreds of general product posting groups and VAT product posting groups.
The product posting groups could still be solved by converting the UVA (advance VAT return) to VAT posting groups. With the VAT product posting groups, this is no longer so "elegant". In this case, you are probably a candidate for the paragraph If all this does not work.

Alternatively, you can take the opportunity to make a radical change by following the approach I outlined at the beginning of this article. In this case, please follow the section Preparation. Only enter the necessary (!) new booking groups (e.g. "16%") as the new booking groups! During the changeover , always replace all old booking groups with the same new booking group.
And you'll be doing your merchandise statistics via? Merchandise management! And no longer via financial accounting.

UVA advance return for sales tax

The advance return for sales tax must also be adjusted. The new tax classes must be included in the UVA statement setup.

If all this does not work...

Then simply remove contact me please. Because you probably have a pretty big problem, just because of the sometimes very short conversion time. Especially with the short term VAT conversion planned for Corona in 2020. In this case, you will probably need support from programs to be created in advance, which will carry out the necessary conversions for you on the due date.

VAT conversion from 2006

Rule of thumb: The conversion programs for the VAT. Conversion from 12/31/2006 to 1/1/2007 from 16% to 19% and the programs and instructions published or made available at that time should still work today!

Date-dependent VAT - The ideal solution

The luxury variant. This module is a basic module that can be integrated. As a rule, it must still be adapted to customer-specific characteristics. Adaptations are added according to effort, as well as the necessary objects (1 form/page, 1 code unit, 1 table). Changes are necessary e.g. in the table 37&39. Unfortunately this module doesn't exist as an extension yet, but I'll try to get it done by the end of June.
Function: The VAT product posting group is drawn in the purchase line (table 39) / sales line (table 37) depending on the posting date. For this purpose there is a new table VAT. Product Entry Group by Date, in which "VAT Product Entry Group", "From Date", "VAT Entry Group to be used" are entered. Product Entry Group" is entered. In the sales line & purchase line, depending on the posting date, the correct product posting group is then automatically entered. When converting quotations and copying documents (on both the purchase and sales sides), the correct VAT product entry group is also entered. Product posting group will also be entered. Any cleanly programmed extension should run on the first try. Any improperly programmed extension must be adjusted accordingly.

Bookable assistance

If you need my support, please give me until 14 days before the changeover (better: earlier) feedback to what extent you want to get support from me.
(Billing on a time basis, the tools provided on the above page are provided free of charge)

[_] You want me to create the new G/L accounts for you
... [_] and make the associated booking groups & their setup.
... [_]The new G/L accounts will be given to me by you/your tax advisor.
... [_]The new G/L accounts are to be determined by me.
I will create a new document in EK & VK respectively, with four lines, for testing:
one line with old 19% tax rate, one line with new 16% tax rate, one line with old 7% tax rate, one line with new 5% tax rate, and check the result.

[_] You want me to bring in my sales tax conversion and roughly adjust it.
("Roughly adjust" means that I ensure the error-free compilability, the objects are usable afterwards. An error-free conversion is explicitly not guaranteed by this step. This is only ensured by the optional next option to the best of my knowledge).

[_] You want me to run a test run in your database on the following clients:
(Please make sure that there is enough disk space on your server for the additional client(s)!)
[_] You want me to run a test run with your data on my computer with the following clients:
(Please make sure that there is enough disk space on your server for the necessary backup of your database. I will create the backup, pack the data password-protected and transfer it to me via a service provider (e.g. WeTransfer), and set up a test environment on my PC with this current data).

Note regarding this test run:
I will invoice all sales deliveries.
I will create three test documents in the client(s) each for purchase price and for sales price: One completely undelivered. This must be completely converted.
One completely delivered and invoiced. This is not to be changed.
A partially delivered, where new lines must be created for the residues.
I will create a new document in Purchase Price & Sales Price, with four lines, which will of course be checked. This will also ensure that the necessary columns are visible for re-invoicing with you.
One line with old 19% tax rate, one line with new 16% tax rate, one line with old 7% tax rate, one line with new 5% tax rate.

Part of this test run is an illustrated step by step guide with screen shots from YOUR Navision with the necessary steps for 6/30/2020.

These steps from this tutorial you have to do yourself, unfortunately I can not do the conversion for all customers myself due to time constraints.
Note 2: I make the adjustments and tests of course as always to the best of my knowledge and belief. As always, I can of course not guarantee 100% functionality. I will of course do any necessary rework as soon as possible under the usual conditions. Please make sure that your data backup is running error-free!