Текущее время: Пн, июл 28 2025, 12:40

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: BAPI_ACC_DOCUMENT_POST и код ОГК
СообщениеДобавлено: Пт, авг 28 2009, 11:49 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пт, дек 22 2006, 17:08
Сообщения: 86
Откуда: Ростов-на-Дону
Пол: Мужской
Доброго всем дня!

Возник затык, при деблокировании сбытовой фактуры в бух.учет нужно создать еще один бух. документ. Для этого решил воспользоваться BAPI_ACC_DOCUMENT_POST которая завернута в мой ФМ вызываю так:
Code:
CALL FUNCTION 'ZSD_ACC_DOC_POST_DOC_TC1'
    STARTING NEW TASK 'ACC_POST_TC1'
    PERFORMING RETURN_INFO_POST_TC1 ON END OF TASK
    EXPORTING
      IP_VBRK                 = g_wa_vbrk
    TABLES
      TP_RETURN               = g_it_return.


Внутри ФМ заполняю структуры:

Code:
DATA: BEGIN OF l_wa_objkey,
          belnr TYPE bseg-belnr,
          bukrs TYPE bseg-bukrs,
          gjahr TYPE bseg-gjahr,
        END OF l_wa_objkey.

  DATA: l_it_vbrp TYPE TABLE OF vbrp WITH HEADER LINE,
        l_wa_vbrp TYPE vbrp.

  DATA: l_wa_add_post like zsdtc1 OCCURS 0 WITH HEADER LINE.
  DATA: l_v_posnr TYPE posnr VALUE 1.
  DATA: l_v_lifnr TYPE lifnr.
  DATA: l_v_numkr TYPE numkr.
  DATA: l_it_konv TYPE TABLE OF konv,
        l_wa_konv TYPE konv.

  DATA: l_it_return TYPE bapiret2 OCCURS 0.
  DATA: l_wa_doc_header TYPE bapiache09.
  DATA: l_v_objkey TYPE bapiache09-obj_key.
  DATA: l_wa_curr_amount TYPE bapiaccr09,
        l_it_curr_amount TYPE TABLE OF bapiaccr09.
  DATA: l_wa_accgl TYPE bapiacgl09,
        l_it_accgl TYPE TABLE OF bapiacgl09.
  DATA: l_wa_ext1 TYPE bapiacextc,
        l_it_ext1 TYPE TABLE OF bapiacextc.

  DATA: l_wa_criteria TYPE bapiackec9,
        l_it_criteria TYPE TABLE OF bapiackec9.
  DATA: l_wa_vendor type BAPIACAP09,
        l_it_vendor TYPE TABLE OF BAPIACAP09.


* данные по фактуре из VBRP
  SELECT *
    FROM vbrp
    INTO TABLE l_it_vbrp
    WHERE vbeln = ip_vbrk-vbeln.

* Берем данные из настроечной таблицы

  SELECT * FROM zsdtc1 INTO TABLE l_wa_add_post
    WHERE fkart = ip_vbrk-fkart.





  LOOP AT l_wa_add_post.

* данные по условиям из KONV

  SELECT * FROM konv INTO TABLE l_it_konv
    WHERE knumv eq ip_vbrk-knumv
      AND kschl eq l_wa_add_post-kschl.


* поиск кредитора

  CLEAR l_v_lifnr.

  SELECT SINGLE lifnr
    FROM kna1
    INTO l_v_lifnr
    WHERE kunnr = ip_vbrk-KUNAG
      .

    IF l_v_lifnr is INITIAL.

      MESSAGE E000(ZRND_TC) WITH ip_vbrk-kunag.

    ENDIF.

* заполняем l_wa_doc_header - заголовой документа

   l_wa_doc_header-BUS_ACT = 'RFBU'.
   l_wa_doc_header-USERNAME = sy-uname.
   l_wa_doc_header-HEADER_TXT = l_wa_add_post-doc_txt.
   l_wa_doc_header-COMP_CODE = ip_vbrk-bukrs.
   l_wa_doc_header-DOC_DATE = ip_vbrk-fkdat.
   l_wa_doc_header-PSTNG_DATE = ip_vbrk-fkdat.
   l_wa_doc_header-TRANS_DATE = ip_vbrk-fkdat.
   l_wa_doc_header-FISC_YEAR = ip_vbrk-gjahr.
   l_wa_doc_header-DOC_TYPE = l_wa_add_post-blart.
   l_wa_doc_header-REF_DOC_NO = ip_vbrk-vbeln.
   l_wa_doc_header-AC_DOC_NO = number.

*** заполняем l_it_curr_amount
  CLEAR l_wa_curr_amount.
  l_wa_curr_amount-itemno_acc = l_v_posnr. " позиция документа
  l_wa_curr_amount-currency = ip_vbrk-waerk. " валюта
  LOOP AT l_it_konv INTO l_wa_konv.
    l_wa_curr_amount-amt_doccur = l_wa_curr_amount-amt_doccur + l_wa_konv-kwert.
  ENDLOOP.
  IF ip_vbrk-fkart <> 'YRE' and ip_vbrk-fkart <> 'YRE3'.
    l_wa_curr_amount-amt_doccur = - l_wa_curr_amount-amt_doccur. " сумма
  ENDIF.
  l_wa_curr_amount-disc_base = l_wa_curr_amount-amt_doccur. " сумма, с которой начисляется сконто
  APPEND l_wa_curr_amount TO l_it_curr_amount.

* Прикручиваем код ОГК

  CLEAR l_wa_vendor.
  l_wa_vendor-ITEMNO_ACC = l_v_posnr.
  l_wa_vendor-VENDOR_NO = l_v_lifnr.
  l_wa_vendor-GL_ACCOUNT = l_wa_add_post-HKONT_K.
  l_wa_vendor-COMP_CODE = ip_vbrk-bukrs.
  l_wa_vendor-BUS_AREA = ip_vbrk-gsber.
  l_wa_vendor-SP_GL_IND = 'K'.
  l_wa_vendor-TAX_CODE = 'N0'.
    l_wa_vendor-ref_key_1 = ip_vbrk-knkli. " ссылочный ключ делового партнера
** номер условия
  LOOP AT l_it_vbrp INTO l_wa_vbrp.
    IF l_wa_vbrp-aubel IS NOT INITIAL.

      WRITE l_wa_vbrp-aubel TO l_wa_vendor-alloc_nmbr NO-ZERO. " поле присвоения

      SELECT SINGLE bezei " ссылочный ключ делового партнера
        FROM tvgrt
        INTO l_wa_vendor-ref_key_1
        WHERE spras = sy-langu
          AND vkgrp = l_wa_vbrp-vkgrp.

     l_wa_vendor-ref_key_2 =  ip_vbrk-zztfsnr. " ссылочный ключ делового партнера

      EXIT.
    ENDIF.
  ENDLOOP.

  APPEND l_wa_vendor to l_it_vendor.

* заполняем вспомогательную таблицу
*** код проводки
  CLEAR l_wa_ext1.
  l_wa_ext1-field1 = l_v_posnr.
  l_wa_ext1-field2 = 'BSCHL'.
  l_wa_ext1-field3 = l_wa_add_post-BSCHL_K.
  APPEND l_wa_ext1 TO l_it_ext1.

*** фактура
  CLEAR l_wa_ext1.
  l_wa_ext1-field1 = l_v_posnr.
  l_wa_ext1-field2 = 'VBELN'.
  l_wa_ext1-field3 = ip_vbrk-vbeln.
  APPEND l_wa_ext1 TO l_it_ext1.

* уровень финансовой диспозиции
  CLEAR l_wa_ext1.
  l_wa_ext1-field1 = l_v_posnr.
  l_wa_ext1-field2 = 'FDLEV'.
  l_wa_ext1-field3 = 'F1'.
  APPEND l_wa_ext1 TO l_it_ext1.

* уровень финансовой диспозиции
  CLEAR l_wa_ext1.
  l_wa_ext1-field1 = l_v_posnr.
  l_wa_ext1-field2 = 'FDGRP'.
  l_wa_ext1-field3 = 'ZK'.
  APPEND l_wa_ext1 TO l_it_ext1.

* дата диспозиции
  CLEAR l_wa_ext1.
  l_wa_ext1-field1 = l_v_posnr.
  l_wa_ext1-field2 = 'FDTAG'.
  l_wa_ext1-field3 = sy-datum.
  APPEND l_wa_ext1 TO l_it_ext1.

* торговый документ
  CLEAR l_wa_ext1.
  l_wa_ext1-field1 = l_v_posnr.
  l_wa_ext1-field2 = 'VBEL2'.
  l_wa_ext1-field3 = l_it_vbrp-vgbel.
  APPEND l_wa_ext1 TO l_it_ext1.

  ADD 1 TO l_v_posnr.

* заполняем позицию по дебету
  LOOP AT l_it_vbrp INTO l_wa_vbrp WHERE netwr > 0.
*** заполняем l_it_accgl
    CLEAR l_wa_accgl.
    l_wa_accgl-itemno_acc = l_v_posnr. " позиция документа
    l_wa_accgl-gl_account = l_wa_add_post-HKONT_D. " основной счет главной бухгалтерии
    l_wa_accgl-item_text = ip_vbrk-kunrg. " название позиции
    l_wa_accgl-acct_type = 'S'. " вид счета
    l_wa_accgl-value_date = sy-datum. " дата валютирования

      SELECT SINGLE bezei " ссылочный ключ делового партнера
        FROM tvgrt
        INTO l_wa_accgl-ref_key_1
        WHERE spras = sy-langu
          AND vkgrp = l_wa_vbrp-vkgrp.

    l_wa_accgl-ref_key_2 =  ip_vbrk-zztfsnr. " ссылочный ключ делового партнера

      WRITE l_wa_vbrp-aubel TO l_wa_accgl-alloc_nmbr NO-ZERO. " поле присвоения

    APPEND l_wa_accgl TO l_it_accgl.

*** заполняем l_it_curr_amount
    CLEAR l_wa_curr_amount.
    l_wa_curr_amount-itemno_acc = l_v_posnr. " позиция документа
    l_wa_curr_amount-currency = ip_vbrk-waerk. " валюта
    READ TABLE l_it_konv INTO l_wa_konv
      WITH KEY kposn = l_wa_vbrp-posnr.
    IF sy-subrc = 0.
      l_wa_curr_amount-amt_doccur = l_wa_konv-kwert.
*      IF ip_vbrk-fkart = 'YRE' or ip_vbrk-fkart = 'YRE3'.
*        l_wa_curr_amount-amt_doccur = - l_wa_konv-kwert. " сумма
*      ENDIF.
    ENDIF.
    l_wa_curr_amount-disc_base = l_wa_curr_amount-amt_doccur. " сумма, с которой начисляется сконто
    APPEND l_wa_curr_amount TO l_it_curr_amount.
*{   INSERT         DEVK912917                                       14

*** заполняем таблицу CRITERIA
*** клиент
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'KNDNR'.
    l_wa_criteria-CHARACTER   = ip_vbrk-kunrg.
    APPEND l_wa_criteria TO l_it_criteria.

*** материал
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'ARTNR'.
    l_wa_criteria-CHARACTER   = l_wa_vbrp-matnr.
    APPEND l_wa_criteria TO l_it_criteria.

*** вид фактуры
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'FKART'.
    l_wa_criteria-CHARACTER   = ip_vbrk-fkart.
    APPEND l_wa_criteria TO l_it_criteria.

*** заказ клиента
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'KAUFN'.
    l_wa_criteria-CHARACTER   = l_wa_vbrp-aubel.
    APPEND l_wa_criteria TO l_it_criteria.

*** заказ клиента
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'KDPOS'.
    l_wa_criteria-CHARACTER   = l_wa_vbrp-aupos.
    APPEND l_wa_criteria TO l_it_criteria.

*** номер заказа
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'RKAUFNR'.
    l_wa_criteria-CHARACTER   = l_wa_vbrp-aufnr.
    APPEND l_wa_criteria TO l_it_criteria.

*** БЕ
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'BUKRS'.
    l_wa_criteria-CHARACTER   = ip_vbrk-bukrs.
    APPEND l_wa_criteria TO l_it_criteria.

*** завод
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'WERKS'.
    l_wa_criteria-CHARACTER   = l_wa_vbrp-werks.
    APPEND l_wa_criteria TO l_it_criteria.

*** бизнес-сфера
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'GSBER'.
    l_wa_criteria-CHARACTER   = l_wa_vbrp-gsber.
    APPEND l_wa_criteria TO l_it_criteria.

*** сбытовая организация
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'VKORG'.
    l_wa_criteria-CHARACTER   = ip_vbrk-vkorg.
    APPEND l_wa_criteria TO l_it_criteria.

*** канал сбыта
    CLEAR l_wa_criteria.
    l_wa_criteria-itemno_acc = l_v_posnr.
    l_wa_criteria-FIELDNAME   = 'VTWEG'.
    l_wa_criteria-CHARACTER   = ip_vbrk-vtweg.
    APPEND l_wa_criteria TO l_it_criteria.

*}   INSERT

*** заполняем вспомогательную таблицу
    CLEAR l_wa_ext1.
    l_wa_ext1-field1 = l_v_posnr.
    l_wa_ext1-field2 = 'BSCHL'.
    l_wa_ext1-field3 = l_wa_add_post-BSCHL_D.
    APPEND l_wa_ext1 TO l_it_ext1.

*** фактура
    CLEAR l_wa_ext1.
    l_wa_ext1-field1 = l_v_posnr.
    l_wa_ext1-field2 = 'VBELN'.
    l_wa_ext1-field3 = ip_vbrk-vbeln.
    APPEND l_wa_ext1 TO l_it_ext1.

*   торговый документ
    CLEAR l_wa_ext1.
    l_wa_ext1-field1 = l_v_posnr.
    l_wa_ext1-field2 = 'VBEL2'.
    l_wa_ext1-field3 = l_wa_vbrp-aubel.

    APPEND l_wa_ext1 TO l_it_ext1.

*   торговый документ
    CLEAR l_wa_ext1.
    l_wa_ext1-field1 = l_v_posnr.
    l_wa_ext1-field2 = 'POSN2'.
    l_wa_ext1-field3 = l_wa_vbrp-aupos.

    APPEND l_wa_ext1 TO l_it_ext1.

    ADD 1 TO l_v_posnr.
  ENDLOOP.

  BREAK-POINT.

  CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST'
    EXPORTING
      DOCUMENTHEADER          = l_wa_doc_header
    IMPORTING
      OBJ_KEY                 = l_v_objkey

    TABLES
      ACCOUNTGL               = l_it_accgl
      CURRENCYAMOUNT          = l_it_curr_amount
      EXTENSION1              = l_it_ext1
      CRITERIA                = l_it_criteria
      ACCOUNTPAYABLE          = l_it_vendor
      RETURN                  = tp_return.

  IF lines( tp_return ) > 1.
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  ELSE.
    ip_vbrk-zzbelnr_d = l_v_objkey.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
       EXPORTING
         WAIT          = 'X' .
  ENDIF.

  ENDLOOP.


На выходе получаю сообщение об ошибке: " № докум. для ОСч 2000 22001003 требует обязательного ввода.
". Собственно вопрос в том, почему он сам не заполняет № документа, может у кого было такое. Аналогичная операция выполняется в системе но там только основные счета используются (структура ACCOUNTGL) а для позиции с кредитором и кодом огк приходится юзать ACCOUNTPAYABLE.


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

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


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

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


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

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