Показать сообщение отдельно
Старый 20.12.2011, 13:59   #6  
Ace of Database is offline
Ace of Database
Участник
Аватар для Ace of Database
 
877 / 649 (23) +++++++
Регистрация: 14.10.2004
Нет, все-таки и в АХ30 вместо '==' toString выдает '=' и вместо '||' выдает 'or'.
Видимо, я спутал случаи, когда надо кусок кода из Аксапты вырезать и анализировать через SQL Management Studio

Указанный ниже джоб выдает практически одинаковые результаты в АХ30 и в АХ2009

В АХ30 результат такой:
SELECT * FROM InventTable WHERE ((ItemId = 123 OR ItemId = 124)) EXISTS JOIN * FROM InventTableModule WHERE InventTable.ItemId = InventTableModule.ItemId AND ((ModuleType = Склад))

В АХ2009 результат такой:
SELECT FIRSTFAST * FROM InventTable WHERE ((ItemId = N'123' OR ItemId = N'124')) EXISTS JOIN FIRSTFAST * FROM InventTableModule WHERE InventTable.ItemId = InventTableModule.ItemId AND ((ModuleType = 0))

Кстати, очень умно Аксапта2009 добавляет FirstFast, видимо, чувствует, что идет фильтрация по уникальному индексу. И еще удобно, что вместо "Склад" пишет значение 0.

PHP код:
static void Job471(Args _args)
{
    
Query                   Query;
    
QueryRun                QueryRun;
    
QueryBuildDatasource    qbds;
    ;
    
Query = new Query();
    
qbds Query.addDataSource(tableNum(InventTable));
    
qbds.addRange(fieldNum(InventTableItemId)).value("123, 124");

    
qbds qbds.addDataSource(tableNum(InventTableModule));
    
qbds.addRange(fieldNum(InventTableModuleModuleType)).value(queryValue(ModuleInventPurchSales::Invent));
    
qbds.addLink(fieldNum(InventTableItemId), fieldNum(InventTableModuleItemId));
    
qbds.joinMode(JoinMode::ExistsJoin);

    
QueryRun = new QueryRun(Query);
    
info(QueryRun.query().dataSourceNo(1).toString());


Последний раз редактировалось Ace of Database; 20.12.2011 в 14:02.