Значения по умолчанию в MIGO

Автор loseal, Січень 18, 2011, 03:32:57 ПП

Попередня тема - Наступна тема

0 Користувачі і 1 Гість дивляться цю тему.

loseal

Help!

Кто либо сталкивался с вопросом автоматического копирования значений полей закладки контировки (ПФМ, ФинПозиция) при создании новой позиции в ТА MIGO?

MIGO -> Параметры настройки  -> Значения по умолчанию  -> галка "Копирование полей контировки" (установлена)
Есть настроенная строчка для операции (для примера Отпуск-Прочие-261вд)

1. Создаем первую позицию, со всеми заполненными полями (ПФМ, ФинПозиция в том числе)
2. Начинаем создавать вторую позицию: материал, кол-во,...
3. Заходим Параметры настройки  -> Значения по умолчанию -  нажимаем скопировать.
   ....данные из предыдущей позиции (ПФМ, ФинПозиция) не копируются в новую (как это описано в подсказке)  ???

...или че то не так делаю или чего-то упустил....

Uukrul

Ну вообще-то вы первый раз просто задали что копировать, поэтому пункт 3 выполнять не нужно.. оно и так теперь должно работать, вы как создаете вторую позицию кстати? Нажимаете кнопку следующая позиция? Для ПФМ не пробовал надо настроить видимость этих полей, но для МВЗ и Счет и БСФ после нажатия кнопки новая позиция и ввода кода материала, переходим на экран контировки, все заполнено значениями из предыдущей позиции.

loseal

тоже так думал...

Новую позицию пробовал создавать и в разделе обзор позиций (номер материала, кол-во - завод и склад по умолчанию уже стоят) - ввод...
...и в разделе позиция подробно материал, кол-во - ввод...

В закладке Контировки такие поля: счет, фонд, ПФМ, ФинПозиция.

Увы. Поля остаются пустыми для новой позиции.

Uukrul

Цитата: loseal від Січень 18, 2011, 04:49:27 ПП
В закладке Контировки такие поля: счет, фонд, ПФМ, ФинПозиция.

Увы. Поля остаются пустыми для новой позиции.
А например такое поле как МВЗ для 201 ВДМ тоже не копируется или копируется?

loseal

Хм...

...попробовал для 201вд
поле счет копирует.... (интересно, а почему тогда для 261 его не копирует).

По поводу МВЗ - увы в системе их нет вооще, поэтому и проверить не получится.

Uukrul

Цитата: loseal від Січень 18, 2011, 05:04:29 ПП
Хм...

...попробовал для 201вд
поле счет копирует.... (интересно, а почему тогда для 261 его не копирует).

По поводу МВЗ - увы в системе их нет вооще, поэтому и проверить не получится.
Ок, посмотрю...

loseal

Решил проверить на других ВД.

что интересно... для всех 9* вд значения этих полей (ФинПоз, ПФМ, фонд, счет) копирует в новую позицию.

А для 2* вд как-то не хочет...  :-\


Сравнивал вд - различий не нашел (кроме типа резервирования в последнем разделе "Внутреннее управление(не менять)")

Uukrul

Да ничего сравнивать не надо.. как говорится читаем первоисточники, а именно исходный текст модуля: LMIGOKL1, со строки 214 для версии 6.0 (если патчей накидали то может где-то ниже или выше) есть такой вот замечательный код

*     If certain criterias are met -> copy COBL fields to next item
      if s_defaults-xkto       = abap_true   and
          s_control-action     = 'A07'       and
          s_control-refdoc     = 'R10'       and
          s_control-vgart      = 'WA'        and
          ls_new_goitem-zeile <> 1.
.....

Который говорит нам что копирование значений контировки возможно только для операции A07 - Отпуск материала, подоперация/ссылочный документ R10 - Прочие, вид документа WA и позиция документа не первая, ну чтобы ясно было что уже есть что копировать. Для других случае копирование контировки не выполняется. Так сказать прибито гвоздями в коде. Вообще весь код отвечающий за копирование такой:

      if s_defaults-xkto       = abap_true   and
          s_control-action     = 'A07'       and
          s_control-refdoc     = 'R10'       and
          s_control-vgart      = 'WA'        and
          ls_new_goitem-zeile <> 1.
*       checks for copying of the COBL fields
        if i_insert = abap_false.
          describe table pt_goitem lines l_lines.
        else.
          l_lines = l_tabix - 1.
        endif.
        read table pt_goitem index l_lines into ls_cobl_goitem.
        if sy-subrc = 0.
          call method cl_mmim_migo_move_fields=>get_cobl_fields
            exporting
              i_bwart      = ls_new_goitem-bwart
              i_with_konto = abap_true
            importing
              et_fields    = lt_coblfields.
*         if one of the cobl fields has been filled for the new item
*         -> do not copy the cobl fields from the previousw item
          l_copycobl = abap_true.
          loop at lt_coblfields into l_coblfields.
            assign component l_coblfields of structure
                  ls_new_goitem to <ls_cobl_goitem>.
            if not <ls_cobl_goitem> is initial.
              l_copycobl = abap_false.
              exit.
            endif.
          endloop.
          if l_copycobl = abap_true.
            loop at lt_coblfields into l_coblfields.
              call function 'MIGO_CUST_FIELD_ALLOWED'
                exporting
                  i_bwart     = ls_new_goitem-bwart
                  i_field     = l_coblfields
                exceptions
                  not_allowed = 1
                  others      = 2.
              if sy-subrc = 0.
                assign component l_coblfields of structure
                      ls_cobl_goitem to <ls_cobl_goitem>.
                assign component l_coblfields of structure
                      ls_new_goitem to <ls_new_goitem>.
                if <ls_new_goitem> = abap_false.
                  <ls_new_goitem> = <ls_cobl_goitem>.
                endif.
              endif.
            endloop.
          endif.
        endif.
      endif.                           " Copy cobl fields

      if i_insert = abap_false.
        append ls_new_goitem to pt_goitem.
      else.
        insert ls_new_goitem into pt_goitem index l_tabix.
      endif.

Поэтому второй вопрос а что делать если хочется обеспечить копирование для других операций? Ну на этим кодом стоит такой вот вызов:

*     BAdI: line modify
      call method line_modify_badi
        changing
          cs_goitem = ls_new_goitem.
*     BAdI MB_MIGO_ITEM_BAdI: method ITEM_MODIFY
      call method line_modify_badi2
        changing
          cs_goitem = ls_new_goitem.

т.е. вызывается бади MB_MIGO_BADI в которой можно попытаться реализовать такой вот аналог копирования для своих операций, в вашем случае это 261 вид движения. Думаю это вполне возможно, но посмотрю реализацию чуть позже. Для самостоятельного чтения про этот бади писал тут: http://sapforum.biz/index.php/topic,375.0.html

Uukrul

В общем покрутил я тут эти расширения, красиво через экзиты/энхансменты/бади копирование сделать не получится к сожалению. Так что или нужно писать долгие и длинные письма на SAP, чтобы они вставили в данном коде точку расширения или брать ключ на объект разработки, вставлять свою точку расширения и реализовывать свою логику копирования.

Uukrul

Хотя тут еще поигрался со стандартной транзакцией, короче у меня получилось сделать так, выставить операцию A07 - Отпуск материала, подоперация/ссылочный документ R10 - Прочие,  по умолчанию там станет вид движения 201, вы его исправьте на 261, а затем переходите к вводу позиций материала, номер заказа у вас будет теперь на закладке контировки как я понимаю, вводите его для первой позиции и заполняете свои остальные данные контировки,  а дальше нажимаете кнопку следующая позиция, вводите материал, после чего вроде как все копируется для 261 вида движения в закладке контировка. Попробуйте у себя так сделать.

loseal

Большущее спасибо за быстрый и квалифицированный ответ!!!
Приятно, что мой Help не канул в лета....

Проблема объясняется работой BADI (местных кулибинов...)
При ее деактивации все копирует....

Uukrul

Цитата: loseal від Січень 19, 2011, 11:25:52 ДП
Проблема объясняется работой BADI (местных кулибинов...)
При ее деактивации все копирует....
Ну это был бы второй вариант если бы после всего у вас продолжило не работать... Вообще сейчас с этими бади/энхансментами и т.д. стало все намного сложнее докопаться в чем причина.

SMF spam blocked by CleanTalk