Автор Тема: MATERIAL_CONVERT_QUANTITY - Пересчет величин (единиц измерения) для материала  (Прочитано 19780 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Полезная штука, если материалы ведутся в различных величинах и приходится их туда сюда перекидывать, можно конечно и самому это дело пересчитать, но можно и воспользоваться стандартной функциональностью. Интересной особенностью данного модуля является такой прикол, что смоделировать его работу, воспользовавшись в SE37 кнопкой F8 - Тестировать/Выполнить, у меня не получилось ни в 4.6, 4.7, ни в 6.0 выдает типа не правильный ввод. Вообще я так понимаю проблема в том  поля количеств объявлены как:
Код: You are not allowed to view links. Register or Login
REFERENCE(PI_QUANTITY_SRC) DEFAULT 0и
Код: You are not allowed to view links. Register or Login
VALUE(PE_QUANTITY_DST)без указания типов, вот тестирование и не прокатывает. А так вообще конечно работает. Для примера пришлось накидать типа программки:

Код: You are not allowed to view links. Register or Login
report  yuukrul_test.
data:  l_matnr like mseg-matnr,
       l_quantity_dst like mseg-menge,
       l_quantity_src like mseg-menge.

catch system-exceptions conversion_errors = 1.
  l_matnr = 'KXXX00000000000001'.
  l_quantity_src = '415'.   "1 PAL = 315 ST
  call function 'MATERIAL_CONVERT_QUANTITY'
    exporting
      pi_material_src    = l_matnr
      pi_meinh_src       = 'ST'
      pi_quantity_src    = l_quantity_src
      pi_material_dst    = l_matnr
      pi_meinh_dst       = 'PAL'
    importing
      pe_quantity_dst    = l_quantity_dst
    exceptions
      wrong_call         = 1
      material_not_found = 2
      no_conversion      = 3
      others             = 4.
endcatch.

write: / l_quantity_dst.

pi_material_src  - Код исходного материала для пересчета
pi_meinh_src  - Единицы измерения исходные
pi_quantity_src - Количество исходного материала
pi_material_dst - Код материала в который выполняется пересчет
pi_meinh_dst - Единицы измерения материала пересчета

pe_quantity_dst - Пересчитанное количество

В общем виде модуль позволяет пересчитывать количества материала 1 в материал 2 например, но если материал 1 = материал 2, то получается пересчет для одного материала, например из базовых величин в закупаемые и т.д. Особенностью является то, что коды единиц измерения надо задавать в том как они объявлены в системе, например ШТ, это вообще-то ST. Где это можно посмотреть, ну есть табличка T006 - Единицы измерения. Вот там и смотрим, ну это если вы с экрана читаете значения, а если из таблиц, то там уже самое собой никаких штук нет, там и будут наши ST.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
Однако пришлось тут ускорять кое какие процессы, чтобы работали шустрее, а поэтому пришлось заменить вызов функции пересчета единиц измерения на свою небольшую процедурку. В общем виде конечно, это не полный аналог пересчета одних единиц измерения материала в другие. Это скажем так пересчет из базовых единиц измерения в заданные. Само собой коэффициенты пересчета должны быть заданы в описании ОЗМ.

В принципе если нужно, то можно дожать до пересчета из одних альтернативных единиц измерения в другие альтернативные. Мне было пока не надо, но думаю дописать это будет не сложно.
Код: You are not allowed to view links. Register or Login
*&---------------------------------------------------------------------*
*&      Form  CONVERT_BASE_QUANTITY
*&---------------------------------------------------------------------*
*       Пересчет единиц измерения материала
*----------------------------------------------------------------------*
*      -->P_MATNR          - Код материала для пересчета
*      -->P_NISTM          - Количество в базовых ЕдИзм
*      -->P_MEINS_2        - Единица измерения пересчетная
*      <--P_QUANT_DST      - Пересчитанное количество в P_MEINS_2
*      <--P_QUANT_ODDS_DST - Остаток от пересчитанного количества в базе
*----------------------------------------------------------------------*
FORM convert_base_quantity  USING    p_matnr
                                p_nistm
                                p_meins_dst
                       CHANGING p_quant_dst
                                p_quant_odds_dst.
  DATA: l_marm_dst LIKE marm,
        lt_marm LIKE marm OCCURS 1.

  SELECT * INTO TABLE lt_marm
  FROM marm WHERE matnr = p_matnr.

  READ TABLE lt_marm INTO l_marm_dst WITH KEY meinh = p_meins_dst.
  l_marm_dst-umrez = l_marm_dst-umrez / l_marm_dst-umren.

* Пересчитать единицы измерения запаса
  p_quant_dst = p_nistm DIV l_marm_dst-umrez.
  p_quant_odds_dst = p_nistm MOD l_marm_dst-umrez.
ENDFORM.                    " CONVERT_BASE_QUANTITY

PS: В оригинале вот этот кусок вообще-то был вынесен за процедуру, чтобы уменьшить повторные четения БД:
Код: You are not allowed to view links. Register or Login
 
SELECT * INTO TABLE lt_marm
FROM marm WHERE matnr = p_matnr.
Ну и само собой чтение внутренней таблички было сделано по ключу чуток другому
Код: You are not allowed to view links. Register or Login
READ TABLE lt_marm INTO l_marm_dst
WITH KEY matnr = p_matnr
         meinh = p_meins_dst.

Оффлайн Uukrul

  • SAP ECC 6.0 Ehp(*)
  • Administrator
  • Epic Member
  • *****
  • Сообщений: 3 809
  • Репутация: +47/-0
  • Пол: Мужской
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
    • Sapforum.BIZ
p_quant_odds_dst - Это неделимый остаток в базовых единицах измерения... ну мне по ходу задачи оно было надо тоже ;)

Greed

  • Гость
что бы не казалась тема как бы немножко не законченной, я "дожал" до пересчета из одних единиц в другие
Код: You are not allowed to view links. Register or Login
form z_convert_quantity  USING  p_matnr
                                p_quant_src
                                p_meins_src "пересчитываемая ед. изм
                                p_meins_dst "в которую пересчитывать
                       CHANGING p_quant_dst
                                p_quant_odds_dst.
  DATA: l_marm_dst LIKE marm,
        l_marm_src LIKE marm,
        zumrez TYPE marm-umrez,
        zumren TYPE marm-umren,
        lt_marm LIKE marm OCCURS 1.

  SELECT * INTO TABLE lt_marm
  FROM marm WHERE matnr = p_matnr.

  READ TABLE lt_marm INTO l_marm_src WITH KEY meinh = p_meins_src.
  READ TABLE lt_marm INTO l_marm_dst WITH KEY meinh = p_meins_dst.
  zumrez = l_marm_src-umrez * l_marm_dst-umren.
  zumren = l_marm_dst-umrez * l_marm_src-umren.

* Пересчитать единицы измерения запаса
  p_quant_dst = zumrez DIV zumren.
  p_quant_odds_dst = zumrez MOD zumren.

endform.                    " z_convert_quantity

Оффлайн sap_sd

  • Newbie
  • *
  • Сообщений: 17
  • Репутация: +0/-0
  • YearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYearsYears
СПАСИБО! Очень пригодилось!

Sapforum.Biz