Показать сообщение отдельно
Старый 16.04.2008, 10:32   #18  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
За создание проводок отвечают классы LedgerVoucher и LedgerVoucherObject. Последний при создание объекта прнимает параметр Correction, который и отвечает за то, будет ли проводка сторнирущей или реверсированной. Важное замечание: документ ГК может быть либо целиком сторно, либо целиком реверс. То есть ситуация, когда часть провдок в рамках одного документа ГК являются сторнирующими, а часть реверсированными, невозможна (в рамках стандартного функционала, естественно ). Чтобы убедится в этом, достаточно взглянуть на конструктор класса LedgerVoucherObject newVoucher, который принимает в качестве параметра помимо прочего документ ГК для проводки (_voucher) и признак сторно (_correction).

Общий вывод. В рамках стандартного функционала добиться возникновения правильных сторнирующих проводок при закрытии склада невозможно. Более того, решить эту проблему небольшими модификациями невозможно. А писать большую и сложную модификацию (например, можно было бы создавать два ваучера по одному закрытию, один сторно, второй реверс) слишком опасно с точки зрения целостности данных и логики системы.
Выполнял недавно модификацию, которая изменяет данную логику, и она мне далась довольно малой кровью. Была выполнена следующая модификация:
X++:
ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans(
                                                                    _ledgerVoucher.findLedgerVoucherObject(),
                                                                    this.postingBalanceSheet(),
                                                                    this.accountBalanceSheet(),
                                                                    this.dimension(),
                                                                    Companyinfo::standardCurrency(),
                                                                    costAmount,
                                                                    0);

                ledgerVoucherTransObject.parmCorrect(this.correctLedgerTransObject() ? this.correctLedgerTransObject() : ledgerVoucherTransObject.parmCorrect());

                _ledgerVoucher.addTrans(ledgerVoucherTransObject);