Бесконечный цикл в процедуре генекса - PullRequest
0 голосов
/ 09 июля 2019

У меня есть одна таблица с именем Categoria, которая имеет Category_ID первичный ключ и CategoriaPaiId внешний ключ с автоматическим взаимодействием с CategoriaId.

Мне нужно создать процедуру, которая возвращает дерево категорий.

Предполагается, что у меня есть эти категории с этими подкатегориями:

Скоропортящиеся> Напитки> Вино> Красное

В регистре Drinks мне нужно, чтобы переменная & Category_SubCategoriaNome возвращала этот varchar:

Скоропортящиеся> Напитки.

В регистре Red мне нужно, чтобы это возвращалось в переменной & Category_SubCategoriaNome строка:

Скоропортящиеся> Напитки> Вина

Это процедура, которую я создал:

&isTrue = true
&isAchou = true
do while &isTrue = true
    if &isAchou = true
            &isAchou = false    
            for each
                where CategoriaId = &CategoriaPaiId
                &CategoriaSubCategoriaNome = &CategoriaSubCategoriaNome+ " > " + CategoriaNome
                &isAchou = true
            endfor
        if &isAchou = false
            return
        endif
    endif
enddo

Но я получаю бесконечный цикл в этой процедуре.

1 Ответ

1 голос
/ 09 июля 2019

Я не уверен в структуре ваших транзакций. Для этого ответа я покажу вам, как получить иерархию имен категорий, используя формулу:

Категория транзакции:

CategoryId*
CategoryName
CategoryFullName  formula: GetCategoryFullName(CategoryId)
CategoryParentId  <nullable=Yes>
CategoryParentName

Категория подтипа КатегорияParentGroup

CategoryParentId* sbt CategoryId
CategoryParentName sbt CategoryName

Процедура GetCategoryFullName

в Правилах: parm(in: CategoryId, out: &CategoryFullName)

Источник:

for each
    &CategoryFullName = iif(CategoryParentId.IsNull(), 
                            CategoryName, 
                            GetCategoryFullName(CategoryParentId) + !' > ' + CategoryName)
endfor
...