SAP R/3 форум ABAP консультантов
Russian ABAP Developer's Club

Home - FAQ - Search - Memberlist - Usergroups - Profile - Log in to check your private messages - Register - Log in - English
Blogs - Weblogs News

Вычисляемые поля.


Goto page 1, 2  Next
 
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP
View previous topic :: View next topic  
Author Message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Tue May 03, 2011 9:56 am    Post subject: Вычисляемые поля. Reply with quote

Здравствуйте, уважаемые эксперты.
Столкнулся с проблемой вычисления значений полей таблицы.
Например - есть таблица TABL. В таблице есть поля QOH - количество.
QMIN - минимальное значение, QMAX - максимальное значение, и QTY_ON_ORD - количество необходимое, при условии что QOH < QMIN.

Есть определенные значения.
Code:
QOH   QMIN   QMAX   QTY_ON_ORD

  0     0      1
  2     4      6
  9     10    20
 99    100    200
999   1000    5000


Понятно что в обычной ситуации можно посчитать:
QTY_ON_ORD = QMAX - QOH.
Можно ли в ABAP организовать такую калькуляцию?

Можно ли обеспечить сравнение двух полей?
Например что то типа этого:
Code:
TABLES TABL.
DATA: FLOC LIKE TABL OCCURS 0 WITH HEADER LINE,

SELECT * FROM TABL INTO TABLE FLOC
  WHERE QOH < FLOC-QMIN.
    SORT FLOC BY QMAX QMIN.
 
LOOP AT FLOC.
   WRITE: / FLOC-STOCKNO,
                 FLOC-QOH ,
                 FLOC-QMIN ,
                 FLOC-QMAX.
ENDLOOP.


Извините за такие вопросы, но я не могу найти информацию по этому вопросу. Может не там ищу?
Back to top
View user's profile Send private message
YuriT
Участник
Участник



Joined: 03 Nov 2008
Posts: 35

PostPosted: Tue May 03, 2011 2:13 pm    Post subject: Reply with quote

Попробуйте сначала SELECT *, потом DELETE WHERE.
Back to top
View user's profile Send private message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Fri May 06, 2011 12:52 pm    Post subject: Reply with quote

Вроде как попробовал ответить на свои вопросы и тут же вытек следующий.

Code:
DATA: QTY_I LIKE ZLOC001 OCCURS 0 WITH HEADER LINE.


SELECT-OPTIONS S_KEY FOR ZLOC001-DATEMOD.

START-OF-SELECTION.
SELECT *  FROM ZLOC001 INTO  QTY_I
  WHERE DATEMOD IN S_KEY.
SORT QTY_I BY QMIN.

IF QTY_I-QOH <= QTY_I-QMIN AND QTY_I-QMAX <> 0.
QTY_I-QTYORD = QTY_I-QMAX - QTY_I-QOH.


"FORMAT COLOR COL_HEADING.
WRITE: /  sy-vline, QTY_I-MANUF,
            QTY_I-QTYORD COLOR 4.


Вычисления и сравнения можно проводить во внутренней таблице, а как же теперь из внутренней таблицы результат QTY_I-QTYORD перетащить в основную?
Подскажите хоть где копать?
Спасибо.
Back to top
View user's profile Send private message
Fami4
Специалист
Специалист


Age: 43
Joined: 04 Aug 2009
Posts: 62
Location: UA

PostPosted: Fri May 06, 2011 3:46 pm    Post subject: Reply with quote

Вам бы мат.часть почитать.
курсы BC400, BC401 (на сайте имеются)

Code:
DATA: QTY_I LIKE ZLOC001 OCCURS 0,
         wa like line of QTY_I.
SELECT-OPTIONS S_KEY FOR ZLOC001-DATEMOD.

START-OF-SELECTION.
SELECT *  FROM ZLOC001 INTO CORRESPONDING FIELDS OF TABLE  QTY_I
  WHERE DATEMOD IN S_KEY.
SORT QTY_I BY QMIN.

loop at QTY_I into wa. 
 IF wa-QOH <= wa-QMIN AND wa-QMAX <> 0.
   wa-QTYORD = wa-QMAX - wa-QOH.
 endif.               
 modify QTY_I from wa. 
endloop. 

loop at  QTY_I into wa. 
 update ZLOC001 from wa.
endloop.

commit work.


Last edited by Fami4 on Fri May 06, 2011 4:55 pm; edited 2 times in total
Back to top
View user's profile Send private message
Dmitriy
Аналитик
Аналитик


Age: 47
Joined: 14 Nov 2008
Posts: 300
Location: Russia

PostPosted: Fri May 06, 2011 3:52 pm    Post subject: Reply with quote

Всем бы не помешало...
Это лучше без MODIFY:
Code:
loop at QTY_I.
 IF QTY_I-QOH <= QTY_I-QMIN AND QTY_I-QMAX <> 0.
   QTY_I-QTYORD = QTY_I-QMAX - QTY_I-QOH.
 endif.               
 modify QTY_I.
endloop.

И такое чувство ещё на счёт SELECT - ENDSELECT, нехорошее... Confused

_________________
ABAP/4 You
Back to top
View user's profile Send private message
Fami4
Специалист
Специалист


Age: 43
Joined: 04 Aug 2009
Posts: 62
Location: UA

PostPosted: Fri May 06, 2011 4:56 pm    Post subject: Reply with quote

Dmitriy wrote:
Всем бы не помешало...
Это лучше без MODIFY:
Code:
loop at QTY_I.
 IF QTY_I-QOH <= QTY_I-QMIN AND QTY_I-QMAX <> 0.
   QTY_I-QTYORD = QTY_I-QMAX - QTY_I-QOH.
 endif.               
 modify QTY_I.
endloop.

И такое чувство ещё на счёт SELECT - ENDSELECT, нехорошее... Confused


Согласен, недосмотрел Embarassed .
Уже подправил.
ТОлько вот почему лучше без MODIFY так и не понял.. Rolling Eyes
Back to top
View user's profile Send private message
Armann
Модератор
Модератор



Joined: 01 Jan 2008
Posts: 422
Location: Moscow

PostPosted: Fri May 06, 2011 7:50 pm    Post subject: Reply with quote

Fami4 wrote:
ТОлько вот почему лучше без MODIFY так и не понял.. Rolling Eyes

Есть подозрение что Дмитрий имел ввиду field-symbol's Smile
А может то, что ваш вариант MODIFY несколько нерабочий, правильный синтаксис такой: modify table QTY_I from wa.
Back to top
View user's profile Send private message Blog
Dmitriy
Аналитик
Аналитик


Age: 47
Joined: 14 Nov 2008
Posts: 300
Location: Russia

PostPosted: Fri May 06, 2011 8:41 pm    Post subject: Reply with quote

Armann wrote:
Fami4 wrote:
ТОлько вот почему лучше без MODIFY так и не понял.. Rolling Eyes

Есть подозрение что Дмитрий имел ввиду field-symbol's :

Да, имелись ввиду field-symbol's.

_________________
ABAP/4 You
Back to top
View user's profile Send private message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Fri May 06, 2011 9:06 pm    Post subject: Reply with quote

Огромное спасибо всем за лекбес! АВАР я изучаю может с месяц а может и того меньше. Поэтому кидаюсь из стороны в сторону. Хочется и то и то понять, захватить, не упустить. Просто от такого многообразия функциональности кидает ухватиться за все. А с чего начать ....?
Спасибо за подсказки по курсам!
Back to top
View user's profile Send private message
Dmitriy
Аналитик
Аналитик


Age: 47
Joined: 14 Nov 2008
Posts: 300
Location: Russia

PostPosted: Fri May 06, 2011 9:19 pm    Post subject: Reply with quote

peleken wrote:
Огромное спасибо всем за лекбес! АВАР я изучаю может с месяц а может и того меньше. Поэтому кидаюсь из стороны в сторону. Хочется и то и то понять, захватить, не упустить. Просто от такого многообразия функциональности кидает ухватиться за все. А с чего начать ....?
Спасибо за подсказки по курсам!

Armann вам всё расскажет, он один из лучших здесь. Тем более, что уже был назначен Вашим куратором. Удачи! Cool

_________________
ABAP/4 You
Back to top
View user's profile Send private message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Sat May 07, 2011 8:06 pm    Post subject: Reply with quote

Dmitriy wrote:
peleken wrote:
Огромное спасибо всем за лекбес! АВАР я изучаю может с месяц а может и того меньше. Поэтому кидаюсь из стороны в сторону. Хочется и то и то понять, захватить, не упустить. Просто от такого многообразия функциональности кидает ухватиться за все. А с чего начать ....?
Спасибо за подсказки по курсам!

Armann вам всё расскажет, он один из лучших здесь. Тем более, что уже был назначен Вашим куратором. Удачи! Cool


Спасибо! Embarassed

Вот в принципе и код небольшой программки, выводящей отчет по мин максу и по числу необходимого кол-ва, а затем апдейт БД.
Code:
REPORT  ZMIN_MAX message-id ZARD_MESS.

TABLES ZLOC001.
DATA: QTY_I LIKE ZLOC001 OCCURS 0 WITH HEADER LINE.

SELECT-OPTIONS S_KEY FOR ZLOC001-DATEMOD.

START-OF-SELECTION.
SET PF-STATUS 'UPDT'.

SELECT *  FROM ZLOC001 INTO CORRESPONDING FIELDS OF TABLE QTY_I
  WHERE DATEMOD IN S_KEY.
SORT QTY_I BY QMIN.

LOOP AT QTY_I.
  IF  QTY_I-QOH <= QTY_I-QMIN AND QTY_I-QMAX <> 0.
      QTY_I-QTYORD = QTY_I-QMAX - QTY_I-QOH.
WRITE: /  sy-vline, QTY_I-MANUF,
            QTY_I-QTYORD COLOR 4,
         43 QTY_I-UOM,
         50 QTY_I-STOCKNO,
         60 QTY_I-ESTPRC,
         77 QTY_I-QOH,
         95 QTY_I-QMIN,
        105 QTY_I-QMAX,
        112 QTY_I-LOC,
        142 sy-vline.

WRITE: /  sy-vline, QTY_I-FULLDESC UNDER 'PREF. SUPPLIER NAME' color 7, 142 sy-vline.
WRITE: / sy-vline, 'WH11946' UNDER 'QTY. NEEDED' COLOR 5, 142 sy-vline.
ULINE.
  ENDIF.
ENDLOOP.
 AT USER-COMMAND.
CASE SY-UCOMM.
   WHEN 'UPDT'.
    LOOP AT QTY_I.
       IF  QTY_I-QOH <= QTY_I-QMIN AND QTY_I-QMAX <> 0.
          QTY_I-QTYORD = QTY_I-QMAX - QTY_I-QOH.
    UPDATE ZLOC001 FROM QTY_I.
       ENDIF.
    ENDLOOP.
    IF SY-SUBRC = 0.
      MESSAGE S008.
    ENDIF.
ENDCASE.

COMMIT WORK.

TOP-OF-PAGE.

WRITE: / sy-vline, 'DATE:', SY-DATUM,  130 'PAGE:', SY-PAGNO, 142 sy-vline,
/ sy-vline, 142 sy-vline,
/ sy-vline, 142 sy-vline,
/ sy-vline, 'TIME:', SY-UZEIT, 50 'WAREHOUS UNDERAGE STOCK REPORT FOR ALL LOCATIONS', 142 sy-vline.
ULINE.

"FORMAT COLOR COL_HEADING.
WRITE: sy-vline, 'PREF. SUPPLIER NAME', 27 sy-vline, 29 'QTY. NEEDED' COLOR 4, 41 sy-vline, 43 'UOM',
sy-vline, 48 'STOCK NBR.', sy-vline, 60 'EST. PRICE', 75 sy-vline, 77 'QOH+QOO', 93
sy-vline, 95 'MIN', 103 sy-vline, 105 'MAX', 110 sy-vline, 112 'LOC', sy-vline, 118 'VENDOR', 142 sy-vline.
ULINE.

"FORMAT COLOR COL_TOTAL.
WRITE: / sy-vline, 'DESCRIPTION' color 7, 142 sy-vline.

WRITE: / sy-vline, 'LAST PO' under 'QTY. NEEDED' COLOR 5, 142 sy-vline.
uline.
ULINE.
END-OF-PAGE.


Вроде работает. Тестировал несколько раз с разными значениями. Но перед этим значительно повоевал с кодом. Не знал что одно единственное значение в коде может не давать результата.
Это TABLE, которое надо убрать в UPDATE ZLOC001 FROM QTY_I.
Back to top
View user's profile Send private message
Fami4
Специалист
Специалист


Age: 43
Joined: 04 Aug 2009
Posts: 62
Location: UA

PostPosted: Sun May 08, 2011 3:17 am    Post subject: Reply with quote

корректнее использовать work area или field-symbols вместо WITH HEADER LINE .
пример с work area в моем посте (исправленном Embarassed )
а про field-symbols почитайте,очень пригодится Wink
Back to top
View user's profile Send private message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Sun May 08, 2011 10:32 am    Post subject: Reply with quote

Fami4 wrote:
корректнее использовать work area или field-symbols вместо WITH HEADER LINE .
пример с work area в моем посте (исправленном Embarassed )
а про field-symbols почитайте,очень пригодится Wink


Спасибо, попробуем обновить, почитаем!
Back to top
View user's profile Send private message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Fri Jun 10, 2011 10:25 pm    Post subject: Reply with quote

Больничный закончился - начались головные боли Smile
Все я подправил изменил код согласно ворк ареа. Код внизу. Но вот теперь встал вопрос. Этот отчет что в аттаче выводит на одной странице сразу данные по всем поставщикам. А мне необходимо сделать выборку по поставщикам и разделить их постранично. Например есть поставщики "Пупкин и Ко", "Сидорофф", "SEZ". Вылез отчет на закупку материала. Каждый материал соответствует определенному поставщику. Соответственно каждому нужно разослать заявки отдельно.
Поэтому отчеты необходимо разделить по страницам. Тут я зашел в тупик. Подскажите, где искать?
Может поможет работа со смартформами?

Code:
REPORT  ZMIN_MAX message-id ZARD_MESS.

TABLES ZLOC001.
DATA: QTY_I LIKE ZLOC001 OCCURS 0,
      WA LIKE LINE OF QTY_I,
      SUM_EST LIKE WA-ESTPRC,
      SUM_QOH LIKE WA-QTYORD,
      SUM_NUM LIKE WA-STOCKNO,
      NO_S LIKE WA-STOCKNO VALUE 0,
      SUM_PRC(10) TYPE C,
      TOT_NUM(5) TYPE C,
      TOT_QOH(10) TYPE C,
      NUMBER TYPE I,
      DAT_REQ TYPE SY-DATUM.

SELECT-OPTIONS S_KEY FOR ZLOC001-DATEMOD.

START-OF-SELECTION.
SET PF-STATUS 'UPDT'.

SELECT *  FROM ZLOC001 INTO CORRESPONDING FIELDS OF TABLE QTY_I
  WHERE DATEMOD IN S_KEY.

SORT QTY_I BY MANUF.

LOOP AT QTY_I INTO WA.
  IF  WA-QOH <= WA-QMIN AND WA-QMAX <> 0.
      WA-QTYORD = WA-QMAX - WA-QOH.
WRITE: /  sy-vline, WA-MANUF,
         29 WA-QTYORD COLOR 4,
         43 WA-UOM,
         50 WA-STOCKNO,
         60 WA-ESTPRC,
         77 WA-QOH,
         95 WA-QMIN,
        107 WA-QMAX,
        119 WA-LOC,
        142 sy-vline.

WRITE: /  '-----------------'.
ULINE.
  ENDIF.
  MODIFY TABLE QTY_I FROM WA.


SUM_PRC = WA-ESTPRC * WA-QTYORD.
ADD SUM_PRC TO SUM_EST.
TOT_NUM = 1.
ADD TOT_NUM TO SUM_NUM.
ADD WA-QTYORD TO SUM_QOH.

  AT LAST.
   WRITE: / '----------------------------------'
 
  ENDAT.
ENDLOOP.

*Update Stock On Hand.
 AT USER-COMMAND.

CASE SY-UCOMM.
   WHEN 'UPDT'.
    LOOP AT QTY_I INTO WA.
       IF  WA-QOH <= WA-QMIN AND WA-QMAX <> 0.
          WA-QTYORD = WA-QMAX - WA-QOH.
    UPDATE ZLOC001 FROM WA.
       ENDIF.
    ENDLOOP.
    IF SY-SUBRC = 0.
      MESSAGE S008.
    ENDIF.
ENDCASE.

CASE sy-ucomm.
    WHEN 'GETP'.
      CALL FUNCTION 'NUMBER_GET_NEXT'
EXPORTING
   nr_range_nr = '01'
   object = 'ZNRANG'
IMPORTING
  NUMBER = NUMBER
EXCEPTIONS
  INTERVAL_NOT_FOUND = 1
  NUMBER_RANGE_NOT_INTERN = 2
  OBJECT_NOT_FOUND = 3
  QUANTITY_IS_0 = 4
  QUANTITY_IS_NOT_1 = 5
  INTERVAL_OVERFLOW = 6
  BUFFER_OVERFLOW = 7
  OTHERS = 8.

   LOOP AT QTY_I INTO WA.
     IF  WA-QOH <= WA-QMIN AND WA-QMAX <> 0.
          WA-QTYORD = WA-QMAX - WA-QOH.
NO_S = NO_S + 1.
WRITE:  /, NO_S,
         9 WA-QTYORD,
         20 WA-UOM,
         30 WA-PN,
         51 WA-FULLDESC,
         133 WA-STOCKNO.
      AT LAST.
ULINE.
WRITE: / '--------------------------------'.
ULINE.
      ENDAT.
     ENDIF.
   ENDLOOP.
ENDCASE.
NEW-PAGE.

COMMIT WORK.

TOP-OF-PAGE.

WRITE: / '-------------------------------------'.
END-OF-PAGE.

TOP-OF-PAGE DURING LINE-SELECTION.
DAT_REQ = SY-DATUM + 61.

WRITE: / '-------------------------------------'.
ULINE.



po.jpg
 Description:
Пример отчета
 Filesize:  52.9 KB
 Viewed:  22775 Time(s)

po.jpg


Back to top
View user's profile Send private message
peleken
Специалист
Специалист



Joined: 17 Jan 2011
Posts: 61

PostPosted: Sun Jun 19, 2011 12:53 pm    Post subject: Reply with quote

Сам задаю вопрос - сам отвечаю.

SAP Query, SmartForms или Script.

Спасибо тема закрыта!
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Russian ABAP Developer's Club Forum Index -> ABAP All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


All product names are trademarks of their respective companies. SAPNET.RU websites are in no way affiliated with SAP AG.
SAP, SAP R/3, R/3 software, mySAP, ABAP, BAPI, xApps, SAP NetWeaver and any other are registered trademarks of SAP AG.
Every effort is made to ensure content integrity. Use information on this site at your own risk.