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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 23.12.2004, 15:09   #1  
IvanHARD is offline
IvanHARD
Участник
Сотрудники компании GMCS
 
288 / 16 (1) ++
Регистрация: 23.12.2003
Адрес: Москва
Пересчет себестоимости отгрузок
Подскажите, пожалуйста, какие проводки создаются при пересчете себестоимости продаж через "Закрытие и коррекция"?
При уменьшении себестоимости отгрузки я ожидал увидеть сторно , но, похоже, аксапта делает реверс. Так ли это? Можно ли изменить поведение системы?
Старый 16.04.2008, 10:32   #2  
konopello is offline
konopello
SAP
SAP
 
628 / 76 (4) ++++
Регистрация: 08.11.2005
Адрес: Минск
Цитата:
За создание проводок отвечают классы LedgerVoucher и LedgerVoucherObject. Последний при создание объекта прнимает параметр Correction, который и отвечает за то, будет ли проводка сторнирущей или реверсированной. Важное замечание: документ ГК может быть либо целиком сторно, либо целиком реверс. То есть ситуация, когда часть провдок в рамках одного документа ГК являются сторнирующими, а часть реверсированными, невозможна (в рамках стандартного функционала, естественно ). Чтобы убедится в этом, достаточно взглянуть на конструктор класса LedgerVoucherObject newVoucher, который принимает в качестве параметра помимо прочего документ ГК для проводки (_voucher) и признак сторно (_correction).

Общий вывод. В рамках стандартного функционала добиться возникновения правильных сторнирующих проводок при закрытии склада невозможно. Более того, решить эту проблему небольшими модификациями невозможно. А писать большую и сложную модификацию (например, можно было бы создавать два ваучера по одному закрытию, один сторно, второй реверс) слишком опасно с точки зрения целостности данных и логики системы.
Выполнял недавно модификацию, которая изменяет данную логику, и она мне далась довольно малой кровью. Была выполнена следующая модификация:
X++:
ledgerVoucherTransObject = LedgerVoucherTransObject::newCreateTrans(
                                                                    _ledgerVoucher.findLedgerVoucherObject(),
                                                                    this.postingBalanceSheet(),
                                                                    this.accountBalanceSheet(),
                                                                    this.dimension(),
                                                                    Companyinfo::standardCurrency(),
                                                                    costAmount,
                                                                    0);

                ledgerVoucherTransObject.parmCorrect(this.correctLedgerTransObject() ? this.correctLedgerTransObject() : ledgerVoucherTransObject.parmCorrect());

                _ledgerVoucher.addTrans(ledgerVoucherTransObject);
Старый 16.04.2008, 13:40   #3  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,895 / 5650 (194) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
мои пять копеек: Привязка признака сторнирования к всему ваучеру исчезла еще во времена версии 3.0. Теперь признак сторнирования можно привязывать к постингу (LedgerVoucherTransObject). Механизм корреспонденции не позволяет корреспондировать сторнирующую и обычную проводки (что логично). Теперь по смыслу задачи. Кусочек кода по понятным причинам тоже не могу привести Задача решается следующими шагами:
1. Добавляется признак сторнирования в шапку журналов
2. Добавляется признак сторнирования в строки журналов (инициализируется из шапки)
3. Метод inventJournalCheckPost.postLedgerTransправится таким образом, чтобы parmCorrect() у ledgerObjectVoucher инициализировался из признака сторнирования в строке журнала.
4. В inventTrans добавляется поле с признаком сторнирования. (Correct). Метод inventMovement.initInventTransFinancial() правится так, чтобы копировать в складскую проводку признак сторнирования из ledgerVoucherObject
5. В классе inventCostItemDim (или в таблице inventTrans) создается статический метод SetSettlementCorrect. Он заполняет в inventSettlement признак коррекции в том случае, если знак суммы положительный, а корректируемая складская проводка – списание или если знак суммы отрицательный, а корректируемая складская проводка – приход. При наличии в складской проводке признака сторнирования (из пункта 4) – логика инвертируется. При любых созданиях/обновлениях inventSettlement из кода закрытия/пересчета склада (класс inventCostItemDim) перед вызовом update/insert вызывался бы метод setSettlementCorrect.
6. Класс inventAdjustPost и его наследники правится так, чтобы группировать проводки еще и по признаку сторнирования (correct) из inventSettlement. При создании объекта ledgerVoucherTransObject - parmCorrect инициализируется из ключа mapSettlement.
7. После того как я все это сделал – выяснилось что у меня случилась засада входящими накладными расходами. Они тоже создаются как записи в inventSettlement и разносятся классом inventAdjustPost. Учитывая что в тех классах, которые создают inventSettlement по накладным расходам признак коррекции не заполняется, то при некоторых операциях (кажется при возврате накладной с накладными расходами или при вводе отрицательных накладных расходов) все разваливалось. Изначально - я глупо заткнул эту дырку, просто передавая в inventAdjustPost какой-то параметр, который приводил к тому что признак коррекции не подставлялся из inventSettlement, а брался из исходного ledgerVoucher. Несколько позже я эту дырку починил более правильным способом. Я нашел все классы в которых создается inventSettlement (InventTransAdjust и еще парочка кажется) и вставил туда код, который правильно выставляет поле сторнирования в inventSettlement.


Последний раз редактировалось fed; 16.04.2008 в 13:44.
За это сообщение автора поблагодарили: konfet (1), gl00mie (4), Atar (1).
Старый 16.04.2008, 15:44   #4  
konfet is offline
konfet
Снова балуюсь косаптой :)
 
143 / 50 (2) ++++
Регистрация: 23.04.2003
Адрес: Moscow
Всем ответившим спасибо. Будем рыть.
То, что эта очевидная недоработка в локализации не была устранена российским Microsoft-ом в течении 4 лет - говорит о многом
__________________
Бесты и регарды!
Теги
ax3.0, ax4.0, faq, себестоимость, сторно

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пересчет себестоимости по модели "Средняя" vey DAX: Функционал 21 28.05.2010 10:54
Denis Fedotenko: Себестоимость и закрытие склада Blog bot DAX: База знаний и проекты 44 29.03.2010 14:54
Закрытие склада. Пересчет себестоимости в журналах переноса. PavelM DAX: Функционал 4 31.07.2008 12:37
Пересчет себестоимости корректирует закрытые периоды Morpheus DAX: Функционал 6 12.09.2007 06:45
[AXAPTA] Пересчет себестоимости. - Неужели это и должно быть так долго?? andrue DAX: Функционал 4 14.08.2002 19:49

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

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

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