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

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


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

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


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

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