Показать сообщение отдельно
Старый 06.10.2004, 13:05   #1  
Oz is offline
Oz
Участник
Аватар для Oz
 
293 / 51 (2) ++++
Регистрация: 22.08.2002
Адрес: Москва
Возврат по закупке с накладными расходами через немедленное получение
Уважаемые коллеги!

У нас стоит Axapta 3.0 SP3
У меня юзеры провели накладную по закупке с накладными расходами. Выяснилось, что товар в строке был не тот. Решили сторнировать через возврат, причем используя ввод отрицательного количества в поле "Немедленное получение". Как бы была надежда, что в этом случае правильно сторнируется проводка по накладным расходам.
Увы, провести в этом случае накладную не удалось: система выдала ошибку "Объект LedgerBondTransObject_RU не инициализирован". При детальном рассморении вопроса выяснилось, что ошибка происходит на участке коде метода MarkupAdjustment \ adjustCreditNote:
PHP код:
currencyBondLog conNull();
bondLog ledgerBondClient.currentLog();
for (
1<= conlen(bondLog); i++)
{
       if (
ledgerBondClient.bondTransObject(conPeek(currencyBondLogi)).ledgerTransObject().parmCurrencyCode() == currencyCode)
        {
            
currencyBondLog += conPeek(currencyBondLogi);
        }

на строке
PHP код:
if (ledgerBondClient.bondTransObject(conPeek(currencyBondLogi)).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 не будет работать ни при каких обстоятельствах!
Итак, то ли лыжи не едут, то ли я... чего то не понимаю. Может застрелиться?

Коллеги! Может кто нибудь сталкивался с такой проблемой и даже смог ее обойти?
Или мне забить на указанный в начале поста способ возврата товара и попробовать другие (новую строку с отрицательным количеством, например), начхав на то, что проводку по накладным расходам при этом сторнировать нормально придется вручную?

Заранее благодарен!
__________________
Здесь могла быть Ваша реклама!