|  02.03.2007, 10:55 | #1 | 
| Участник |  Как сделать чтобы изменения поля отображались сразу 
			
			Делаю через Делфи обращение к аксапте: Код: var
      Axapta,
      AxaptaQuery,
      AxaptaDataSource,
      AxaptaQueryRun,
      Buffer,
      MyRecord, CryptedPass: variant;
begin
  Axapta:=CreateOleObject('AxaptaCOMConnector.Axapta2.1');
  Axapta.logon2('Admin','','','','','','C:\База для разработки.axc');
  MyRecord := Axapta.CreateRecord('WebUser');
  MyRecord.InitValue;
  MyRecord.Field('WebLogin') := 'wer';
  MyRecord.Field('UserId') := 'web';
  MyRecord.Field('WebPassword') := Axapta.CallStaticRecordMethod('WebUser','makePassword', 'pass', 'wer');
 //вставка новой записи в таблицу
  MyRecord.Insert;
Axapta.Logoff;
  Axapta:=0;Отображается только после перезапуска Аксапты. Как мне сделать чтобы все изменения сразу отображались в запущенной Аксапте? | 
|  | 
|  02.03.2007, 10:59 | #2 | 
| Участник | 
			
			А перезакрытие формы, не помогает???
		 
				__________________ Рабочий день сокращает жизнь на 8 часов  | 
|  | 
|  02.03.2007, 11:00 | #3 | 
| Участник | 
			
			нет
		 | 
|  | 
|  02.03.2007, 11:08 | #4 | 
| MCTS | 
			
			myTable_ds.research(); должно помочь. Т.е. необходимо обновить источник данных формы Refresh: Refreshes the screen (current record), without accessing the database. RefreshEx(int n): To refresh the data according to parameter "n". ReRead: Re read the current record and updates the screen. ReSearch: Uses the current query clear the grid, and reread all records. ExecuteQuery: Builds the query, including resetting user sorting etc, and uses research to show the result. If you want to refresh the form with records that were inserted in a method or job that was called, then you should use research. 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  02.03.2007, 11:26 | #5 | 
| MCTS | 
			
			Вдогонку Даже и обновив источник данных возможна ситуация, что новая строка будет в конце списка грида, в то время как обновление данных устанавливает первую строку текущей. В таком случае, вы можете и не заметить, что добавилась новая строка. Тогда вам надо спозиционировать курсор на текущую строку. Вообще, посмотрите как это делается в \Forms\AddressFormat\Methods\up X++:     if (save)
    {
        addressFormatLines_ds.research();
        addressFormatLines_ds.findRecord(save);
    }
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | |
| За это сообщение автора поблагодарили: demon46 (1). | |
|  02.03.2007, 11:33 | #6 | 
| MCTS | 
			
			И ещё вдогонку   Дабы "достучаться" до источника данных формы, необходимо "достучаться" до экземпляра этой открытой формы. Вот. Дерзайте   
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  02.03.2007, 12:37 | #7 | 
| Участник | 
			
			что-то я не пойму у чего такой метод "research();"? К чему его цеплять?)
		 | 
|  | 
|  02.03.2007, 12:50 | #8 | 
| MCTS | 
			
			и соответствующего источника данных открытой формы
		 | 
|  | 
|  02.03.2007, 12:57 | #9 | 
| MCTS | 
			
			оххх..... У вас задача: Дано: форма, отображающая таблицу, внешний процесс (Дельфи) заносящий строку в таблицу Надо: отобразить эту новую строку. Для начала упростите себе задачу. Замените Дельфи на джоб внутри аксапты. Т.е. заносите строку из джоба. Цитата: 
		
			что-то я не пойму у чего такой метод "research();"? К чему его цеплять?)
		
	 WebUser_ds.research(); 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  02.03.2007, 12:59 | #10 | 
| MCTS | 
			
			Когда у вас получится увидеть новую строку в форме, напишите сюда   А я вам расскажу что дальше надо делать   
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  02.03.2007, 16:36 | #11 | 
| Moderator |   Цитата: Если закрытие-открытие формы начнет помогать, то Периодическое обновление строк в форме альтернативное решение мгновенного отображения новых записей в форме без выхода из нее. Последний раз редактировалось DreamCreator; 02.03.2007 в 16:38. Причина: открытие-закрытие | 
|  | 
|  02.03.2007, 16:50 | #12 | 
| MCTS | 
			
			Позволю процитировать себя Цитата: 
		
			Дабы "достучаться" до источника данных формы, необходимо "достучаться" до экземпляра этой открытой формы.
		
	 Т.е. необходимо следующее: 1 Открыть форму (на стороне Аксапты) 2 Сохранить переменную formRun, а ещё лучше dataSource этой формы. 3 Заполнить таблицу из внешнего приложения (Lelik111 это уже сделал) 4 прорефрешить источник данных из внешнего приложения используя ранее сохранённую переменную _ds Вот пункты 2 и 4 самые мутные. Как указать внешнему приложению конкретный _ds. На самом деле задача интересная и не совсем стандартная как кажется на первый взгляд. 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  02.03.2007, 17:01 | #13 | 
| MCTS | 
			
			Да и вообще эта задача должна не программистскими методами решаться Вот :-) 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  03.03.2007, 12:45 | #14 | 
| Developer |   Цитата: Вы не сказали как именно вы получаете записи в Аксапте, поэтому опишу все что пришло в голову... раз уж начал отвечать. Чтобы Вы смогли из Аксапты получить запись таблицы WebUser из БД а не из кеша, можно поступить следующими способами (для Вас, я думаю, актуальным будет пункт 1): 1) Если запись отображается на форме в гриде, то можно нажать F5 (пункт меню "Команда"->"Восстановить")  . Текущая запись прочитается из БД и обновится в кеше. Это же действие можно выполнить програмно - см. пункт 2 2) Если запись отображается на форме в гриде, то можно програмно выполнить X++: DataSourse.reread(); // чтение ТЕКУЩЕЙ (одной) записи из БД DataSourse.refresh(); // Обновление контролов на форме // DataSourse - датасоурс таблицы на форме X++: WebUser.disableCache(true); select from WebUser ... X++: flush WebUser; // в 3-х уровневой конфигурации выполнить на СЕРВЕРЕ X++: new Dictionary().tableFlush(); // в 3-х уровневой конфигурации выполнить на СЕРВЕРЕ X++: SysFlushDictionary::doFlush(); // в 3-х уровневой конфигурации выполнить на СЕРВЕРЕ P.S. мда... совсем не в двух словах. Lelik111, в будущем постарайтесь более конкретизировать свои вопросы. Последний раз редактировалось vallys; 03.03.2007 в 17:18. | 
|  | |
| За это сообщение автора поблагодарили: Russland (1), Silphidae (1). | |
|  03.03.2007, 13:40 | #15 | 
| NavAx | 
			
			7) или у таблицы WebUser свойство CacheLookup установить в Find
		 | 
|  | 
|  03.03.2007, 14:50 | #16 | 
| MCTS | 
			
			valys, ведь нужно это из Delphi сделать, а не из X++ кода, как Вы предложили...
		 | 
|  | 
|  03.03.2007, 15:01 | #17 | 
| Developer | 
			
			действительно... если это конечно не нарушает какую-нибудь существующую концепцию   Цитата: Цитата: | 
|  | 
|  03.03.2007, 17:15 | #18 | 
| MCTS | 
			
			Вот написал джоб X++: static void Job30(Args _args) { Args args = new Args(); FormRun formRun; WebUser table; FormObjectSet ds; ; formRun = new MenuFunction(MenuItemDisplayStr(WebUsers), MenuItemType::Display).create(args); if (formRun) { formRun.run(); // Открыли форму ds = formRun.dataSource(); // Сохраняем dataSource // Lelik111 сделал --> table.WebLogin = "Nnn"; table.insert(); // Lelik111 сделал <-- // Обновляем данные --> ds.refresh(); ds.research(); // Обновляем данные <-- } } Проблемы я описал в посте #12 Пост #13 вообще написан под впечатлением следующей умозрительной ситуации: ну открыта на компьютере А пользователем UserA форма WebUsers. А на компьютере В пользователь UserВ тоже открыл эту же форму. Тогда Дельфи должен "разослать" сообщения этим формам (а по-хорошему всем формам, источником данных которых является таблица WebUser) что им (формам) пора обновляться. Или сам обновить эти формы. Ну так же не делается. Я бы просил Lelik111 описать свою задачу. Зачем необходимо обновлять формы? 
				__________________  В глухомани, в лесу Несмотря на красу Дни проводит Лиса Патрикевна. Я никак не пойму Отчего, почему Не пускают куму На деревню | 
|  | 
|  03.03.2007, 17:25 | #19 | 
| Developer | Цитата:   | 
|  |