| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Всем доброго времени суток. Огромная просьба разъяснить ситуацию. Есть форма, источником грида которой служит временная таблица. Заполняет ее метод, находящийся во временной таблице типа: 
		
		
		
		
		
		
		
	static server TableTmp FillTable(входящие параметры) { Блок описания переменных ; delete TableTmp; while select... { select... TableTmp.Field1 = ... TableTmp.insert } return TableTmp } При нажатии на кнопку обновить (она, собственно и вызывает метод на таблице) форма обновляется, но данных в ней нет.Заранее благодарен. ЗЫ Запрос построен правильно, ибо на форме в методе работает ок!  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Как на форме принимается таблица из метода?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Покажите код, которым вы источник данных, сформированный в этом методе, делаете общим с тем, который используется на форме? 
		
		
		
		
		
		
			
		
		
		
		
	Должно быть что-то типа X++: TableTmp.setTmpData(TableTmp::FillTable( ));  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			void clicked() 
		
		
		
		
		
		
		
	{ super(); TableTmp::FillTableNew(SnQueryTableTmp, DateBegin.dateValue(), DateEnd.dateValue(), FilialField.valueStr(), Line.valueStr()); SnQueryTableTmp_DS.executeQuery(); }  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Код вы мощно выделили чуть глаза не сломал. 
		
		
		
		
		
		
		
	Есть кнопочка X++, когда сообщения пишите. Читается лучше. 1) Не понятно зачем вы написали delete TableTmp 2) В init формы написали датасорс.setTmpData(тмп_таблица)?  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			ДаЮ но аналогичный метод на таблице работает на 100%, в нем while select другой только
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Еще ньюанс - у вас эта временная таблица, как я вижу, заполняется на сервере 
		
		
		
		
		
		
			
		
		
		
		
	Плохо. Временный таблицы плохо (НЕ) работают с клиент-серверным взаимодействием. Попробуйте, для начала, изменить модификатор на client в статическом методе, чтобы подтвердить/отбросить этот вариант/гипотезу  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от kashperuk
			 
 
			Еще ньюанс - у вас эта временная таблица, как я вижу, заполняется на сервере 
		
	Плохо. Временный таблицы плохо (НЕ) работают с клиент-серверным взаимодействием. Попробуйте, для начала, изменить модификатор на client в статическом методе, чтобы подтвердить/отбросить этот вариант/гипотезу  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нашел ошибку в запросе, говорит, что joined курсор был использован в другом операторе select. Могу я в объявлении переменных (временная таблица) использовать два разных именования для одной таблицы?
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всем огромное спасибо, вопрос снят (дело было к вечеру....))))
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Так в чем состояла проблема, и в чем заключалось решение?
		 
		
		
		
		
		
		
			
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 :o) 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Всем привет! 
		
		
		
		
		
		
			Заполняем временную таблицу данными из castTrans.. Для поледующего вызова формы CastTrans, по нажатию на строчку отчёта, чтобы развернуть сумму отчёта и посмотреть проводки... Без правильного recId не весь функционал формы работает... подскажите как быть? Как обновить во временной таблице RecId? Спасибо! 
				__________________ 
		
		
		
		
	"Только на Бога не может быть обиды - если смерть пошлет, значит, жизни пришел предел, на то рождался,- а за все остальное на Земле есть и должен быть спрос!." Чингиз Торекулович Айтматов.  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Нужно при заполнении временной таблицы сразу же апдейтить recId, но перед апдейтом вызвать метод tmpTable.overwriteSystemfields(true). Пример; 
		
		
		
		
		
		
		
	X++: static void Job1(Args _args) { TmpAotImport tmpAotImport; ; tmpAotImport.TreeNodeName = 'XXX' tmpAotImport.insert(); tmpAotImport.selectForUpdate(true); tmpAotImport.overwriteSystemfields(true); tmpAotImport.RecId = 1111; tmpAotImport.update(); info(int2str(tmpAotImport.RecId)); }  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			to DSPIC 
		
		
		
		
		
		
		
	не верь глазам своим X++: static void Job1(Args _args) { TmpAotImport tmpAotImport; ; tmpAotImport.TreeNodeName = 'XXX'; tmpAotImport.insert(); tmpAotImport.selectForUpdate(true); tmpAotImport.overwriteSystemfields(true); tmpAotImport.RecId = 1111; tmpAotImport.update(); select tmpAotImport; // проверка info(int2str(tmpAotImport.RecId)); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: DSPIC (1), jeky (1). | |
| 
			
			 | 
		#15 | 
| 
			
			 Боец 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Уппс.. select я не дописал. При написании этого кода я сомневался что RecId можно заменить, так оно и есть. Спасибо.  
		
		
		
		
		
		
		
	2 jeky: тогда придется искать workaround.  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Дмитрий Ерин 
		
			
	 | 
	
	
	
		
		
		
		 
			
			jeky,  
		
		
		
		
		
		
		
	а почему решили использовать временную таблицу для этих целей? Может быть, стоит попробовать отдать форме сформированный запрос на реальную таблицу? Посмотрите, как похожий механизм реализован в оборотно-сальдовой ведомости: Расчеты с клиентами / Запросы / Оборотно-сальдовая ведомость. После выполнения запроса нажать правой кнопкой на интересующей строке и выбрать "Исходный документ". Реализацию механизма см. в методе: \Classes\RLedgerSheetEngine_TurnoverCustVend\originalDocuments  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			отвечу за jeky 
		
		
		
		
		
		
		
	надо выводить проводки с просроченными платежами с учетом периода, что запихнуть в квери не получится. есть мысли откуда берется RecId для временных таблиц?  | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вась, подскажи. А что даст, если получиться во временной таблице получить нужный recId, через что и как ты потом будешь его использовать? 
		
		
		
		
		
		
		
		
			Я так понимаю вы хотите реализовать механизм driilldown. А recId хотите использовать, как форточку для недостающих данных. Или не так. Как я делал такой механизм: 1) Снимал слепок(данные) с запроса в первую временную таблицу. 2) Группировал требуемые данные из первой временной таблицы, получая вторую. 3) Суммировал итоговые поля во второй, получал третью(Если нужны подитоги). 4) Результаты 2 и 3 выкидывал на элемент ActiveX, похожий на Excel. 5) Когда два раза щёлкаем на строке отчёта открывается форма со стороками из которых была получена данная строка. Как это реализуется в системе: берём запрос из первого пункта, считываем строку на которой сделали drilldown, получаем значения полей по которым у нас была группировка, достраиваем range-ми по ним наш запрос. Берём форму которая будет открываться по drillDown, получаем её первый датасорс formDataSource = formRun.dataSource(); и заменяем её query, нашим formDataSource.query(наш query). Если в 1 пункте данные считываются из одного запроса всё ок, driilldown реализуется нормально, если есть дополнительные find-ы, ифы, начинаются танцы с бубном, которые в результате могут ни к чему не превести. Что вполне логично, чтобы что-то раскрутить, нужно тоже самое перед этим скрутить. Последний раз редактировалось miklenew; 29.06.2008 в 08:08.  | 
| 
	
 | 
| 
			
			 | 
		#19 | 
| 
			
			 ---------------- 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Все верно 
		
		
		
		
		
		
		
	Цитата: 
	
		
			если есть дополнительные find-ы, ифы, начинаются танцы с бубном, которые в результате могут ни к чему не привести.
		
	 
formDatasource.cursor().setTmp; formDatasource.cursor().setTmpData(tmpCustTrans); Получается все красиво... форма привычная, данные понятны, сортировки, фильтры, переходы к основным таблицам, просмотр исходного документа, докумнта ГК и т.д. и т.п... НО нет сопоставлений, истории, открытых проводок, так как все это делается через... RecId, который не совпадает с реальным. Решается это добавлением join со временной таблицей в исходном formDatasource. Но остался нерешенным вопрос "откуда берется RecId для временной таблицы и можно ли этим управлять"  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: miklenew (2), jeky (1). | |
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
Создал дублированием таблицу CustTrans. Поставил Tempory да. Через dictField небось создал копию с оригинала CustTrans. Блин, почему в range ограничение на количество значений. Можно было бы все эти recId засунуть в query и не парится.  | 
| 
	
 |