|  23.07.2007, 17:04 | #1 | 
| Участник | Строки временной таблицы с разными DataAreaId 
			
			Добрый день! Хочу во временную таблицу запихать строки из разных компаний. Например: X++: static void Job27(Args _args) { CustTrans custTrans; custTrans tmpcustTrans; ; tmpcustTrans.setTmp(); custTrans.company("S11"); select custTrans; tmpcustTrans.company("S11"); tmpcustTrans.data(custTrans); tmpcustTrans.insert(); while select tmpcustTrans { info(tmpcustTrans.dataAreaId); } custTrans = null; custTrans.company("S10"); select custTrans; tmpcustTrans.company("S10"); tmpcustTrans.data(custTrans); tmpcustTrans.insert(); while select tmpcustTrans { info(tmpcustTrans.dataAreaId); } } S11 S10 S10 Т.е. в итоге во временной таблице в поле dataAreaId стоит S10, Но я же записыват туда запись с компанией S11. Почему получилось так, что компания в записях изменилась? | 
|  | 
|  23.07.2007, 17:10 | #2 | 
| Программатор | 
			
			Потомучто Вы инициализировали таблицу в одной компании, и данные в нее будут записываться в разрезе данной компании.  Да и поле DataAreaId низя менять вроде как ни руками ни программно... А вообще а дебагере хорошовидно что как куда вставляется. ИМХО луче использовать changeCompany для игры с компаниями...
		 Последний раз редактировалось Sada; 23.07.2007 в 17:13. | 
|  | 
|  23.07.2007, 17:12 | #3 | 
| Участник | 
			
			а что понимается под инициализацией таблицы?
		 | 
|  | 
|  23.07.2007, 17:18 | #4 | 
| Участник | Цитата: 
		
			Сообщение от Sada
			   Потомучто Вы инициализировали таблицу в одной компании, и данные в нее будут записываться в разрезе данной компании.  Да и поле DataAreaId низя менять вроде как ни руками ни программно... А вообще а дебагере хорошовидно что как куда вставляется. ИМХО луче использовать changeCompany для игры с компаниями... | 
|  | 
|  23.07.2007, 17:24 | #5 | 
| Участник | 
			
			А зачем вам этот код компании? Данные вставляются верно. Проверьте, к примеру, выведя другое поле на экран. Получите записи из нескольких компаний. А то, в какой компании они были изначально, имхо, не так важно X++: static void Job30(Args _args) { CustTrans custTrans; custTrans tmpcustTrans; ; tmpcustTrans.setTmp(); changecompany('S11') { custTrans = null; select firstonly custTrans; buf2buf(custTrans, tmpcustTrans); tmpcustTrans.doInsert(); } while select tmpcustTrans { info(tmpcustTrans.AccountNum); } changecompany('S10') { custTrans = null; select firstonly custTrans; buf2buf(custTrans, tmpcustTrans); tmpcustTrans.doInsert(); } while select tmpcustTrans { info(tmpcustTrans.AccountNum); } } | 
|  | 
|  23.07.2007, 17:29 | #6 | 
| Участник | Цитата: Я подозреваю, что для этих целей придется заводить отдельное поле во временной(результирующей) таблице. Быть может есть возможность, всетаки, обойтись без добавления доп. поля? | 
|  | 
|  23.07.2007, 17:33 | #7 | 
| Участник | Цитата: Вам придется сначала: 1. либо разобраться с витруальными компаниями 2. либо полностью закрыть для себя возможность работать с вирутальными компаниями в будущем. И уж совершенно однозначно вы перекрываете себе возможность работать с общими для всех компаний таблицами. Будьте осторожны с dataareaid. Команда cangecompany("aaa") не всегда приводит к тому, что в данной таблице dataareaid будет равна aaa. Читайте про виртуальные компании. | 
|  | 
|  23.07.2007, 17:33 | #8 | 
| Программатор | 
			
			Да заведите поле и не мучьтеся...
		 | 
|  | 
|  23.07.2007, 17:36 | #9 | 
| Участник | Цитата:  Стоит ли ей пользоваться? X++: static void Job30(Args _args) { CustTrans custTrans; custTrans tmpcustTrans; ; tmpcustTrans.setTmp(); changecompany('S11') { custTrans = null; select firstonly custTrans; buf2buf(custTrans, tmpcustTrans); tmpcustTrans.overwriteSystemfields(true); tmpcustTrans.(fieldNum(CustTrans, DataAreaId)) = curExt(); tmpcustTrans.doInsert(); } while select tmpcustTrans { info(tmpcustTrans.dataareaid); } changecompany('S10') { custTrans = null; select firstonly custTrans; buf2buf(custTrans, tmpcustTrans); tmpcustTrans.overwriteSystemfields(true); tmpcustTrans.(fieldNum(CustTrans, DataAreaId)) = curExt(); tmpcustTrans.doInsert(); } while select tmpcustTrans { info(tmpcustTrans.dataareaid); } } | 
|  | 
|  23.07.2007, 17:46 | #10 | 
| Участник | |
|  | 
|  23.07.2007, 17:50 | #11 | 
| Участник | Цитата: Да, думаю стоит добавить просто поле для этих целей. | 
|  | 
|  23.07.2007, 18:30 | #12 | 
| Member | Цитата: 
		
			Сообщение от PavelSR
			
			 ... при выборке данных получаются некорректные данные. ... Помните в Винни Пухе: "Это неправильные пчелы, и они делают неправильный мед". Так и вы сейчас точно так же говорите. Поддерживаю вариант с добавлением поля для компании. 
				__________________ С уважением, glibs® | 
|  | 
|  23.07.2007, 19:06 | #13 | 
| MCT | 
			
			Можно еще и прямой запрос попробовать Хотя для этого придется все равно создавать таблицу с полем, так что от поля не уйти   Последний раз редактировалось MikeR; 23.07.2007 в 19:13. Причина: так будет вернее | 
|  | 
|  23.07.2007, 19:14 | #14 | 
| Участник | 
			
			Э. Прямой запрос к временной таблице? Это как? 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  23.07.2007, 19:28 | #15 | 
| Member | 
			
			Наверное, создать в TempDb временную таблицу, заполнить ее курсором или запросом, а потом считать. Если речь идет о прямом подключении к MS SQL Server, а не о каком-то другом прямом запросе. Ну и что-то аналогичное можно сделать на Oracle, наверное.
		 
				__________________ С уважением, glibs® | 
|  | 
|  24.07.2007, 10:09 | #16 | 
| MCT | Цитата: 
		
			Прямой запрос к временной таблице? Это как?  Цитата: 
		
			Наверное, создать в TempDb временную таблицу
		
	 Последний раз редактировалось MikeR; 24.07.2007 в 10:10. Причина: цитата | 
|  | 
|  26.03.2008, 10:32 | #17 | 
| Участник | 
			
			Коллеги, подскажите, пожалуйста, как положить записи во временную таблицу действительно с разными DataAreaId, т.е. по компаниям? А то при наполнении временной таблицы записями из разных компаний возможны конфликты уникального индекса. P.S. Доп.поле заранее создать (и включить в индекс) не могу, т.к. таблица заранее неизвестна и создается из DictTable.makeRecord(). Последний раз редактировалось Yugene; 26.03.2008 в 10:35. | 
|  |