Posted: Tue May 03, 2011 9:56 am Post subject: Вычисляемые поля.
Здравствуйте, уважаемые эксперты.
Столкнулся с проблемой вычисления значений полей таблицы.
Например - есть таблица 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.
Вроде как попробовал ответить на свои вопросы и тут же вытек следующий.
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 перетащить в основную?
Подскажите хоть где копать?
Спасибо.
ТОлько вот почему лучше без MODIFY так и не понял..
Есть подозрение что Дмитрий имел ввиду field-symbol's
А может то, что ваш вариант MODIFY несколько нерабочий, правильный синтаксис такой: modify table QTY_I from wa.
Огромное спасибо всем за лекбес! АВАР я изучаю может с месяц а может и того меньше. Поэтому кидаюсь из стороны в сторону. Хочется и то и то понять, захватить, не упустить. Просто от такого многообразия функциональности кидает ухватиться за все. А с чего начать ....?
Спасибо за подсказки по курсам!
Age: 47 Joined: 14 Nov 2008 Posts: 300 Location: Russia
Posted: Fri May 06, 2011 9:19 pm Post subject:
peleken wrote:
Огромное спасибо всем за лекбес! АВАР я изучаю может с месяц а может и того меньше. Поэтому кидаюсь из стороны в сторону. Хочется и то и то понять, захватить, не упустить. Просто от такого многообразия функциональности кидает ухватиться за все. А с чего начать ....?
Спасибо за подсказки по курсам!
Armann вам всё расскажет, он один из лучших здесь. Тем более, что уже был назначен Вашим куратором. Удачи! _________________ ABAP/4 You
Огромное спасибо всем за лекбес! АВАР я изучаю может с месяц а может и того меньше. Поэтому кидаюсь из стороны в сторону. Хочется и то и то понять, захватить, не упустить. Просто от такого многообразия функциональности кидает ухватиться за все. А с чего начать ....?
Спасибо за подсказки по курсам!
Armann вам всё расскажет, он один из лучших здесь. Тем более, что уже был назначен Вашим куратором. Удачи!
Спасибо!
Вот в принципе и код небольшой программки, выводящей отчет по мин максу и по числу необходимого кол-ва, а затем апдейт БД.
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.
"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.
Age: 43 Joined: 04 Aug 2009 Posts: 62 Location: UA
Posted: Sun May 08, 2011 3:17 am Post subject:
корректнее использовать work area или field-symbols вместо WITH HEADER LINE .
пример с work area в моем посте (исправленном )
а про field-symbols почитайте,очень пригодится
корректнее использовать work area или field-symbols вместо WITH HEADER LINE .
пример с work area в моем посте (исправленном )
а про field-symbols почитайте,очень пригодится
Больничный закончился - начались головные боли
Все я подправил изменил код согласно ворк ареа. Код внизу. Но вот теперь встал вопрос. Этот отчет что в аттаче выводит на одной странице сразу данные по всем поставщикам. А мне необходимо сделать выборку по поставщикам и разделить их постранично. Например есть поставщики "Пупкин и Ко", "Сидорофф", "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.
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.