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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 11.11.2008, 09:47   #1  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Поле CostAmountAdjustment в InventTrans
Как можно проверить в InventTrans поле CostAmountAdjustment для ValueOpen = да?
Проверить на предмет, что оно посчитано правильно.
Сравнить с аналогичным полем в InventSettlement не предлагать (Не в этом вопрос).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 10:01   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
если не в этом, то в чем?

посмотреть с кем сопоставлена проводка и сравнить их costValue по сопоставленному кол-ву... опять же возвращаемся к InventSettlement
Старый 11.11.2008, 10:28   #3  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Wamr Посмотреть сообщение
если не в этом, то в чем?
посмотреть с кем сопоставлена проводка и сравнить их costValue по сопоставленному кол-ву... опять же возвращаемся к InventSettlement
Привет Вась.
Есть такая проблема.
Есть приложение сильное изменённое.
В нём хватает чужого кода в классах закрытия, пересчёта и корректирки.
По одной номенклатуре (возможно их больше) не получается скорректировать себестоимость через корректировку наличия.
Выкидывает сообщение
Отрицательная себестоимость не возможна.
(S) \Classes\InventTransAdjust\updateNow - line 72
Не могу понять в чём дело. Считается вроде всё правильно и интуиция подсказывает возможно входные данные не правильны. А именно поле корректировки.
Предположил что это поле на InventTrans проверяется таким образом.
Для ValueOpen = да
X++:
display Amount MRD_calcCostAmountAdjustment()
{
    Amount costAmountAdjustment;
;
    if(this.QtySettled)
        costAmountAdjustment = this.Qty * this.CostAmountSettled / this.QtySettled - this.CostAmountPosted;
    else
        costAmountAdjustment = this.CostAmountSettled;
    return costAmountAdjustment;
}
Сделал форму и вывожу эти поля.
1) Цифры в основном различаются на втором знаке после запятой.
На той проводке которая меня интересует на первой после запятой.
Как раз мне мальца и нехватает чтоб ошибку убрать.
2) Что меня ещё смущает?
Что есть прводки без сопоставления, но с корректировкой.
Не понятно тогда откуда эти суммы беруться, если нет сопоставления.
Визуально вижу что эти цифры иногда совпадают с проводками по той же номенклатуре но по которой были сопоставления. Связано это или нет не знаю точно.
Первый вопрос более интересен. Но если кто сможет объяснить второй (Почему так) тоже будет хорошо.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.

Последний раз редактировалось miklenew; 11.11.2008 в 10:47. Причина: описался место номенклатуры написал накладной
Старый 11.11.2008, 11:33   #4  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Проверка целостности данных компании пересчитывает это поле по InventSettlement. Попробуйте запустить на тестовой базе, посмотрите что получится.

Проверку целостности лучше выдрать из стандартного кода и пустить джобом. А то стандартная там много чего проверяет, и может затянуться надолго.
__________________
С уважением,
glibs®
За это сообщение автора поблагодарили: miklenew (5).
Старый 11.11.2008, 11:44   #5  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Спасибо нашёл.
InventTrans\checkFixSettlement()
Щас посмотрю.
Чёто сначало по галочкам прошёл, с сопоставлением не нашёл.
Но не подумал, что оно может в проверке Проводки.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 11:51   #6  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Рано обрадовался. Там простенькие проверки на соответствие inventTrans и inventSettlement.
Может кто в Ax 2009 или в Ax 4.0 посмотрит написано ли ещё что в InventTrans\checkFixSettlement().
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 12:04   #7  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
AX 4
X++:
void checkFixSettlement(InventConsistencyCheck_Trans inventConsistencyCheck_Trans)
{
    InventSettlement    inventSettlement;

    setprefix("@SYS55578");

    while select forupdate inventSettlement
        where inventSettlement.TransRecId == this.RecId &&
              inventSettlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur
    {
        setprefix(#prefixField(inventSettlement,RecId));

        if (inventSettlement.ItemId         != this.ItemId                  ||
            inventSettlement.InventTransId  != this.InventTransId)
        {
            checkFailed("@SYS67934",'', SysInfoAction_TableField::newBufferField(inventSettlement, fieldnum(InventSettlement, RecId)));
            if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
            {
                inventSettlement.doDelete();
                inventConsistencyCheck_Trans.updateCorrected();
            }
            else
                inventConsistencyCheck_Trans.updateNotCorrected();
        }
    }

    select sum(QtySettled),sum(CostAmountSettled),sum(CostAmountAdjustment) from inventSettlement
        where inventSettlement.TransRecId             == this.RecId                       &&
              inventSettlement.Cancelled              == NoYes::No                        &&
              inventSettlement.SettleModel            != InventSettleModel::PhysicalValue &&
              inventSettlement.InventTransCurrency_RU == InventTransCurrency_RU::PrimaryCur;

    if (inventSettlement.QtySettled != this.QtySettled)
    {
        checkFailed("@SYS67938",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, QtySettled)));
        if(inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
        {
            this.QtySettled = inventSettlement.QtySettled;
            this.doUpdate();

            inventConsistencyCheck_Trans.updateCorrected();
        }
        else
            inventConsistencyCheck_Trans.updateNotCorrected();
    }

    if (inventSettlement.CostAmountSettled != this.CostAmountSettled)
    {
        checkFailed("@SYS67939",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountSettled)));
        if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
        {
            this.CostAmountSettled = inventSettlement.CostAmountSettled;
            this.doUpdate();

            inventConsistencyCheck_Trans.updateCorrected();
        }
        else
            inventConsistencyCheck_Trans.updateNotCorrected();
    }


    if (inventSettlement.CostAmountAdjustment != this.CostAmountAdjustment)
    {
        checkFailed("@SYS67940",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountAdjustment)));
        if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
        {
            this.CostAmountAdjustment = inventSettlement.CostAmountAdjustment;
            this.doUpdate();

            inventConsistencyCheck_Trans.updateCorrected();
        }
        else
            inventConsistencyCheck_Trans.updateNotCorrected();
    }
}
За это сообщение автора поблагодарили: miklenew (2).
Старый 11.11.2008, 12:19   #8  
player is offline
player
Участник
 
107 / 69 (3) ++++
Регистрация: 25.08.2007
В 2009 почти то же самое (без российского функционала)
X++:
public void checkFixSettlement(InventConsistencyCheck_Trans inventConsistencyCheck_Trans)
{
    InventSettlement    inventSettlement;

    setprefix("@SYS55578");

    while select forupdate inventSettlement
        where inventSettlement.TransRecId == this.RecId
    {
        setprefix(#prefixField(inventSettlement,RecId));

        if (inventSettlement.ItemId         != this.ItemId                  ||
            inventSettlement.InventTransId  != this.InventTransId)
        {
            checkFailed("@SYS67934",'', SysInfoAction_TableField::newBufferField(inventSettlement, fieldnum(InventSettlement, RecId)));
            if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
            {
                inventSettlement.doDelete();
                inventConsistencyCheck_Trans.updateCorrected();
            }
            else
                inventConsistencyCheck_Trans.updateNotCorrected();
        }
    }

    select sum(QtySettled),sum(CostAmountSettled),sum(CostAmountAdjustment) from inventSettlement
        where inventSettlement.TransRecId   == this.RecId   &&
              inventSettlement.Cancelled    == NoYes::No    &&
              inventSettlement.SettleModel  != InventSettleModel::PhysicalValue;

    if (inventSettlement.QtySettled != this.QtySettled)
    {
        checkFailed("@SYS67938",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, QtySettled)));
        if(inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
        {
            this.QtySettled = inventSettlement.QtySettled;
            this.doUpdate();

            inventConsistencyCheck_Trans.updateCorrected();
        }
        else
            inventConsistencyCheck_Trans.updateNotCorrected();
    }

    if (inventSettlement.CostAmountSettled != this.CostAmountSettled)
    {
        checkFailed("@SYS67939",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountSettled)));
        if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
        {
            this.CostAmountSettled = inventSettlement.CostAmountSettled;
            this.doUpdate();

            inventConsistencyCheck_Trans.updateCorrected();
        }
        else
            inventConsistencyCheck_Trans.updateNotCorrected();
    }


    if (inventSettlement.CostAmountAdjustment != this.CostAmountAdjustment)
    {
        checkFailed("@SYS67940",'', SysInfoAction_TableField::newBufferField(this, fieldnum(InventTrans, CostAmountAdjustment)));
        if (inventConsistencyCheck_Trans.checkFix() == CheckFix::Fix)
        {
            this.CostAmountAdjustment = inventSettlement.CostAmountAdjustment;
            this.doUpdate();

            inventConsistencyCheck_Trans.updateCorrected();
        }
        else
            inventConsistencyCheck_Trans.updateNotCorrected();
    }
}
За это сообщение автора поблагодарили: miklenew (2).
Старый 11.11.2008, 13:14   #9  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Wamr Посмотреть сообщение
посмотреть с кем сопоставлена проводка и сравнить их costValue по сопоставленному кол-ву... опять же возвращаемся к InventSettlement
Не понял про CostValue. Как именно?
Проверить CostAmountSettled сравнивая проводки по которым было сопоставление можно.
А вот как проверить CostAmountAdjustment?
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 13:37   #10  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Цитата:
Сообщение от miklenew
...
А вот как проверить CostAmountAdjustment?
...
Проверкой целостности данных компании .

Вам даже метод таблицы InventTrans показали, который это делает.
__________________
С уважением,
glibs®
Старый 11.11.2008, 13:49   #11  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от glibs Посмотреть сообщение
Проверкой целостности данных компании
Вам даже метод таблицы InventTrans показали, который это делает.
Те проверки которые там есть мне даром не нужны.
Я их проверил и до того как нашёл этот метод.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 14:16   #12  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
И ещё такой вопрос: Можно ли удалять сопоставление по закрытым проводкам (ValueOpen = нет)?
А то у нас себестоимость считается по средней стоимости.
Таблица InventSettlement пухнет как на дрожях.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 14:18   #13  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,160 / 1289 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Удалять, наверное не стоит. А вот сворачивать проверенные месяцы вполне нормально.
За это сообщение автора поблагодарили: miklenew (2).
Старый 11.11.2008, 14:25   #14  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от miklenew Посмотреть сообщение
И ещё такой вопрос: Можно ли удалять сопоставление по закрытым проводкам (ValueOpen = нет)?
Ни в коем случае. При следующей проверке целостности с исправлением ошибок, Аксапта пересчитает CostAmountAdjustment на основании оставшихся InventSettlement.

Цитата:
Сообщение от miklenew Посмотреть сообщение
Таблица InventSettlement пухнет как на дрожях.
Безболезненно можно удалять InventSettlement.cancelled = Yes.

Однако помните, что нельзя ничего удалять пока идет закрытие/пересчет склада или отмена закрытия/пересчета. Будут страшенные глюки. Если закрытие не делается, то запускать удаление отмененных можно.
__________________
полезное на axForum, github, vk, coub.
Старый 11.11.2008, 14:27   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
А вот сворачивать проверенные месяцы вполне нормально.
Сворачивать стандартным алгоритмом можно только в том случае, если на InventSettlement не навешаны дополнительные признаки.

Зачастую для того, чтобы получить отчет "Структура стоимости", в InventSettlement добавляют MarkupCode. В этом случае стандартный алгоритм свертки надо научить распознавать такой код и учитывать его в свертке.
__________________
полезное на axForum, github, vk, coub.
Старый 11.11.2008, 14:33   #16  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Удалять, наверное не стоит. А вот сворачивать проверенные месяцы вполне нормально.
Сворачивать по каким полям? Если суммировать коррекцию, сопоставление, тогда вся остальная инфа потеряется лот, ссылка на RecId. А толку тогда от этой информации если нет лота и ссылки на RecId.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 14:38   #17  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от miklenew Посмотреть сообщение
Сворачивать по каким полям?
Скорее всего, имелась в виду стандартная свертка
Управление запасами \ Периодические операции \ Очистка \ Очистка сопоставлений запасов

см. также http://axapta.mazzy.ru/lib/dbgrowthsolution/
__________________
полезное на axForum, github, vk, coub.
За это сообщение автора поблагодарили: miklenew (2).
Старый 11.11.2008, 14:44   #18  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от mazzy Посмотреть сообщение
Ни в коем случае. При следующей проверке целостности с исправлением ошибок, Аксапта пересчитает CostAmountAdjustment на основании оставшихся InventSettlement.
Проверка целостности полезна когда она что-то полезное проверяет.
А по сопоставлению она полезного практически ничего не проверяет.
Покрайней мере можно докрутить класс InventConsistencyCheck_Trans, чтоб на сопоставление проверялись только открытые проводки.
В расчёте сопоставления по закрытым проводкам они уже не учавствуют.
Так смысл тогда в них, если закрытия склада прошло, по лоту количество всё сопоставили, проводка закрылась. Это информация уже больше никогда не используется(поправьте если ошибаюсь).
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Старый 11.11.2008, 15:06   #19  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,160 / 1289 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Цитата:
Сообщение от miklenew Посмотреть сообщение
Сворачивать по каким полям? Если ... тогда вся остальная инфа потеряется лот, ссылка на RecId.
Нет, стандартная процедура оставляет лот (но RecId убивает, но это не страшно. так как проводка по лоту закрыта). Убирается информация о том, с чем сопоставлена проводка. У нас тоже средняя себестоимость, сворачивание сокращает информацию за месяц примерно до 15% от исходного объема (имею ввиду оставляет 15%). Выполняем сверку после проверки результатов закрытия и в том случае ,если уверены, что отменять закрытие не придётся.
А совсем удалять записи потому, что у нас ещё и бухгалтерия получает отчетность и, например, ОСВ по складу без записей в InventSettlement не построить (нет дат коррекций, а только общая сумма)
За это сообщение автора поблагодарили: miklenew (5).
Старый 11.11.2008, 15:12   #20  
miklenew is offline
miklenew
Участник
Аватар для miklenew
MCBMSS
1C
Лучший по профессии 2009
 
1,688 / 433 (18) +++++++
Регистрация: 10.07.2006
Адрес: г. Ликино-Дулёво
Цитата:
Сообщение от Raven Melancholic Посмотреть сообщение
Нет, стандартная процедура оставляет лот (но RecId убивает, но это не страшно. так как проводка по лоту закрыта). Убирается информация о том, с чем сопоставлена проводка. У нас тоже средняя себестоимость, сворачивание сокращает информацию за месяц примерно до 15% от исходного объема (имею ввиду оставляет 15%). Выполняем сверку после проверки результатов закрытия и в том случае ,если уверены, что отменять закрытие не придётся.
А совсем удалять записи потому, что у нас ещё и бухгалтерия получает отчетность и, например, ОСВ по складу без записей в InventSettlement не построить (нет дат коррекций, а только общая сумма)
Спасибо. Очень нужная информация.
Надо будет с консультантами поговорить по этому поводу.
__________________
Энергия молодых и неравнодушных способна изменить мир к лучшему.
Теги
логистика, переоценка

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
сопоставление оплат клиента, переносов сальдо-поле накладная в общем журнале? Aquarius DAX: Функционал 3 28.01.2009 12:51
InventTransIdReturn и Закрытие склада DenisS DAX: Программирование 15 03.12.2008 09:02
Denis Fedotenko: Новые поля в складских проводках Blog bot DAX: База знаний и проекты 10 24.05.2007 11:57
Как правильно достучаться из InventTrans до даты накладыной NJD DAX: Программирование 6 22.07.2005 20:52
Связь таблиц InventTrans и PurchLine Pustik DAX: Программирование 2 25.11.2004 12:23

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:44.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.