![]() |
#6 |
Участник
|
Как вариант - отмена закрытия не сторнирует полностью закрытие по ГК из-за того что после закрытия удалили проводки InventTrans в закрытом периоде (штатно такое невозможно, но вероятно у вас джобом документ грохали).
Рекомендую проверить что InventSettlement по закрытию балансирует с ГК по закрытию. Например в одной транзакции пометить его как неразнесенный (InventSettlement.posted = 0) разнести, вывести куда нить полученные проводки по ГК или сравнить с уже сделанными и откатить транзакцию. Если не балансирует, то скорее всего все так и было. Для защиты от удаления проводок поучаствовавших в закрытии / пересчете, можно сделать такую модифу (пример приводу для 2009-й аксапты) : \Data Dictionary\Tables\InventTrans\Methods\delete X++: ... if (this.isUpdatedFinancial()) { // pkoz 19.03.2009 --> this.GRD_checkDeleteSettlement(); // перед удалением проверяем есть ли неотмененные сопоставления // - если есть то удалять нельзя нужно сперва отменить соответсвующее сопоставление, или коррекцию // если разрешить удаление без отмены как здесь, то тогда разъедется LedgerTrans и InventTrans // Дальнейшая отмена сопоставлений, коррекций, как я понимаю ситуацию уже не вылечит, так как // записи в inventSettlement по которым при отмене будут делать проводки по ГК уже будут удалены // т.е. нужно либо запретить удапение, либо при удалении делать сторнирующую проводку по ГК на // суммы удаляемых InventSettlement. Ну и просто - даже если проводок по ГК не было - InventSettlement // друг с дружкой связаны ссылками - поэтому просто удалять нельзя. // см. джоб GRD_6029_CancelSettlementPerInventTrans // pkoz 19.03.2009 <-- delete_from inventSettlement index hint RecIdTypeIdx where inventSettlement.transRecId == this.recId && inventSettlement.itemId == this.itemId; } ... X++: // pkoz 19.03.2009 boolean GRD_checkDeleteSettlement(boolean _doThrow = true // = false ) { InventSettlement inventSettlement; boolean ret = true; InventClosing InventClosing; str locGetErrorText() { return strFMT("По проводке Лот %1, recID %2, TransRefID %3, TransType %4 - есть неотмененные сопоставления/коррекции. Дата сопоставления/коррекции - %5", this.InventTransId, this.RecId, this.TransRefId, this.TransType, inventSettlement.TransDate //pkoz 31.07.2014 ); } ; if (this.isTmp()) return true; ttsBegin; while select forupdate inventSettlement order by transDate //pkoz 31.07.2014 where inventSettlement.transRecId == this.recId && // inventSettlement.itemId == this.itemId inventSettlement.Cancelled == NoYes::No //pkoz 09.07.2012 --> /* // добавили такое условие потому что реально надо запрещать удаление InventTrans только если есть неотмененные сопоставления по // ваучеру отличному от ваучера из InventTrans // а именно этому случаю соответсвуют сопоставления от пересчетов, закрытий и коррекций // если же сопоставление возникло из-за накладных расходов при разноске закупки (markupTrans) // то там ... join InventClosing where InventClosing.Voucher == inventSettlement.Voucher && InventClosing.TransDate == inventSettlement.TransDate */ //pkoz 09.07.2012 <-- { //pkoz 09.07.2012 --> if ( this.DateFinancial == inventSettlement.TransDate && this.Voucher == inventSettlement.Voucher && !inventSettlement.inventClosing_GRD() ) { // добавили такое условие потому что реально надо запрещать удаление InventTrans только если есть неотмененные сопоставления по // ваучеру отличному от ваучера из InventTrans // а именно этому случаю соответсвуют сопоставления от пересчетов, закрытий и коррекций // если же сопоставление возникло из-за накладных расходов при разноске закупки (markupTrans) // то там ... continue; } //pkoz 09.07.2012 <-- if (_doThrow) throw error(locGetErrorText()); ret = checkFailed(locGetErrorText()); break; } ttsCommit; return ret; } Последний раз редактировалось Logger; 21.12.2014 в 20:50. |
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (1). |
Теги |
закрытие склада |
|
|