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

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


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

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


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

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