![]() |
#6 |
Участник
|
Ребята, я совершил ошибку, сократив свой вопрос и из-за этого тема не раскрылась и стала не совсем понятной.
Попытаюсь исправиться и подробно описать проблемку. На самом деле это задачка из учебного курса по X++ Итак, есть три таблицы: VetSpeciesTable - таблица типа животных (справочник: SpeciesID и Name). VetBreedTable - таблица пород (справочник: SpeciesID, BreedID и Name). VetCustPetTable - основная таблица (CustAccount, SpeciesID, BreedID). Есть запрос в котором проиллюстрированы все типы связей по этим таблицам. В запросе мы подтягиваем поля Name из таблиц VetSpeciesTable и VetBreedTable по соответствующим ID из таблицы VetCustPetTable: X++: { AAL_VetCustPetTable CustPetTable; AAL_VetBreedTable BreedTable; AAL_VetSpeciesTable SpeciesTable; while select CustPetTable order CustAccount join SpeciesTable where CustPetTable.SpeciesId == SpeciesTable.SpeciesId join BreedTable where (CustPetTable.SpeciesId == BreedTable.SpeciesId) &&(CustPetTable.BreedId == BreedTable.BreedId) { info(CustPetTable.CustAccount + ' - ' + int2str(CustPetTable.SpeciesId) + ' - ' + SpeciesTable.Name + ' - ' + int2str(CustPetTable.BreedId) + ' - ' + BreedTable.Name); countTable++; } } Мой вариант выдает размножение записей: X++: { Query query; QueryRun queryRun; QueryBuildDataSource dsCust, dsSpecies, dsBreed; QueryBuildRange qbr; VetCustPetTable CustPetTable; VetSpeciesTable SpeciesTable; VetBreedTable BreedTable; query = new Query(); dsCust = query.addDataSource(tableNum(VetCustPetTable)); dsSpecies = dsCust.addDataSource(tableNum(VetSpeciesTable)); dsSpecies.joinMode(JoinMode::OuterJoin); dsSpecies.addLink(FieldNum(VetCustPetTable, SpeciesId), fieldNum(VetSpeciesTable, SpeciesId)); dsBreed = dsCust.addDataSource(tableNum(VetBreedTable)); dsBreed.joinMode(JoinMode::InnerJoin); dsBreed.addLink(fieldNum(VetCustPetTable, SpeciesId), fieldNum(VetBreedTable, SpeciesId)); dsBreed.addLink(fieldNum(VetCustPetTable, BreedId), fieldNum(VetBreedTable, BreedId)); queryRun = new QueryRun(query); while (queryRun.next()) { CustPetTable = queryRun.get(TableNum(VetCustPetTable)); SpeciesTable = queryRun.get(TableNum(VetSpeciesTable)); BreedTable = queryRun.get(TableNum(VetBreedTable)); info(CustPetTable.CustAccount + ' - ' + int2str(CustPetTable.SpeciesId) + ' - ' + SpeciesTable.Name + ' - ' + int2str(CustPetTable.BreedId) + ' - ' + BreedTable.Name); countTable++; } } |
|
|
|