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

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




Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Удаление записей из PCALAC, ошибки при просмотре прогонов проводок.
СообщениеДобавлено: Чт, окт 08 2009, 18:35 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, май 30 2006, 08:34
Сообщения: 1900
Всем привет.

Из таблицы PCALAC ошибочно были удалены записи по продуктивному прогону со статусом "документы перенесены".
В результате у пользователей пошли ошибки при просмотре документов в PCP0.
Из резервной копии удаленные записи были возвращены в таблицу PCALAC при помощи транзакции SE16N.

Однако при попытке провалиться в позиции некоторых (не всех) документа выдается сообщение 3G259
Code:
Для PPOPX-записи PERNR &1 и SEQNR &2 существует PPOIX-запись

С какими документами непорядок пока не понял. Вроде бы есть закономерность, что проблема в первом документе(ах).

Таблицы PPOPX и PPOIX консультантами не редактировались. Ничего не добавлялось, не удалялось.
Табельные номера, присутствующие в сообщение не пересчитывались после выполнения продуктивного прогона проводок.

В чем может быть проблема?

_________________
С уважением.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление записей из PCALAC, ошибки при просмотре прогонов проводок.
СообщениеДобавлено: Пн, окт 12 2009, 09:12 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Таблицы с документами
PEVST (прогон)
PPDHD(заголовок)
PPDIT(позиции)
PPDIX(Связь со следующим слоем)
PPOIX(новые) или PPOPX(старые) - записи, сокращенные RT с ссылкой на RT.

Могу в терминах ошибаться, т.к. абапер.
Записи со "старыми" данными храняться в PPOPX. Это тоже самое что PPOIX, только сокращенные. Они по сути ключи к соответствующим записям из PPOIX. Скорее всего сапу требуется достать эти "старые" документы, он для PPOPX пытается найти соответствующие PPOIX и не находит.

Удалили не последний продуктивный прогон наверное, а более ранний?
Нужна логика перехода от PPOPX к PPOIX?

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление записей из PCALAC, ошибки при просмотре прогонов проводок.
СообщениеДобавлено: Пн, окт 12 2009, 09:39 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, май 30 2006, 08:34
Сообщения: 1900
Цитата:
Удалили не последний продуктивный прогон наверное, а более ранний?

Удалили из нескольких прогонов, в том числе и за предыдущие периоды.

Цитата:
Нужна логика перехода от PPOPX к PPOIX?

Если Вас не затруднит. Пригодится.

Цитата:
Скорее всего сапу требуется достать эти "старые" документы, он для PPOPX пытается найти соответствующие PPOIX и не находит.

Непонятно, почему не находит. Ведь таблицы PPOPX к PPOIX не затрагивались. Помоему разумению при удалении записей из PCALAC через ZEDIT не могло ничего удалиться из других таблиц.

_________________
С уважением.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление записей из PCALAC, ошибки при просмотре прогонов проводок.
СообщениеДобавлено: Пн, окт 12 2009, 10:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Еще как вариант поставить точку останова в RPCIPD00 FORM READ_RECALCULATED_PPOIX. B посмотреть как SAP в вашем конкретном случае это делает.

А логику то в двух словах описать сложно :(.

Находим строки из PPOPX которые использовались в нашем прогоне.

Code:
      SELECT * FROM ppopx INTO CORRESPONDING FIELDS OF TABLE it_ppopx
        WHERE runid = if_runid.


Для них теперь надо найти соответствующие PPOIX

Нужно найти прогоны, из которых будем смотреть PPOIX.


Code:
 
DATA: productive_runs LIKE hrpp_pernr_runtab OCCURS 0 WITH HEADER LINE.
*Найдем для каких табельных и за какие периоды нужны расчеты
LOOP AT it_ppopx INTO wa_ppopx.
    MOVE-CORRESPONDING wa_ppopx TO productive_runs.
    CLEAR productive_runs-runid.
    COLLECT productive_runs.
  ENDLOOP.
*Находятся соответствующие продуктивные прогоны для выбранных табельных и периодов
*с использованием PCALAC
  CALL FUNCTION 'HR_EVAL_PROD_A_RUN_GET_TABLE'
    TABLES
      result_table = productive_runs.


Я думаю, что раз вы там что то удаляли, то вот в этом месте происходит ошибка.

Далее стандарт рассматривает какие то "архивные прогоны". У нас их нет, поэтому я с ними никак :(. и тут я их не пишу.

Code:
* fill ppoix-keys for needed ppoix
  CLEAR prod_runs_db.
  LOOP AT it_ppopx INTO wa_ppopx.
    WHILE wa_ppopx-pernr GT prod_runs_db-pernr OR
        ( wa_ppopx-pernr EQ prod_runs_db-pernr AND
          wa_ppopx-seqno GT prod_runs_db-seqno ).
      tabix = tabix + 1.
      READ TABLE prod_runs_db INDEX tabix.
      IF sy-subrc NE 0.
        EXIT.
      ENDIF.
    ENDWHILE.
    CHECK wa_ppopx-pernr EQ prod_runs_db-pernr AND
          wa_ppopx-seqno EQ prod_runs_db-seqno.
    CLEAR lt_ppoix_key.
    MOVE-CORRESPONDING prod_runs_db TO lt_ppoix_key.
    lt_ppoix_key-postnum = wa_ppopx-postnum.
    lt_ppoix_key-actsign = 'A'.
    COLLECT lt_ppoix_key.
  ENDLOOP.

* read corresponding ppoix-data from database
  READ TABLE prod_runs_db INDEX 1.
  IF sy-subrc EQ 0.
    SELECT pernr seqno actsign runid postnum tslin lgart betrg waers
           wpbpref c0ref c1ref koart anzhl meins spprc momag
           mo_fix komok mcode auart nofin rtline
               FROM ppoix
               INTO CORRESPONDING FIELDS OF TABLE ppoix_for_ppopx
                             FOR ALL ENTRIES IN lt_ppoix_key
                             WHERE pernr = lt_ppoix_key-pernr
                             AND   seqno = lt_ppoix_key-seqno
                             AND   actsign = 'A'
                             AND   runid = lt_ppoix_key-runid
                             AND   postnum = lt_ppoix_key-postnum.
  ENDIF.


Теперь данные считаны и происходит для PPOPX заполнение внутренней таблицы аналогичной PPOIX
Code:
  CLEAR wa_ppoix.
* fill rest-info from corresponding ppoix-set into ppopx-sets
* and switch sign of ppopx-amounts and append them to ppoix-lines
  tabix = 0.
  DESCRIBE TABLE ppoix_for_ppopx LINES count_lines.
  ADD 2 TO count_lines."because of last 'if' before enddo
  LOOP AT it_ppopx INTO wa_ppopx.
    DO.
      tabix = tabix + 1.
      READ TABLE ppoix_for_ppopx INDEX tabix.
      IF tabix GE count_lines.     "infinite do/enddo recognized
        MESSAGE e442(3g) WITH wa_ppopx-pernr
                          wa_ppopx-seqno
                          wa_ppopx-postnum.
      ENDIF.
      IF ppoix_for_ppopx-pernr = wa_ppopx-pernr AND
         ppoix_for_ppopx-seqno = wa_ppopx-seqno AND
         ppoix_for_ppopx-postnum = wa_ppopx-postnum.
        MOVE-CORRESPONDING ppoix_for_ppopx TO wa_ppoix.
        MOVE-CORRESPONDING wa_ppopx  TO wa_ppoix.
*     switch sign for P-entries
        IF wa_ppoix-actsign <> 'A'.
          wa_ppoix-betrg = - wa_ppoix-betrg.
          wa_ppoix-anzhl = - wa_ppoix-anzhl.
        ENDIF.
        APPEND wa_ppoix to it_ppoix.
        EXIT.
      ELSEIF tabix GE 2.
*     Maybe the current PPOPX entry belongs to the same PPOIX_FOR_PPOPX
*     entry as the previous PPOPX entry (can happen if revision info
*     is selected for several posting runs at the same time).
        prev_tabix = tabix - 1.
        READ TABLE ppoix_for_ppopx
             INTO ppoix_for_ppopx_wa
             INDEX prev_tabix.
        IF ppoix_for_ppopx_wa-pernr = wa_ppopx-pernr AND
           ppoix_for_ppopx_wa-seqno = wa_ppopx-seqno AND
           ppoix_for_ppopx_wa-postnum = wa_ppopx-postnum.
          MOVE-CORRESPONDING ppoix_for_ppopx_wa TO wa_ppoix.
          MOVE-CORRESPONDING wa_ppopx TO wa_ppoix.
*       switch sign for P-entries
          IF wa_ppoix-actsign <> 'A'.
            wa_ppoix-betrg = - wa_ppoix-betrg.
            wa_ppoix-anzhl = - wa_ppoix-anzhl.
          ENDIF.
          APPEND wa_ppoix to it_ppoix.
          tabix = tabix - 1.
          EXIT.
        ENDIF.
      ENDIF.
      IF ppoix_for_ppopx-pernr > wa_ppopx-pernr OR
         ppoix_for_ppopx-pernr = wa_ppopx-pernr AND
         ppoix_for_ppopx-seqno > wa_ppopx-seqno OR
         ppoix_for_ppopx-pernr = wa_ppopx-pernr AND
         ppoix_for_ppopx-seqno = wa_ppopx-seqno AND
         ppoix_for_ppopx-postnum > wa_ppopx-postnum.
        tabix = tabix - 1.
        EXIT.
      ENDIF.
    ENDDO.
  ENDLOOP.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление записей из PCALAC, ошибки при просмотре прогонов проводок.
СообщениеДобавлено: Пн, окт 12 2009, 11:52 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, май 30 2006, 08:34
Сообщения: 1900
Цитата:
Еще как вариант поставить точку останова в RPCIPD00 FORM READ_RECALCULATED_PPOIX.

Это я сразу поглядел, но полное понимание процесса намного сложнее простого
Code:
SELECT * FROM ppopx INTO CORRESPONDING FIELDS OF TABLE it_ppopx
        WHERE runid = if_runid.


:)

_________________
С уважением.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Удаление записей из PCALAC, ошибки при просмотре прогонов проводок.
СообщениеДобавлено: Пн, окт 12 2009, 12:01 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, фев 11 2008, 11:54
Сообщения: 359
Откуда: Воронеж
Пол: Мужской
Ну если 'HR_EVAL_PROD_A_RUN_GET_TABLE' у вас возвращает номер предыдущего продуктивного прогона верно, и если сидеть в отладчике READ_RECALCULATED_PPOIX не хоцца, то возможно стоит посмотреть в логику ZEDIT, насколько я понял это ваша разработка. Возможно она удаляет записи каскадно? То есть для прогона так же удаляются все заголовки, позиции и PPOIX? Посмотрите есть номер прогона который возвращает этот ФМ. А затем стандартрыми средствами посмотрите этот прогон, все ли с ним впорядке, есть ли документы, есть ли позиции, и двойной щелчок по ним.

_________________
Hормальные люди делают вещи намного более безумные чем всё, что делают сумасшедшие (c) С.Лем


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

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


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

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


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

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