Страница 1 из 1

Пробежать по очереди с DIM полями на борту

Добавлено: 20 Январь 2016, 21:53
ingasoftplus
c63, ABC

Для вывода всей информации по очереди (название и поля и его значение) я использую след код (INV:Queue моя очередь)

Код: Выделить всё

loop QueueNdx = 1 to records(INV:Queue)
get(INV:Queue, QueueNdx)

 Ndx = 0
 loop
  Ndx      += 1
  AnyVar   &= WHAT(INV:Queue, Ndx)  !return filed's value
  AnyVarFN  = WHO (INV:Queue, Ndx)  !return field name

  if AnyVar &= Null then break.

    ! тут я знаю AnyVarFN (имя поля) и AnyVar (значение)
  .
..
Все работает если ней нет полей с DIM. А сечас столкнулся с очередью с массивами и конечно получаю рантайм ошибку

Кто-нибудь может доработать код, чтоб он автоматом определял еще если поле с массивом, то пробегать по всем элементам и получать также пару Поле[x] = Значение ?

queue выгладит примено так:

Код: Выделить всё

INV:Queue            QUEUE,PRE()                           !
....
INV:TaxCodeSysRef    DECIMAL(8)                            !this works
INV:NLAcctB          STRING(14),DIM(5)                     !gives error
....
end 

Пробежать по очереди с DIM полями на борту

Добавлено: 20 Январь 2016, 22:05
Дед Пахом
Ну наверно надо юзать форму WHAT( group, number ,dimension )

Пробежать по очереди с DIM полями на борту

Добавлено: 20 Январь 2016, 22:14
ingasoftplus
Дед Пахом писал(а): Ну наверно надо юзать форму WHAT( group, number ,dimension )
ну наверное надо :) но я поэтому и спрашиваю - как в динамике это сделать? хочется работающий пример :oops:

Пробежать по очереди с DIM полями на борту

Добавлено: 20 Январь 2016, 22:17
Дед Пахом
ну типа (не проверял)

Код: Выделить всё

loop ndim=1 to 999999
  dimref &= what(grpref, nfield, ndim)
  if dimref &= null
    !нет такого индекса в массиве, или вообще нет массива если ndim=1
    break
  end
end

Пробежать по очереди с DIM полями на борту

Добавлено: 21 Январь 2016, 1:49
Admin
Используйте HOWMANY

Пробежать по очереди с DIM полями на борту

Добавлено: 21 Январь 2016, 21:39
ingasoftplus
Admin писал(а):Используйте HOWMANY
Именно, Жень! разобрался :cat:

Пробежать по очереди с DIM полями на борту

Добавлено: 22 Январь 2016, 2:02
Admin
Но не первый раз встречаюсь (и в некоторых других языках) что для двумерных массивов типа A(2,2) возвращает 4
Т.е. двумерные и выше уже не переберешь?