Текущее время: Чт, июл 03 2025, 07:34

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


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

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


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

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