| 
			
			 | 
		#1 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
			
			
			Передать временную таблицу из формы в класс
			 
			
			Есть класс, в котором объявлен курсор на НЕВРЕМЕННУЮ таблицу. При инициализации класса делаем этому курсору setTmp. Есть диалоговая форма, в которой датасорс - также по этой таблице. При инициализации ставим ее в setTmp.  
		
		
		
		
		
		
		
	В методе closeOk: X++: public void closeOk() { DialogRunbase dialog = element.args().caller(); ; SmmLineCreate.parmTmpData(SmmResponsible); // SmmResponsible - та самая таблица dialog.updateServer(); if( SmmLineCreate.checkCloseDialog(this) ) super(); } X++: Common parmTmpData(Common _tmpResponsible = tmpResponsible)
{
    ;
    tmpResponsible.setTmpData(_tmpResponsible);
    return tmpResponsible;
}вызов X++: boolean checkTmp()
{
    Boolean ret = true;
    ;
    select count(RecId) from tmpResponsible;
    if (!tmpResponsible.RecId)
        ret = checkFailed(strfmt("@SYS77621", "@ACL85"));
    return ret;
} | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Запрос идет по постоянной таблице или все же по неинициализированной временной?
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Андрей.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 X++: ?  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Подход правильный. Все должно работать. Где-то ошибка в реализации. 
		
		
		
		
		
		
			Покажите код метода init() диалоговой формы. 
				__________________ 
		
		
		
		
	С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 X++: public void init() { if( !element.args().caller() ) throw error("@SYS79604"); smmLineCreate = element.args().caller().runbase(); super(); element.setDesign(); SmmTmpDeliverCreate.setTmp(); // это еще один датасорс на таблице. Но сейчас он не используется. SmmResponsible.setTmp(); }  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Что-то с tmpResponsible не так, проверяйте инициализацию класса.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Андрей.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В случае с SmmTmpDeliverCreate все нормально, даже  SmmLineCreate.parmTmpData(SmmTmpDeliverCreate) в closeOK не надо делать... Единственное отличие -  SmmTmpDeliverCreate на самом деле временная
		 
		
		
		
		
		
		
		
		
			Последний раз редактировалось Eldar9x; 20.06.2008 в 15:27.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Давайте уж заодоно и init() класса.
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	С уважением, Павел Цераниди. На пути к совершенству нет конца. Каждое новое достижение является отправной точкой для следующего крупного шага.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			public boolean init() 
		
		
		
		
		
		
		
	{ boolean ret; ; this.checkSelection(); ret = super(); tmpResponsible.setTmp(); this.initParmDefault(); this.fillTmpData(); // можно считать пустым return ret; }  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			пробовал в filltmpdata(): 
		
		
		
		
		
		
		
	X++:     tmpResponsible.setTmp();
    tmpResponsible.EmplType = SmmEmplType::Direct;
    tmpResponsible.EmplId   = "000016";
    tmpResponsible.insert(); | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Сенбернар 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вопросы:  
		
		
		
		
		
		
			- форма "настоящая" (в AOT нарисованная)? Или это диалог? - как вы ее (форму) поднимаете из класса (код)? 
				__________________ 
		
		
		
		
	Best Regards, Roman  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Форма в АОТе 
		
		
		
		
		
		
		
	X++: protected Object dialog() { DialogRunbase dialog = Dialog::newFormnameRunbase(this.dialogFormName(),this); ; dialog = super(dialog); dialog.caption(this.caption()); dgDeliver = dialog.addGroup("@ACL95"); dgDeliver.columns(2); dfDeliverDate = dialog.addFieldValue(typeid(SmmWorkDate), deliverDate, this.dateLabel()); return dialog; }  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Сенбернар 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробуйте форму через classFactory.formRunClass() поднять. Мне помогло в свое время  
		
		
		
		
		
		
			 
		
				__________________ 
		
		
		
		
	Best Regards, Roman  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Скорее всего проблема в том что класс живет на сервере, а временная таблица на клиенте.  
		
		
		
		
		
		
		
	Нужно паковать тавлицу и передавать через pack() unpack(). Проблема обсуждалась много раз, ищите на форуме.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Eldar9x (1). | |
| 
			
			 | 
		#16 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			или в перекрыть метод canSwapBetweenCS и вернуть false. Тогда можно не замарачивать с передачей временной таблицы с клиента на сервер.
		
	 
1. Функционал не требует больших вычислительных ресурсов 2. Функционал запускается сразу, без поддержки Batch А вообще нестандартный подход перекрытия canSwapBetweenCS() [IMHO]  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 X++: classFactory.formRunClass() X++:   canSwapBetweenCS   falseКласс, действительно, живет на сервере. Видимо временный курсор диалога (датасорса) - на клиенте, а временный курсор класса - на сервере. Но ведь в случае с таблицей, которая на самом деле временная, это не вызывает проблем Последний раз редактировалось Eldar9x; 20.06.2008 в 17:28.  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Если используется временная таблица, значит в диалоге пользователь должен что-то менять, изменять, выбирать - следовательно о пакетном режиме речь уже не идет. 
		
		
		
		
		
		
		
	Был у меня один класс, где я временную таблицу паковал, передавал с клиента на сервер, выглядело это уж больно извращено, много лишних телодвижений. Без этого код выглядит более аккуратно и логично. Пример из стандарта - класс SalesCreateReleaseOrder Использовать данный подход никого не агитирую, просто для богатства выбора привел...  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 MCTS 
		
			
	 | 
	
	
	
		
		
		
		 
			
			а что он делает этот метод?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			canSwapBetweenCS = can Swap Between Client Server
		 
		
		
		
		
		
		
		
	 | 
| 
	
 |