Текущее время: Сб, май 03 2025, 14:49

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


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Чт, фев 04 2021, 13:21 
Ассистент
Ассистент

Зарегистрирован:
Чт, янв 14 2021, 05:38
Сообщения: 31
Здравствуйте все!
Не знаю как найти номер платежного поручения. Есть входные данные: материал(MATNR), документ закупки(EBELN), поставщик(LIFNR), счёт-фактура(BKPF~BELNR). Необходимо по этим данным получить платежку.
Делаю через таблицу BSAK:
Code:
CLEAR ls_bsak.
        SELECT SINGLE bukrs lifnr augdt augbl gjahr
          INTO (ls_bsak-bukrs, ls_bsak-lifnr, ls_bsak-augdt, ls_bsak-augbl, ls_bsak-gjahr)
          FROM bsak
          WHERE bsak~lifnr = lifnr2
          AND
          bsak~belnr = bkpfblnr
          AND bsak~gjahr = ekbegj
          AND bsak~xblnr = bkpfxb.

        CLEAR: bsak_belnr, lv_budat.
        SELECT SINGLE belnr budat INTO (bsak_belnr, lv_budat)
          FROM bsak
          WHERE bsak~augbl = ls_bsak-augbl
          AND bsak~blart = 'ZP'.
        SHIFT bsak_belnr LEFT DELETING LEADING '0'.


Но не все платежки выходят в результат. Не знаю что не так. Какая вообще логика для получения платежного документа?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Чт, фев 04 2021, 17:25 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 11:34
Сообщения: 1552
Пол: Мужской
Не гость написал(а):
Здравствуйте все!
Не знаю как найти номер платежного поручения. Есть входные данные: материал(MATNR), документ закупки(EBELN), поставщик(LIFNR), счёт-фактура(BKPF~BELNR). Необходимо по этим данным получить платежку.
Делаю через таблицу BSAK:
Code:
CLEAR ls_bsak.
        SELECT SINGLE bukrs lifnr augdt augbl gjahr
          INTO (ls_bsak-bukrs, ls_bsak-lifnr, ls_bsak-augdt, ls_bsak-augbl, ls_bsak-gjahr)
          FROM bsak
          WHERE bsak~lifnr = lifnr2
          AND
          bsak~belnr = bkpfblnr
          AND bsak~gjahr = ekbegj
          AND bsak~xblnr = bkpfxb.

        CLEAR: bsak_belnr, lv_budat.
        SELECT SINGLE belnr budat INTO (bsak_belnr, lv_budat)
          FROM bsak
          WHERE bsak~augbl = ls_bsak-augbl
          AND bsak~blart = 'ZP'.
        SHIFT bsak_belnr LEFT DELETING LEADING '0'.


Но не все платежки выходят в результат. Не знаю что не так. Какая вообще логика для получения платежного документа?


Пинай своих постановщиков, чтобы они тебе сказали, откуда ты PYORD должен вытащить.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Чт, фев 04 2021, 17:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Ср, фев 21 2007, 08:50
Сообщения: 1597
Откуда: Пермь
Пол: Мужской
Дас ист гут)) тема про BSAK и платежки, все-таки жизнь циклична)
1. Вводные про материал и заказ были, чтобы запутать всех?) в СФ может быть хоть 100 материалов и 100 позиций заказа, но одна позиция кредитора. Если вам известен номер документа СФ, материал и заказ уходят в закат.
2. На первом же селекте даже мне как неразработчику уже лично кажется, что как минимум нет БЕ (даже если у вас она одна) и некоторых других вещей (если не смотрите памятные позиции и пр., то всегда используйте в выборках BSTAT). BSTAT - это вообще ваша библия. Простой пример: СФ на 100 рублей, две оплаты по 40 и последняя на 20. При включенной галке "Ссылка на СФ" в FB00 у вас на данный AUGBL будут ссылаться:
- 3 платежки (последняя сама на себя)
- последний ТП
3. А как выйти все платежки могут, если вы использовали select single?
4. Платежка может существовать, но при этом СФ не будет в BSAK (частичная оплата).
5. Документ выравнивания тоже попадет в выборку в BSAK (Дт 60, Кт 60 в частном случае), но платежкой он не является.

На форуме есть примеры некоторых движков по сбору цепочек выравнивания, раз уж вы зашли с этой стороны. Часть движков основана на самодельных ФМ, часть на BSE_CLR. В обоих случаях вам надо уточнять саму концепцию... тема, кстати, не самая простая. Не верьте, если кто-то скажет, что это не так. Если добавить в пример пару-тройку уровней выравнивания по REBZG, разбавить документом переноса оплаты через транзитный счет (с договора на договор), то уже даже не всякий К4 эту задачу решит нахрапом. Вам нужен конс.

_________________
Алё, это Пакистан? Нам нужен один килограмм


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Пт, фев 05 2021, 08:21 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 11:34
Сообщения: 1552
Пол: Мужской
Тут еще не понятно, с какой целью нужен номер ПП.
Если для отчетика, то он по результатам раскопок останков предыдущего внедрения (с) может оказаться и в каком-нибудь BSEG-XREF3 или BKPF-XBLNR, если вообще не в Z_BUCHDOC_PLATEZKA. А если для выравнивания, то хорошо бы конечно в FEBCL-PYORD, но это только если повезет и оно не запилено еще куда-нибудь.
Но таки в стандарте после выравнивания запись из FEBCL выпиливается, поэтому после выравнивания там селектить уже нечего.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Чт, фев 11 2021, 14:15 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 20 2007, 18:21
Сообщения: 1613
Берем за основу стандартный алгоритм из формы счет-фактуры. J_3RF что то там. На сколько помню, там находится выравнивание к фактуре и берется текст заголовка из документа платежа.

_________________
я твой сап эфай внедрял
BAdI-позитив
Взять немножечко абопу, сунь туда кошачью *опу, RFC лапки, БТ старой бабки, на медленном базиснике переносить, тестовое окружение материть, снимать SAT пенку, биться головой о стенку, охапка тайм-шитов, отчет готов!


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Чт, фев 11 2021, 17:11 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вс, окт 17 2004, 11:34
Сообщения: 1552
Пол: Мужской
Не гость написал(а):
Необходимо по этим данным получить платежку.

При такой постановке еще можно понять, что надо запись в REGUH сформировать


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Связь счёта-фактуры и платежного документа
СообщениеДобавлено: Пн, мар 01 2021, 05:23 
Ассистент
Ассистент

Зарегистрирован:
Чт, янв 14 2021, 05:38
Сообщения: 31
Итоговый код выглядит вот так. Знаю что тут недостатков куча, но результат даёт)

Code:
DATA firstflag.

    DATA BEGIN OF ls_tmc.

    DATA gjahr TYPE gjahr.
    DATA belnr TYPE belnr_d.
    DATA vblnr TYPE vblnr.
    DATA budat TYPE budat.
    DATA add.
    DATA add2.

    DATA END OF ls_tmc.

    DATA gt_tmc LIKE TABLE OF ls_tmc.
    DATA wa_tmc LIKE LINE OF gt_tmc.
    FIELD-SYMBOLS <fs_tmc_bsak> LIKE LINE OF gt_tmc.
    DATA l_vblnr TYPE vblnr.

    DATA: BEGIN OF ls_bsak,
      belnr TYPE bsak-belnr,
      gjahr TYPE bsak-gjahr,
      augbl TYPE bsak-augbl,
      augdt TYPE bsak-augdt,
      budat TYPE budat,
      blart TYPE bsak-blart,
      dbeg TYPE d,
      dend TYPE d,
    END OF ls_bsak.
    DATA ls_bsak1 LIKE ls_bsak.
    DATA ls_bsak2 LIKE ls_bsak.
    DATA ls_bsak3 LIKE ls_bsak.
    DATA ls_bsak4 LIKE ls_bsak.
    DATA ls_bsak5 LIKE ls_bsak.
    DATA lt_bsak1 LIKE TABLE OF ls_bsak.
    DATA lt_bsak2 LIKE TABLE OF ls_bsak.
    DATA lt_bsak3 LIKE TABLE OF ls_bsak.
    DATA lt_bsak4 LIKE TABLE OF ls_bsak.
    DATA lt_bsak5 LIKE TABLE OF ls_bsak.
    FIELD-SYMBOLS <fs_bsak> LIKE ls_bsak.

    CLEAR gt_tmc.
    LOOP AT gbt_pr INTO gbs_pr.
      MOVE gbs_pr-belnr TO wa_tmc-belnr.
      MOVE gbs_pr-gjahr TO wa_tmc-gjahr.
      APPEND wa_tmc TO gt_tmc.
    ENDLOOP.

    LOOP AT gt_tmc ASSIGNING <fs_tmc_bsak>
      WHERE belnr IS NOT INITIAL AND add = ''.

      LOOP AT gbt_pr INTO gbs_pr.
        SELECT SINGLE augbl INTO l_vblnr
            FROM bseg
            WHERE bukrs = '1000' AND belnr = gbs_pr-belnr AND gjahr = gbs_pr-gjahr.
      ENDLOOP.

      IF l_vblnr IS NOT INITIAL.
        IF firstflag = 'X'.
          <fs_tmc_bsak>-vblnr = l_vblnr.
          firstflag = ''.
        ELSE.
          "Расслаиваем позицию
          ls_tmc = <fs_tmc_bsak>.
          ls_tmc-vblnr = l_vblnr.
          ls_tmc-add = 'X'.
          APPEND ls_tmc TO gt_tmc.
        ENDIF.
      ENDIF.

    ENDLOOP.

    CLEAR lt_bsak1.
    IF gt_tmc IS NOT INITIAL.
      SELECT belnr gjahr augbl augdt budat blart
      INTO TABLE lt_bsak1
      FROM bsak
      FOR ALL ENTRIES IN gt_tmc
      WHERE belnr = gt_tmc-belnr AND gjahr = gt_tmc-gjahr.
    ENDIF.

    CLEAR lt_bsak2.
    IF lt_bsak1 IS NOT INITIAL.
      SELECT belnr gjahr augbl augdt budat blart
      INTO TABLE lt_bsak2
      FROM bsak
      FOR ALL ENTRIES IN lt_bsak1
      WHERE augbl = lt_bsak1-augbl AND augdt = lt_bsak1-augdt.

      LOOP AT lt_bsak2 ASSIGNING <fs_bsak>.
        <fs_bsak>-dbeg = <fs_bsak>-gjahr(4) && '0101'.
        <fs_bsak>-dend = <fs_bsak>-gjahr(4) && '1231'.
      ENDLOOP.
    ENDIF.

    CLEAR lt_bsak3.
    IF lt_bsak2 IS NOT INITIAL.
      SELECT belnr gjahr augbl augdt budat blart
      INTO TABLE lt_bsak3
      FROM bsak
      FOR ALL ENTRIES IN lt_bsak2
      WHERE augbl = lt_bsak2-belnr AND augdt >= lt_bsak2-dbeg AND augdt <= lt_bsak2-dend.
    ENDIF.

    CLEAR lt_bsak4.
    IF lt_bsak2 IS NOT INITIAL.
      SELECT belnr gjahr augbl augdt budat blart
      INTO TABLE lt_bsak4
      FROM bsak
      FOR ALL ENTRIES IN lt_bsak2
      WHERE belnr = lt_bsak2-belnr AND gjahr = lt_bsak2-gjahr.
    ENDIF.

    CLEAR lt_bsak5.
    IF lt_bsak4 IS NOT INITIAL.
      SELECT belnr gjahr augbl augdt budat blart
      INTO TABLE lt_bsak5
      FROM bsak
      FOR ALL ENTRIES IN lt_bsak4
      WHERE augbl = lt_bsak4-augbl AND augdt = lt_bsak4-augdt.
    ENDIF.


    LOOP AT gt_tmc ASSIGNING <fs_tmc_bsak>
      WHERE belnr IS NOT INITIAL AND add = '' AND add2 = ''.
      IF <fs_tmc_bsak>-vblnr IS INITIAL.
        firstflag = 'X'.
      ELSE.
        firstflag = ''.
      ENDIF.

      "1
      LOOP AT lt_bsak1 INTO ls_bsak1
      WHERE belnr = <fs_tmc_bsak>-belnr AND gjahr = <fs_tmc_bsak>-gjahr.
        CHECK ls_bsak1-belnr NE ls_bsak1-augbl.

        "2
        LOOP AT lt_bsak2 INTO ls_bsak2
        WHERE augbl = ls_bsak1-augbl AND augdt = ls_bsak1-augdt AND belnr NE ls_bsak1-belnr.
*        CHECK ls_bsak2-belnr NE ls_bsak2-augbl. "Убрано 05.11.2020

          IF ls_bsak2-blart = 'ZP'.
            IF firstflag = 'X'.
              <fs_tmc_bsak>-vblnr = ls_bsak2-belnr.
              <fs_tmc_bsak>-budat = ls_bsak2-budat.
              firstflag = ''.
            ELSE.
              "Расслаиваем позицию
              ls_tmc = <fs_tmc_bsak>.
              ls_tmc-vblnr = ls_bsak2-belnr.
              ls_tmc-budat = ls_bsak2-budat.
              ls_tmc-add2 = 'X'.
              APPEND ls_tmc TO gt_tmc.
            ENDIF.
          ELSEIF ls_bsak2-blart = 'AB'.
            "3
            LOOP AT lt_bsak3 INTO ls_bsak3
            WHERE augbl = ls_bsak2-belnr AND augdt >= ls_bsak2-dbeg AND augdt <= ls_bsak2-dend AND blart = 'ZP'.
              CHECK ls_bsak3-belnr NE ls_bsak3-augbl.

              IF firstflag = 'X'.
                <fs_tmc_bsak>-vblnr = ls_bsak3-belnr.
                <fs_tmc_bsak>-budat = ls_bsak3-budat.
                firstflag = ''.
              ELSE.
                "Расслаиваем позицию
                ls_tmc = <fs_tmc_bsak>.
                ls_tmc-vblnr = ls_bsak3-belnr.
                ls_tmc-budat = ls_bsak3-budat.
                ls_tmc-add2 = 'X'.
                APPEND ls_tmc TO gt_tmc.
              ENDIF.
            ENDLOOP.

            "4
            LOOP AT lt_bsak4 INTO ls_bsak4
            WHERE belnr = ls_bsak2-belnr AND gjahr = ls_bsak2-gjahr AND augbl NE ls_bsak2-augbl.
              CHECK ls_bsak4-belnr NE ls_bsak4-augbl.

              IF ls_bsak4-blart = 'ZP'.
                IF firstflag = 'X'.
                  <fs_tmc_bsak>-vblnr = ls_bsak4-belnr.
                  <fs_tmc_bsak>-budat = ls_bsak4-budat.
                  firstflag = ''.
                ELSE.
                  "Расслаиваем позицию
                  ls_tmc = <fs_tmc_bsak>.
                  ls_tmc-vblnr = ls_bsak4-belnr.
                  ls_tmc-budat = ls_bsak4-budat.
                  ls_tmc-add2 = 'X'.
                  APPEND ls_tmc TO gt_tmc.
                ENDIF.
              ELSEIF ls_bsak4-blart = 'AB'.
                "5
                LOOP AT lt_bsak5 INTO ls_bsak5
                WHERE augbl = ls_bsak4-augbl AND augdt = ls_bsak4-augdt AND blart = 'ZP'.
                  IF firstflag = 'X'.
                    <fs_tmc_bsak>-vblnr = ls_bsak5-belnr.
                    <fs_tmc_bsak>-budat = ls_bsak5-budat.
                    firstflag = ''.
                  ELSE.
                    "Расслаиваем позицию
                    ls_tmc = <fs_tmc_bsak>.
                    ls_tmc-vblnr = ls_bsak5-belnr.
                    ls_tmc-budat = ls_bsak5-budat.
                    ls_tmc-add2 = 'X'.
                    APPEND ls_tmc TO gt_tmc.
                  ENDIF.
                ENDLOOP.
              ENDIF.
            ENDLOOP.
          ENDIF.
        ENDLOOP.
      ENDLOOP.
    ENDLOOP.

    SORT gt_tmc BY vblnr.
    DELETE ADJACENT DUPLICATES FROM gt_tmc COMPARING vblnr.


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

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


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

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


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

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