AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.10.2004, 19:17   #1  
dirigente is offline
dirigente
Участник
 
50 / 10 (1) +
Регистрация: 19.11.2003
Адрес: Москва
? Ошибка SP3?
Если в параметрах Расчетов с клиентами установлена проверка кредитного лимита, то при попытке изменить (например, цену) свежесозданную строку выскакивает сообщение об ошибке:
Цитата:
Warning Сообщение (19:22:50) Значение, введенное в поле 'Оценка суммы' таблицы 'Заказы' ('1321,00') нельзя сохранить, поскольку оно изменено другим пользователем (новое значение - '1321,00'). Используйте функцию "Восстановить", чтобы подставить новое значение.
Error Сообщение (19:22:50) Невозможно отредактировать запись в 'Заказы' ('SalesTable').
Одно или более полей в записи изменено другим пользователем, или в форме выбраны не все поля. Воспользуйтесь функцией "Восстановить".
При этом если предварительно перечитать строку из таблицы (F5), то ошибки нет. Таким образом где-то после Insert в SalesLine происходит изменение значений полей estimateGross и estimateNet.
Сравнение dis и old dis слоев метода insert() класса SalesLineType:

PHP код:
public void  insert(boolean     dropInvent      false,
                    
boolean     findMarkup      true,
                    
Common      childBuffer     NULL )
{
    
InventUpd_Estimated     estimated;
    
NumberSeq               numberSeq;
    
SalesTable              salesTable;
    
container               salesEstimated;
    
AmountCur               estimate;
    ;

    if (
salesLine.inventTable().interCompanyBlockedSales() &&  salesLine.salesTable().isInterCompanyOrder())
        throw 
checkFailed(strFmt("@SYS74812"salesLine.itemId));

    
ttsbegin;

    if (
salesLine.creditNoteLine())
        
salesLine.transactionCode IntraStatParameters::find().defaultCreditNote;

    
numberSeq NumberSeq::newGetNum(InventParameters::numRefInventTransId());
    
salesLine.inventTransId numberSeq.num();

    if (!
salesLine.custAccount || !salesLine.custGroup)
    {
        
salesLine.custAccount  salesLine.salesTable().custAccount;
        
salesLine.custGroup    salesLine.salesTable().custGroup;
    }

    
salesLine.taxAutogenerated NoYes::Yes;

    
salesLine.setSalesStatus();

    if (!
salesLine.interCompanySkipUpdate  &&  salesLine.salesTable().isInterCompanyOrder())
        
this.interCompanyMirror(salesLine.salesTable());

    
this.updateSalesTable();

    if (
salesLine.salesStatus != salesLine.salesTable().salesStatus)
    {
        
salesTable salesLine.salesTable(true);
        
salesTable.salesStatus salesLine.salesStatus;
        
salesTable.update();
    }

    if (!
dropInvent)
    {
        
estimated = new InventUpd_Estimated(InventMovement::construct(salesLinefalsechildBuffer));
        
estimated.updateNow();
    }

//-> OLD DIS
   
salesLine.calcCreditEstimate();
//<- OLD DIS
   
salesLine.doInsert();
//-> DIS: Здесь ПОСЛЕ ВСТАВКИ происходит присвоение значений 
//             estimateGross и estimateNet в SalesLine!!!
//    salesLine.calcCreditEstimate();
//<- DIS

    
if (estimated)
        
estimated.updateReservation();

    if (
findMarkup)
        
salesLine.createMarkupTrans(salesLine.salesTable());

    
ttscommit;

Или дело в другом? По крайней мере в приведенном виде ошибка исчезла.

Кстати, может кто знает почему при установке/снятии 'Цена включает налог' в Заказе, эти самые estimateGross и estimateNet не пересчитываются? =0)
__________________
С уважением,
Dirigente
Старый 12.10.2004, 09:43   #2  
Shirmin Oleg is offline
Shirmin Oleg
Участник
 
89 / 35 (2) +++
Регистрация: 26.03.2004
Не пересчитываются потому, что в классе SalesTableType в методе update нет вызова соответсвующей функции. Там еще один момент есть - независимо от состояния галочки "Цена включает налог" при создании строки заказа значения этих полей равны.
Старый 12.10.2004, 11:08   #3  
dirigente is offline
dirigente
Участник
 
50 / 10 (1) +
Регистрация: 19.11.2003
Адрес: Москва
Поправка
Если делать как в топике, то ошибка исчезает, но расчет estimateGross и estimateNet - неправильный. Выход - оставляем как было (не меняем местами doInsert и calcCreditEstimate), но после calcCreditEstimate делаем doUpdate:
PHP код:
public void  insert(boolean     dropInvent      false,
                    
boolean     findMarkup      true,
                    
Common      childBuffer     NULL )
{
    
InventUpd_Estimated     estimated;
    
NumberSeq               numberSeq;
    
SalesTable              salesTable;
    
container               salesEstimated;
    
AmountCur               estimate;
    ;

    if (
salesLine.inventTable().interCompanyBlockedSales() &&  salesLine.salesTable().isInterCompanyOrder())
        throw 
checkFailed(strFmt("@SYS74812"salesLine.itemId));

    
ttsbegin;

    if (
salesLine.creditNoteLine())
        
salesLine.transactionCode IntraStatParameters::find().defaultCreditNote;

    
numberSeq NumberSeq::newGetNum(InventParameters::numRefInventTransId());
    
salesLine.inventTransId numberSeq.num();

    if (!
salesLine.custAccount || !salesLine.custGroup)
    {
        
salesLine.custAccount  salesLine.salesTable().custAccount;
        
salesLine.custGroup    salesLine.salesTable().custGroup;
    }

    
salesLine.taxAutogenerated NoYes::Yes;

    
salesLine.setSalesStatus();

    if (!
salesLine.interCompanySkipUpdate  &&  salesLine.salesTable().isInterCompanyOrder())
        
this.interCompanyMirror(salesLine.salesTable());

    
this.updateSalesTable();

    if (
salesLine.salesStatus != salesLine.salesTable().salesStatus)
    {
        
salesTable salesLine.salesTable(true);
        
salesTable.salesStatus salesLine.salesStatus;
        
salesTable.update();
    }

    if (!
dropInvent)
    {
        
estimated = new InventUpd_Estimated(InventMovement::construct(salesLinefalsechildBuffer));
        
estimated.updateNow();
    }

   
salesLine.doInsert();

   
salesLine.calcCreditEstimate();
//-> Теперь зафиксируем измененные значения
   
salesLine.doUpdate();
//<-
    
if (estimated)
        
estimated.updateReservation();

    if (
findMarkup)
        
salesLine.createMarkupTrans(salesLine.salesTable());

    
ttscommit;

Вроде теперь все правильно считает и ошибки нет.
__________________
С уважением,
Dirigente
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Критическая ошибка Axapta 3.0 SP3 CIS andy.l DAX: Администрирование 8 22.10.2008 13:58
Ошибка при компиляции в sp3 CU1 Swetik DAX: Функционал 2 31.03.2005 06:27
Ax3.0 SP3 CIS: Журнал накладных и российские договора (ошибка) mpa DAX: Функционал 2 11.10.2004 15:14
Ошибка при установке SP3 Tony Green DAX: Администрирование 2 27.05.2004 09:07
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 22:59.