Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье представлены функции и функции, которые необходимо реализовать для интеграции новой проводки.
При интеграции налогов поддерживаются следующие функции и функции:
- Переопределение налога
- Код нескольких плательщиков НДС
- Код списка
- Скидка при оплате наличными
Переопределение налога
При интеграции налогов вы не можете редактировать налоговую группу и налоговую группу номенклатур в строке, поскольку налоги определяются службой расчета налогов. Функция Переопределения налоговой группы позволяет изменить налоговую группу или налоговую группу номенклатур, указанную в строке, для расчета налога. Этот расчет переопределяет налоговые группы, которые определяются службой расчета налогов.
Если для параметра переопределения налога установлено значение "Да", можно выбрать конкретную налоговую группу и налоговую группу номенклатур для расчета налога.
Чтобы включить эти функции, выполните следующие действия.
Добавьте поле Переопределить налог в схему таблицы строк проводок и в раздел налогов , если оно существует.
Установите для видимости по умолчанию значение "Ложь" в соответствующих формах проводок.
Сравь поле Переопределения налога с картой
SalesPurchJournalLine. Эта карта широко используется в налоговой интеграции. Если он не сопоставлен, может потребоваться дополнительный код для реализации ожидаемой функции.Настройка видимости и возможности редактирования для формы проводки:
Установите для источника данных формы проводок видимость по умолчанию как ложь .
Видимость по умолчанию устанавливается на истина только в том случае, если для данной проводки включена налоговая интеграция.
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); }Добавьте элемент
allowEditуправления в форму проводки, чтобы контролировать редактируемость налоговой группы и налоговой группы номенклатур. Обычно имеется три места для добавления этого элемента управления:- Метод
init()формы - Линейный
activeметод - Метод
modified()поля Переопределить налог
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); }- Метод
Установите значение переопределения налога в операции по извлечению данных.
line.setOverrideSalesTax(this.vendInvoiceInfoLine.OverrideSalesTax);Чтобы обеспечить согласованность структуры, новые накладные расходы вводятся переопределяемого налога по умолчанию из его источника. Измените
MarkupTrans::getOverrideSalesTaxFromParentRecord(MarkupTransRefTableId _tableId, MarkupTransRefRecId _refRecId)для поддержки новых проводок.Не обязательно: изменение связанных объектов для поддержки импорта и экспорта переопределенного налога.
Код нескольких плательщиков НДС
Функция множественного кода НДС позволяет определять код налога на добавленную стоимость (НДС) в службе расчета налогов. Эта функция управляется функцией поддержки нескольких регистрационных номеров НДС. Дополнительные сведения см. в разделе Несколько регистрационных номеров НДС.
В этой функции необходимо определить и сохранить два регистрационных номера: регистрационный номер для налогового органа текущего юридического лица и регистрационный номер для контрагента. Если у проводки нет клиента или поставщика в качестве контрагента, регистрационный номер контрагента не будет работать для нее.
Примечание
Для всех строк проводки имеются только один регистрационный номер юридического лица и один регистрационный номер контрагента. Большая часть кода для этой функции выполнена в TaxIntegrationTaxIdActivityOnDocument.xpp.
Схема базы данных
Поля данных TaxId и PartyTaxId используются для кодов записей регистрационных номеров. Эти два поля добавляются в следующие связанные таблицы для хранения регистрационных номеров проводки:
- TmpTaxWorkTrans
- TaxUncommitted
- ТаксТранс
- CustPackingslipJour
- CustInvoiceJour
- VendPackingSlipJour
- VendInvoiceJour
Первые три таблицы в предыдущем списке (таблицы, связанные с налогами) являются таблицами уровня строки, тогда как последние четыре таблицы являются таблицами на уровне заголовка, поскольку одна проводка должна иметь одинаковый регистрационный номер.
Регистрационный номер юридического лица
Регистрационный номер юридического лица включается функцией "Поддержка нескольких регистрационных номеров НДС". Здесь ничего не требуется для новой проводки. Если налоговый код определен, регистрационный номер юридического лица заполняется регистрационным номером, назначенным периоду сопоставления по данному налоговому коду. Он определяется TaxIntegrationTaxIdActivityOnDocument::populateTaxLineTaxId() и сохраняется в базе данных вместе с налоговым результатом.
Существует также логика проверки регистрационного номера юридического лица, в том случае, если для различных строк в проводке определен другой регистрационный номер. Эта проверка выполняется в TaxIntegrationTaxIdActivityOnDocument::checkTaxIdConsistency().
Регистрационный номер контрагента
Регистрационный номер контрагента определяется службой расчета налогов. После получения ответа номер проверяется и сохраняется в базе данных вместе с регистрационным номером юридического лица. Однако если номера, определенного службой расчета налогов, отсутствует в главных данных пользователя, вместо возвращенного значения в заголовок проводки будет записано в базу данных. Регистрационный номер контрагента не применяется ко всем проводкам. Однако для такого подхода есть дополнительная логика.
Логика по умолчанию
Существует логика по умолчанию от главных данных клиента и поставщика до заголовка проводки. Можно задать значение кода налогового освобождения на уровне главных данных клиента и поставщика. Когда создается новая проводка, в ней вводится код налогового освобождения по умолчанию. Однако можно выбрать новое число, чтобы переопределить значение по умолчанию. Если номер, возвращенный налоговой службой, недействителен, в качестве номера по умолчанию будет использоваться номер в заголовке до расчета налога.
Код налогового освобождения — это строковое поле (VATNum), а не код записи, и он содержит два источника данных. Одним источником данных является код налоговой регистрации, а другим — код налогового освобождения. Интеграция налогов поддерживает только код налоговой регистрации в качестве своего источника. Два новых поля, VATNumRecId и VATNumTableType, должны быть добавлены в соответствующие таблицы, чтобы различать запись.
При добавлении новой проводки определите, должны ли поля VATNum, VATNumRecId и VATNumTableType добавляться в таблицу заголовка проводок. Если они должны быть добавлены, добавьте также таблицу в TaxExemptVATNumMap. Код записи и тип таблицы автоматически сохраняются в таблице заголовка, когда пользователи выбирают число в пользовательском интерфейсе.
Разработчик должен определить логику по умолчанию и вызвать copyPrimaryRegistrationNumberToVATMap копирование двух полей в вновь созданную таблицу заголовка проводок. Используйте следующий код по умолчанию, начиная CustTable с SalesTable кода в качестве примера в 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);
}
Функция переключения
Измените функцию подключения для поддержки новой проводки во время журнализации:
TaxIntegrationUtils::isMultipleTaxIdEnabledForJournalV3(RefTableId _journalHeaderTableId, RefRecId _journalHeaderRecId, Tax _tax = null)Если контрагента нет, или если регистрационный номер контрагента не применяется к новой проводке, пропустите логику контрагента в
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(); }
Группа номерных серий
Группа номерных серий является частью функции кода с несколькими НДС. При обновлении кода НДС в заголовке проводки также следует обновить соответствующую группу номерных серий. Однако это обновление не распространяется на все проводки. Если группа номерных серий должна быть интегрирована в новую проводку, используйте следующий пример для действия по сохранению данных.
private void saveNumberSequenceGroupToTable()
{
NumberSequenceGroupId numberSequenceGroupId = document.getNumberSequenceGroupId();
if (numberSequenceGroupId && custInvoiceTable.numberSequenceGroup != numberSequenceGroupId)
{
ttsbegin;
custInvoiceTable.numberSequenceGroup = document.getNumberSequenceGroupId();
custInvoiceTable.doUpdate();
ttscommit;
}
}
Определение выполняется в мероприятиях по налоговому коду для всех проводок. Добавьте и вызовите логику в действии сохранения данных, чтобы сохранить группу числовых последовательностей.
Код списка
Код списка напоминает эквивалентный код НДС тем, что оба кода определяются службой и сохраняются в базе данных. Функция кода списка всегда включается, если матрица применимости кода списка настроена в службе нормативной конфигурации (RCS).
Извлечение данных
Извлечение кода списка по умолчанию для TaxIntegrationDocument. Добавьте строку в методе copyToDocumentFromHeaderTable вновь созданного класса извлечения данных.
protected void copyToDocumentFromHeaderTable()
{
super();
...
document.setListCode(this.purchTable.ListCode);
...
}
Код списка сопоставления для сопоставления
Карта SalesPurchJournalTable используется в классе персистентных данных для уменьшения дублирования кода. Отображение кода списка из таблицы заголовка на карту.
<AxTableMapping>
<MappingTable>SalesPurchJournalTable</MappingTable>
<Connections>
...
<AxTableMappingConnection>
<MapField>ListCode</MapField>
<MapFieldTo>ListCode</MapFieldTo>
</AxTableMappingConnection>
</Connections>
</AxTableMapping>
Если таблица проводок не сопоставлена этой SalesPurchJournalTable карте, введите собственную логику в деятельность по сохранению данных, чтобы обновить код списка.
Сохранение данных
TaxIntegrationListCodeUtility::saveListCodeFromDocumentToTable() Вызов метода в методе saveDocument вновь созданного класса персистентности данных.
/// <summary>
/// Saves the document.
/// </summary>
/// <returns>Always true.</returns>
protected boolean saveDocument()
{
TaxIntegrationTaxIdUtility::saveTaxIDFromDocumentToTable(document, salesTable);
TaxIntegrationListCodeUtility::saveListCodeFromDocumentToTable(document, salesTable);
return true;
}
Курсовая разница, округление и корректировка допустимого расхождения
Эта функция включена по умолчанию. Задание валюты проводки, фиксированного валютного курса для валюты отчетности и фиксированного валютного курса для валюты учета в объекте документа. Это действие осуществляется посредством TaxIntegrationCurrencyExchangeActivityOnDocument деятельности, которая называется без каких-либо условий в TaxIntegrationFacade. Никакие действия с вашей стороны для использования этой функции не требуются.
Скидка при оплате наличными
Если функция скидки по оплате для новой проводки уже поддерживается в приложениях для финансов и операций, интеграция налогов также позволяет определять параметры скидки при оплате наличными, которые будут определяться службой расчета налогов. Ниже представлен краткий обзор процесса включения этой функции.
В базе кода найдите все ссылки параметров скидок при оплате наличными.
Замените ссылки параметров скидок при оплате наличными параметрами службы расчета налогов. Параметры могут быть извлечены одним из двух методов:
TaxIntegrationFacade:: getTaxJurisdictionParameters(RefTableId _sourceHeadingTableId, RefRecId _sourceHeadingRecId)TaxIntegrationFacade::getTaxJurisdictionParametersByTable(Common _sourceHeadingTable)
Расширьте функции подключения, чтобы включить новую проводку:
TaxIntegrationUtils::shouldRetrieveCashDiscParametersFromTaxService(RefTableId _refTableId, RefRecId _refRecId)TaxIntegrationUtils::getBusinessProcessBySourceHeadingTable(RefTableId _sourceHeadingTableId, RefRecId _sourceHeadingRecId)