CDS-View Abschlagsplan
Kopiervorlage: die künftigen Abschlagsraten als OData-Service, damit sie in Bilendo als offene Posten stehen.
Warum ein eigener View
Die Raten eines Abschlagsplans stehen in FI-CA als statistische Posten (Abschlagsanforderung, DFKKOP.STAKZ) und werden von der Standard-API des FI-CA-Belegs zwar geliefert, aber im Mapping als „keine Forderung" ausgeschlossen. Für das Utilities-Paket gibt es keine freigegebene API, die die Raten mit Plan, Zyklus und Periode verbindet. Der View unten liefert genau diese Sicht — eine Zeile je Rate — und wird als OData-V4-Service freigegeben, den der Datenhandler wie die sechs Standard-Services liest.
Drei Annahmen sind im QA-System des Kunden zu prüfen, bevor der View transportiert wird: (1) der Wert von
STAKZfür die Abschlagsanforderung (Standard:'G'), (2) dassEABP.OPBELdie Belegnummer der Abschlagsanforderung inDFKKOPist, (3) dassDFKKOP.VTREFden Versorgungsvertrag trägt.
1 · Interface-View
@AbapCatalog.viewEnhancementCategory: [#NONE]
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Bilendo: Abschlagsraten (Budget Billing Instalments)'
@Metadata.ignorePropagatedAnnotations: true
@ObjectModel.usageType: {
serviceQuality: #X,
sizeCategory: #L,
dataClass: #TRANSACTIONAL
}
define view entity ZI_BILENDO_BBP_INSTALLMENT
as select from dfkkop as Item
inner join eabp as Plan on Plan.opbel = Item.opbel
{
key Item.opbel as DocumentNumber,
key Item.opupw as RepetitionItemNumber,
key Item.opupk as ItemNumber,
key Item.opupz as SubItemNumber,
Item.bukrs as CompanyCode,
Item.gpart as BusinessPartner,
Item.vkont as ContractAccount,
Item.vtref as Contract,
Item.spart as Division,
Plan.abszyk as BudgetBillingCycle,
Plan.begperiode as PeriodStartDate,
Plan.endperiode as PeriodEndDate,
Plan.ercHzbelnr as BillingDocument,
Item.faedn as DueDate,
Item.budat as PostingDate,
Item.bldat as DocumentDate,
@Semantics.amount.currencyCode: 'Currency'
Item.betrw as Amount,
@Semantics.currencyCode: true
Item.waers as Currency,
Item.hvorg as MainTransaction,
Item.tvorg as SubTransaction,
Item.stakz as StatisticalItemCode,
Item.augst as ClearingStatus,
Item.augdt as ClearingDate,
Item.augbl as ClearingDocument,
Item.augrd as ClearingReason,
Item.mansp as DunningLockReason,
Item.studt as DeferralDate,
cast( 'ABSCHLAG' as abap.char( 8 ) ) as ExternalDocumentType
}
where
Item.stakz = 'G' // Abschlagsanforderung (statistischer Posten) — Wert im QA-System pruefenHinweis: Plan.ercHzbelnr heißt in der Tabelle ERCHZBELNR (Abrechnungsbeleg, der dem Plan zugrunde liegt) — Schreibweise im ABAP Dictionary des Systems übernehmen. Ist die Tabelle in Ihrem Release als Released View I_... verfügbar, ist der View auf diesen zu setzen; für On-Premise ist der Direktzugriff auf DFKKOP/EABP der Regelfall.
2 · Consumption-View
@EndUserText.label: 'Bilendo: Abschlagsraten (API)'
@AccessControl.authorizationCheck: #CHECK
@Metadata.allowExtensions: true
@ObjectModel.semanticKey: [ 'DocumentNumber', 'RepetitionItemNumber', 'ItemNumber', 'SubItemNumber' ]
define view entity ZC_BILENDO_BBP_INSTALLMENT
as select from ZI_BILENDO_BBP_INSTALLMENT
{
key DocumentNumber,
key RepetitionItemNumber,
key ItemNumber,
key SubItemNumber,
CompanyCode,
BusinessPartner,
ContractAccount,
Contract,
Division,
BudgetBillingCycle,
PeriodStartDate,
PeriodEndDate,
BillingDocument,
DueDate,
PostingDate,
DocumentDate,
@Semantics.amount.currencyCode: 'Currency'
Amount,
Currency,
MainTransaction,
SubTransaction,
StatisticalItemCode,
ClearingStatus,
ClearingDate,
ClearingDocument,
ClearingReason,
DunningLockReason,
DeferralDate,
ExternalDocumentType
}3 · Service-Definition und Service-Binding
@EndUserText.label: 'Bilendo: Abschlagsraten'
define service ZSD_BILENDO_BBP_INSTALLMENT {
expose ZC_BILENDO_BBP_INSTALLMENT as BudgetBillingInstalment;
}Service-Binding in ADT anlegen: ZAPI_BILENDO_BBP_INSTALLMENT_O4, Binding-Typ OData V4 – Web API, Service-Definition ZSD_BILENDO_BBP_INSTALLMENT; dann Publish. Der Service-Pfad lautet danach /sap/opu/odata4/sap/zapi_bilendo_bbp_installment_o4/srvd_a2x/sap/zsd_bilendo_bbp_installment/0001/. Ein API-Management-Proxy wird darauf wie auf die Standard-Services gelegt.
4 · Zugriffskontrolle (DCL)
@EndUserText.label: 'Bilendo: Abschlagsraten - Buchungskreis'
@MappingRole: true
define role ZI_BILENDO_BBP_INSTALLMENT {
grant select on ZI_BILENDO_BBP_INSTALLMENT
where ( CompanyCode ) = aspect pfcg_auth( F_BKPF_BUK, BUKRS, ACTVT = '03' );
}5 · Wie der Datenhandler den View liest
| Frage | Antwort |
|---|---|
| Delta-Anker | PostingDate für neue Raten; ClearingDate für Raten, die fällig wurden und in einen echten Posten übergegangen sind. DFKKOP hat keinen Änderungsstempel — dieselbe Regel wie beim FI-CA-Beleg. |
| Mapping | DocumentNumber → receipt_number · ItemNumber-Kette → external_position · Contract → erp_reference · ContractAccount → imported_customer_number · DueDate → due_date · Amount/Currency · ExternalDocumentType → external_doctype = ABSCHLAG · Division → external_sales_unit |
| Übergang zur echten Forderung | Wird die Rate fällig gebucht, entsteht ein nicht-statistischer Posten mit eigener Belegnummer; der Plan-Posten kommt mit delete_indicator (ClearingStatus gesetzt), der echte Posten neu. Korrelation: Vertragskonto + Fälligkeit + Betrag. |
| Nicht mahnbar bis Fälligkeit | Die Bilendo-Belegart ABSCHLAG ist in der Mahnstrategie so konfiguriert, dass vor due_date nichts geschieht. |