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

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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