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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.08.2013, 06:40   #1  
vazerdim is offline
vazerdim
Участник
 
77 / 40 (2) +++
Регистрация: 06.09.2008
Сторно заказа на продажу по ОС
Добрый день!

Столкнулся с проблемой, есть заказ на продажу, по которому продали ОС, статус у ОС установился на Списано (продажа). В следующем месяце, бухгалтерия захотела от сторнировать заказ, но по умолчанию в поле ОС, не возможно указать его номер, выходит ошибка:
"Продать данное ОС нельзя"

если посмотреть код, то можно увидеть, не совсем корректный поиск по таблице ОС:
X++:
if (ok && fieldId == fieldnum(SalesLine, AssetId_RU) && this.AssetId_RU
        && InventTable::find(this.ItemId).ItemType != ItemType::Service) //EB, SCR0010627
    {
        ok = RAssetTable::find(this.ItemId).isOkToSell(this.creditNoteLine());
        if (ok)
        {
            salesLineTmp = SalesLine::findAsset_RU(this.AssetId_RU, this.creditNoteLine());
            if (salesLineTmp && salesLineTmp.RecId != this.RecId)
            {
                ok = checkFailed(strfmt("@FAV1297", salesLineTmp.SalesId));
            }
        }
    }
Метод в таблице SalesLine validateField_Server

Исправил код:
RAssetTable::find(this.ItemId)

ошибка ушла, но теперь вышла, следующая, что нет на складе количества. Хотя у меня уже идет приход на склад.

Хотел бы узнать, как должна работать система со сторно?

Система DAX2009 RU5
Старый 09.08.2013, 14:44   #2  
ansoft is offline
ansoft
Участник
Аватар для ansoft
 
123 / 37 (2) +++
Регистрация: 20.10.2005
Указанная проверка должна отработать нормально только один раз
X++:
ok = RAssetTable::find(this.ItemId).isOkToSell(this.creditNoteLine());
Выше вполне нормальная проверка... проверяет от статуса ОС можно ли его продать или вернуть, а вот:
X++:
 salesLineTmp = SalesLine::findAsset_RU(this.AssetId_RU, this.creditNoteLine());
 if (salesLineTmp && salesLineTmp.RecId != this.RecId)
   ok = checkFailed(strfmt("@FAV1297", salesLineTmp.SalesId));
Бредовая проверка... так как findAsset_RU ищет SalesLine с таким же ОС и если раз хотя бы продали, то второй продать нельзя, даже если отсторнировали и если хоть раз сторнировали, то второй раз никак. Кроме того ни проверки статусов, ни мысли об удалении строк SalesLine разработчикам в голову не пришли...

Потому вопрос... сколько раз сторнировали? Или в строках несколько номенклатур привязанных к одному ОС?

Обойдя эту "умную" проверку идем далее...
Попадаем в SalesFormLetter_Invoice метод updateNow и видим следующее...
X++:
            // <GEEU>
            if (salesLine.AssetId_RU)
            {
                assetInvent =  new InventMov_AssetSale_ru(salesLine);
                if (assetInvent.canDisposal())
                {
                    estimated = InventUpd_Estimated::newInventMovement(assetInvent);
                    estimated.updateNow();

                    inventUpd_Financial = InventUpd_Financial::newPostAsset_RU(assetInvent, ledgerVoucher);
                    inventUpd_Financial.parmCurrencyCode(CompanyInfo::standardCurrency());
                    inventUpd_Financial.updateNow();
                }
            }

            // </GEEU>
            inventMovement = InventMovement::construct(salesLine);
Цитата:
но теперь вышла, следующая, что нет на складе количества. Хотя у меня уже идет приход на склад
Ошибку получаем в inventUpd_Financial.updateNow();
Класс движения: InventMov_AssetSale_ru, который должен выполнить какие-то действия помимо inventMovement = InventMovement::construct(salesLine); что мне непонятно...

Заглянув в new InventMov_AssetSale_ru видим:
X++:
    if (_salesLine.creditNoteLine())
    {
        select firstonly inventTransOrig
            where inventTransOrig.InventTransId == _salesLine.InventTransId &&
                  inventTransOrig.StatusReceipt == StatusReceipt::Ordered   &&
                  inventTransOrig.StatusIssue   == StatusIssue::None;
        transQty = -1;
    }
    else
    {
        select firstonly inventTransOrig
            where inventTransOrig.InventTransId == _salesLine.InventTransId &&
                  inventTransOrig.StatusIssue   == StatusIssue::OnOrder     &&
                  inventTransOrig.StatusReceipt == StatusReceipt::None;
        transQty = 1;
    }
Я почему-то думал что для сторно transQty должно быть 1, для продажи -1, а тут наоборот...
Поменял... сторно разнеслось... но теперь не разноситья продажа...
Понимаю, что ничего не понимаю... поставил transQty = 1 и для сторно и для не сторно...
Все разноситься... и сторно и не сторно, но проверял только для номенклатур с типом ОС (ItemType::Asset_RU) с одной строкой, при этом есть один нюанс... сторно в ГК ложится с разными ваучерами... по счетам ОС (01, 02) со старым ваучером продажи... сторно продаж с новым... В ОС вроде тоже все нормально...

Получилось лечение последствия методом ненаучного тыка... без понимания сути происходящего, если кто может объяснить буду благодарен...
За это сообщение автора поблагодарили: vazerdim (1), mnt_dx (3).
Старый 09.08.2013, 18:41   #3  
vazerdim is offline
vazerdim
Участник
 
77 / 40 (2) +++
Регистрация: 06.09.2008
ansoft, спасибо за ответ, если ещё глянуть руководство пользователя, то там предлагают сделать сторно выбытия через модуль ОС, в проводках там есть такая кнопка, сегодня попробовал с помощью неё сделать сторно, но получилось, что если в ГК и модуле ОС все отсторнировалось, то в модуле Клиенты нет. Не понимаю, как должно быть на самом деле.

Ответы на вопросы:
Сторнируем мы первый раз. Одна номенклатура, один ОС в заказе.
Старый 11.08.2013, 10:52   #4  
ppson is offline
ppson
Участник
Аватар для ppson
Ex AND Project
1C
 
2,102 / 114 (8) +++++
Регистрация: 25.06.2002
Адрес: SPb, Msk
1) в форме проводок по моделям ОС жмете сторно на проводке по продаже ОС.
2) Выручку и налог сторнируете отдельно через текстовую накладную или через заказ на покупку с строкой-услугой.
__________________
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Обновление шапки заказа на продажу после перехода из пустого заказа pedrozzz DAX: Программирование 0 20.04.2011 14:48
"Откат" разноски заказа на продажу Buratino DAX: Функционал 3 07.04.2010 12:03
Ax 3.0 Сторно заказа ОС Rivez DAX: Функционал 3 21.12.2009 14:56
Сторно ввода в эксплуатацию ОС Rivez DAX: Функционал 16 25.08.2009 10:46
Производственный заказ из заказа на продажу (не создается) Sadj DAX: Функционал 3 23.01.2009 09:39
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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