Текущее время: Пт, май 16 2025, 02:18

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Код для суммирования по Invoice Reference
СообщениеДобавлено: Пн, окт 24 2005, 09:44 
Гость
Опять обращаюсь к вам за помощью.
Есть проблема - создано дополнительное поле INVAMO, которое должно заполняться след. образом :

для документов, у которых BSEG-REBZG (invoice refer) IS INITIAL AND BSEG-REBZT (follow docs.) IS INITIAL
в поле INVAMO ставится сумма BSEG-DMBTR (amount in LC) +/- BSEG-DMBTR тех документов, у которых в поле BSEG-REBZG стоит номер вышеопределенного документа. И все суммирование должно происходить с учетом дебита/кредита. И так по всем документам в таблице.

Помогите с кодом, пожалуйста.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн, окт 24 2005, 16:00 
Гость
Возвращаясь к вопросу. Я написала код, но он не работает - отчет очень надолго зависает и потом все-равно выдает неверные результаты. Вот мой код.
-----------------------------------------------------
data: wa_bsik TYPE BSIK, wa1_bsik TYPE BSIK.
clear invoice_amo.

SELECT belnr bukrs gjahr
from bsik
into corresponding fields of wa_bsik
where bsik~rebzg = space and bsik~rebzt = space.
ENDSELECT.

SELECT dmbtr shkzg
from bsik
into corresponding fields of wa1_bsik
where bsik~rebzg = wa_bsik-belnr
and bsik~bukrs = wa_bsik-bukrs
and bsik~gjahr = wa_bsik-gjahr.

IF wa1_bsik-shkzg = 'S'.
INVOICE_AMO = INVOICE_AMO + WA1_BSIK-DMBTR.
ELSE.
INVOICE_AMO = INVOICE_AMO - WA1_BSIK-DMBTR.
ENDIF.
ENDSELECT.
---------------------------------------------------
Подскажите что не так.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 08:11 
Гость
Кто-нибудь кто понимает - посмотрите код, пожалуйста, и скажите что не так. Сам вопрос и код приведены выше.
Это единственное что задерживает выпуск отчета "в свет".
П-о-м-о-г-и-т-е Я ИДИЁТ, УБЕЙТЕ МИНЯ КТО-НИБУДЬ!!


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 08:39 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
TB написал(а):
Code:
SELECT belnr bukrs gjahr
from bsik
into corresponding fields of wa_bsik
where bsik~rebzg = space and bsik~rebzt = space.
ENDSELECT.

IF wa1_bsik-shkzg = 'S'.
   INVOICE_AMO = INVOICE_AMO + WA1_BSIK-DMBTR.
ELSE.
   INVOICE_AMO = INVOICE_AMO - WA1_BSIK-DMBTR.
ENDIF.
ENDSELECT.

---------------------------------------------------
Подскажите что не так.

Во-первых, после endselect'a в рабочей обл. wa_bsik1 остается только ПОСЛЕДНЯЯ выбранная запись. Во-вторых, возможно, проще и быстрее будет сделать SELECT ... INTO TABLE для получения номеров бух. доков, а затем - SELECT ... INTO TABLE ... FOR ALL ENTRIES для получения интересующих данных.

Кроме того, по полям REBZG и REBZT явно нет индекса, а поля текстовые - выборка по этим полям будет медленной. И последнее, что я еще заметил: в бух.доке есть много разл. строк - одни с дебетом, др. - с кредитом. Общая сумма по бух.доку будет 0. Поэтому вам необх. определить, какие строки бух. дока вы будете суммировать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 09:50 
Гость
Спасибо за совет. Я исправила след. образом :
----------------------------------------------------------------------------
DATA: itab TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY rebzg WITH HEADER LINE
,itab1 TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY shkzg WITH HEADER LINE
,itab2 TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY shkzg WITH HEADER LINE.

CLEAR INVOICE_AMO.

select belnr bukrs gjahr dmbtr shkzg
from bsik
into TABLE itab
where bsik~rebzg = space and bsik~rebzt = space.

select sum( bsik~dmbtr )
from bsik
into TABLE itab1
where bsik~shkzg = 'S'
and bsik~rebzg = itab-belnr
and bsik~bukrs = itab-bukrs
and bsik~gjahr = itab-gjahr
and bsik~belnr = itab-belnr.

select sum( bsik~dmbtr )
from bsik
into TABLE itab2
where bsik~shkzg = 'H'
and bsik~rebzg = itab-belnr
and bsik~bukrs = itab-bukrs
and bsik~gjahr = itab-gjahr
and bsik~belnr = itab-belnr.
----------------------------------------------------
Но отчет выпадает с дампом "DATA: itab TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY rebzg WITH HEADER LINE
,itab1 TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY shkzg WITH HEADER LINE
,itab2 TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY shkzg WITH HEADER LINE.

CLEAR INVOICE_AMO.

select belnr bukrs gjahr dmbtr shkzg
from bsik
into TABLE itab
where bsik~rebzg = space and bsik~rebzt = space.

select sum( bsik~dmbtr )
from bsik
into TABLE itab1
where bsik~shkzg = 'S'
and bsik~rebzg = itab-belnr
and bsik~bukrs = itab-bukrs
and bsik~gjahr = itab-gjahr
and bsik~belnr = itab-belnr.

select sum( bsik~dmbtr )
from bsik
into TABLE itab2
where bsik~shkzg = 'H'
and bsik~rebzg = itab-belnr
and bsik~bukrs = itab-bukrs
and bsik~gjahr = itab-gjahr
and bsik~belnr = itab-belnr.
-----------------------------------------------------
Но отчет выпадает с дампом DATA: itab TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY rebzg WITH HEADER LINE
,itab1 TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY shkzg WITH HEADER LINE
,itab2 TYPE STANDARD TABLE OF bsik WITH NON-UNIQUE KEY shkzg WITH HEADER LINE.

CLEAR INVOICE_AMO.

select belnr bukrs gjahr dmbtr shkzg
from bsik
into TABLE itab
where bsik~rebzg = space and bsik~rebzt = space.

select sum( bsik~dmbtr )
from bsik
into TABLE itab1
where bsik~shkzg = 'S'
and bsik~rebzg = itab-belnr
and bsik~bukrs = itab-bukrs
and bsik~gjahr = itab-gjahr
and bsik~belnr = itab-belnr.

select sum( bsik~dmbtr )
from bsik
into TABLE itab2
where bsik~shkzg = 'H'
and bsik~rebzg = itab-belnr
and bsik~bukrs = itab-bukrs
and bsik~gjahr = itab-gjahr
and bsik~belnr = itab-belnr.
---------------------------------------------
Но отчет выпадает с дампом "The data read during a select access could not be inserted into the target field".
Опять что-то не так ?

А может быть мою проблему можно решить проще ?
Мне надо найти в таблице BSIK докуументы, соответствующие некоторым условиям, затем в дополнительной колонке напротив найденных документов проставить сумму самого документа + суммы документов, у которых в колонке REBZG есть ссылка на найденные документы. Ессно с учетом Д/К.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 10:13 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
Code:
DATA: BEGIN OF it_bsik OCCURS 0,
        belnr LIKE bsik-belnr,
        bukrs LIKE bsik-bukrs,
        gjahr LIKE bsik-gjahr,
        blart LIKE bsik-blart,
        shkzg LIKE bsik-shkzg,
        dmbtr LIKE bsik-dmbtr,
      END OF it_bsik,
      it_tmp LIKE TABLE OF it_bsik WITH HEADER LINE.
  CLEAR INVOICE_AMO.
  SELECT belnr bukrs gjahr blart shkzg dmbtr INTO TABLE it_tmp FROM BSIK
   WHERE rebzg = ' '
     AND rebzt = ' '.
  SELECT belnr bukrs gjahr blart shkzg dmbtr INTO TABLE it_bsik FROM BSIK
   FOR ALL ENTRIES IN it_tmp
   WHERE rebzg = it_tmp-belnr
     AND rebzt = it_tmp-blart
     AND rebzj = it_tmp_gjahr.
  LOOP AT it_bsik.
    IF it_bsik-shkzg = 'S'.
      invoice_amo = invoice_amo + it_bsik-dmbtr.
    ELSE.
      invoice_amo = invoice_amo - it_bsik-dmbtr.
    ENDIF.
  ENDLOOP.

Все равно, остается непонятным, зачем Вам суммировать ВСЕ строки бух.дока - обычно выбираются конкретные счета, и сумма накапливается именно по ним.

З.Ы. Пардон, не дочитал до конца Ваше задание. Просто оформил код в соотв. с вашим. Над Вашим заданием подумать еще не успел :)
Кроме того, в таблице BSIK намного больше полей входит в ключ. Так что Вам надо точно знать, сумму по каким счетам/кредиторам/и т.д. Вы хотите получить сумму.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 10:39 
Гость
В моем задании главное - не сумма по счетам, а по т.н. Invoce Reference - это поле REBZG во всех сегментовых таблицах док.

В самом "главном" документе - т.н. инвойсе, в данном поле стоит пустота, но сам документ легко находится по полям REBZG и REBZT - пустые. А вот дальше все част. оплаты, например, в REBZG имеют ссылку на номер документа, кототрый они частично закрывают. Смысл всего этого - знать точную сумму, которая висит на документе типа INVOICE в данный момент.

Ну ка-а-ак же это все-таки сделать?

P.S. Уж больно мал мой абаповский стаж для этого ( я больше к Oracle привычна и там это можно сделать на раз ) и спросить точно не у кого кроме вас.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 11:17 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, авг 17 2004, 08:55
Сообщения: 331
Откуда: Украина, г.Мариуполь
Пол: Мужской
В самом простом случае бух.док. для счета имеет вид:
Сч_________________ Сумма
Кредитор___________ -деньги
ПМ/ПСч____________ +деньги

Итого: 0. Так какая все-таки конкретно сумма Вам нужна? В данном случае могучий оракул не поможет, если логики в выборке нет...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 11:43 
Гость
Для примера :
#doc 1 #doc 2 #doc 3
vendor1 K 40 vendor1 D 20 vendor1 D 10
G/L Acc D 40 G/L Acc K 20 G/L Acc K 10
REBZG space REBZG 1 REBZG 1
REBZT space REBZT space REBZT V
INV_AMO -40+20+10
т.е.берем amount дос1, у к-го REBZG и REBZT пустые, находим amount документов, у которых в поле REBZG стоит ссылка на дос1 (номер документа 1), все складываем, учитывая знаки и напротив док1 в поле INVOICE_AMO пишем -40+20+10 = -10, т.е. у док1 остались незакрытыми -10 рублей.
Я же ведь беру таблицу BSIK, где содержатся кредиторы, т.е. мне нужна одна строчка мз каждого документа.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 11:52 
Гость
Извините, что встреваю...

Может быть приблизительно так... прошу сильно ногами не пинать - написал так, как понял Ваше задание, и естественно не тестировал...

Code:
DATA: BEGIN OF T_BSEG OCCURS 100.
        INCLUDE STRUCTURE BSEG.
DATA: END OF T_BSEG.

DATA: BEGIN OF it_bsik OCCURS 0,
        belnr       LIKE bsik-belnr,
        bukrs       LIKE bsik-bukrs,
        gjahr       LIKE bsik-gjahr,
        invoice_amo LIKE bsik-dmbtr,
      END OF it_bsik,
      it_tmp LIKE TABLE OF it_bsik WITH HEADER LINE.

  SELECT belnr bukrs gjahr blart shkzg dmbtr
  INTO TABLE it_tmp
  FROM BSIK
  WHERE rebzg = ' '
    AND rebzt = ' '.

  LOOP AT it_tmp.
    it_bsik-bukrs = it_tmp-bukrs.
    it_bsik-belnr = it_tmp-belnr.
    it_bsik-gjahr = it_tmp-gjahr.

    SELECT * FROM BSEG INTO TABLE t_bseg
      WHERE rebzg = it_tmp-belnr
        AND bukrs = it_tmp-bukrs
        AND gjahr = it_tmp-gjahr.
    CLEAR it_bsik-invoice_amo.
    LOOP AT t_bseg.
      IF t_bseg-shkzg = 'S'.
        it_bsik-invoice_amo = it_bsik-invoice_amo + t_bseg-dmbtr.
      ELSE.
        it_bsik-invoice_amo = it_bsik-invoice_amo - t_bseg-dmbtr.
      ENDIF.
    ENDLOOP.
    APPEND it_bsik.
  ENDLOOP.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 13:10 
Гость
Спасибо огромнейшее за помощь. Код я вставила в INFOSET и запутила отчет. но отчет судя по всему подвис и через sm04 сессию мне пришлось прервать .
До завтра мне придется прерваться - мою машину стукнули и надо срочно ехать на экспертизу.
Подскажите, пожалуйста, как лучше оттрасировать отчет ? Через st05 что-то совсем не понятно.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт, окт 25 2005, 14:36 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, окт 06 2005, 16:44
Сообщения: 3080
Откуда: Москва
Можно посмотреть, что SAP по этому поводу пишет:
программа SAPLFCHK
подпрограмма SELECTION :wink:

_________________
С уважением,
Удав.


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

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


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

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


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

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