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

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


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

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


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

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