Текущее время: Вт, июл 22 2025, 23:23

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 13 ] 
Автор Сообщение
 Заголовок сообщения: Создание пакетника
СообщениеДобавлено: Пн, сен 27 2010, 15:45 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
Доброе время суток господа. Дело в следующим..сталкнулся с проблемкой пакетно ввода, там и данных то два поля МВЗ и сумма для загрузки, но большое количество строк порядко больше 500, так вот проблема заключается в длительном времени (зависании) работы программы, как ускорить процесс загрузки данных? до этого делал пкетник все ок, грузит быстро и данных в несколько раз больше алгоритм эдентичен. думаю, что все дело в параметрах передаваемых на ввод.
opt-dismode = 'N'.
opt-updmode = 'A'.
opt-defsize = 'X'.
opt-racommit = 'X'.
CALL TRANSACTION 'KP06' USING bdcdata OPTIONS FROM opt.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 06:42 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Покажите код программы. bdcdata отчищаете?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 06:52 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
отчищаю оператором REFRESH вот кусок программы, ни чего заумного....а выполняет довольно
долго :(.
Code:
DO 12 TIMES.
     add 1 to p1. "add 1 to p2.
       k = 0. s = 0. a = 0.

   CONCATENATE 'Обработка' p1 'периода.'  into help separated by space.
*  отображаем часики и сообщение
   CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
       EXPORTING
            PERCENTAGE = SY-INDEX
            TEXT       = help.

    REFRESH bdcdata.

      perform bdc_dynpro      using 'SAPLKPP0'   '1000'.
      perform bdc_field       using 'BDC_CURSOR' 'KPP1B-ONLY'.
      perform bdc_field       using 'BDC_OKCODE' '=CSUB'.
      perform bdc_field       using 'KPP1B-ONLY' 'X'.
      perform bdc_field       using 'KPP0B-VALUE(01)' '0'.
      perform bdc_field       using 'KPP0B-VALUE(02)' p1.
      perform bdc_field       using 'KPP0B-VALUE(03)' p1.
      perform bdc_field       using 'KPP0B-VALUE(04)' GJAHR.
      perform bdc_field       using 'KPP0B-VALUE(06)' kostl.
      perform bdc_field       using 'KPP0B-VALUE(08)' ''.
      perform bdc_field       using 'KPP0B-VALUE(11)' '21'."'1'.

   SELECT SINGLE * INTO wa_cokp FROM COKP
         WHERE
            OBJNR LIKE str_mvz
        AND VERSN = '000'
        AND WRTTP = '01'
        AND gjahr = GJAHR.
*  очистка
   IF SY-subrc = 0.
      perform bdc_dynpro      using 'SAPLKPP2'   '0112'.
      perform bdc_field       using 'BDC_OKCODE' '=CMAL'.
      perform bdc_dynpro      using 'SAPLKPP2'   '0112'.
      perform bdc_field       using 'BDC_OKCODE' '=CDEL'.
      perform bdc_dynpro      using 'SAPLSPO1'   '0200'.
      perform bdc_field       using 'BDC_OKCODE' '=YES'.
    ENDIF.

   LOOP AT wa_imp_mvz ASSIGNING <wa_imp_mvz>.

      IF p1 = 1 .sum_all = <wa_imp_mvz>-sum01. ENDIF. IF p1 = 2 .sum_all = <wa_imp_mvz>-sum02. ENDIF.
      IF p1 = 3 .sum_all = <wa_imp_mvz>-sum03. ENDIF. IF p1 = 4 .sum_all = <wa_imp_mvz>-sum04. ENDIF.
      IF p1 = 5 .sum_all = <wa_imp_mvz>-sum05. ENDIF. IF p1 = 6 .sum_all = <wa_imp_mvz>-sum06. ENDIF.
      IF p1 = 7 .sum_all = <wa_imp_mvz>-sum07. ENDIF. IF p1 = 8 .sum_all = <wa_imp_mvz>-sum08. ENDIF.
      IF p1 = 9 .sum_all = <wa_imp_mvz>-sum09. ENDIF. IF p1 = 10 .sum_all = <wa_imp_mvz>-sum10. ENDIF.
      IF p1 = 11 .sum_all = <wa_imp_mvz>-sum11. ENDIF. IF p1 = 12 .sum_all = <wa_imp_mvz>-sum12. ENDIF.
      sum = sum_all.
       k = k + 1. s = s + 1.
       CONDENSE sum.
       REPLACE '.' WITH ',' INTO  sum.
* позицеанируемся
    IF k = 11.

        perform bdc_dynpro using 'SAPLKPP2'  '0112'.
        perform bdc_field using 'BDC_OKCODE' '=CPOZ'.

        perform bdc_dynpro using 'SAPLKPP4' '0100'.
        perform bdc_field using 'KPP0B-VALUE(01)' <wa_imp_mvz>-hkont.
        perform bdc_field using 'BDC_OKCODE' '=CSPA'.
         k = 1. s = 1.
    ENDIF.
          CONCATENATE 'Z-BDC01' '(' k ')' into pole.
          CONCATENATE 'Z-BDC03' '(' s ')' into pole1.

        perform bdc_dynpro using 'SAPLKPP2'  '0112'.
        perform bdc_field using 'BDC_OKCODE' '/00'.
        perform bdc_field using pole  <wa_imp_mvz>-hkont.
        perform bdc_field using pole1  sum.
   ENDLOOP.

        perform bdc_dynpro using 'SAPLKPP2'  '0112'.
        perform bdc_field using 'BDC_OKCODE' '=CBUC'.

        opt-dismode = dismode.
        opt-updmode = 'A'.
        opt-defsize = 'X'.
        opt-racommit = 'X'.
CALL TRANSACTION 'KP06'
            USING bdcdata OPTIONS FROM opt.

ENDDO.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 07:14 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
Code:
SELECT SINGLE * INTO wa_cokp FROM COKP
WHERE
OBJNR LIKE str_mvz
AND VERSN = '000'
AND WRTTP = '01'
AND gjahr = GJAHR.

Что это за запрос и для чего он нужен? Долго это сколько? Не забывайте что пакетный ввод это всего лишь имитация ручного ввода. Воспользуйтесь se30 чтобы выявить "узкое" место. Зачем делать обновление opt-updmode в асинхронном режиме?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 07:50 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
Этот select нужен для очистки запланированного ранее МВЗ, т.е. если есть запись то очищаем экран для нового ввода, иначе выдает сообщение функция не выполнима и стопориться, в отладке смотрел, работает быстро. Долго это по времени минут 15-20 ввод данных за один период. Синхронный, асинхронный режимы <я не знать русский языка> и без них результат тот же.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 07:55 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
"я не знать русского языка"...глюк какой-то...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 11:09 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, апр 10 2009, 11:13
Сообщения: 1308
Имхо, для данных целей лучше пользовать BAPI_COSTACTPLN_POSTPRIMCOST ...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 12:34 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
с такими вещами еще не работал... :( посмотрел...все так сложно.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 12:47 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, апр 10 2009, 11:13
Сообщения: 1308
посмотрите документацию к этому модулю, все не намного сложнее чем вызов kp06, только не забудьте поставить коммит после вызова...
Code:
  DATA: ls_rep like line of gt_rep,
        ld_rms TYPE STRING,
        ls_HEADER_INFO LIKE BAPIPLNHDR,
        lt_IDX_STRUCTURE TYPE TABLE OF BAPIACPSTRU,
        lt_OBJECT TYPE TABLE OF BAPIPCPOBJ,
        lt_PER_VALUE TYPE TABLE OF BAPIPCPVAL,
        lt_TOT_VALUE TYPE TABLE OF BAPIPCPTOT,
        lt_CONTRL TYPE TABLE OF BAPIPCPCTRL,
        ls_IDX_STRUCTURE TYPE BAPIACPSTRU,
        ls_OBJECT TYPE BAPIPCPOBJ,
*        ls_PER_VALUE TYPE TABLE OF BAPIPCPVAL,
        ls_TOT_VALUE TYPE BAPIPCPTOT.
*        ls_CONTRL TYPE BAPIPCPCTRL.
  DATA: lt_RETURN TYPE TABLE OF BAPIRET2.

  ls_HEADER_INFO-CO_AREA = p_KOKRS.
  ls_HEADER_INFO-FISC_YEAR = p_GJAHR.
  ls_HEADER_INFO-PERIOD_FROM = p_PERBL.
  ls_HEADER_INFO-PERIOD_TO = p_PERBL.
  ls_HEADER_INFO-VERSION = p_VERSN.
  ls_HEADER_INFO-DOC_HDR_TX = p_BLTXT.
  ls_HEADER_INFO-PLAN_CURRTYPE = p_CURTP.

  LOOP AT gt_rep INTO ls_rep .
    ls_IDX_STRUCTURE-OBJECT_INDEX = ls_rep-row.
    ls_IDX_STRUCTURE-VALUE_INDEX = ls_rep-row.
    ls_IDX_STRUCTURE-ATTRIB_INDEX = space.
    APPEND ls_IDX_STRUCTURE TO lt_IDX_STRUCTURE.
    ls_OBJECT-OBJECT_INDEX = ls_rep-row.
    ls_OBJECT-COSTCENTER = ls_rep-COSTCENTER.
    ls_OBJECT-ACTTYPE = ls_rep-ACTTYPE.
    ls_OBJECT-CO_BUSPROC = ls_rep-CO_BUSPROC.
    ls_OBJECT-ORDERID = ls_rep-ORDERID.
    ls_OBJECT-WBS_ELEMENT = ls_rep-WBS_ELEMENT.
    APPEND ls_OBJECT TO lt_OBJECT.
    ls_TOT_VALUE-VALUE_INDEX = ls_rep-row.
    ls_TOT_VALUE-COST_ELEM = ls_rep-COST_ELEM.
    ls_TOT_VALUE-FIX_VALUE = ls_rep-FIX_VALUE.
    ls_TOT_VALUE-DIST_KEY_FIX_VAL = '2'.
    ls_TOT_VALUE-VAR_VALUE = ls_rep-VAR_VALUE.
    ls_TOT_VALUE-DIST_KEY_VAR_VAL = '2'.
    APPEND ls_TOT_VALUE TO lt_TOT_VALUE.
  ENDLOOP.

  CALL FUNCTION 'BAPI_PRIM_COST_CHECK_AND_POST'
       EXPORTING
            HEADER_INFO   = ls_HEADER_INFO
            TESTRUN       = li_test
*            DELTA         = DELTA
       TABLES
            IDX_STRUCTURE = lt_IDX_STRUCTURE
            OBJECT        = lt_OBJECT
            PER_VALUE     = lt_PER_VALUE
            TOT_VALUE     = lt_TOT_VALUE
            CONTRL        = lt_CONTRL
            RETURN        = lt_RETURN.
  IF li_test IS INITIAL.
    COMMIT WORK AND WAIT.
...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Вт, сен 28 2010, 12:58 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
"funtik" спасибо большое, но думаю в этом я увязно надолго :), решение данной проблеммы на поверхности и 100% оно элементарное, просто как обычно много времени уходит на поиск...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Чт, сен 30 2010, 12:27 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, апр 10 2009, 11:13
Сообщения: 1308
в таком случае проще воспользоваться стандартной функцией загрузки из файла:
kp06 -> Дополнительная информация -> Excel-планирование -> Загрузка...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Ср, сен 12 2012, 19:12 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
какого типа gt_rep..?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Создание пакетника
СообщениеДобавлено: Чт, сен 13 2012, 09:09 
Специалист
Специалист

Зарегистрирован:
Пн, дек 29 2008, 07:19
Сообщения: 129
Пол: Мужской
Всем привет..! проблема решена стандартным путем..! se38 - RK_BAPI_POSTPRIMCOST для планирования МВЗ
тр kp06 (Сумма в валюте фикс. - сумма планирования)
Всем спасибо..!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ] 

Часовой пояс: UTC + 3 часа


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

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


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

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