Текущее время: Сб, июл 26 2025, 04:41

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


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

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


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

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