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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 04.08.2010, 12:02   #1  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
? про ОС...
Вопрос по ОС(модуль основные средства).
Создаём журнал на Приём. формируются 4 строки по ОС. Одна бухгалтерская другая налоговая и их амортизации. После разноски эти же строки формируются в RAssetTrans. По идее они должны подхватывать аналитику из строк журнала LedgerJournalTrans, но нет, они берутся из RassetStandarts. и соответственно аналитика амортизации такая же как и аналитика у Балансовой стоимости бухгалтерской и налоговой строчки(аналитика ложиться не так как в строках журнала). Это можно увидеть в методе createTrans таблицы RAssetJournal. Зачем так сделано? И вообще как после связать таблицу RAssetTranc c LedgerJournalTrans чтоб выдрать правильную аналитику?
Или я малость не понимаю идеологию модуля?
Старый 04.08.2010, 12:41   #2  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Таблицы RAssetJournal нет. Ни в 3-ке, ни в 4-ке, ни в 2009 - это класс, вообще-то.

Аналитика строк журнала ОС берется не напрямую с таблицы моделей учета, а с вызова метода этого класса, который ее делает наслоением аналитик :
1) Общих для модуля
2) Общих для настройки модели учета
3) Самой модели конкретного ОС
4) Аналитики сдачи в аренду

Если потом в строках журнала ОС измените аналитику , сформированную таким образом, то и в проводки ОС и проводки ГК пойдет именно измененная из строк журнала.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: raniel (1).
Старый 04.08.2010, 13:06   #3  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Да-да согласен это класс.... торопился, ошибся.
Цитата:
Если потом в строках журнала ОС измените аналитику , сформированную таким образом, то и в проводки ОС и проводки ГК пойдет именно измененная из строк журнала.
Вот в том то и дело что не так. так как по методу формирования строк в таблице RAssetTrans аналитику подхватывает из RassetStandarts. Сейчас делаю доработку чтоб аналитику брало из строк журнала. Но мне интересно как у других это реализовано. Да и связь между RAssetTrans c LedgerJournalTrans както сложно сделать.
Старый 04.08.2010, 13:30   #4  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от raniel Посмотреть сообщение
Да и связь между RAssetTrans c LedgerJournalTrans както сложно сделать.
Дык по полю Voucher (Документ ГК)
Старый 04.08.2010, 13:39   #5  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от Gustav Посмотреть сообщение
Дык по полю Voucher (Документ ГК)
Согласен но там по 2 записи с одним номером Балансовая стоимость и её Амортизация. как их различать.... я различаю по суммам, но это тоже как-то некрасиво...
Старый 04.08.2010, 14:38   #6  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от raniel Посмотреть сообщение
Согласен но там по 2 записи с одним номером Балансовая стоимость и её Амортизация. как их различать.... я различаю по суммам, но это тоже как-то некрасиво...
Различать по полю AssetTransType таблицы RAssetTrans. Поле содержит значения enum'а RAssetTransType: RAssetTransType::Acquisition = 3 - стоимость, RAssetTransType:: Depreciation = 0 - амортизация.
За это сообщение автора поблагодарили: raniel (1).
Старый 04.08.2010, 14:57   #7  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от raniel Посмотреть сообщение
по методу формирования строк в таблице RAssetTrans аналитику подхватывает из RassetStandarts.
Нет, нет и еще раз нет ...
Trans'ы ОС'овские создаются наследниками класса RAssetPost, в данном случае - RAssetPost_CompanyReceipt. Вызывается метод этого класса createTrans, в котором дважды создается запись в RAssetTrans. В одном случае для инициализации RAssetTrans вызывается метод этого же класса initAcquisitionTrans() (для суммы стоимости) и initDepreciationTrans() (для износа). Что мы в них видим ? А в них обоих есть вызов родительского метода initFromLedgerJournalTrans(), в котором аналитика RAssetTrans инициализируется методом dimension() на этой же таблице (в качестве параметра передается туда аналитика строки журнала).
вот этот метод
X++:
public Dimension dimension(Dimension _dimension)
{
    Dimension assetDimension;
    int       x;
    ;

    assetDimension = this.assetStandards().Dimension;
    for (x = 1; x <= dimof(assetDimension); x++)
    {
        assetDimension[x] = _dimension[x] ? _dimension[x] : assetDimension[x];
    }

    return assetDimension;
}
Что мы здесь видим ?
Мы здесь видим соединение двух аналитик (переданной как параметр из строки журнала и текущей из модели учета) по принципу "Если журнальная аналитика на уровне X пуста - в проводку пойдет аналитика уровня X из модели ОС". О полной замене аналитики из журнала речи нет - есть речь о дополнении. Эта штука работает, если между моментом формирования строк журнала ОС и разноской журнала некий подлый юзер дополнил некую аналитику в модели учета, которой нет в журнале. Если на этом уровне в журнале есть аналитика - хоть заменяйся ее в модели, но в проводку ос пойдет из журнала.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 04.08.2010, 18:41   #8  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
X++:
public Dimension dimension(Dimension _dimension)
{
    Dimension assetDimension;
    int       x;
    ;

    assetDimension = this.assetStandards().Dimension;
    for (x = 1; x <= dimof(assetDimension); x++)
    {
        assetDimension[x] = _dimension[x] ? _dimension[x] : assetDimension[x];
    }

    return assetDimension;
}
Что мы здесь видим ?
Мы здесь видим соединение двух аналитик (переданной как параметр из строки журнала и текущей из модели учета) по принципу "Если журнальная аналитика на уровне X пуста - в проводку пойдет аналитика уровня X из модели ОС". О полной замене аналитики из журнала речи нет - есть речь о дополнении. Эта штука работает, если между моментом формирования строк журнала ОС и разноской журнала некий подлый юзер дополнил некую аналитику в модели учета, которой нет в журнале. Если на этом уровне в журнале есть аналитика - хоть заменяйся ее в модели, но в проводку ос пойдет из журнала.
Вот код мз класса LedgerJournalTransUpdateAsset_ru. тут происходит заполнение данными таблицы RAssetTrans:
Цитата:
public void updateNow(LedgerVoucher _ledgerVoucher,
LedgerPostingType _posting,
LedgerJournalTrans _ledgerJournalTrans)
{
LedgerPostingType ledgerPostingType = LedgerPostingType::None;
RAssetStandards assetStandards = this.assetStandards(_ledgerJournalTrans);
LedgerVoucherTransObject ledgerVoucherTransObject;
RAssetPost assetPost;
;

if (this.check(_ledgerJournalTrans))
{
_ledgerJournalTrans.RAssetStandardId = assetStandards.AssetStandardId;

if (_ledgerJournalTrans.AssetCanDisposal_RU || ! _ledgerJournalTrans.AssetToFromRecId_RU)
{
assetPost = RAssetPost::construct(_ledgerJournalTrans,
_ledgerVoucher,
assetStandards.AssetStandardId);
assetPost.run();
}
а именно на строчку:
Цитата:
if (_ledgerJournalTrans.AssetCanDisposal_RU || ! _ledgerJournalTrans.AssetToFromRecId_RU)
Так вот у амортизации _ledgerJournalTrans.AssetToFromRecId_RU равно 0 и _ledgerJournalTrans.AssetCanDisposal_RU = True в отличии от объекта.
И соответственно внутрь никогда не попадёт, а именно там вычисляется и прописывается Dimensions. И Это стандартный функционал.
Ну повторите ради интереса пример. Создайте ОС , сделайте приём укажите амортизацию. Создайте Журнал ОС, пропишите разную аналитику у ОС и его амортизации, разнесите и гляньте в RAssetTrans аналитика будет одинаковой что у амортизации что у ОС.
Старый 04.08.2010, 22:47   #9  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Цитата:
Сообщение от raniel Посмотреть сообщение
внутрь никогда не попадёт
Простите, некоей нелогичности не замечаете ?

Внимательно вглядитесь в условие и в приведенные значение ...
По Вашему мнению
X++:
if (_ledgerJournalTrans.AssetCanDisposal_RU || ! ledgerJournalTrans.AssetToFromRecId_RU)
при _ledgerJournalTrans.AssetCanDisposal_RU = true и ledgerJournalTrans.AssetToFromRecId_RU = 0 это условие не выполняется ?
Т.е.
X++:
if(true || !false)
внутрь не пускает ?
__________________
Мы летаем, кружимся, нагоняем ужасы ...

Последний раз редактировалось TasmanianDevil; 04.08.2010 в 22:52.
Старый 05.08.2010, 09:50   #10  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
Простите, некоей нелогичности не замечаете ?

Внимательно вглядитесь в условие и в приведенные значение ...
По Вашему мнению
X++:
if (_ledgerJournalTrans.AssetCanDisposal_RU || ! ledgerJournalTrans.AssetToFromRecId_RU)
при _ledgerJournalTrans.AssetCanDisposal_RU = true и ledgerJournalTrans.AssetToFromRecId_RU = 0 это условие не выполняется ?
Т.е.
X++:
if(true || !false)
внутрь не пускает ?
Я чуточку не так выразился, но суть в следующем. при обработке амортизации он заходи внутрь, при расчёте самого ОС нет потому что у него условия не соответствуют.... и поэтому аналитика садится такая же как и у амортизации а не такая как в журнале ОС. и вообще зачем у амортизации поле ledgerJournalTrans.AssetToFromRecId_RU имеет значение своего же RecId. Вообще что несут собой поля _ledgerJournalTrans.AssetCanDisposal_RU = true и ledgerJournalTrans.AssetToFromRecId_RU = 0 ?
Я прежде чем написать сюда, дебагером ни раз пробегал по коду и задаю вопрос точно зная как оно у меня считает. Мне интересно зачем так сделано? Для других операций всё ок, отрабатывает отлично, но там и создаются всего 2 строки. а тут при приёме 4 строки. Если у Вас нет времени то не стоит мне отвечать как бы лишь бы ответить. Просто сделайте контрольный пример. Мне интересно что у Вас получится.
Заранее спасибо.

Последний раз редактировалось raniel; 05.08.2010 в 09:54.
Старый 05.08.2010, 11:24   #11  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
AssetCanDisposal_RU - это флаг запуска создания проводки ОС по строке журнала. Реализует возможность проведения операций ОС, в которых кол-во проводок ОС(создаются только по тем строкам журнала ОС, где этот флаг выставлен) не равно кол-ву проводок ГК (создаются по каждой строке журнала ОС). Подобное характерно для операций выбытия (по одной модели одного ОС - проводка ОС одна, проводок ГК несколько, строк журнала ОС несколько, флаг установлен только в одной строке из нескольких по данной модели)

Можно получить более подробную информацию о состоянии пары строк журнала ОС по одной модели учета ? Какие там стоят типы операций и каково состояние флага AssetCanDisposal_RU ?

Вариантов для операции приема я видел всего два :
1) Если в обоих строках журнала при создании проставлен тип операции "Прием", то этот флаг должен быть выставлен только в одной из двух строк, и создание пары RAssetTrans по стоимости и износу будет инициировано классом RAssetPost_CompanyReceipt исключительно с одной строки LedgerJournalTrans, в которой этот флаг выставлен - т.е. в обоих проводках ОС и проводках ГК будет одна и та же аналитика с одной строки журнала ОС.
2) Если в строках при создании проставлены "Ввод в эксплуатацию" и "Амортизация", то флаг должен стоять в обоих строках LedgerJournalTrans. В таком случае создание RAssetTrans будет инициировано двумя разными наследниками RAssetPost c двух разных строк журнала и в проводки ОС/проводки ГК пойдет разная аналитика с разных строк журнала.

У Вас, похоже, первый случай ...
__________________
Мы летаем, кружимся, нагоняем ужасы ...
Старый 05.08.2010, 12:06   #12  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
AssetCanDisposal_RU - это флаг запуска создания проводки ОС по строке журнала. Реализует возможность проведения операций ОС, в которых кол-во проводок ОС(создаются только по тем строкам журнала ОС, где этот флаг выставлен) не равно кол-ву проводок ГК (создаются по каждой строке журнала ОС). Подобное характерно для операций выбытия (по одной модели одного ОС - проводка ОС одна, проводок ГК несколько, строк журнала ОС несколько, флаг установлен только в одной строке из нескольких по данной модели)

Можно получить более подробную информацию о состоянии пары строк журнала ОС по одной модели учета ? Какие там стоят типы операций и каково состояние флага AssetCanDisposal_RU ?

Вариантов для операции приема я видел всего два :
1) Если в обоих строках журнала при создании проставлен тип операции "Прием", то этот флаг должен быть выставлен только в одной из двух строк, и создание пары RAssetTrans по стоимости и износу будет инициировано классом RAssetPost_CompanyReceipt исключительно с одной строки LedgerJournalTrans, в которой этот флаг выставлен - т.е. в обоих проводках ОС и проводках ГК будет одна и та же аналитика с одной строки журнала ОС.
2) Если в строках при создании проставлены "Ввод в эксплуатацию" и "Амортизация", то флаг должен стоять в обоих строках LedgerJournalTrans. В таком случае создание RAssetTrans будет инициировано двумя разными наследниками RAssetPost c двух разных строк журнала и в проводки ОС/проводки ГК пойдет разная аналитика с разных строк журнала.

У Вас, похоже, первый случай ...
Огромное спасибо! Мой как раз первый случай. похоже это так и должно. ... тогда сделаю обработочку которая будет запускаться в конце разноски и выправлять аналитику. Кстати не лучше ли в момент создания строк в журнале ставить флаг принудительно у всех?(именно в операции приём, тогда все вопосы снимаются сами собой) не повлияет ли это в дальнейшем на что нить? Просто модуль ОС я изучаю только 2-ю неделю :-)
Старый 05.08.2010, 13:39   #13  
TasmanianDevil is offline
TasmanianDevil
Мрачный тип
Аватар для TasmanianDevil
Злыдни
 
886 / 389 (14) ++++++
Регистрация: 24.01.2005
Адрес: Томск
Если просто поставить у всех флаг, без изменения типа операции в журнале - после разноски задвоятся проводки по ОС и ГК.
Вообще , "Прием" - операция фантомная, живущая только в журнале, в проводках ОС не существующая (при разноске она создает проводки ОС по вводу и амортизации) и в расчете балансов по ОС не участвующая. Потому можно и обмануть слегка систему, слегка изменив тип создаваемых операций - несложная модификация класса RAssetProposal_CompanyReceipt, создающего строки по приему:
  • Закомментарить присвоение типа "Прием" для всех строк
  • Инициализировать это присвоение в методе createDisposalTrans() в зависимости от обрабатываемой величины в профиле разноски (там есть жирный switch - не ошибетесь)
  • Создаваемым строкам ставить ledgerJournalTrans.AssetCanDisposal_RU = true
Тогда по приему для каждой конкретной модели конкретного ОС будут созданы строки журнала ОС с одним ваучером, в кол-ве двух штук (или сколько там настроено у Вас в профиле разноски - у нас, например, по трем, мы еще и сальдо амортизационной премии выделяем и учитываем), с разными типами операций, "ввод в эксплуатацию" и "амортизация" (отражающих реальную суть). Их разноской займутся RAssetPost_Aquisition и RAssetPost_Depreciation соответсвенно, вместо придурковатого RAssetPost_CompanyReceipt - тогда источником аналитики для проводок ОС и ГК станут разные строки журнала ОС вместо какой-то одной.
__________________
Мы летаем, кружимся, нагоняем ужасы ...
За это сообщение автора поблагодарили: raniel (1).
Старый 05.08.2010, 16:30   #14  
raniel is offline
raniel
Участник
Аватар для raniel
 
239 / 11 (1) +
Регистрация: 20.10.2006
Цитата:
Сообщение от TasmanianDevil Посмотреть сообщение
.....Потому можно и обмануть слегка систему, слегка изменив тип создаваемых операций - несложная модификация класса RAssetProposal_CompanyReceipt, создающего строки по приему:
  • Закомментарить присвоение типа "Прием" для всех строк
  • Инициализировать это присвоение в методе createDisposalTrans() в зависимости от обрабатываемой величины в профиле разноски (там есть жирный switch - не ошибетесь)
  • Создаваемым строкам ставить ledgerJournalTrans.AssetCanDisposal_RU = true
Тогда по приему для каждой конкретной модели конкретного ОС будут созданы строки журнала ОС с одним ваучером, в кол-ве двух штук (или сколько там настроено у Вас в профиле разноски - у нас, например, по трем, мы еще и сальдо амортизационной премии выделяем и учитываем), с разными типами операций, "ввод в эксплуатацию" и "амортизация" (отражающих реальную суть). Их разноской займутся RAssetPost_Aquisition и RAssetPost_Depreciation соответсвенно, вместо придурковатого RAssetPost_CompanyReceipt - тогда источником аналитики для проводок ОС и ГК станут разные строки журнала ОС вместо какой-то одной.
Вот только я не нашёл где нужно закомментарить присвоение типа "Прием"?
а если просто там выставлю для всех ledgerJournalTrans.AssetCanDisposal_RU = true это плохо будет?.... да заметил что так лучше не делать....

Последний раз редактировалось raniel; 05.08.2010 в 17:17.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Продажа ОС vazerdim DAX: Функционал 7 14.01.2010 20:04
Сторно ввода в эксплуатацию ОС Rivez DAX: Функционал 16 25.08.2009 10:46
Операции с ОС, переданными в аренду IDian DAX: Функционал 2 10.08.2009 23:25
Массовая внутригрупповая продажа/покупка ОС Evgeniy2020 DAX: Функционал 0 12.02.2009 12:25
"Ловля" проводок в ГК по ОС в модуле ОС ksenia DAX: Функционал 17 02.11.2004 10:37
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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