Текущее время: Вт, июл 29 2025, 16:04

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Изменение строки в цикле
СообщениеДобавлено: Пн, ноя 26 2007, 17:54 
Ассистент
Ассистент

Зарегистрирован:
Пн, июл 04 2005, 14:50
Сообщения: 47
Здравствуйте.
Как сделать, чтобы в цикле за изменяемым полем в таблице (ID+1) тянулась вся относящаяся к нему строка в таблице?

Получается:
1 А1 В1 С1
2 А1 В1 С1
3 А1 В1 С1
Нужно:
1 А1 В1 С1
2 А2 В2 С2
3 А3 В3 С3

Правильный вариант программы и мой неверный вариант на ABAP приведены ниже:

DECLARE
CURSOR c2 IS
SELECT nativecode, id, date_to, date_from FROM zzv_departments where level_id < 3;
A1 NUMBER := 0;
BEGIN
SELECT MAX (id) + 2 INTO A1 FROM zdepartments;
FOR acct IN C2 LOOP
INSERT INTO zdephier (id, infoobject, nodename, parent_id, link_id, dateto, datefrom, language_id, short_name, middle_name, long_name)
values (A1, '3', acct.nativecode, acct.id, '', acct.date_to, acct.date_from,'R', '2', '2', '2');
A1 := A1 + 1;
END LOOP;
END;
/
Мой неверный вариант на ABAPе выглядит так:

TABLES: ZDEPARTMENTS, ZDEPHIER.

DATA: c2 like ZDEPARTMENTS.
SELECT NATIVE_CODE ID DATE_TO DATE_FROM
FROM ZDEPARTMENTS INTO CORRESPONDING FIELDS OF c2
where level_id < 3.
ENDSELECT.

DATA A1 TYPE i.
A1 = 0.
SELECT max( ID ) INTO A1 FROM ZDEPARTMENTS.
A1 = A1 + 2.
DATA: c3 like ZDEPHIER OCCURS 0
with header line.

DO 10 times.

c3-ID = A1. c3-INFOOBJECT = '3'. c3-NODENAME = c2-NATIVE_CODE. c3-PARENT_ID = c2-ID.
c3-LINK_ID = ''. c3-DATETO = c2-DATE_TO. c3-DATEFROM = c2-DATE_FROM. c3-LANGUAGE_ID = 'R'.
c3-SHORT_NAME ='2'. c3-MIDDLE_NAME = '2'. c3-LONG_NAME = '2'. INSERT table c3.
A1 := A1 + 1.

ENDDO.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Изменение строки в цикле
СообщениеДобавлено: Пн, ноя 26 2007, 18:12 
Гуру-эксперт
Гуру-эксперт

Зарегистрирован:
Вт, сен 07 2004, 17:47
Сообщения: 2988
Девушка написал(а):
Здравствуйте.
Как сделать, чтобы в цикле за изменяемым полем в таблице (ID+1) тянулась вся относящаяся к нему строка в таблице?

Получается:
1 А1 В1 С1
2 А1 В1 С1
3 А1 В1 С1
Нужно:
1 А1 В1 С1
2 А2 В2 С2
3 А3 В3 С3

Правильный вариант программы и мой неверный вариант на ABAP приведены ниже:

.../
Мой неверный вариант на ABAPе выглядит так:

DATA: c2 like ZDEPARTMENTS.
SELECT NATIVE_CODE ID DATE_TO DATE_FROM
FROM ZDEPARTMENTS INTO CORRESPONDING FIELDS OF c2
where level_id < 3.
ENDSELECT.

...
SELECT max( ID ) INTO A1 FROM ZDEPARTMENTS.
...
..

Не изобретайте велосипед, используйте диапазон номеров!!!
И то что у вас объявлено как DATA: c2 like ZDEPARTMENTS, т.е. как структура, должно быть таблицей (т.к. FOR acct IN C2 LOOP),

_________________
"После" - не значит "вследствие"


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 26 2007, 18:26 
Ассистент
Ассистент

Зарегистрирован:
Пн, июл 04 2005, 14:50
Сообщения: 47
Спасибо за совет :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 26 2007, 19:33 
Ассистент
Ассистент

Зарегистрирован:
Пн, июл 04 2005, 14:50
Сообщения: 47
Посмотрела понятие диапазона http://sap-easy.net.ru/diap.htm
Работаю в BW и нужно просто добавить строки в таблицу в базе. Надеюсь найти более простой способ.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, ноя 26 2007, 22:33 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, ноя 23 2005, 13:37
Сообщения: 1805
Откуда: ECC 6.0
Пол: Мужской
Ошибка в том, что SELECT ... ENDSELECT само по себе образует цикл, в котором меняется c2. А Вы в конце добавили цикл DO ENDDO (почему-то до 10?...), в котором c2 не меняется.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, ноя 27 2007, 12:15 
Ассистент
Ассистент

Зарегистрирован:
Пн, июл 04 2005, 14:50
Сообщения: 47
10 - это пока не придумала условие окончания цикла. В ABAPе пишу 5ю программу всего. Теперь поменяю на SELECT. Спасибо!


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB