Текущее время: Пт, июл 04 2025, 05:18

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Помогите с кодом, пожалуйста
СообщениеДобавлено: Чт, июн 15 2006, 08:02 
Гость
Прежде чем спросить вас я воспользовалась поиском по форуму, но вопрос все-таки остался. Так что помогите, пожалуйста.

Задача.
Найти Reference документов из связки таблиц BKPF-BSEG (не хочется использовать BSEG, но, увы, без нее никак), соответствующие определенным условиям и запомнить его. Опять сделать выборку документов из BKPF-BSEG, но уже с другими условиями, совершенно отличающимися от первой выборки.
И , наконец, вывести на экран те документы из второй выборки, у которых номера документов не равны запомненным Reference из первой выборки.

Насколько я понимаю, и первую и вторую выборки надо делать в internal tables. А как быть дальше ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения: Re: Помогите с кодом, пожалуйста  Тема решена
СообщениеДобавлено: Чт, июн 15 2006, 08:08 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, ноя 12 2004, 10:44
Сообщения: 370
Откуда: Москва
TB написал(а):
Прежде чем спросить вас я воспользовалась поиском по форуму, но вопрос все-таки остался. Так что помогите, пожалуйста.

Задача.
Найти Reference документов из связки таблиц BKPF-BSEG (не хочется использовать BSEG, но, увы, без нее никак), соответствующие определенным условиям и запомнить его. Опять сделать выборку документов из BKPF-BSEG, но уже с другими условиями, совершенно отличающимися от первой выборки.
И , наконец, вывести на экран те документы из второй выборки, у которых номера документов не равны запомненным Reference из первой выборки.

Насколько я понимаю, и первую и вторую выборки надо делать в internal tables. А как быть дальше ?


ну если постановка такова, то дальше loop по второй таблице, в loop'е read первой. и если он удался - удалять запись.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 10:24 
Гость
Спасибо, я попробовала сделать так, но результат не тот (записи задваиваются). Может быть что-то не так в программе. ?

REPORT New
DATA: BEGIN OF itab1 OCCURS 0,
xblnr LIKE bsis-xblnr,
belnr LIKE bsis-belnr,
gjahr LIKE bsis-gjahr,
END OF itab1.

DATA: BEGIN OF itab2 OCCURS 0,
belnr LIKE bsis-belnr,
gjahr LIKE bsis-gjahr,
hkont LIKE bsis-hkont,
xblnr LIKE bsis-xblnr,
END OF itab2.

PARAMETERS: p_cocd1 like bsis-bukrs,p_cocd2 like bsis-bukrs.
SELECT-OPTIONS s_prd1 FOR bsis-monat.
SELECT-OPTIONS s_type1 FOR bsis-blart.
SELECT-OPTIONS s_acc1 FOR bsis-hkont.

SELECT-OPTIONS s_prd2 FOR bsis-monat.
SELECT-OPTIONS s_type2 FOR bsis-blart.
SELECT-OPTIONS s_acc2 FOR bsis-hkont.

START-OF-SELECTION.

SELECT bsis~xblnr bsis~belnr bsis~gjahr
INTO CORRESPONDING FIELDS OF ITAB1
FROM bsis
WHERE bsis~bukrs = p_cocd1
AND bsis~monat IN s_prd1
AND bsis~blart IN s_type1
AND bsis~hkont IN s_acc1.

ENDSELECT.

SELECT bsis~belnr bsis~xblnr bsis~bukrs bsis~hkont bsis~gjahr
INTO CORRESPONDING FIELDS OF TABLE itab2
FROM bsis
WHERE bsis~bukrs = p_cocd2
AND bsis~monat IN s_prd2
AND bsis~blart IN s_type2
AND bsis~hkont IN s_acc2.

ENDSELECT.

SORT itab2 by belnr gjahr.

LOOP AT itab2.
READ TABLE itab1 with key xblnr = itab2-belnr gjahr = itab2-gjahr .
IF sy-subrc = 0.
DELETE itab2.
ENDIF.
MODIFY itab2.
ENDLOOP.

write / itab2-belnr.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 10:35 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, июн 16 2005, 10:29
Сообщения: 336
Откуда: Минск->Москва
Пол: Мужской
Вам точно надо xblnr сравнивать с belnr?(посмотрите в отладчике там могут позиции в xblnr съезжать...) и зачем еще modify в конце?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 10:46 
Гость
Да, мне нужно сравнивать belnr, полученный из второго запроса с xblnr из первого запроса.

А почему могут съезжать позиции и почему не надо modify ?

p.s.Прошу прощения, если вопросы глупые.


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 10:59 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, июн 16 2005, 10:29
Сообщения: 336
Откуда: Минск->Москва
Пол: Мужской
на сколько помню, xblnr char 16, belnr char 10... разная длина раз, учитывать нули впереди надо... а modify делается, если вы что то изменили и хотите эту инфу во внутренней таблице поменять... там вроде нет таких операций, delete бех этого прокатит :wink:


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 11:48 
Специалист
Специалист

Зарегистрирован:
Чт, авг 19 2004, 07:31
Сообщения: 234
Откуда: Нижнекамск
1.

Code:
SELECT bsis~xblnr bsis~belnr bsis~gjahr
INTO CORRESPONDING FIELDS OF ITAB1
FROM bsis
WHERE bsis~bukrs = p_cocd1
AND bsis~monat IN s_prd1
AND bsis~blart IN s_type1
AND bsis~hkont IN s_acc1.

ENDSELECT.


этот ваш код помещает данные не в таблицу а в рабочую область построчно в цикле
2. при выборках в таблицу ENDSELECT не нужен


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 12:30 
Гость
Спасибо за разъяснения.
Так как все-таки мне решить мою задачу, подскажите ?
1. Как учесть нули при сравнении xblnr (char 16) c belnr (char 10) ?


Пометить тему как нерешенную
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 12:46 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Чт, июн 16 2005, 10:29
Сообщения: 336
Откуда: Минск->Москва
Пол: Мужской
смотря как эта ссылка заполняется;) чтобы вам было быстро и удобно, надо чтобы туда заносилось со всем нулями и с первой позиции. Потому что проверять все варианты с возможнфми нулями, это будет долго.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, июн 15 2006, 23:12 
Президент
Президент

Зарегистрирован:
Пт, апр 28 2006, 22:39
Сообщения: 2514
Откуда: North Taxolina, USA
Пол: Женский
По-моему для начала это должно выглядеть примерно так:

Code:
SELECT xblnr belnr gjahr
INTO CORRESPONDING FIELDS OF TABLE ITAB1
FROM bsis
WHERE bukrs = p_cocd1
AND monat IN s_prd1
AND blart IN s_type1
AND hkont IN s_acc1.

SELECT belnr xblnr bukrs hkont gjahr
INTO CORRESPONDING FIELDS OF TABLE itab2
FROM bsis
WHERE bukrs = p_cocd2
AND monat IN s_prd2
AND blart IN s_type2
AND hkont IN s_acc2.

SORT itab2 by belnr gjahr.

LOOP AT itab2.
READ TABLE itab1 with key xblnr = itab2-belnr gjahr = itab2-gjahr.
IF sy-subrc = 0.
DELETE itab2.
ENDIF.
ENDLOOP.


Только для чего там SORT - не совсем понятно...


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

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


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

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


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

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