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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.12.2004, 13:42   #1  
lexa is offline
lexa
Участник
 
25 / 10 (1) +
Регистрация: 30.08.2002
InventRepJournalTable_RU
В Ахапте 2,5 для печати из складских журналов например "Акт о списании"
была таблица и форма InventRepJournalTable_RU, в Ахапте 3,0 такой таблицы нет
и соответственно в таблице InventJournalTrans поле OffSessionID_RU, по которому были связаны эти таблицы, переименовано в DEL_OffSessionID_RU.
Подскажите на что заменена эта таблица в 3.0 и как в 3.0 формировать эти отчеты?
Старый 17.12.2004, 16:12   #2  
slava is offline
slava
сибиряк
Самостоятельные клиенты AX
 
468 / 23 (1) +++
Регистрация: 28.12.2001
Адрес: Москва
InventJournalReportTable_RU ?
__________________
С уважением, Вячеслав.
Старый 17.12.2004, 16:25   #3  
lexa is offline
lexa
Участник
 
25 / 10 (1) +
Регистрация: 30.08.2002
спасибо
Старый 29.03.2005, 14:34   #4  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
А не подскажите где она заполняется?

[Проблема в том, что после разноске журнала инвентаризации не заполнятеся
журнал результатов инвентаризации (заголовок которого - InventJournalReportTable_RU)]
Старый 29.03.2005, 17:55   #5  
Valia is offline
Valia
Участник
 
139 / 23 (1) +++
Регистрация: 09.07.2003
Адрес: там
а заполняется она в класса обработчиках отчетов отнаследованных от InventJournalProforma_RU, где в метод initOfficialsDefault надо передать параметр прописанный как раз в этом поле, если же в поле ничего не стоит, тогда он возьмет новый, который лучше уж записать в поле offsessionId_RU, если охота потом получить те же строки в форме должностных лиц.
Старый 18.08.2005, 10:09   #6  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Для разнесенных журналов Инвентаризации не создались записи в InventJournalReportTable.

Хотелось бы найти причину. [Случай частный -- т.е. обычно таблица заполняется]

Вот ход заполнения InventJournalReportTable

1. Таблица inventJournalReportTable заполняется методом

protected void insertReport(Map _dateCostMap, Map _dateDimMap = null)

класса InventJournalReport_RU

2. Этот метод для инвентаризации вызывается из метода

void saveReport(JournalTransList _journalTransList)

класса InventJournalReport_CountColl_RU

3. Метод saveReport вызывается методом

protected void postJournal(JournalTransList _journalTransList)

класса InventJournalCheckPost_Movement

В чем может быть причина что в InventJournalReportTable записи не попали? [Понимаю что вопрос общий, но стандартными методами выяснить сложно]
Старый 18.08.2005, 12:17   #7  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Работая в режиме эмуляции дебагера вышел на таблицу InventJournalReportParms_RU в которой на рабочей снесли все записи.

Вопрос исчерпан. Спасибо!
Старый 19.08.2005, 05:37   #8  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Кстати, удаляются записи из InventJournalReportParms_RU очень просто. Достаточно в форме название складских журналов нажать кнопочку "Обновить". По идее это надо делать один единственный раз при настройки системы. Но уже в ходе эксплуатации можно нечаянно нажать на эту кнопку и все - никаких отчетов (требований-накладных, актов на списание и т.д.) по складским журналам. Причем обнаруживается это обычно уже после того как разнесено некоторое немаленькое количество журналов. И приходится все отсутствующие отчеты создавать ручками...

Дабы этого не произошло, надо ограничиывать доступ к настройкам складских журналов. А еще лучше чуть-чуть подправить в коде: в методе InventJournalReportTypes_RU::initTable() закомментировать строчку

PHP код:
delete_from reportsTable
Старый 19.08.2005, 09:37   #9  
DreamCreator is offline
DreamCreator
Moderator
Аватар для DreamCreator
Axapta Retail User
 
553 / 45 (3) +++
Регистрация: 04.11.2004
Адрес: Казань
Спасибо! Актуально.
Старый 17.06.2009, 10:42   #10  
in.dc is offline
in.dc
Участник
 
29 / 53 (2) ++++
Регистрация: 09.04.2009
-> немного о InventJournalReportTypes_RU::initTable()
Реанимирую немного давно забытую тему.

Цитата:
Сообщение от Peter Savintsev Посмотреть сообщение
Кстати, удаляются записи из InventJournalReportParms_RU очень просто. Достаточно в форме название складских журналов нажать кнопочку "Обновить". По идее это надо делать один единственный раз при настройки системы. Но уже в ходе эксплуатации можно нечаянно нажать на эту кнопку и все - никаких отчетов (требований-накладных, актов на списание и т.д.) по складским журналам.
В ходе эксплуатации иногда (редко, но бывает) возникает 'осознанная' необходимость нажать на кнопку "Обновить" на форме InventJournalName: при добавлении новых типов складских отчетов на базе InventJournalReport_RU - для актуализации списка доступных печатных форм.

То что при этом удаляются ранее выбранные отчеты для наименований журналов - пожалуй что можно отнести к багам (недоработке) этого куска функционала. Не совсем понятно почему ситуация не меняется от версии к версии: аналогичное поведение наблюдается и в AX 4.0 SP2, на днях посмотрел локализованный код AX2009 - при беглом просмотре метод InventJournalReportTypes_RU::initTable() не изменился (визуально).

Цитата:
Сообщение от Peter Savintsev Посмотреть сообщение
...
А еще лучше чуть-чуть подправить в коде: в методе InventJournalReportTypes_RU::initTable() закомментировать строчку

PHP код:
delete_from reportsTable
Предложенный вариант (убрать удаление из InventJournalReportParms_RU) может иметь побочный эффект от оставшегося там 'мусора' для случая когда в отчетах будет удаляться тип журнала для которого он доступен: допустим был создан новый отчет InventJournalReport_Example_RU для журналов типа 'Проводка' и 'Инвентаризация', после нажатия кнопки "Обновить" (при предложенной модификации) сохранятся текушие настройки журналов и в списке доступных появится новая форма. Добавляем новую форму в пару журналов 'Проводка' (Y'Инвентаризация' (X). Далее для созданного отчета программист убирает возможность печати для журнала 'Инвентаризация'. Вновь жмем кнопку "Обновить". У журнала инвентаризации X для которого ранее был выбран отчет Example в списке 'Выбрано' этого отчета не будет, т.к. в методе InventJournalNameForm_RU.updateControls() цикл организован по таблице InventJournalReportTypes_RU (в которой уже нет записи о поддержке отчета Example для журналов типа 'Инвентаризация') и решение в каком списке отразить отчет принимается на основании того есть ли запись в InventJournalReportParms_RU (хотя запись в этой таблице не удалена, в анализе она не используется):
X++:
public void updateControls()
{
    ...
    while select ReportType, Description from reportTypesTable
        where reportTypesTable.JournalType == inventJournalName.JournalType
    {
        select firstonly RecId from inventReportParms
            where inventReportParms.ReportType            == reportTypesTable.ReportType &&
                  inventReportParms.InventJournalNameId   == inventJournalName.JournalNameId;

        if (inventReportParms.RecId)
        {
            //BP deviation documented
            selectedItemsCtrl.addItem(new FormListItem(reportTypesTable.Description, 0, inventReportParms.ReportType));
        }
        else
        {
            //BP deviation documented
            availableItemsCtrl.addItem(new FormListItem(reportTypesTable.Description, 0, reportTypesTable.ReportType));
        }
    }
    ...
}
При этом d списке отчетов которые можно распечатать по журналу вида X (типа 'Инвентаризация') на форме InventJournalTable (кнопка "Печать") формируемых в методе InventJournalFormTable.updateQueries_RU() отчет Example будет отображаться, т.к. в методах InventJournalProforma_RU::buildReportList() и InventJournalReport_RU::buildReportList() выборка делается по таблице InventJournalReportParms_RU (в которой запись о поддержке отчета Example для журнала X типа 'Инвентаризация' осталась).
Понятно что описанная ситуация имеет несколько искусственный характер, но все же.

Для целостности картины в методе InventJournalReportTypes_RU::initTable() необходимо все-таки удалять записи из таблицы InventJournalReportParms_RU, но не столь 'сурово' как в штатном функционале:
X++:
delete_from reportsTable;
а только те, для которых тип поддерживаемого отчета более не актуален, видится это примерно таким образом (немного дополняя вариант с отменой полного удаления строк):
X++:
public server static void initTable()
{
    DictEnum                    journalTypeEnum = new DictEnum(enumnum(InventJournalType));
    DictEnum                    reportTypeEnum  = new DictEnum(enumnum(InventJournalReportType_RU));
    int                         idx, jdx;
    InventJournalType           journalType;
    InventJournalReportType_RU  reportType;
    InventJournalReport_RU      report;
    InventJournalReportTypes_RU reportTypesTable;
    InventJournalReportParms_RU reportsTable;
    //  --> in.dc
    InventJournalName           inventJournalName ;
    //  <-- in.dc
    ;

    delete_from reportTypesTable;
    //  --> in.dc
    // delete_from reportsTable;
    //  <-- in.dc

    for(idx = 0; idx < reportTypeEnum.values(); idx++)
    {
        reportType = reportTypeEnum.index2Value(idx);

        report = InventJournalReport_RU::construct(reportType);

        for(jdx = 0; jdx < journalTypeEnum.values(); jdx++)
        {
            journalType = journalTypeEnum.index2Value(jdx);

            if (report.isJournalTypeSupported(journalType))
            {
                reportTypesTable.clear();

                reportTypesTable.JournalType = journalType;
                reportTypesTable.ReportType  = reportType;
                reportTypesTable.Description = report.description();

                reportTypesTable.insert();
            }
        }
    }

    //  --> in.dc
    delete_from reportsTable
        notexists join reportTypesTable
            where   reportTypesTable.ReportType  ==  reportsTable.ReportType
            join    inventJournalName
                where   inventJournalName.JournalNameId ==  reportsTable.InventJournalNameId &&
                        inventJournalName.JournalType   ==  reportTypesTable.journalType ;
    //  <-- in.dc
}
P.S. Тестировалось на DAX 4.0. Хотелось бы услышать комментарии и дополнения по этому предложенному варианту.
__________________
Dynamics AX 4.0 SP2
За это сообщение автора поблагодарили: Kabardian (3).
Теги
отчет, управление запасами

 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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