|  21.08.2006, 14:32 | #1 | 
| Участник |  Выбор записей по неизвестным заранее полям 
			
			Здравствуйте! Хочу узнать как можно осущесвтить выбор записей из таблицы при след-их условиях: 1. Таблица задается своим идентификатором(т.е. за ранее не известна) 2. Количество полей по которым осуществляется поиск неизвестно заранее 3. Поля задаются своими идентификаторами(в контейнере, например...) Особенность такова, что в рез-те поиска получается только одна запись, т.е создание динамического запроса(как мне кажется не очень подходит....) Что используется для таких задач? | 
|  | 
|  21.08.2006, 14:39 | #2 | 
| Участник | 
			
			Query
		 | 
|  | 
|  21.08.2006, 14:46 | #3 | 
| Участник | Цитата: 
		
			Сообщение от PavelSR
			
			 Особенность такова, что в рез-те поиска получается только одна запись, т.е создание динамического запроса(как мне кажется не очень подходит....) Что используется для таких задач? Код: Q = new Query(); QBDS = Q.addDataSource(_TableId); QBDS.addRange(_FieldId1).value(_FieldValue1); ... QBDS.addRange(_FieldIdn).value(_FieldValuen); Qr = new QueryRun(Q); Qr.next(); common = Qr.GetNo(1); С уважением, itfs. | 
|  | 
|  21.08.2006, 14:47 | #4 | 
| Участник | Цитата: 
		
			Сообщение от Zan
			
			 Query   | 
|  | 
|  21.08.2006, 14:50 | #5 | 
| Участник | 
			
			см. сообщение от itfs
		 | 
|  | 
|  21.08.2006, 14:52 | #6 | 
| Axapta | 
			
			А чем Query не устраивает?
		 | 
|  | 
|  21.08.2006, 14:57 | #7 | 
| Участник | Цитата: 
		
			Сообщение от oip
			
			 А чем Query не устраивает? | 
|  | 
|  21.08.2006, 15:04 | #8 | 
| Участник | 
			
			Query - это нужный вам конструктор запросов, обернутый в класс. Ничего лишнего. С уважением, itfs. | 
|  | |
| За это сообщение автора поблагодарили: PavelSR (1). | |
|  21.08.2006, 15:10 | #9 | 
| Участник | 
			
			Ну, вообще-то, можно еще через RunBuf. Смотрете класс/форму SysTableBrowser
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  21.08.2006, 15:23 | #10 | 
| Участник | 
			
			По-моему это жестоко   мне кажется, автор поста только хотел улучшить читабельность своего кода ... впрочем, тоже конечно вариант. С уважением, itfs. | 
|  | 
|  21.08.2006, 15:31 | #11 | 
| Участник | Цитата: 
		
			Сообщение от AndyD
			
			 Ну, вообще-то, можно еще через RunBuf. Смотрете класс/форму SysTableBrowser  (я впервые вижу эту функцию...) На сколько я понимаю она предназначена для выполнения кода, укзанного в качестве первого параметра,   | 
|  | 
|  21.08.2006, 15:31 | #12 | 
| Участник | 
			
			Ну, это ему самому решать.
		 
				__________________ Axapta v.3.0 sp5 kr2 | 
|  | 
|  21.08.2006, 15:38 | #13 | 
| Участник | X++: static void Job139(Args _args) { Common cm; InventTable it; DictTable dictTable = new DictTable(tablenum(InventTable)); DictField dictField; str buf; xppCompiler compiler = new xppCompiler(); ; select it where it.ItemId like "1*"; dictField = dictTable.fieldObject(fieldnum(InventTable, itemId)); buf = strfmt("%1 getRecord()\n{\n%1 %1;\n;\n select %1 where %1.%2 == \"%3\";\n return %1;}", dictTable.name(), dictField.name(), it.ItemId); if (compiler.compile(buf)) { cm = compiler.execute(); // или // cm = runbuf(buf); info(cm.(fieldnum(InventTable, itemId)) + "::" + cm.(fieldnum(InventTable, itemName))); } else info(compiler.errorText()); } 
				__________________ Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.08.2006 в 15:41. | 
|  | 
|  21.08.2006, 15:49 | #14 | 
| Участник | 
			
			Да, кстати, по поводу runbuf и иже с ним  утечка памяти в аксапта Можно так-же сделать так X++:     cm = dictTable.makeRecord();
    buf = strfmt("void getRecord(%1 %1)\n{\n;\n select %1 where %1.%2 == \"%3\";\n}",
            dictTable.name(), dictField.name(), it.ItemId);
    if (compiler.compile(buf))
    {
        compiler.execute(cm);А вот еще про runbuf() Пример использования RunBuf В общем - на свой страх и риск. 
				__________________ Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.08.2006 в 15:52. | 
|  | 
|  21.08.2006, 15:52 | #15 | 
| Участник | 
			
			Замечательно! Однако мне не понятна следующая строчка: X++: select it where it.ItemId like "1*"; | 
|  | 
|  21.08.2006, 15:58 | #16 | 
| Участник | 
			
			Ну это просто для примера, чтобы получить itemId для передачи в функцию PS Что-то я разнукался   
				__________________ Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 21.08.2006 в 16:01. | 
|  | 
|  21.08.2006, 16:16 | #17 | 
| Lean Six Sigma | 
			
			Прямой запрос к базе будет получше, чем RunBuf.
		 | 
|  |