Текущее время: Ср, июл 23 2025, 18:53

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Свой текст в теле сообщения из транзакции ME21N
СообщениеДобавлено: Вт, мар 17 2015, 12:33 
Начинающий
Начинающий

Зарегистрирован:
Ср, фев 12 2014, 12:25
Сообщения: 17
Доброго времени! существует такая проблема для отправки счетов по E-Mail из ME21N создан класс сообщений NACE и определены рутины для обработки. Для формирования и отправки почты была создана программа на основе ниже предложенного кода. Проблема в том, что сообщение не использует указанную мной программу, а лезет в какую-то иную. Текст для тела почты берется из SODIS. В чем может быть проблема, что я не могу перенаправить рутину в свой код?

Code:
*&---------------------------------------------------------------------*
*& Subroutinepool YMEDRUCK_EMAIL_UC by Dipl.Ing.Jens G.                *
*&                                                                     *
*&---------------------------------------------------------------------*
*&                                                                     *
*&                                                                     *
*&---------------------------------------------------------------------*


* WARNING : NO POPUPS - NO COMMIT WORK IN HERE

* How to do (i left some TODO-comments)
* 1.) Change/verify the "PERFORM" so the "TRUE" Print Routine is called
*     (only needed if you have an own ME_DRUCK) just look table TNAPR
* 2.) Change the Receiver Email-adress.
* 3.) Activate YMEDRUCK_EMAIL_UC :-)
* 4.) Customize (Tc NACE) the message-Type "NEU" and enter
*     "YMEDRUCK_EMAIL_UC" as Program and "ENTRY_NEU" as FORM

* How this works (short version)
* by customizing, the original Print routine is substituted by this one
* to retrieve the SpoolId, which we need for PDF generation and email.
* YMEDRUCK_EMAIL_UC calls the "Original" Print routine as a subroutine.
* After this step the Program retrieves the Spool created.
* Then the OTF is converted into PDF.

REPORT  ymedruck_email_uc                                              .
DATA: retcode   LIKE sy-subrc.         "Returncode
DATA: xscreen(1) TYPE c.               "Output on printer or screen
TABLES: nast,                          "Messages
        tnapr.                         "Programs & Forms

*&---------------------------------------------------------------------*
*&      Form  ENTRY
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->RETURN_CODE  text
*      -->US_SCREEN    text
*----------------------------------------------------------------------*
FORM entry_neu USING return_code TYPE i
                 us_screen TYPE c.

  FIELD-SYMBOLS: <f> TYPE itcpp,
                 <p> TYPE  ssfcrescl.

  DATA pgnam TYPE na_pgnam." Programname
  DATA ronam TYPE na_ronam."Formname
  DATA fm_name TYPE rs38l_fnam. "genr.Druckbaustein
  DATA lv_vec(80).
  DATA spoolid TYPE rspoid.

  CLEAR retcode.
  xscreen = us_screen.

*              Call the "Original" Printroutine
************************
* @@@@ TODO
************************
*-real program---------+
*                      |
*-real Form---+        |
*             |        |
  PERFORM entry_neu(sapfm06p) USING return_code us_screen.

* Try Sapscript (take from mother)
  ASSIGN ('(SAPLSTXC)ITCPP') TO <f>.
  IF sy-subrc = 0 AND
     NOT <f>-tdspoolid IS INITIAL AND
     us_screen IS INITIAL.

    PERFORM processing USING <f>-tdspoolid.
    UNASSIGN <f>.

  ELSE.
* Try Smartforms (take from mother)
    CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
      EXPORTING
        formname           = tnapr-sform
      IMPORTING
        fm_name            = fm_name
      EXCEPTIONS
        no_form            = 1
        no_function_module = 2
        OTHERS             = 3.

    IF sy-subrc <> 0.
      retcode = 1.
      EXIT.
    ENDIF.

    SELECT SINGLE pname FROM tfdir INTO lv_vec
    WHERE funcname = fm_name.
    IF sy-subrc = 0.

      CONCATENATE '(' lv_vec ')JOB_OUTPUT_INFO' INTO lv_vec.
      ASSIGN (lv_vec) TO <p>.

      IF sy-subrc = 0 AND
      NOT <p>-spoolids[] IS INITIAL AND
      us_screen IS INITIAL.

        LOOP AT <p>-spoolids INTO spoolid.
          PERFORM processing USING spoolid.
          EXIT.
        ENDLOOP.
        UNASSIGN <p>.

      ENDIF. " have Ids

    ENDIF." tfdir entry

  ENDIF." sapscript/smartforms


  IF retcode NE 0.
    return_code = 1.
  ELSE.
    return_code = 0.
  ENDIF.

ENDFORM.                    "ENTRY


*&---------------------------------------------------------------------*
*&      Form  PROCESSING
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM processing USING spoolid TYPE itcpp-tdspoolid.
  DATA: numbytes TYPE i,
        pdfspoolid LIKE tsp01-rqident,
        jobname LIKE tbtcjob-jobname,
        jobcount LIKE tbtcjob-jobcount.


  DATA:   document_data LIKE sodocchgi1,
          object_txt LIKE solisti1 OCCURS 10 WITH HEADER LINE,
          object_pack LIKE sopcklsti1 OCCURS 1 WITH HEADER LINE,
          object_bin LIKE solisti1 OCCURS 10 WITH HEADER LINE,
          receiver_list LIKE somlreci1 OCCURS 1 WITH HEADER LINE,
          tab_lines TYPE i.

  TYPES pdf_raw             TYPE x LENGTH 268.
  FIELD-SYMBOLS <pdf_bin>   TYPE pdf_raw.
  DATA: pdf_lines           TYPE TABLE OF tline,
        BEGIN OF content_in,
           line             TYPE tline,
           dummy            TYPE tline,
        END OF content_in,
        content_out         TYPE solix,
        line_width_src      TYPE i,
        pos_out             TYPE i,
        pos_in              TYPE i,
        len_out             TYPE i.

  DATA content_bin TYPE TABLE OF solix.



****  Main - Email  ****

* Title and Description
  document_data-obj_name  = 'BESTELLUNG'.
  document_data-obj_descr = nast-objky.

* Email Body Text
  CONCATENATE 'Bestellung' nast-objky INTO object_txt
  SEPARATED BY space.
  APPEND object_txt.

* Packing List(Main-Part)

* Calculate the contents length
  DESCRIBE TABLE object_txt LINES tab_lines.
  READ TABLE object_txt INDEX tab_lines.
  document_data-doc_size = ( tab_lines - 1 ) * 255 +
  STRLEN( object_txt ).

* generate the Packing List
  CLEAR object_pack-transf_bin.
  object_pack-head_start = 1.
  object_pack-head_num   = 0.
  object_pack-body_start = 1.
  object_pack-body_num   = tab_lines.
  object_pack-doc_type   = 'RAW'.
  APPEND object_pack.

  CALL FUNCTION 'CONVERT_OTFSPOOLJOB_2_PDF'
      EXPORTING
        src_spoolid                    = spoolid
        no_dialog                      = ' '
*        DST_DEVICE                     =
*       PDF_DESTINATION                =
      IMPORTING
        pdf_bytecount                  = numbytes
        pdf_spoolid                    = pdfspoolid
*       OTF_PAGECOUNT                  =
        btc_jobname                    = jobname
        btc_jobcount                   = jobcount
      TABLES
        pdf                            = pdf_lines
      EXCEPTIONS
        err_no_otf_spooljob            = 1
        err_no_spooljob                = 2
        err_no_permission              = 3
        err_conv_not_possible          = 4
        err_bad_dstdevice              = 5
        user_cancelled                 = 6
        err_spoolerror                 = 7
        err_temseerror                 = 8
        err_btcjob_open_failed         = 9
        err_btcjob_submit_failed       = 10
        err_btcjob_close_failed        = 11.

  IF sy-subrc = 0.

* Cast to binary type and adjust table line length
    DESCRIBE FIELD content_in-line LENGTH line_width_src IN BYTE MODE.
    REFRESH content_bin.
    CLEAR content_out.
    pos_out = 0.

    LOOP AT pdf_lines INTO content_in-line.
      ASSIGN content_in TO <pdf_bin> CASTING.
      MOVE <pdf_bin> TO content_out-line+pos_out.
      ADD line_width_src TO pos_out.
      WHILE pos_out >= 255.
        APPEND content_out TO content_bin.
        CLEAR content_out.
        SUBTRACT 255 FROM pos_out.
        IF pos_out > 0.
          pos_in = line_width_src - pos_out.
          MOVE <pdf_bin>+pos_in TO content_out-line.
        ENDIF.
      ENDWHILE.
    ENDLOOP.
    IF pos_out > 0.
      APPEND content_out TO content_bin.
    ENDIF.


  ELSE.
    EXIT.
  ENDIF.


* Generate the Attachment
*  Packing List(Att)
  DESCRIBE TABLE content_bin LINES tab_lines.

  object_pack-doc_size = numbytes.
  object_pack-transf_bin = 'X'.
  object_pack-head_start = 1.
  object_pack-head_num   = 0.
  object_pack-body_start = 1.
  object_pack-body_num   = tab_lines.
  object_pack-doc_type   = 'PDF'.
  object_pack-obj_name   = 'SPOOL'.
  object_pack-obj_descr  = nast-objky.
  APPEND object_pack.


* generate the receiver list

* Internet User
************************
* @@@@ TODO
************************
* Your Email Adress goes HERE
  receiver_list-receiver = 'SAPUSER@LOCALHOST'.
  receiver_list-rec_type = 'U'.
  receiver_list-com_type ='INT'.
  APPEND receiver_list.

* Send the mail
  CALL FUNCTION 'SO_NEW_DOCUMENT_ATT_SEND_API1'
    EXPORTING
      document_data                  = document_data
*   PUT_IN_OUTBOX                    = ' '
      commit_work                    = ' '
    TABLES
      packing_list                   = object_pack
     contents_txt                    = object_txt
     contents_hex                    = content_bin
      receivers                      = receiver_list
   EXCEPTIONS
     too_many_receivers              = 1
     document_not_sent               = 2
     document_type_not_exist         = 3
     operation_no_authorization      = 4
     parameter_error                 = 5
     x_error                         = 6
     enqueue_error                   = 7
     OTHERS                          = 8.

  IF sy-subrc <> 0.
  ENDIF.

ENDFORM.                    "PROCESSING


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Свой текст в теле сообщения из транзакции ME21N
СообщениеДобавлено: Вт, мар 17 2015, 15:22 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 23 2006, 17:37
Сообщения: 197
Откуда: Москва
Пол: Мужской
Не завершена или некорректно описана настройка в NACE.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Свой текст в теле сообщения из транзакции ME21N
СообщениеДобавлено: Вт, мар 17 2015, 17:13 
Начинающий
Начинающий

Зарегистрирован:
Ср, фев 12 2014, 12:25
Сообщения: 17
Внешне все выглядит хорошо, программа и рутина сохраняются без проблем в NACE, возможно кроме сохранения необходимо еще какое шаманство... я не настолько искушен еще в ABAP

_________________
Ох, непростая эта работа из юриста делать программиста...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Свой текст в теле сообщения из транзакции ME21N
СообщениеДобавлено: Вт, мар 17 2015, 18:12 
Специалист
Специалист

Зарегистрирован:
Чт, ноя 23 2006, 17:37
Сообщения: 197
Откуда: Москва
Пол: Мужской
Кмк, это всё же не АВАР.

Посмотрите на содержимое таблицы TNAPR для созданного условия. Возможно, что две записи конфликтуют. Может быть, что полю NACHA не присвоено релевантное значение (обработка по E-mail).


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

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


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

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


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

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