Текущее время: Ср, июн 18 2025, 09:03

Часовой пояс: 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
Сообщения: 1604
Откуда: Пермь
Пол: Мужской
Дас ист гут)) тема про 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 часа


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

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


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

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