Уважаемые коллеги!
У нас стоит Axapta 3.0 SP3
У меня юзеры провели накладную по закупке с накладными расходами. Выяснилось, что товар в строке был не тот. Решили сторнировать через возврат, причем используя ввод отрицательного количества в поле "Немедленное получение". Как бы была надежда, что в этом случае правильно сторнируется проводка по накладным расходам.
Увы, провести в этом случае накладную не удалось: система выдала ошибку "Объект LedgerBondTransObject_RU не инициализирован". При детальном рассморении вопроса выяснилось, что ошибка происходит на участке коде метода MarkupAdjustment \ adjustCreditNote:
PHP код:
currencyBondLog = conNull();
bondLog = ledgerBondClient.currentLog();
for (i = 1; i <= conlen(bondLog); i++)
{
if (ledgerBondClient.bondTransObject(conPeek(currencyBondLog, i)).ledgerTransObject().parmCurrencyCode() == currencyCode)
{
currencyBondLog += conPeek(currencyBondLog, i);
}
}
на строке
PHP код:
if (ledgerBondClient.bondTransObject(conPeek(currencyBondLog, i)).ledgerTransObject().parmCurrencyCode() == currencyCode)
проблема в том, что метод bondTransObject должен вернуть объект класса LedgerBondTransObject_RU по переданному индексу (conPeek(currencyBondLog, i)). Очевидно по вышеуказанному коду, что этот индекс для i==1 может быть только 0.
У ledgerBondClient запрошенного объекта с индексом 0 не оказалось.
В этом нет ничего удивительного, если учесть, что добавление объекта класса LedgerBondTransObject_RU происходит
ТОЛЬКО в методе LedgerBondTransList_RU \ add, код которого приведен ниже:
PHP код:
public boolean add(LedgerBondTransObject_RU _bondTransObject)
{
boolean ret = true;
if (! _bondTransObject.vrefId())
{
error(Error::wrongUseOfFunction(funcName()));
return false;
}
ret = transMap.insert(_bondTransObject.vrefId(), _bondTransObject);
lastVrefId = _bondTransObject.vrefId();
return ret;
}
_bondTransObject.vrefId() и есть тот самый индекс, по которому впоследствии и происходит поиск этого объекта в коллекции LedgerBondTransList_RU.
Обратите внимание, что судя по коду, индекс добавляемого объекта
НЕ МОЖЕТ БЫТЬ НУЛЕВЫМ!
То есть, исходя из этого, приведенный код метода MarkupAdjustment \ adjustCreditNote не будет работать ни при каких обстоятельствах!
Итак, то ли лыжи не едут, то ли я... чего то не понимаю. Может застрелиться?
Коллеги! Может кто нибудь сталкивался с такой проблемой и даже смог ее обойти?
Или мне забить на указанный в начале поста способ возврата товара и попробовать другие (новую строку с отрицательным количеством, например), начхав на то, что проводку по накладным расходам при этом сторнировать нормально придется вручную?
Заранее благодарен!