| icDraftReference | input | character | Description for the draft instance. This parameter will have a value when creating a draft instance. |
| icDraftFormName | input | character | This parameter will have a value when creating a draft instance. |
| ilDraftIsShared | input | logical | This parameter will have a value when creating a draft instance. |
| oiReturnStatus | output | integer | Return status of the method. |
<ANCESTOR-CODE>
/* ================================================================= */
/* If the instance contains uncommitted postings, do not wait for */
/* housekeeping to release the reserved number. Release it now. */
/* When saving a draft instance, store the number to protect it */
/* from being released by housekeeping. */
/* (do not release numbr when cancelling a draft) */
/* ================================================================= */
if oiReturnStatus < 0
then return.
assign viLocalReturnStatus = oiReturnStatus.
oiReturnStatus = -98.
if viCurrentDraftInstanceId = 0
then do :
BNUMBERBLOCK : DO :
for each tPosting where
tPosting.PostingVoucher <> 0 and
tPosting.PostingVoucher <> ? and
(tPosting.tc_Status = "N":U or
can-find(t_iPosting where
t_iPosting.tc_Rowid = tPosting.tc_Rowid and
(t_iPosting.PostingYear <> tPosting.PostingYear or
t_iPosting.tcJournalCode <> tPosting.tcJournalCode or
t_iPosting.PostingVoucher <> tPosting.PostingVoucher))):
/* Start&Open BNumber (AddToTrx=false) as in a loop below we will be calling BNumber repetively and this */
/* is more performing then using vhFcComponent=?. BNumber will be closed and stopped after the loop */
if viBNumberFromBPostingID = 0 or viBNumberFromBPostingID = ?
then do :
<I-69 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "false"
&CLASS = "BNumber"}>
end. /* if viBNumberFromBPostingID = 0 or viBNumberFromBPostingID = ? */
if icDraftReference = ""
then do:
<M-1 run ReleaseNumber
(input tPosting.Company_ID (iiCompanyId),
input tposting.PostingYear (iiNumbrYear),
input tPosting.tcJournalCode (icNumbrType),
input tPosting.PostingVoucher (iiNumbr),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
/* Following test is needed in case the posting was created externaly (methods ApiStdMaintainTT() */
/* and ApiStdMaintainMultiTT() in BCInvoiceJournalEntry, BDInvoiceJournalEntry and BPosting */
/* If the number was provided externaly and the action was 'validate', then Transaction.AbortTransaction */
/* is called (end thus ExitInstance in all components) which will try to release a number that was never */
/* picked-up by a call towards BNumber.GetNumber() */
if viFcReturnSuper <> 0 and
viFcReturnSuper <> -4 /* -4 means an invalid read : thus the number-record does not yet even exists */
then assign viBlockReturnStatus = viFcReturnSuper.
end. /* if icDraftReference = "" */
else do:
<M-2 run StoreNumber
(input tPosting.Company_ID (iiCompanyID),
input tPosting.PostingYear (iiNumbrYear),
input tPosting.tcJournalCode (icNumbrType),
input tPosting.PostingVoucher (iiNumbr),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper <> 0
then assign viBlockReturnStatus = viFcReturnSuper.
end. /* not if icDraftReference = "" */
if viBlockReturnStatus < 0
then Leave BNUMBERBLOCK.
end. /* for each tposting where */
for each tposting where
tPosting.PostingAddGLNbr <> 0 and
tPosting.PostingAddGLNbr <> ? and
(tPosting.tc_Status = "N":U or
can-find(t_iPosting where
t_iPosting.tc_Rowid = tPosting.tc_Rowid and
(t_iPosting.PostingYear <> tPosting.PostingYear or
t_iPosting.PostingAddGLNbr <> tPosting.PostingAddGLNbr ))):
/* Start&Open BNumber (AddToTrx=false) as in a loop below we will be calling BNumber repetively and this */
/* is more performing then using vhFcComponent=?. BNumber will be closed and stopped after the loop */
if viBNumberFromBPostingID = 0 or viBNumberFromBPostingID = ?
then do :
<I-70 {bFcStartAndOpenInstance
&ADD-TO-TRANSACTION = "false"
&CLASS = "BNumber"}>
end. /* if viBNumberFromBPostingID = 0 or viBNumberFromBPostingID = ? */
if icDraftReference = ""
then do:
<M-26 run ReleaseNumber
(input tPosting.tiSharedCompanyId (iiCompanyId),
input tPosting.tiYearForNbr (iiNumbrYear),
input {&FIXEDJOURNALTYPE} (icNumbrType),
input tPosting.PostingAddGLNbr (iiNumbr),
input viFcCurrentInstanceId (iiInstanceId),
input vcFcComponentName (icClassName),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
/* Following test is needed in case the posting was created externaly (methods ApiStdMaintainTT() */
/* and ApiStdMaintainMultiTT() in BCInvoiceJournalEntry, BDInvoiceJournalEntry and BPosting */
/* If the number was provided externaly and the action was 'validate', then Transaction.AbortTransaction */
/* is called (end thus ExitInstance in all components) which will try to release a number that was never */
/* picked-up by a call towards BNumber.GetNumber() */
if viFcReturnSuper <> 0 and
viFcReturnSuper <> -4 /* -4 means an invalid read : thus the number-record does not yet even exists */
then assign viBlockReturnStatus = viFcReturnSuper.
end. /* if icDraftReference = "" */
else do:
<M-87 run StoreNumber
(input tPosting.tiSharedCompanyId (iiCompanyID),
input tPosting.tiYearForNbr (iiNumbrYear),
input {&FIXEDJOURNALTYPE} (icNumbrType),
input tPosting.PostingAddGLNbr (iiNumbr),
output viFcReturnSuper (oiReturnStatus)) in BNumber>
if viFcReturnSuper <> 0
then assign viBlockReturnStatus = viFcReturnSuper.
end. /* Not if icDraftReference = "" */
if viBlockReturnStatus < 0
then Leave BNUMBERBLOCK.
end. /* for each tposting where */
END. /* BNUMBERBLOCK */
/* Close&Stop BNumber that is started with a different transaction before the previous loop */
if viBNumberFromBPostingID <> 0 and viBNumberFromBPostingID <> ?
then do :
<I-12 {bFcCloseAndStopInstance
&CLASS = "BNumber"}>
end. /* if viBNumberFromBPostingID <> 0 and viBNumberFromBPostingID <> ? */
if viBlockReturnStatus <> 0
then assign viLocalReturnStatus = viBlockReturnStatus.
end. /* if viCurrentDraftInstanceId = 0 */
assign oiReturnStatus = viLocalReturnStatus.
if oiReturnStatus < 0
then return.