Freigeben über


Merkmale und Funktionen aufnehmen

Dieser Artikel stellt die Features und Funktionen vor, die Sie zur Integration einer neuen Transaktion implementieren müssen.

Die folgenden Features und Funktionen werden bei der Steuerintegration unterstützt:

  • Mehrwertsteuerüberschreibung
  • Mehrere Umsatzsteuer-Identifikationsnummern
  • Listencode
  • Skonto

Mehrwertsteuerüberschreibung

Bei der Steuerintegration können Sie die Steuergruppe und die Artikelsteuergruppe in einer Zeile nicht bearbeiten, da die Steuern vom Steuerberechnungsdienst bestimmt werden. Mit der Funktion Umsatzsteuergruppe überschreiben können Sie die Steuergruppe oder Artikelsteuergruppe ändern, die in einer Zeile zum Berechnen der Umsatzsteuer angegeben ist. Diese Berechnung überschreibt die Steuergruppen, die vom Steuerberechnungsdienst ermittelt werden.

Wenn die Option Umsatzsteuer überschreiben auf Ja gesetzt ist, können Sie für die Steuerberechnung eine bestimmte Steuergruppe und Artikelsteuergruppe auswählen.

Option „Umsatzsteuer überschreiben“ auf „Ja“ gesetzt.

Befolgen Sie diese Schritte, um die Funktionalität zu aktivieren.

  1. Fügen Sie das Feld Umsatzsteuer überschreiben zum Schema der Transaktionszeilentabelle und zum Abschnitt Umsatzsteuer hinzu, falls dieser vorhanden ist.

    Feld zum Überschreiben der Umsatzsteuer zum Schema der Transaktionszeilentabelle hinzugefügt.

  2. Setzen Sie die Standardsichtbarkeit in zugehörigen Transaktionsformularen auf false .

  3. Ordnen Sie das Feld Umsatzsteuer überschreiben der SalesPurchJournalLine Karte zu. Diese Karte wird häufig bei der Steuerintegration verwendet. Wenn es nicht zugeordnet ist, ist möglicherweise zusätzlicher Code erforderlich, um die erwartete Funktion zu realisieren.

  4. Legen Sie die Sichtbarkeit und Editierbarkeit des Transaktionsformulars fest:

    • Setzen Sie die Standardsichtbarkeit für die Datenquelle des Transaktionsformulars auf false .

    • Setzen Sie die Standardsichtbarkeit nur dann auf true , wenn die Steuerintegration für diese Transaktion aktiviert ist.

      if (isTaxIntegrationEnabledForPurchase) // Condition should be modified according to the business process
      {
          PurchTable_ds.object(fieldNum(PurchTable, OverrideSalesTax)).visible(true);
          PurchLine_ds.object(fieldNum(PurchLine, OverrideSalesTax)).visible(true);
      }
      
    • Fügen Sie dem Transaktionsformular ein allowEdit Steuerelement hinzu, um die Editierbarkeit der Steuergruppe und der Artikelsteuergruppe zu steuern. Normalerweise gibt es drei Stellen, an denen dieses Steuerelement hinzugefügt werden kann:

      • Die init() Methode der Form
      • Die active Methode der Linie
      • Die modified() Methode des Felds Umsatzsteuer überschreiben
      if (isTaxIntegrationEnabledForPurchase) // Condition should be modified according to the business process
      {
          PurchLine_ds.object(fieldNum(PurchLine, TaxGroup)).allowEdit(purchLine.OverrideSalesTax == NoYes::Yes);
          PurchLine_ds.object(fieldNum(PurchLine, TaxItemGroup)).allowEdit(purchLine.OverrideSalesTax == NoYes::Yes);
      }
      
  5. Legen Sie den Wert der Override-Umsatzsteuer in der Datenabrufaktivität fest.

    line.setOverrideSalesTax(this.vendInvoiceInfoLine.OverrideSalesTax);

  6. Um die Einheitlichkeit des Designs zu wahren, wird in die neue Gebühr die standardmäßige Umsatzsteuer von ihrem Ursprungsort eingetragen. Ändern MarkupTrans::getOverrideSalesTaxFromParentRecord(MarkupTransRefTableId _tableId, MarkupTransRefRecId _refRecId) für neue Transaktionsunterstützung.

  7. Optional: Ändern Sie zugehörige Entitäten, um den Import und Export der Override-Umsatzsteuer zu unterstützen.

Mehrere Umsatzsteuer-Identifikationsnummern

Mit der Funktion Mehrere Umsatzsteuer-Identifikationsnummern kann die Umsatzsteuer-Identifikationsnummer aus dem Steuerberechnungsdienst ermittelt werden. Diese Funktion wird durch die Funktion Mehrere Umsatzsteuer-Identifikationsnummern unterstützen gesteuert. Weitere Informationen finden Sie unter Mehrere MwSt.-Registrierungsnummern.

Unterstützt die Funktion für mehrere Umsatzsteuer-Identifikationsnummern im Funktionsmanagement.

Dabei müssen zwei Registrierungsnummern ermittelt und in dieser Funktion gespeichert werden: die Registrierungsnummer für die Steuerbehörde der aktuellen juristischen Person und die Registrierungsnummer der Gegenpartei. Wenn bei einer Transaktion kein Kunde oder Lieferant als Gegenpartei vorhanden ist, ist die Gegenpartei-Registrierungsnummer dafür nicht gültig.

Notiz

Es gibt nur eine Registrierungsnummer der juristischen Person und eine Registrierungsnummer der Gegenpartei für alle Zeilen in einer Transaktion. Der Großteil des Codes für diese Funktion wird in TaxIntegrationTaxIdActivityOnDocument.xpp erstellt.

Datenbankschema

Die Datenfelder TaxId und PartyTaxId werden für die Datensatz-IDs der Registrierungsnummern verwendet. Diese beiden Felder werden den folgenden zugehörigen Tabellen hinzugefügt, um die Registrierungsnummern einer Transaktion zu speichern:

  • TmpTaxWorkTrans
  • SteuerUngebunden
  • TaxTrans
  • KundenlieferscheinJour
  • CustInvoiceJour
  • VerkaufenLieferscheinJour
  • VerkaufRechnungJour

Die ersten drei Tabellen in der vorhergehenden Liste (steuerbezogene Tabellen) sind Tabellen auf Zeilenebene, während die letzten vier Tabellen auf Kopfebene sind, da eine Transaktion dieselbe Registrierungsnummer haben sollte.

Die Registrierungsnummer der juristischen Person wird durch die Funktion Mehrere Umsatzsteuer-Identifikationsnummern unterstützen aktiviert. Für eine Neutransaktion ist hier nichts erforderlich. Wenn der Steuercode ermittelt ist, wird die Registrierungsnummer der juristischen Person durch die Registrierungsnummer ersetzt, die dem Abrechnungszeitraum dieses Steuercodes zugewiesen ist. Sie wird TaxIntegrationTaxIdActivityOnDocument::populateTaxLineTaxId() ermittelt und zusammen mit dem Steuerergebnis in der Datenbank gespeichert.

Es gibt auch eine Validierungslogik für die Registrierungsnummer der juristischen Person, falls für unterschiedliche Zeilen in einer Transaktion unterschiedliche Registrierungsnummern ermittelt werden. Diese Validierung wird unter TaxIntegrationTaxIdActivityOnDocument::checkTaxIdConsistency() durchgeführt.

Registriernummer der Gegenpartei

Die Kontrahenten-Registrierungsnummer wird vom Steuerberechnungsdienst ermittelt. Nach Eingang der Antwort wird die Nummer validiert und zusammen mit der Registrierungsnummer der juristischen Person in der Datenbank gespeichert. Wenn die vom Steuerberechnungsdienst ermittelte Nummer jedoch nicht in den Stammdaten des Benutzers enthalten ist, wird anstelle des zurückgegebenen Werts der Standardwert im Transaktionskopf in die Datenbank geschrieben. Die Kontrahenten-Registrierungsnummer wird nicht bei allen Transaktionen angewendet. Für diesen Ansatz ist jedoch eine zusätzliche Logik erforderlich.

Standardlogik

Es gibt eine Standardlogik von den Kunden- und Lieferantenstammdaten bis zum Transaktionskopf. Sie können die Steuerbefreiungsnummer Wert auf Kunden- und Lieferantenstammdatenebene. Beim Anlegen einer neuen Transaktion wird die standardmäßige Umsatzsteuer-Identifikationsnummer eingetragen. Sie können jedoch eine neue Nummer auswählen, um die Standardnummer zu überschreiben. Wenn die vom Steuerdienst zurückgegebene Nummer ungültig ist, wird die Nummer in der Kopfzeile vor der Steuerberechnung als Standardnummer verwendet.

Die Steuerbefreiungsnummer ist ein Zeichenfolgenfeld ( Umsatzsteuer-Identifikationsnummer) anstelle einer Datensatz-ID und verfügt über zwei Datenquellen. Eine Datenquelle ist die Steuerregistrierungsnummer, die andere die Steuerbefreiungsnummer. Die Steuerintegration unterstützt nur die Steuerregistrierungsnummer als Quelle. Zwei neue Felder, VATNumRecId Und VATNumTableType, sollten den entsprechenden Tabellen hinzugefügt werden, um den Datensatz zu unterscheiden.

Entscheiden Sie beim Hinzufügen einer neuen Transaktion, ob die Felder VATNum, VATNumRecId und VATNumTableType zur Transaktionskopftabelle hinzugefügt werden sollen. Wenn sie hinzugefügt werden sollen, fügen Sie auch die Tabelle hinzu TaxExemptVATNumMap. Die Datensatz-ID und der Tabellentyp werden dann automatisch in der Kopftabelle gespeichert, wenn Benutzer in der Benutzeroberfläche (UI) eine Nummer auswählen.

Ein Entwickler muss die Standardlogik identifizieren und aufrufen copyPrimaryRegistrationNumberToVATMap , um die beiden Felder in die neu erstellte Transaktionskopftabelle zu kopieren. Verwenden Sie als Beispiel in CustTable den folgenden Standardcode von SalesTable bis SalesTable.xpp.

private void initRegistrationNumbers(CustTable _custTable)
{
    this.vatNum = _custTable.getPrimaryRegistrationNumber(TaxRegistrationTypesList::TAXID);
    _custTable.copyPrimaryRegistrationNumberToVATMap(this);     // This line is to copy the new fields.
    this.EnterpriseNumber = _custTable.getPrimaryRegistrationNumber(TaxRegistrationTypesList::UID);
}

Schaltfunktion

  1. Ändern Sie die Switch-Funktion, um die neue Transaktion während der Journalisierung zu unterstützen:

    TaxIntegrationUtils::isMultipleTaxIdEnabledForJournalV3(RefTableId _journalHeaderTableId, RefRecId _journalHeaderRecId, Tax _tax = null)

  2. Wenn es keine Gegenpartei gibt oder die Registrierungsnummer der Gegenpartei auf die neue Transaktion nicht zutrifft, überspringen Sie die Gegenparteilogik bei TaxIntegrationTaxIdActivityOnDocument::shouldSetPartyTaxId().

    protected static boolean shouldSetPartyTaxId(TaxIntegrationDocumentObject _document)
    {
        // Sales quotation for a prospect customer doesn't apply to the counterparty VAT ID
        if (_document.getHeadingTableId() == tableNum(SalesQuotationTable) && _document.getCustVendAccount() == '')
            return false;
        // Currently for purchase order and sales order, the party tax ID is set only if returned by the tax service.
        // For Transfer Order, its party tax ID isn't determined by the tax service and must be set for the first calculation round.
        return _document.isPartyTaxIdReturned()
            || ((_document.getBusinessProcess() == TaxIntegrationBusinessProcess::Inventory)
                && !(TaxInventTransferCalcTaxContext::current() && TaxInventTransferCalcTaxContext::current().parmShouldSkipSetPartyTaxId()))
            // If a default exists, always go through the tax ID process.
            || _document.getPartyTaxIdRecIdDefault();
    }
    

Nummernkreisgruppe

Die Nummernkreisgruppe ist Bestandteil der Funktion Mehrere Umsatzsteuer-Identifikationsnummern . Wenn die Umsatzsteuer-Identifikationsnummer im Transaktionskopf aktualisiert wird, sollte auch die entsprechende Nummernkreisgruppe aktualisiert werden. Allerdings gilt das Update nicht für alle Transaktionen. Wenn die Nummernkreisgruppe in die neue Transaktion integriert werden soll, verwenden Sie das folgende Beispiel in der Datenpersistenzaktivität.

private void saveNumberSequenceGroupToTable()
{
    NumberSequenceGroupId numberSequenceGroupId = document.getNumberSequenceGroupId();
    if (numberSequenceGroupId && custInvoiceTable.numberSequenceGroup != numberSequenceGroupId)
    {
        ttsbegin;
        custInvoiceTable.numberSequenceGroup = document.getNumberSequenceGroupId();
        custInvoiceTable.doUpdate();
        ttscommit;
    }
}

Die Ermittlung erfolgt in der Steuer-ID-Aktivität für alle Transaktionen. Fügen Sie die Logik in der Datenpersistenzaktivität hinzu und rufen Sie sie auf, um die Nummernkreisgruppe beizubehalten.

Listencode

Der Listencode ähnelt der Umsatzsteuer-Identifikationsnummer der Gegenpartei, da beide vom Dienst ermittelt und in der Datenbank gespeichert werden. Die Listencodefunktion ist immer aktiviert, wenn die Listencode-Anwendbarkeitsmatrix im Regulatory Configuration Service (RCS) konfiguriert ist.

Datenabruf

Rufen Sie den Standardlistencode für TaxIntegrationDocument ab. Fügen Sie in der copyToDocumentFromHeaderTable Methode der neu erstellten Datenabrufklasse eine Zeile hinzu.

protected void copyToDocumentFromHeaderTable()
{
    super();
    ...
    document.setListCode(this.purchTable.ListCode);
    ...
}

Listencode der Karte zuordnen

In der Datenpersistenzklasse wird eine SalesPurchJournalTable Map verwendet, um doppelten Code zu reduzieren. Ordnen Sie den Listencode aus der Kopftabelle der Karte zu.

<AxTableMapping>
<MappingTable>SalesPurchJournalTable</MappingTable>
    <Connections>
        ...
        <AxTableMappingConnection>
            <MapField>ListCode</MapField>
            <MapFieldTo>ListCode</MapFieldTo>
        </AxTableMappingConnection>
    </Connections>
</AxTableMapping>

Wenn Ihre Transaktionstabelle nicht dieser SalesPurchJournalTable Zuordnung zugeordnet ist, schreiben Sie Ihre eigene Logik in die Datenpersistenzaktivität, um den Listencode zu aktualisieren.

Datenpersistenz

Rufen Sie die TaxIntegrationListCodeUtility::saveListCodeFromDocumentToTable() Methode in der saveDocument Methode der neu erstellten Datenpersistenzklasse auf.

/// <summary>
/// Saves the document.
/// </summary>
/// <returns>Always true.</returns>
protected boolean saveDocument()
{
    TaxIntegrationTaxIdUtility::saveTaxIDFromDocumentToTable(document, salesTable);
    TaxIntegrationListCodeUtility::saveListCodeFromDocumentToTable(document, salesTable);
    return true;
}

Währungsumtausch, Rundung und Centdifferenzausgleich

Diese Funktion ist standardmäßig aktiviert. Legen Sie im Belegobjekt die Transaktionswährung, den festen Wechselkurs für die Berichtswährung und den festen Wechselkurs für die Buchhaltungswährung fest. Diese Aktion wird von der TaxIntegrationCurrencyExchangeActivityOnDocument Aktivität ausgeführt, die ohne Bedingung in TaxIntegrationFacade aufgerufen wird. Sie müssen nichts unternehmen, um diese Funktion zu nutzen.

Skonto

Wenn die Skontofunktion für die neue Transaktion in Ihren Finanz- und Betriebs-Apps bereits unterstützt wird, ermöglicht die Steuerintegration auch die Ermittlung der Skontoparameter durch den Steuerberechnungsdienst. Hier ist ein kurzer Überblick über den Vorgang zum Aktivieren dieser Funktionalität.

  1. Suchen Sie in der Codebasis nach allen Referenzen zu Skontoparametern.

  2. Ersetzen Sie die Referenzen der Skontoparameter durch Parameter aus dem Steuerberechnungsdienst. Die Parameter können auf zwei Arten abgerufen werden:

    • TaxIntegrationFacade:: getTaxJurisdictionParameters(RefTableId _sourceHeadingTableId, RefRecId _sourceHeadingRecId)
    • TaxIntegrationFacade::getTaxJurisdictionParametersByTable(Common _sourceHeadingTable)
  3. Erweitern Sie die Switch-Funktionen, um die neue Transaktion zu ermöglichen:

    • TaxIntegrationUtils::shouldRetrieveCashDiscParametersFromTaxService(RefTableId _refTableId, RefRecId _refRecId)
    • TaxIntegrationUtils::getBusinessProcessBySourceHeadingTable(RefTableId _sourceHeadingTableId, RefRecId _sourceHeadingRecId)