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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.08.2004, 11:42   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Изменить компанию в форме
AXAPTA 2.5 SP 3RU

Необходимо по выбору пользователя изменить текущую компанию в текущей форме для всех DataSource.

Пишу:

Table1.company(newCompany)
Table1_DS.reseach()

Никакой реакции. Запросы по прежнему выполняются по той компании, которая была установлена при инициализации формы.

Пока проблема решается через промежуточный класс, который и организует вызов формы. При выборе другой компании форма просто переоткрывается через класс-оболчку.

Есть более простое решение?

AXAPTA 2.5 SP 3RU
Старый 18.08.2004, 12:27   #2  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
Не проще выбрать компанию через StatusBar и открыть форму?
Старый 18.08.2004, 12:37   #3  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Не проще выбрать компанию через StatusBar и открыть форму?
Нет. Такая постановка задачи.

Организация копирования счета-фактуры для закупки из другой закупки. Сначала выбирается закупка в текущей компании, а затем вызывается форма для выбора строки закупки откуда следует сделать копию. Вот образец для копирования и может быть в другой компании. Не в текущей. А в какой - пользователи и должны иметь возможность выбора.
Старый 18.08.2004, 12:49   #4  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А changecompany не подходит?
Старый 18.08.2004, 12:56   #5  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
А changecompany не подходит?
Как ты себе это представляешь?

На форме 2 Grid, в которых отображается список закупок (шапки и строки). В этих списках надо проставить "птички" что именно использовать как образец для копирования.

При смене компании должно полностью поменятся содержимое этих Grid для выбора пользователем (если был выбор по другой компании, то он сбрасывается).

Каким местом здесь можно воткнуть changecompany()?
Старый 18.08.2004, 13:04   #6  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
А отдельной формой? Выведи им все закупки в других компаниях, пусть роются... найдут то, что надо - жмут "Перенести" - и копируешь... потом открываешь PurchTable и позиционируешь курсор на этой записи... И будет им Щастье

Я бы отдельной формой делал...
Старый 18.08.2004, 13:46   #7  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Ну так это и есть отдельная форма! Может я плохо объяснил? ВСЯ информация в этой форме из другой компании. Просто надо иметь возможность выбирать из какой именно компании эта самая информация.
Старый 18.08.2004, 14:16   #8  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Владимир! Да что Вы заморачиваетесь? Работает - и работает Я бы вообще datasource не делал, а заполнял бы grid динамически... Хотя... заказы - та еще табличка может, передал бы контрол формы "MyGrid" в новый метод на таблице и там бы его заполнил из всех компаний или по выбору. У меня, правда, 3шка..
Главное - чтоб работало!
Чего Вам и желаю!
С Уважением,
Георгий.
Старый 18.08.2004, 17:41   #9  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Согласен с Георгием, что без changeCompany не обойтись.
Ваша форма должна работать в другой компании, по этому в нее нужно перейти.
Так же нужно у таблицы указать компанию purchLine.company( curExt() );
Вызов формы в другой компании:
PHP код:
// приход товара в аптеки
void receiptIntoAP() {
Args      args;                               // объект класс Args
FormRun   formRun;                            // объект класс FormRun
;
    
// создание и инициализация объекта класса Args
    
args = new Args();
    
args.callerthis );
    
args.nameFormStrReceiptIntoAP ) );
    
args.recordinventSum );
    
changeCompanycompany ) {
        
// создание и запуск формы
        
formRun ClassFactory.formRunClassargs );
        
formRun.init();
        
formRun.run();
        
formRun.wait();
    }
    
infolog.clear();

init вызываемой формы:
PHP код:
public void init() {
;
    
// проверка источника
    
if ( this.args().dataset() != TableNumInventSum ) ) throw Exception::Error;
    
super();
    
// инициализировать данные
    
inventSum this.args().record();
    
this.args().recordnull );
    
rgItemId.valueinventSum.ItemId );
    
rgInventDimId.valueinventSum.InventDimId );
    
purchLine.companycurExt() );

Есть одна особенность. После уничтожения формы в другой компании происходит переход обратно в исходную компанию до закрывающей } changeCompany, как это победить с удовольствием узнал бы сам
Старый 18.08.2004, 17:46   #10  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Цитата:
Изначально опубликовано sergy
Есть одна особенность. После уничтожения формы в другой компании происходит переход обратно в исходную компанию до закрывающей } changeCompany, как это победить с удовольствием узнал бы сам [/B]
Это на самом деле особенность. Фича такая... даже в документации описана.
Старый 18.08.2004, 17:51   #11  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
А может быть там описано как главное меню сделать невидимым, а потом закрыть?
Старый 18.08.2004, 19:05   #12  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
sergy
Ну, ладно, будем считать, что я не умею объяснять что именно мне надо получить.

Хорошо, воспользовался я Вашим советом. Открыл форму в дургой компании. Теперь вопрос:

Как находясь в той же самой форме изменить значение компании? Т.е. чтобы не закрывая формы в ней отобразились данные другой, указанной пользователем, компании.

PS: форма уже есть. Она рабочая. Проблема только в том, что она меняет компанию только в момент инициализации. А потом ей уже все по барабану. Будет стоять на текущей компании до своего закрытия. Способ обхода я нашел, но мне он кажется "кривоватым"
Старый 19.08.2004, 09:34   #13  
sergy is offline
sergy
Участник
 
62 / 10 (1) +
Регистрация: 12.02.2004
Адрес: Воронеж
Без переоткрытия формы не обойтись
Старый 19.08.2004, 11:29   #14  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Изначально опубликовано Владимир Максимов
Способ обхода я нашел, но мне он кажется "кривоватым"
А какой?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 19.08.2004, 11:50   #15  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,691 / 1195 (43) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
А какой?
Ну, так я же написал. Вызываю форму не напрямую, а через класс-посредник на основе RunBaseBatch из метода Dialog()

В момент выбора другой компании в форме запоминаю выбранную компанию в классе-посреднике и закрываю форму.

В классе-посреднике организовал цикл по вызову Prompt(), если по завершении Prompt() есть значение компании, то заново вызываю форму передав в качестве параметра это новое значение.

Фактически, просто переоткрываю форму с новым значением компании.
Старый 19.08.2004, 12:41   #16  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Понятно
Просто я думал, что Вы нашли способ, как изменять компанию без переоктрытия формы.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 27.09.2006, 12:06   #17  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Столкнулся с подобной задачей.
Нужно открыть эту же форму, только в другой компании.

Сделал немного по-другому:

Код:
    #define.company('dat')
    Args      args;                               // ?????? ????? Args
    FormRun   formRun;                            // ?????? ????? FormRun
    int       hwnd;
    ;
    super();
    hwnd = element.hWnd();
    element.close();
    appl.setDefaultCompany(#company, false);
    SysSecurity::reload(false);
    args = new Args();
    args.parm(int2str(hwnd));
//    args.caller( this );
    args.name(formStr(PurchTable));
    formRun = ClassFactory.formRunClass(args);
    formRun.init();
    formRun.run();
    formRun.wait();
    infolog.clear();
Все бы хорошо - то есть другая компания и форма в ней открваются, да только вот старая форма остается.
Хотя, закрывать пытаюсь и в этом методе (простое element.close());
и в init открываемой формы, если передали parm()
Код:
    hwnd = str2int(element.args().parm());
    WinAPI::sendMessageEx(hwnd, #WM_SYSCOMMAND, #SC_CLOSE, 0);
Может есть другой способ?
или, может, кто-то знает хороший способ открытия формы в другой компании?
Старый 27.09.2006, 12:39   #18  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Кажется, надо вместо formRun.wait() поставить formRun.detach(). После этого можно уже вызывать caller.close().

А вообще, отличной иллюстраций к обсуждаемой теме является класс TradeInterCompany. Все уже придумано до нас.
За это сообщение автора поблагодарили: kashperuk (2).
Старый 27.09.2006, 12:58   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Спасибо, EVGL
Уже сам допер, что не закрывалось именно из-за wait()
Как раз зашел всем об этом рассказать
X++:
formRun.detach();
// formRun.wait();
все срабаывает.
Спасибо. Вопрос снят.

PS Класс посмотрю, спасибо
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Использование семейства InventDimCtrl_Frm_* - 2 DS InventDim на одной форме Pavlo AKA Panok DAX: База знаний и проекты 5 22.12.2008 17:15
Как не выводить заголовки в форме, если нет строк? DreamCreator DAX: Программирование 9 29.05.2008 15:10
Название полей в форме запроса PavelSR DAX: Программирование 4 11.07.2007 17:19
Как программно изменить к-во в строке заказа в форме SalesTable BorDark DAX: Программирование 2 13.01.2005 17:02
Как программно изменить размер контрола на открытой форме? SnowMan DAX: Программирование 2 17.03.2004 11:27
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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