If you use staging journals, you can set up the applicable journal validations. For each staging journal-related table, you can define the applicable validation rules.

For several tables, predefined validation rules are standard available.
Table Validation class Description
BisEdiPurchaseTrans BisCheckBisEdiPurchaseTrans Base validation class. Do not use as validation rule.
  BisEdiCheckPurchaseLineDiscPercent Checks if the discount percentage is equal to the discount percentage of the related PurchLine. On the journal validation setup, you can use a parameter to allow a small difference.
  BisEdiCheckPurchaseLineDiscAmount Checks if the discount amount is equal to the discount amount of the related PurchLine. On the journal validation setup, you can use the validation parameter to allow a small difference.
  BisEdiCheckPurchItemEanCode Checks if the BarCode exists in the InventItemBarcode table.
  BisEdiCheckPurchPrice Checks if the PurchPrice is equal to the PurchPrice of the related PurchLine. The related PurchLine is found using the PurchId and the LineNumber.
  BisEdiCheckPurchLineAmount Checks if the LineAmount is equal to the LineAmount of the related PurchLine. The related PurchLine is found using the PurchId and the LineNumber.
  BisEdiCheckPurchDeliveryDate Checks if the DeliveryDate of the PurchLine is equal to the ConfirmedDlv of the journal line.
  BisEdiCheckPurchQty Checks if the PurchQty is equal to the PurchQty of the related PurchLine. The related PurchLine is found using the PurchId and the LineNumber.
  BisEDICheckPurchaseLineNumberUsage Checks if the same purchase line number is used more than once.
  BisEdiCheckPurchItemId Checks if the ItemId exists in the InventTable.
BisEdiPurchaseJour BisCheckBisEdiPurchaseJour Base validation class. Do not use as validation rule.
  BisEdiCheckOriginIdPurchase Checks if a party setup exists for this VendAccount and OriginId.
  BisEdiCheckPurchJourDeliveryDate Checks if the DeliveryDate of the PurchTable is equal to the ConfirmedDlv of the journal header.
  BisEdiCheckPurchaseDiscPercent Checks if the discount percentage is equal to the discount percentage of the related purchase order. On the journal validation setup, you can use the validation parameter to allow a small difference.
  BisEdiCheckPurchPurchId Checks if the PurchId exists in the PurchTable.
BisEdiSalesTrans BisCheckBisEdiSalesTrans Base validation class. Do not use as validation rule.
  BisEdiCheckATPItemAvailableQty Checks the ATP for each EDI sales order line:
  • Item is determined using the BarCode field. If the BarCode field is empty, the check uses the ItemId field.
  • Delivery date is determined using the ReceiptDateRequested from the line. If the ReceiptDateRequested is empty, the check uses the ReceiptDateRequested from the header. If the ReceiptDateRequested from the header is empty, the current date is used.
  BisEdiCheckExternalItem Checks in D365 FO if the external item ID exists for the item.
  BisEdiCheckItemBarcode Checks if the OriginalBarCode exists. The check uses the item setup from the party setup.
  BisEdiCheckItemCanBeConverted Checks if the UnitId field can be converted to the unit defined in the  InventTableModule for sales.
  BisEdiCheckItemEanCode Checks if the BarCode exists in the InventItemBarcode table.
  BisEdiCheckItemGTIN Checks if the BarCode exists in the InventItemGTIN table.
  BisEdiCheckItemHighestQty Checks if the SalesQty field is less than the HighestQty defined in the InventTableModule for sales.
  BisEdiCheckItemId Checks if the ItemId exists in the InventTable.
  BisEdiCheckItemInPricelist Checks if the ItemId exists in the PriceDiscTable.
  BisEdiCheckItemLowestQty Checks if the OrderedQty is greater than the LowestQty defined in the InventTableModule for sales.
  BisEdiCheckItemLowestsalesQty Checks if the SalesQty is greater than the LowestQty defined in the InventTableModule for sales.
  BisEdiCheckItemMultiplyQty Checks if the SalesQty is less than the MultipleQty defined in the InventTableModule for sales.
  BisEdiCheckItemRestrictedForCountry Checks if the item is restricted for sale to the country of the delivery address. This validation rule uses the Restricted products setup as defined for the Released products.
  BisEdiCheckItemStopped Checks if the Stopped field is disabled in the InventTableModule for sales.
  BisEdiCheckSalesInventOnHand Checks if the inventory on-hand is enough for the sum of the RemainInventPhysical per ItemId in this journal.
  BisEdiCheckSalesLinePrice

Checks and calculates the expected sales line amount and compares it with the EDI sales line amount. It checks if the EDI sales line amount is different from the calculated amount.

You can allow a difference between the calculated amount and the EDI sales line amount. To do so, on the Journal validation setup, in the Validation parameter field, define the desired percentage. This percentage indicates the maximum allowed difference between the EDI sales line amount and the calculated amount.
Note: The expected sales line amount is calculated based on the trade agreements or default sales price.

  BisEdiCheckSalesLinePriceUnitConversion Checks and calculates the expected sales line amount and compares it with the EDI sales line amount. It checks if the EDI sales line amount is different from the calculated amount, taking into account unit conversions. 
You can allow a difference between the calculated amount and the EDI sales line amount. To do so, on the Journal validation setup, in the Validation parameter field, define the desired percentage. This percentage indicates the maximum allowed difference between the EDI sales line amount and the calculated amount.
Note: The expected sales line amount is calculated based on the trade agreements or default sales price.
  BisEdiCheckSalesPriceLineAmount Checks if the LineAmount is equal to the expected LineAmount, considering discounts.
  BisEdiCheckSalesUnit Checks if the sales unit exists.
  BisEdiCheckSalesQuantity Checks if the SalesQty is not 0.
BisEdiSalesJour BisCheckBisEdiSalesJour Base validation class. Do not use as validation rule.
  BisEdiCheckCustomerExist Checks if the customer exists, using the CustAccount field.
  BisEdiCheckCustomerIsBlocked Checks if the field CustTable.Blocked is 'Yes'. The customer is found using the CustAccount field.
  BisEdiCheckLinesExist Checks if the journal has lines.
  BisEdiCheckOrderAlreadyExist Checks if CustomerRref or the PurchOrderFormNum exists in the SalesTable.
  BisEdiCheckOrderAlreadyExistsForCustomer Checks if the PurchOrderFormNum exists in the SalesTable for the customer.
  BisEdiCheckOrderAlreadyExistsForCustomerAndReference Checks if the CustomerRef exists in the SalesTable for the customer.
  BisEdiCheckOrderDeliveryDate Checks if the ReceiptDateRequested field is in the past.
  BisEdiCheckOrderWeightLimit Checks if the sum of the NetWeight (InventTable) for this journal does not exceed the maximum weight. The maximum weight is defined as a parameter in the validation line.
  BisEdiCheckOriginIdSales Checks if a party setup exists for this CustAccount and OriginId.
  BisEdiCheckSalesPool Checks if the SalesPoolId exists in the SalesPool table.
  BisEdiCheckWarehouseExist Checks if the InventLocationId exists in the InventLocation table.
BisEdiSalesAddresses BisCheckBisEdiSalesAddresses Base validation class. Do not use as validation rule.
  BisEdiCheckAddressEanCode Checks if the addresses exist, using the field BisEanCodeId (GLN).
BisEdiInventoryOrderTrans BisCheckBisEdiInventoryOrderTrans Base validation class. Do not use as validation rule.
  BisEdiCheckInventoryInventtransIdAlreadyReceived Checks if one purchase receipt was made on this inventory transaction Id.
  BisEdiCheckInventoryInventTransIdExists Checks if the current inventory transaction ID exists.
  BisEdiCheckInventoryOrderItemEanCode Checks if the BarCode exists in the InventItemBarCode table. The check is not applied if the ItemId field is filled.
  BisEdiCheckInventoryOrderItemGTIN Checks if the BarCode exists in the InventItemBarGTIN table. The check is not applied if the ItemId field is filled.
  BisEdiCheckInventoryOrderTransBatch Checks if the InventBatchId or EndJob field exists on the journal line.
  BisEdiCheckInventoryOrderTransBatchExp Checks if the ExpirationDate (including the PdsBestBefore from the InventTable) is equal to the ExpDate from the InventBatch table.
  BisEdiCheckInventoryOrderTransId Checks if the InventTransId exists for sales or purchase orders.
  BisEdiCheckInventoryOrderTransInventOK Checks if the TransInvent is OK:
  • Open transactions for the item and location.
  • Batch exists for the item.
  • Batch expiry date is different.
  • License plate exists.
  • Physical quantity.
  • Batch unavailable.
  BisEdiCheckInventoryOrderTransItemId Checks if the ItemId exists in the InventTable. In case of production orders, the ProdTable is also used.
  BisEdiCheckInventoryOrderTransLP Checks if the LicensPlateId is according to the rules.
  BisEdiCheckInventoryOrderTransLPShipped Checks if the TransLPShipped is OK.
  BisEdiCheckInventoryOrderTransNoSplitLP Checks if enough inventory on-hand is available for a specific license plate to avoid splitting the sales or transfer order.
  BisEdiCheckInventoryOrderTransPurchConfirmed Checks if the purchase order is confirmed.
  BisEdiCheckInventoryOrderTransQtyOnHand Checks if enough inventory on-hand is available for this inventory order journal.
  BisEdiCheckInventoryOrderTransQtyPositiv Checks if the InventQty is positive.
  BisEdiCheckInventoryOrderTransTotalQty Checks if enough inventory on-hand is available for all the journals with MessageStatus 'To be processed'.
  BisEdiCheckTransferHasShipped Checks if the InventQty is less than the QtyRemainReceive on the InventoryOrderTrans. This check only applies to InventTransType 'Transfer order receive'.
  BisEdiCheckWMSJournal Checks if a WMSJournalTrans exists for this ItemId, LicensePlateId, InventBatchId, InventLocationId.
BisEdiInventoryOrderJour BisCheckBisEdiInventoryOrderJour Base validation class. Do not use as validation rule.
  BisEdiCheckPurchPackingSlip Base validation class. Do not use as validation rule.
  BisEdiCheckInventoryOrderJourCustHold Checks if the CustTable.Blocked is 'All', 'Invoice', or 'Requisition' for the OrderType 'Sales order'. The check searches the related sales order using the InventTransRefId field on the header.
  BisEdiCheckInventoryOrderJourHasOpenLine Checks the status and the open lines for the different order types:
  • Production order: ProdStatus is not 'Completed'.
  • Purchase order: PurchStatus is not 'Invoiced', DocumentState is not 'Confirmed', and the purchase order line RemainInventPhysical is greater than or equal to the InventQty from the journal line.
  • Sales order: SalesStatus is not 'Invoiced', and the sales order line RemainInventPhysical is greater than or equal to the InventQty from the journal line.
    • Transfer order: TransferStatus is not 'Received', and the transfer order line QtyRemainReceive is greater than or equal to the InventQty from the journal line.
  BisEdiCheckInventoryOrderJourHold This check always returns false to avoid automatically processing the journal.
  BisEdiCheckInventoryOrderJourPending Checks if pending journals exist using the InventTransRefId, OrderType, and TransDateTime field. The journal is pending if the messageStatus is 'To be processed' or 'Error'.
  BisEdiCheckInventoryOrderJourPeriodOpen Checks if an open period exists in the LedgerFiscalCalendarPeriod, using the TransDateTime field from the journal header.
  BisEdiCheckInventoryOrderJourQty Checks if the sum of the InventQty is less than the Qty in the InventTrans table for the current InventTransId. This check is only applied if the ReferenceType is 'Sales order delivery', 'Sales order return', or 'Transfer order shipment'.
  BisEdiCheckInventoryOrderJourReqRef Checks the existence of purchase orders or sales orders:
  • Checks for a sales order using the InventTransRefId, RequisitionReference, and CustAccount. The RequisitionReference is compared to the PurchOrderFormNum on the SalesTable.
  • Checks for a purchase order using the InventTransRefId, RequisitionReference, and CustAccount. The RequisitionReference is compared to the VendorRef field on the PurchTable.
  BisEdiCheckInventoryOrderJourReserveOK Checks if enough inventory on-hand is available to reserve. This check is only applied to OrderType 'Sales order' or 'Transfer order'
  BisEdiCheckInventoryOrderJourTransDate Checks if the TransDateTime is defined and is not in the future.
  BisEdiCheckInventoryOrderJourTransRefId Checks if the InventTransRefId exists.
  BisEdiCheckProdStarted Checks if the ProdStatus of the ProdTable is 'Started' or 'Finished'.
  BisEdiCheckPurchaseConfirmed Checks if the DocumentState of the PurchTable is 'Confirmed'.
BisEdiTransferOrderTrans BisCheckBisEdiTransferOrderTrans Base validation class. Do not use as validation rule.
  BisEdiCheckTransferLineItemId Checks if the ItemId exists in the InventTable.
  BisEdiCheckTransferLineQty Checks if the InventQty is not 0.
BisEdiTransferOrderJour BisCheckBisEdiTransferOrderJour Base validation class. Do not use as validation rule.
  BisEdiCheckTransferOrderDeliveryDate Checks if the InventTransferReceiveDate deviates from other journals with the same TransferId.
BisStagingJournal BisCheckBisEdiPurchaseTransDelivery Base validation class. Do not use as validation rule.
  BisEdiCheckPurchSplitDeliveryDate Checks if the ConfirmedDlv differs from the related records in the BisEdiPurchaseTransDelivery.
  BisEdiCheckPurchSplitDeliveryQty Checks if the PurchQty differs from the related records in the BisEdiPurchaseTransDelivery.
BisEdiPurchaseMarkupTrans BisCheckBisEdiPurchaseMarkupTrans Base validation class. Do not use as validation rule.
  BisEdiCheckPuchaseMarkupCode Checks if the charges code of the purchase confirmation line exists in the Charges codes (MarkupTable) table.
  BisEdiCheckPuchaseMarkupTaxGroup Checks if the sales tax group of the purchase confirmation line exists in the Sales tax groups (TaxGroup) table.
  BisEdiCheckPuchaseMarkupTaxItemGroup Checks if the tax item group of the purchase confirmation line exists in the Item sales tax groups (TaxItemGroup) table.
BisEdiSalesMarkupTrans BisCheckBisEdiSalesMarkupTrans Base validation class. Do not use as validation rule.
  BisEdiCheckSalesMarkupCode Checks if the charges code of the sales order line exists in the Charges codes (MarkupTable) table.
  BisEdiCheckSalesMarkupTaxGroup Checks if the sales tax group of the sales order line exists in the Sales tax groups (TaxGroup) table.
  BisEdiCheckSalesMarkupTaxItemGroup Checks if the tax item group of the sales order line exists in the Item sales tax groups (TaxItemGroup) table.

Related to Notes

Set up validation rules

 

Provide feedback