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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 12.05.2010, 09:58   #1  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
? Открытие формы строк журнала спецификации
Уважаемые участники axforum.info!
Никак не получается программно открыть форму строк журнала спецификации.
Делаю так:
Функция insertInventJour создает журнал и строку в ней и возвращает код журнала:
X++:
//формируем строку inventJournalTable.Description
        descr = strfmt("к заказу %1", SalesTable.SalesId);
        //ищем тип журнала спецификация
        select firstonly inventJournalName where inventJournalName.JournalNameId == 'Спецификация';
        //ищем журнал спецификации к этому заказу
        select firstonly inventJournalTable where (inventJournalTable.JournalNameId == inventJournalName.JournalNameId) && (inventJournalTable.Description == descr);
        //если не нашли, создаем журнал и строку в нем с приходом номенклатуры-спецификации
        if (!inventJournalTable)
        {
            ttsbegin;
            inventJournalTable.initFromInventJournalName(inventJournalName);
            inventJournalTable.Description = descr;
            inventJournalTable.isDocOutput = NoYes::Yes;
            inventJournalTable.Dimension = SalesLine.Dimension;
            inventJournalTable.insert();
            ttscommit;
            select firstonly inventTable where inventTable.ItemId == 'НОМ1';
            ttsbegin;
            inventJournalTrans.initFromInventJournalTable(inventJournalTable);
            inventJournalTrans.initFromInventTable(inventTable);
            inventJournalTrans.TransDate = today();
            inventJournalTrans.Dimension = SalesLine.Dimension;
            inventJournalTrans.insert();
            ttscommit;
        }
        //возвращаем код журнала спецификации
        ret = InventJournalTable.JournalId;
В основном коде:
X++:
inventJournalTableT = InventJournalTable::find(element.insertInventJour());
if(inventJournalTableT)
        {
            select inventJournalTransT where inventJournalTransT.JournalId == inventJournalTableT.JournalId;
            args.record(inventJournalTransT);
            args.parm(inventJournalTableT.JournalId);
            frmInventJournalTrans = new MenuFunction(menuItemDisplayStr(InventJournalTransBOM), menuItemType::Display).create(args);
            frmInventJournalTrans.run();
        }
И получаю ошибку из класса JournalFormTrans о том, что необходим активный буфер.
Она вываливается из метода new
X++:
    if (! formRun.args().caller() || ! formRun.args().dataset())
        throw error(strfmt("@SYS22678",formRun.name()));
Можно ли как-то это обойти?
Версия Аксапты - 4 SP2
Старый 12.05.2010, 10:22   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1776 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AGRESSOR Посмотреть сообщение
получаю ошибку из класса JournalFormTrans о том, что необходим активный буфер.
Она вываливается из метода new
X++:
    if (! formRun.args().caller() || ! formRun.args().dataset())
        throw error(strfmt("@SYS22678",formRun.name()));
Естественно. Вы же не заполнили args().caller().

Как вариант, могу посоветовать в фоне создать форму самих журналов InventJournalTable и передать её в качестве caller в форму строк.
Старый 12.05.2010, 10:28   #3  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Естественно. Вы же не заполнили args().caller().

Как вариант, могу посоветовать в фоне создать форму самих журналов InventJournalTable и передать её в качестве caller в форму строк.
Тоже об этом подумал и дописал в основном коде между select и args
X++:
args.record(inventJournalTableT);
frmInventJournalTable = new MenuFunction(menuItemDisplayStr(InventJournalTableBOM), menuItemType::Display).create(args);
args.caller(frmInventJournalTable);
теперь ловлю runtime-ошибку:
JournalTableData Объект не инициализирован.

Трассировка стека

(C)\Classes\JournalTableData\journalTable
(C)\Classes\InventJournalFormTrans\formInitPost - line 6
(C)\Forms\InventJournalBOM\Methods\init - line 15
(C)\Classes\SysSetupFormRun\init - line 5
(C)\Classes\MenuFunction\create
(C)\Classes\FormButtonControl\Clicked - line 48
Я в замешательстве...
Старый 12.05.2010, 10:37   #4  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1776 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Сделайте frmInventJournalTable.init() перед тем как его использовать
Старый 12.05.2010, 10:43   #5  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Сделайте frmInventJournalTable.init() перед тем как его использовать
не помогло
X++:
  : JournalTableData   .

 

(C)\Classes\JournalTableData\journalStatic
(C)\Classes\JournalFormTable\formInitPost - line 8
(C)\Classes\InventJournalFormTable\formInitPost - line 4
(C)\Forms\InventJournalTable\Methods\init - line 27
(C)\Classes\SysSetupFormRun\init - line 5
(C)\Classes\FormButtonControl\Clicked - line 45
Старый 12.05.2010, 10:57   #6  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1776 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от AGRESSOR Посмотреть сообщение
не помогло
Не совсем так. Теперь ошибка возникает в init() InventJournalTable
Не хватает ещё вызова datasourceInitPost(). Видимо нужно каким-то более коректным способом проинициализировать форму, так что бы сначала вызвались init'ы источников данных.
Старый 12.05.2010, 11:10   #7  
Roman N. Krivov is offline
Roman N. Krivov
Участник
 
25 / 11 (1) +
Регистрация: 04.05.2010
Адрес: Мир, Россия, Московская область
X++:
args.record(inventJournalTableT);
args.caller(this);
frmInventJournalTable = new MenuFunction(menuItemDisplayStr(InventJournalTableBOM), menuItemType::Display);
frmInventJournalTable.run(args);
Так пробовали?

Последний раз редактировалось Roman N. Krivov; 12.05.2010 в 11:19.
Старый 12.05.2010, 11:19   #8  
AGRESSOR is offline
AGRESSOR
Сам.AX
Аватар для AGRESSOR
Самостоятельные клиенты AX
 
28 / 12 (1) ++
Регистрация: 26.04.2010
Адрес: Тюмень
Цитата:
Сообщение от Roman N. Krivov Посмотреть сообщение
X++:
args.record(inventJournalTableT);
args.caller(this);
frmInventJournalTable = new MenuFunction(menuItemDisplayStr(InventJournalTableBOM), menuItemType::Display).create(args);
Так пробовали?
А что это дает? Даже если caller указать, объект JournalTableData не инициализированный. Думаю надо в сторону инициализации датасоурсов (как говорит S. Kuskov) копать.
при вызове run все конечно будет инициализировано, но и форма журналов появится, а мне это не нужно.
Можно конечно потом сразу ее закрыть, но мне не нравятся эти мельтешения на экране

Последний раз редактировалось AGRESSOR; 12.05.2010 в 11:25.
Старый 12.05.2010, 11:23   #9  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1776 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от Roman N. Krivov Посмотреть сообщение
Так пробовали?
У меня получилось, если вместо frmInventJournalTable.init() сделать вот так
X++:
    frmInventJournalTable.design().visible(false);
    frmInventJournalTable.run();
    frmInventJournalTable.close();
Возможно не очень красиво, но зато работает
За это сообщение автора поблагодарили: AGRESSOR (1).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Amand: Видео: Спецификации (BOM) в Microsoft Dynamics AX 4.0 Часть 1-2 Настройка - Типы строк спецификаций. Blog bot DAX Blogs 0 24.01.2010 19:05
Очень маленькая высота строк в таблице формы (1-2 мм) Gustav DAX: Программирование 11 17.06.2006 11:57
Программное открытие формы строк журнала переноса ViV DAX: Программирование 13 09.11.2005 13:16
3.0, Модуль: ОС, операция: Разноска строк журнала ОС (с предварит просм проводок) MagisterLudi DAX: Функционал 2 07.10.2003 18:55
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

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

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