Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => Тема начата: knopix от Июнь 30, 2011, 09:08:39 am
-
Здравствуйте...
Не могу понять почему код между "AT NEW ... " и "ENDAT" отрабатывает несмотря на то, что значение поля не менялось.
Код примерно следующий:
...
SORT valtab BY ZWBGOSNUM ASCENDING.
LOOP AT valtab.
...
AT NEW ZWBGOSNUM.
...
ENDAT.
ENDLOOP.
Поле не уникальное и не ключевое. Наверное, тут могут быть какие-то нюансы. Подскажите, пожалуйста, в чём может быть дело.
-
Поле не уникальное и не ключевое. Наверное, тут могут быть какие-то нюансы. Подскажите, пожалуйста, в чём может быть дело.
Если я правильно помню, то сортировка должна быть выполнена по этому полю перед циклом LOOP AT.... ENDLOOP.
-
Я так и делаю... В отладчике посмотрел содержимое внутренней таблицы - всё корректно отсортировано. Тем не менее, "AT NEW" отрабатывает на каждой строчке. :(
-
Я так и делаю... В отладчике посмотрел содержимое внутренней таблицы - всё корректно отсортировано. Тем не менее, "AT NEW" отрабатывает на каждой строчке. :(
Давай пример кода и содержимое таблицы перед входом в цикл.. пяток записей, если это возможно.
-
В общем, проблема решилась тем, что отказался от использования этого поля (гос. номер) и использовал внешний ключ (id ТС) который поместил в начало структуры, которую использую для вывода. Видимо, необходимо, чтобы поле стояло на первом месте.
-
В общем, проблема решилась тем, что отказался от использования этого поля (гос. номер) и использовал внешний ключ (id ТС) который поместил в начало структуры, которую использую для вывода. Видимо, необходимо, чтобы поле стояло на первом месте.
Похоже на то, вот цитата из HELP по F1:
Control levels are defined by the beginning or end of a group of lines with the same content in the component compi (where i = 1, 2, and so on) and in the components to the left of compi. The control breaks take place when the content of the component compi or another component to the left of compi changes.
Если хотя бы один из компонентов "левее" названного (включая его самого) меняется, то срабатывает...
-
Спасибо... Буду приучать себя внимательно читать help :)
-
Если не секрет, какое действие выполняете на данном уровне контроля (AT NEW ... ENDAT)? Агрегируете суммы по ZWBGOSNUM?
-
Да... я сначала считал прмежуточные суммы в переменную и выводил в exel-форму. Теперь делаю немного по-другому, по количеству строк определяю адрес последней ячейки и вывожу '=sum(R[1]C:R[' rcnt ']C)'.
AT NEW zwbsrn. "zwbgosnum.
copycell 8 1 8 13 i 1.
.....
crnt = i.
i = i + 1.
ENDAT.
.....
i = i + 1.
AT END OF zwbsrn.
rcnt = i - crnt - 1.
CONCATENATE '=sum(R[1]C:R[' rcnt ']C)' INTO sumrcrg.
CONCATENATE '=sum(R[1]C:R[' rcnt ']C)' INTO sumfuel.
CONCATENATE '=sum(R[1]C:R[' rcnt ']C)' INTO sumnorm.
CONCATENATE '=sum(R[1]C:R[' rcnt ']C)' INTO sumfact.
putcell crnt 4 sumrcrg.
putcell crnt 8 sumfuel.
putcell crnt 9 sumnorm.
putcell crnt 10 sumfact.
ENDAT.