17.06.2008, 15:09 | #1 |
Участник
|
Думаю, что такие таблицы, как InventTrans, InventBatch и InventDim - это стандартные таблицы , которые присутствуют во всех версиях Аксапты.
Помогите, пожалуйста, написать корректно запрос вида: "В текущей компании найти самую первую проводку прихода со статусом Приобретено по коду номенклатуры, конфигурации и номеру партии из строки накладной." <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]select[/color] [color=:blue]firstonly[/color] InventTransCreator [color=:blue]where[/color] InventTransCreator.StatusReceipt [color=:blue]==[/color] StatusReceipt::Purchased && InventTransCreator.ItemId [color=:blue]==[/color] custInvoiceTrans.ItemId && InventTransCreator.ConfigId [color=:blue]==[/color] custInvoiceTrans.ConfigId && [color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color]</div> Проблема в том, что необходимо как-то связать 3 таблицы. |
|
17.06.2008, 17:25 | #2 |
Участник
|
неужели никто не знает?
|
|
17.06.2008, 22:21 | #3 |
Участник
|
Цитата:
Сообщение от Aliaksei_Berkau
Думаю, что такие таблицы, как InventTrans, InventBatch и InventDim - это стандартные таблицы , которые присутствуют во всех версиях Аксапты.
Помогите, пожалуйста, написать корректно запрос вида: "В текущей компании найти самую первую проводку прихода со статусом Приобретено по коду номенклатуры, конфигурации и номеру партии из строки накладной." <div class='XPPtop'>X++</div><div class='XPP'>[color=:blue]select[/color] [color=:blue]firstonly[/color] InventTransCreator [color=:blue]where[/color] InventTransCreator.StatusReceipt [color=:blue]==[/color] StatusReceipt::Purchased && InventTransCreator.ItemId [color=:blue]==[/color] custInvoiceTrans.ItemId && InventTransCreator.ConfigId [color=:blue]==[/color] custInvoiceTrans.ConfigId && [color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color][color=:blue]?[/color]</div> Проблема в том, что необходимо как-то связать 3 таблицы. Проблема со словом "первый". Понятно, что первые находятся в самой ранней дате. Но внутри этой даты может быть несколько проводок. Какая из них является первой? Один из вариантов <div class='XPPtop'>X++</div><div class='XPP'> [color=:blue]select[/color] [color=:blue]firstonly[/color] InventTrans order [color=:blue]by[/color] Datefinansical, InventTransId [color=:blue]where[/color] InventTrans.StatusReceipt [color=:blue]==[/color] StatusReceipt::Purchased && InventTransCreator.ItemId [color=:blue]==[/color] custInvoiceTrans.ItemId join InventDim [color=:blue]where[/color] inventdim.inventDimId [color=:blue]==[/color] InventTrans.InventDimId join Inventdim2 [color=:blue]where[/color] inventdim2.inventDimId [color=:blue]==[/color] custInvoiceTrans.InventDimId && inventdim2.ConfigId [color=:blue]==[/color] inventdim.ConfigId && inventdim2.inventBatchId [color=:blue]==[/color] inventdim.myBatchId </div> Внимание - писал без Аксапты, поэтому могут быть синтаксические ошибки. Но суть понятна. Обратите внимание, что таблица InventBatch избыточна. Обратите внимание, что мой запрос написан чертовски неоптимально и требует оптимизации |
|
18.06.2008, 12:56 | #4 |
Участник
|
"Походу" вот такой запросик
Код: queryTMP = new Query (QueryStr(QueryGeterRep9)); queryTMP.datasourceTable(tablenum(InventTrans)).FindRange(fieldnum(InventTrans,StatusReceipt)).Value(strfmt('%1',StatusReceipt::Purchased)); queryTMP.datasourceTable(tablenum(InventTrans)).FindRange(fieldnum(InventTrans,ItemId)).Value(strfmt('%1',мой_ItemId)); queryTMP.datasourceTable(tablenum(InventTrans)).FindRange(fieldnum(InventTrans,ConfigId)).Value(strfmt('%1',мой_ConfigId)); queryTMP.datasourceTable(tablenum(InventDim)).FindRange(fieldnum(InventDim,inventBatchId)).Value(strfmt('%1',мой_inventBatchId())); queryRunTMP = new QueryRun(queryTMP); while (queryRunTMP.next()) { InventTransCreator = queryRunTMP.get(tableNum(InventTrans)); } |
|