Sapforum.Biz
Инструменты => ABAP - Инструментальные средства => SE38 - ABAP Редактор => Тема начата: Паганель от Апрель 21, 2011, 08:28:35 pm
-
Нет ни у кого примерчика (туговато что то получается что то выбрать), + поставка ...
Получается ситуация такая: есть заказ, по нему поставка, по поставке СФ, в большинстве случаев ошибочная, сторнирована, снова СФ уже по заказу, снова сторно, потом нормальная СФ но не проведенная ... ну в общем вариантов много, уже запарился, для каждого случившегося вылавливать и переделывать код...
Одним словом, ни у кого нету готовенького алгоритма, или бапишки (если работает быстренько)...
Мой пример кода, могу выложить, когда подключусь к системе...
-
Ну и для кого создан раздел SE37? Не я понимаю если бы там было 100 и одна страница, но там их всего ТРИ... ага и на второй странице: http://sapforum.biz/index.php/topic,203.0.html
-
Ну и для кого создан раздел SE37? Не я понимаю если бы там было 100 и одна страница, но там их всего ТРИ... ага и на второй странице: http://sapforum.biz/index.php/topic,203.0.html
О спасибо, поиск не работает, что-то, не находит... может у админов больше прав.... :)
-
О спасибо, поиск не работает, что-то, не находит... может у админов больше прав.... :)
Да нет просто страницы три, а поиск тут действительно плохо работает, может во второй версии форума исправили уже. Скоро обещают релиз.
-
Небольшой примерчик, того, что мне надо было (обратите внимание, в моем случае в заказе только одна поизциия):
DATA: vbelv TYPE vbfa-vbelv,
vbeln TYPE vbfa-vbeln, " СФ
posnn TYPE vbfa-posnn, " поз.
posnv TYPE vbfa-posnv.
DATA: l_vbeln type vbak-vbeln,
bill_num TYPE vbfa-vbeln, " СФ
rfwrt type vbfa-rfwrt.
l_vbeln = '28450'. " Для теста
" В моем случае, в заказе только 1 позиция
SELECT SINGLE posnr INTO posnv
FROM vbap
WHERE vbeln = l_vbeln.
SELECT SINGLE vbeln posnn INTO (vbeln, posnn)
FROM vbfa
WHERE vbelv = l_vbeln AND
posnv = posnv AND
vbtyp_n = 'M' AND
vbeln IN (
SELECT vbeln FROM vbrk
WHERE vbeln = vbfa~vbeln AND
rfbsk = 'C' AND sfakn = space AND fksto = space
).
IF sy-subrc EQ 0.
bill_num = vbeln.
SELECT SINGLE kzwi1 FROM vbrp
INTO rfwrt
WHERE vbeln = vbeln AND
posnr = posnn.
ENDIF.
-
Процедуру нужно разгрузить.
1) Выбираем ссылку на позицию фактуры (VBFA~VBTYP_N = 'M') из потока VBFA по номеру заказа клиента VBAK-VBELN, который является входным параметром процедуры, как я понял. Если число позиций > 1, то SELECT SINGLE меняем на SELECT INTO TABLE.
2) По номеру фактуры/позиции выбираем данные из VBRK/VBRP, проверяя VBRK~FKSTO <> 'X'. А условие VBRK~SFAKN <> space имеет смысл лишь для сторнирующих фактур (VBFA~VBTYP_N = 'N'), там как раз стоит номер прямой фактуры, у которой SFAKN уже пустое, зато FKSNO = 'X', это обычное SAP-овское дело. А поскольку тип N ты не выбираешь, то и лишняя обработка не нужна.
Если процедура будет использоваться для обработки >= 1000 сбытовых заказов в каком-либо онлайн-отчёте (бывает в сбыте :D), то лучше внимательно прочесть вот этот документ (http://sapforum.biz/index.php/topic,174.msg713.html#msg713). ;)
Ясно, что серия из SELECT SINGLE вкупе с совершенно лишним и даже вредным в данном случае подзапросом существенно замедлит процесс получения конечного результата при больших объёмах данных.
-
Если вдруг понадобится дебиторка FI, то найти документы можно в таблице BKPF по ключу из константы и номера сбытовой фактуры:
BKPF~AWTYP = 'VBRK' - константа
BKPF~AWKEY = VBRK-VBELN - номер сбытовой с-ф
-
Процедуру нужно разгрузить.
1) Выбираем ссылку на позицию фактуры (VBFA~VBTYP_N = 'M') из потока VBFA по номеру заказа клиента VBAK-VBELN, который является входным параметром процедуры, как я понял. Если число позиций > 1, то SELECT SINGLE меняем на SELECT INTO TABLE.
2) По номеру фактуры/позиции выбираем данные из VBRK/VBRP, проверяя VBRK~FKSTO <> 'X'. А условие VBRK~SFAKN <> space имеет смысл лишь для сторнирующих фактур (VBFA~VBTYP_N = 'N'), там как раз стоит номер прямой фактуры, у которой SFAKN уже пустое, зато FKSNO = 'X', это обычное SAP-овское дело. А поскольку тип N ты не выбираешь, то и лишняя обработка не нужна.
Если процедура будет использоваться для обработки >= 1000 сбытовых заказов в каком-либо онлайн-отчёте (бывает в сбыте :D), то лучше внимательно прочесть вот этот документ (http://sapforum.biz/index.php/topic,174.msg713.html#msg713). ;)
Ясно, что серия из SELECT SINGLE вкупе с совершенно лишним и даже вредным в данном случае подзапросом существенно замедлит процесс получения конечного результата при больших объёмах данных.
Спасибо за критику, жаль что ты раньше не написал ....
-
Спасибо за критику, жаль что ты раньше не написал ....
Это не критика, это рекомендации. Подправишь код, если что, там не так его много...