Текущее время: Вт, авг 12 2025, 21:06

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: Yandex [Bot]


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

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