Текущее время: Пт, июл 25 2025, 06:34

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




Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Нумерация платежных поручений в АПП
СообщениеДобавлено: Вт, ноя 12 2013, 16:22 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, май 12 2011, 08:55
Сообщения: 82
Dmitry80 написал(а):
Ошибся sapf110* :oops: поторопился. Огромное спасибо. Простите, есть пробелы, поэтому хотелось бы авторитетного мнения, в момент продуктивного прогона, насколько корректнее сделать при <000> подмену на +1, хотелось бы автоматизировать процесс перепрогона описанного в одной из нот.


darkduck написал:
Ну, во-первых, не вводите в заблуждение. Не sapf100s / sapf100v, а sapf110s / sapf110v соответственно. :)
Во-вторых, основная программа - ...s (Zahlungsprogramm). Та, что с ...v - это только набор модулей параметров (Modulpool 'Parametrisierung des Zahlungsprogramms').
В-третьих, событие процесса 1170 вообще никакого отношения к АПП не имеет: POST RESIDUAL ITEMS: Deactivate No. Range Buffers. События 1820/1830 - да, имеют, но они работают в момент создания предложения АПП, а не в момент продуктивного прогона.
В-четвертых, именно в момент продуктивного прогона и осуществляется нумерация платежек. Посмотрите на include F110SFZ0_ZAHLUNGSAUFTRAG_ERZEU:


Code:
IF PYORD_NUMKR = SPACE.
      CALL FUNCTION 'F110_PAYORD_DET_NUMBERRANGE'
           IMPORTING
                E_NUMKR = PYORD_NUMKR
           EXCEPTIONS
                OTHERS  = 1.
      IF SY-SUBRC = 1.
        MESSAGE S055.
        RAISE TERMINATION.
      ENDIF.
    ENDIF.

*------- ... Nächste Nummer besorgen -----------------------------------
    CALL FUNCTION 'NUMBER_GET_NEXT'
         EXPORTING
              NR_RANGE_NR = PYORD_NUMKR
              OBJECT      = 'FI_PYORD'
         IMPORTING
              NUMBER      = REGUH-PYORD
         EXCEPTIONS
              OTHERS      = 1.
    IF SY-SUBRC = 1.
      MESSAGE S056 WITH PYORD_NUMKR.
      RAISE TERMINATION.
    ENDIF.


Программист вставлял точки останова где можно, но при прогоне процесс не тормозится. Помогите пожалуйста, сам не АБАПер, но мне кажется еще здесь и "надолбил" чего-то лишнего.

Code:
*eject
*-----------------------------------------------------------------------
*        FORM ZAHLUNGSAUFTRAG_ERZEUGEN
*-----------------------------------------------------------------------
FORM ZAHLUNGSAUFTRAG_ERZEUGEN.

*------- Vorschlagslauf ------------------------------------------------
  IF PARXVORL = 'X'.

*------- ... Nummernkreis schon kontrolliert ? -------------------------
    IF PYORD_NUMKR = SPACE.
      CALL FUNCTION 'F110_PAYORD_DET_NUMBERRANGE'
           EXPORTING
                I_FOR_PROPOSAL_ONLY = 'X'
           IMPORTING
                E_NUMKR             = PYORD_NUMKR
           EXCEPTIONS
                OTHERS              = 1.
      IF SY-SUBRC = 1.
        MESSAGE S055.
        RAISE TERMINATION.
      ENDIF.
    ENDIF.

*------- Zahlungslauf --------------------------------------------------
  ELSE.

*------- ... Initialisierung -------------------------------------------
    CLEAR: PYORDH, XPYORDP.
    REFRESH XPYORDP.

*------- ... Nummernkreis schon reserviert ? ---------------------------
    IF PYORD_NUMKR = SPACE.
      CALL FUNCTION 'F110_PAYORD_DET_NUMBERRANGE'
           IMPORTING
                E_NUMKR = PYORD_NUMKR
           EXCEPTIONS
                OTHERS  = 1.
      IF SY-SUBRC = 1.
        MESSAGE S055.
        RAISE TERMINATION.
      ENDIF.
    ENDIF.

*------- ... Nächste Nummer besorgen -----------------------------------
    CALL FUNCTION 'NUMBER_GET_NEXT'
         EXPORTING
              NR_RANGE_NR = PYORD_NUMKR
              OBJECT      = 'FI_PYORD'
         IMPORTING
              NUMBER      = REGUH-PYORD
         EXCEPTIONS
              OTHERS      = 1.
    IF SY-SUBRC = 1.
      MESSAGE S056 WITH PYORD_NUMKR.
      RAISE TERMINATION.
    ENDIF.

*------- Ohne Zahlungsvorschlag: Schlüsselfelder REGUH noch leer -------
    IF REGUV-XVORE NE 'X'.
      PERFORM REGUH_SCHLUESSEL.
    ENDIF.

*------- PYORDH füllen -------------------------------------------------
    MOVE-CORRESPONDING REGUH TO PYORDH.

    IF REGUV-XVORE NE 'X' AND PYORDH-HBKID IS INITIAL.         "#1473777
      PYORDH-HBKID = T042I-HBKID.
      PYORDH-HKTID = T042I-HKTID.
    ENDIF.

*------- Daten für die Finanzdispo -------------------------------------
    IF T001-BUKRS NE REGUH-ZBUKR.
      PERFORM BUCHUNGSKREIS_LESEN(SAPFF001) USING REGUH-ZBUKR.
    ENDIF.

    IF T042I-UKONT   NE SPACE
    AND PYORDH-VALUT GT '00000000'
    AND T001-XFDIS   NE SPACE.
      IF SKB1-SAKNR NE T042I-UKONT
      OR SKB1-BUKRS NE REGUH-ZBUKR.
        SKB1-SAKNR = T042I-UKONT.
        SKB1-BUKRS = REGUH-ZBUKR.
        PERFORM SKB1_LESEN.
      ENDIF.

      IF  SKB1-FDLEV NE LAST_FDLEV
      AND SKB1-FDLEV NE SPACE.
        CALL FUNCTION 'CASH_FORECAST_CHECK_LEVEL_GRP'
             EXPORTING
                  FDLEV  = SKB1-FDLEV
                  KOART  = 'S'
             EXCEPTIONS
                  OTHERS = 1.
      ENDIF.
      IF SY-SUBRC = 1.
        MESSAGE S060 WITH SKB1-SAKNR SKB1-FDLEV.
        MESSAGE S061.
        LAST_FDLEV = SPACE.
      ELSE.
        LAST_FDLEV = SKB1-FDLEV.
      ENDIF.

      PYORDH-FDLEV = LAST_FDLEV.
      PYORDH-BNKKO = SKB1-SAKNR.
      PYORDH-CURRA = SKB1-WAERS.
    ENDIF.

*------- XPYORDP füllen ------------------------------------------------
    LOOP AT XZAHLB WHERE ZHLG2 = ZHLG2.
      REGUP = XZAHLB-REGUP.
      MOVE-CORRESPONDING REGUP TO XPYORDP.
      XPYORDP-PYORD = REGUH-PYORD.
      IF XPYORDP-KOART = 'K'.
        XPYORDP-KONKO = REGUP-LIFNR.
      ELSE.
        XPYORDP-KONKO = REGUP-KUNNR.
      ENDIF.
      APPEND XPYORDP.
    ENDLOOP.

*------- ... Daten fortschreiben ---------------------------------------
    CALL FUNCTION 'PYORD_INSERT' IN UPDATE TASK
         EXPORTING
              I_PYORDH = PYORDH
         TABLES
              T_PYORDP = XPYORDP.

*------- Zähler in REGUV fortschreiben ---------------------------------
    UPDATE REGUV SET    ANZER = ANZER + 1
                 WHERE  LAUFD = REGUV-LAUFD
                 AND    LAUFI = REGUV-LAUFI.
    CALL FUNCTION 'REGUV_UPDATE' IN UPDATE TASK
         EXPORTING
              I_REGUV = REGUV.

*------- COMMIT-Gewicht hochzählen -------------------------------------
    DESCRIBE TABLE XPYORDP LINES SY-TFILL.
    COMMIT_W = COMMIT_W + SY-TFILL * 2.

*------- ... TRACE ? ---------------------------------------------------
    IF TRCOPT-XTRBL NE SPACE.
      PERFORM TRACE_START USING ZHLG1-ZBUKR.
      WRITE REGUH-RWBTR TO DRUCK1(24) CURRENCY REGUH-WAERS.
      SHIFT DRUCK1 LEFT DELETING LEADING SPACE.
      MESSAGE S694 WITH REGUH-PYORD REGUH-WAERS DRUCK1(24) REGUH-RZAWE.
    ENDIF.
  ENDIF.
ENDFORM.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нумерация платежных поручений в АПП
СообщениеДобавлено: Вт, ноя 12 2013, 16:32 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, май 12 2011, 08:55
Сообщения: 82
Plank написал:
Собственно не вижу тут проблемы...
В конце ФМ NUMBER_GET_NEXT делается энхансмент и обрабатывается условие: если объект FI_PYORD и полученный номер оканчивается на 000, то вызвать ФМ NUMBER_GET_NEXT для получения нового номера.
Делается консультантом с минимальным знанием ABAP быстрее чем читается вся эта тема...


В FI_PYORD и PYORDH номера не совпадают по 000 вконце. И еще процесс не тормозится точками на ФМ NUMBER_GET_NEXT


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нумерация платежных поручений в АПП
СообщениеДобавлено: Вт, ноя 12 2013, 19:12 
Гуру-модератор
Гуру-модератор
Аватара пользователя

Зарегистрирован:
Ср, фев 01 2006, 16:49
Сообщения: 1967
Откуда: Питерский Москвич
Пол: Мужской
Dmitry80 написал(а):
И еще процесс не тормозится точками на ФМ NUMBER_GET_NEXT

И не должен...
Программа SAPF110S запускается в фоне (см. тр. SM37, там журнал заданий) из тр. F110. Для того, чтобы попасть туда знаю 2 варианта:
1. Запустить в тр. SE38 программу SAPF110S указав ID прогона и дату, и в отладчике установить значение переменной XDEBUG = 'X' после строки №53, где переменная очищается (53 XDEBUG = SPACE.). Тогда вы попадете в вашу точку остановки (не будет сообщения о неправильном запуске).
2. Сделать бесконечный цикл в вашем коде, запустить прогон платежей и в тр. SM50 найти ваш фоновый процесс и провалиться в него (Администрирование -> Программа -> Отладка). Убрать условие бесконечного цикла и посмотреть как работает ваш код.

На счет "В FI_PYORD и PYORDH номера не совпадают по 000 вконце" не понял, поясните.
Как вариант, включена буферизация номеров, и из счетчика FI_PYORD считываются номера пачкой (например, по 100). Текущий номер хранится не в БД, а в памяти и выделяется для нумерации из нее (так быстрее). Поэтому в объекте FI_PYORD номера будут 100, 200, 300, ...

_________________
Материалы по S/4HANA (установка и активация компонентов, FIORI, ACR, CIT, PaPM(FS-PER)) на моем сайте planksap.pro


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Нумерация платежных поручений в АПП
СообщениеДобавлено: Ср, ноя 13 2013, 08:52 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, май 12 2011, 08:55
Сообщения: 82
На счет "В FI_PYORD и PYORDH номера не совпадают по 000 вконце" не понял, поясните.
Как вариант, включена буферизация номеров, и из счетчика FI_PYORD считываются номера пачкой (например, по 100). Текущий номер хранится не в БД, а в памяти и выделяется для нумерации из нее (так быстрее). Поэтому в объекте FI_PYORD номера будут 100, 200, 300, ...[/quote]


Имелось ввиду, что после прогона в F110 смотрю последние номера в PYORDH-PYORD = 3162, в объекте FI_PYORD - 3200. Понял. Спасибо


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

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


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

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


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

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