Текущее время: Вс, июл 27 2025, 02:22

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 10:21 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
Добрый день.
Не подскажете что нужно сделать чтобы заставить, например, bd87 выгружать idoc в локальный файл?
Партнер профайл, сегменты, месага и порт есть (в настройках порта указана лакальная директория.. однако результата нет)

Хотя вообще желательно его выгружать программно, после генерации, а не через bd87... так что с радостью выслушаю предложения по этому поводу :)
генерируются же они таким вот репортом:
Code:
REPORT  ZTEST_IDOC.

***********************************************************************
* PURPOSE OF REPORT *
***********************************************************************
* Generats an Idoc for Customer Master, Sales Master
* and Sales item table.
***********************************************************************

TABLES : ZCUSTOMERS, "Cutomer Header
         ZSOHEADERS, "Sales Header
         ZSOITEMS. "Sales Items


DATA : S_CTRL_REC LIKE EDIDC, "Idoc Control Record
       S_ZRZSEG1 LIKE ZRZSEG1, "CUSTOMER Header Data
       S_ZRZSEG2 LIKE ZRZSEG2, "SALES HEADER Data
       S_ZRZSEG3 LIKE ZRZSEG3. "SALES Detail Data


DATA : T_ZCUSTOMERS LIKE ZCUSTOMERS OCCURS 0 WITH HEADER LINE.
DATA : T_ZSOHEADERS LIKE ZSOHEADERS OCCURS 0 WITH HEADER LINE.
DATA : T_ZSOITEMS LIKE ZSOITEMS OCCURS 0 WITH HEADER LINE.
DATA : T_EDIDD LIKE EDIDD OCCURS 0 WITH HEADER LINE."Data Records
DATA : T_COMM_IDOC LIKE EDIDC OCCURS 0 WITH HEADER LINE.
"Generated Communication IDOc


CONSTANTS :
C_ZRZSEG1 LIKE EDIDD-SEGNAM VALUE 'ZRZSEG1',
C_ZRZSEG2 LIKE EDIDD-SEGNAM VALUE 'ZRZSEG2',
C_ZRZSEG3 LIKE EDIDD-SEGNAM VALUE 'ZRZSEG3'.

CONSTANTS: C_IDOCTP LIKE EDIDC-IDOCTP VALUE 'ZRZORDER'.



*** Selection Screen
SELECT-OPTIONS : S_KUNNR FOR ZCUSTOMERS-KUNNR OBLIGATORY,
                 S_VBELN FOR ZSOHEADERS-VBELN.
PARAMETERS :  C_MESTYP LIKE EDIDC-MESTYP DEFAULT 'ZRZSO_MT',
              "Message Type
              C_RCVPRT LIKE EDIDC-RCVPRT DEFAULT 'LS',
              "Partner type of receiver
              C_LOGSYS LIKE EDIDC-RCVPRN DEFAULT 'ZSTREAM',
              C_RCVPOR LIKE EDIDC-RCVPOR DEFAULT 'ZSTRS2',
              C_SNDPRN LIKE EDIDC-SNDPRN DEFAULT 'LSSENDS',
              C_SNDPRT LIKE EDIDC-SNDPRT DEFAULT 'LS'.
"Destination System

***START-OF-SELECTION
START-OF-SELECTION.
  PERFORM GENERATE_DATA_RECORDS.
  PERFORM GENERATE_CONTROL_RECORD.
  PERFORM SEND_IDOC.



***********************************************************************

*&---------------------------------------------------------------------*
*&      Form  generate_data_records
*&---------------------------------------------------------------------*
FORM GENERATE_DATA_RECORDS .
  PERFORM FETCH_ZCUSTOMERS.
  PERFORM FETCH_ZSOHEADERS.
  PERFORM FETCH_ZSOITEMS.
  PERFORM ARRANGE_DATA_RECORDS.
ENDFORM.                    " generate_data_records



*&---------------------------------------------------------------------*
*&      Form  fetch_zcustomers
*&---------------------------------------------------------------------*
FORM FETCH_ZCUSTOMERS.
  SELECT *
  FROM ZCUSTOMERS
  INTO TABLE T_ZCUSTOMERS
  WHERE KUNNR IN S_KUNNR.
  IF SY-SUBRC NE 0.
    MESSAGE E398(00) WITH 'No Customers Found'.
  ENDIF.
ENDFORM.                    " fetch_zcustomers



*&---------------------------------------------------------------------*
*&      Form  fetch_zsoheaders
*&---------------------------------------------------------------------*
FORM FETCH_ZSOHEADERS.
  SELECT *
  FROM ZSOHEADERS
  INTO TABLE T_ZSOHEADERS
  WHERE VBELN IN S_VBELN
    AND KUNNR IN S_KUNNR.
  IF SY-SUBRC NE 0.
    MESSAGE I398(00) WITH 'No Sales orders found'.
  ENDIF.
ENDFORM.                    " fetch_zsoheaders



*&---------------------------------------------------------------------*
*&      Form  fetch_zsoitems
*&---------------------------------------------------------------------*
FORM FETCH_ZSOITEMS.
  IF NOT T_ZSOHEADERS[] IS INITIAL.
    SELECT *
    FROM ZSOITEMS
    INTO TABLE T_ZSOITEMS
    FOR ALL ENTRIES IN T_ZSOHEADERS
    WHERE VBELN = T_ZSOHEADERS-VBELN.
    IF SY-SUBRC NE 0.
      MESSAGE I398(00) WITH 'No Sales order items found'.
    ENDIF.
  ENDIF.
ENDFORM.                    " fetch_zsoitems



*&---------------------------------------------------------------------*
*&      Form  generate_control_record
*&---------------------------------------------------------------------*
FORM GENERATE_CONTROL_RECORD .
  S_CTRL_REC-RCVPOR = C_RCVPOR. "Receiver Port
  S_CTRL_REC-MESTYP = C_MESTYP. "Message type
  S_CTRL_REC-IDOCTP = C_IDOCTP. "Basic IDOC type
  S_CTRL_REC-RCVPRT = C_RCVPRT. "Partner type of receiver
  S_CTRL_REC-RCVPRN = C_LOGSYS. "Partner number of receiver

  S_CTRL_REC-SNDPRT = C_SNDPRT. "Sender Partner type
  S_CTRL_REC-SNDPRN = C_SNDPRN. "Sender Partner Number
ENDFORM.                    " generate_control_record



*&---------------------------------------------------------------------*
*&      Form  send_idoc
*&---------------------------------------------------------------------*
FORM SEND_IDOC.
  CALL FUNCTION 'MASTER_IDOC_DISTRIBUTE'
    EXPORTING
      MASTER_IDOC_CONTROL            = S_CTRL_REC
    TABLES
      COMMUNICATION_IDOC_CONTROL     = T_COMM_IDOC
      MASTER_IDOC_DATA               = T_EDIDD
    EXCEPTIONS
      ERROR_IN_IDOC_CONTROL          = 1
      ERROR_WRITING_IDOC_STATUS      = 2
      ERROR_IN_IDOC_DATA             = 3
      SENDING_LOGICAL_SYSTEM_UNKNOWN = 4
      OTHERS                         = 5.
  IF SY-SUBRC <> 0.
    MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
            WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
  ELSE.
    COMMIT WORK.
    LOOP AT T_COMM_IDOC.
      WRITE:/ 'IDoc Generated - ', T_COMM_IDOC-DOCNUM.
    ENDLOOP.
  ENDIF.
ENDFORM.                    " send_idoc



*&---------------------------------------------------------------------*
*&      Form  arrange_data_records
*&---------------------------------------------------------------------*
FORM ARRANGE_DATA_RECORDS .
  DATA: W_INDEX1 LIKE SY-TABIX,
        W_INDEX2 LIKE SY-TABIX.
  SORT T_ZCUSTOMERS BY KUNNR.
  SORT T_ZSOHEADERS BY KUNNR VBELN.
  SORT T_ZSOITEMS BY VBELN POSNR.

  LOOP AT T_ZCUSTOMERS.
    S_ZRZSEG1-KUNNR = T_ZCUSTOMERS-KUNNR.
    S_ZRZSEG1-NAME1 = T_ZCUSTOMERS-NAME1.
    S_ZRZSEG1-ORT01 = T_ZCUSTOMERS-ORT01.
    S_ZRZSEG1-LAND1 = T_ZCUSTOMERS-LAND1.
    T_EDIDD-SEGNAM = C_ZRZSEG1.
    T_EDIDD-SDATA = S_ZRZSEG1.
    APPEND T_EDIDD.
    CLEAR T_EDIDD.

    CLEAR W_INDEX1.
    READ TABLE T_ZSOHEADERS WITH KEY KUNNR = T_ZCUSTOMERS-KUNNR BINARY SEARCH.

    IF SY-SUBRC = 0.
      W_INDEX1 = SY-TABIX.
      LOOP AT T_ZSOHEADERS FROM W_INDEX1.
        IF T_ZSOHEADERS-KUNNR NE T_ZCUSTOMERS-KUNNR.
          EXIT.
        ENDIF.
        S_ZRZSEG2-VBELN = T_ZSOHEADERS-VBELN.
        S_ZRZSEG2-KUNNR = T_ZSOHEADERS-KUNNR.
        T_EDIDD-SEGNAM = C_ZRZSEG2.
        T_EDIDD-SDATA = S_ZRZSEG2.
        APPEND T_EDIDD.
        CLEAR T_EDIDD.

        CLEAR W_INDEX2.
        READ TABLE T_ZSOITEMS WITH KEY VBELN = T_ZSOHEADERS-VBELN BINARY SEARCH.
        IF SY-SUBRC = 0.
          W_INDEX2 = SY-TABIX.
          LOOP AT T_ZSOITEMS FROM SY-TABIX.
            IF T_ZSOITEMS-VBELN NE T_ZSOHEADERS-VBELN.
              EXIT.
            ENDIF.
            S_ZRZSEG3-VBELN = T_ZSOITEMS-VBELN.
            S_ZRZSEG3-POSNR = T_ZSOITEMS-POSNR.
            S_ZRZSEG3-MATNR = T_ZSOITEMS-MATNR.
            S_ZRZSEG3-NETWR = T_ZSOITEMS-NETWR.
            S_ZRZSEG3-ZMENG = T_ZSOITEMS-ZMENG.
            T_EDIDD-SEGNAM = C_ZRZSEG3.
            T_EDIDD-SDATA = S_ZRZSEG3.
            APPEND T_EDIDD.
            CLEAR T_EDIDD.
          ENDLOOP.
        ENDIF.
      ENDLOOP.
    ENDIF.
  ENDLOOP.
ENDFORM.                    " arrange_data_records


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 11:10 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, ноя 01 2004, 12:17
Сообщения: 298
Пол: Мужской
http://sapboard.ru/forum/viewtopic.php?f=13&t=20342


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 14:27 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
RA написал:

спасибо
...но насчет прграмной выгрузки в локальный файл там ничего нет(
а ручками, выгружать - да, научились) но этого мало)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?  Тема решена
СообщениеДобавлено: Вт, июн 21 2011, 15:11 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 11 2008, 17:36
Сообщения: 84
Откуда: Moscow
Пол: Мужской
Смотря в каком виде вы хотите этот айдок поиметь.

Простейший вариант: берёте ФМ EDI_SEGMENTS_GET_ALL и выгружаете табличку EDIDD в текстовые файлы с помощью CL_GUI_FRONTEND_SERVICES.
XML-представление можно посмотреть в модуле IDOC_XML_TRANSFORM: там есть пример работы с классом cl_idoc_xml1.

Т.е. в вашей программе должен быть шаг экспорта айдока в нужный вам формат.

Спрашивайте, если чего не понятно.

_________________
CONTINUE OBSERVATION OF... INTERRUPTION!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 15:53 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
ммм.. надо в виде idoc-а... (т.е. сегмент - описание)

а можно как-то его програмно запроцесить?
т.е. программа (та что выше) его генерирует и сохраняет со статусом 30, можно ли его как-то после этого программно отправить в порт? (порт настроен для сохранения на сервере, и если idoc процессить руками то на сервер он заливается) вооот.. а после этого забрать с сервера в лок директорию (в аскии файл, аналогично транзакции cg3y)?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 16:21 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 11 2008, 17:36
Сообщения: 84
Откуда: Moscow
Пол: Мужской
[censored] написал(а):
ммм.. надо в виде idoc-а... (т.е. сегмент - описание)


Это как?

В структуре EDIDD сегменты айдока хранятся в виде (условно) имя сегмента + в поле SDATA — данные сегмента в строку в порядке полей структуры сегмента.
Нашей внешней системе такой формат сгодился.

[censored] написал(а):
а можно как-то его програмно запроцесить?
т.е. программа (та что выше) его генерирует и сохраняет со статусом 30, можно ли его как-то после этого программно отправить в порт? (порт настроен для сохранения на сервере, и если idoc процессить руками то на сервер он заливается) вооот.. а после этого забрать с сервера в лок директорию (в аскии файл, аналогично транзакции cg3y)?


А проверьте настройки в WE20 для этого партнёра: там должна быть немедленная инициация для вашего типа айдоков. Тогда они сразу, как только родятся, в порт и уйдут.
Если вам это не подходит, то планируйте фоновое задание (RSEOUT00 вроде должен вам подойти), которое ваши айдоки обрабатывает.

_________________
CONTINUE OBSERVATION OF... INTERRUPTION!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 16:40 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
niemda написал:
В структуре EDIDD сегменты айдока хранятся в виде (условно) имя сегмента + в поле SDATA — данные сегмента в строку в порядке полей структуры сегмента.
Нашей внешней системе такой формат сгодился.

хм... а может и нашей такое прокатит, спасибо, буду прбовать.
niemda написал:
А проверьте настройки в WE20 для этого партнёра: там должна быть немедленная инициация для вашего типа айдоков. Тогда они сразу, как только родятся, в порт и уйдут.

Transfer IDoc Immediately установлен.
niemda написал:
Если вам это не подходит, то планируйте фоновое задание (RSEOUT00 вроде должен вам подойти), которое ваши айдоки обрабатывает.

о! отлично, спасибо)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 17:12 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 11 2008, 17:36
Сообщения: 84
Откуда: Moscow
Пол: Мужской
[censored] написал(а):
Transfer IDoc Immediately установлен.

Хм. Тогда непонятно, почему они сразу в порт не переносятся.
Настройки порта в студию. И смотрите статусы.

Если у вас 5.0 или 6.0, то вам нужна нота 150202. Мы после апгрейда с R/3 с этим накувыркались.

[censored] написал(а):
Если вам это не подходит, то планируйте фоновое задание (RSEOUT00 вроде должен вам подойти), которое ваши айдоки обрабатывает.
о! отлично, спасибо)


Пожалуйста.

_________________
CONTINUE OBSERVATION OF... INTERRUPTION!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 17:53 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
niemda написал:
Хм. Тогда непонятно, почему они сразу в порт не переносятся.
Настройки порта в студию. И смотрите статусы.

спасибо, разобрался) оно не процесилось т.к. имена совпадали с уже существующими на сервере.


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 18:03 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
а после EDI_SEGMENTS_GET_ALL "шапки нет" у такого файла, которая появляется у файлов на сервере. а без нее не работает(
буду наверно пробовать с сервера забрать....

niemda, еще раз спасибо. очень сильно помогли!)


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Вт, июн 21 2011, 19:52 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Пн, авг 11 2008, 17:36
Сообщения: 84
Откуда: Moscow
Пол: Мужской
[censored] написал(а):
а после EDI_SEGMENTS_GET_ALL "шапки нет" у такого файла, которая появляется у файлов на сервере. а без нее не работает(
буду наверно пробовать с сервера забрать....

niemda, еще раз спасибо. очень сильно помогли!)


Контрольной записи? Так пишите её в файлик сами перед сегментами. Там рядом и модуль специальный есть для этого. Вот ещё IDOC_READ_COMPLETELY вам может пригодится. Там сразу всё есть.

Я бы, впрочем, выбрал бы сервер.

_________________
CONTINUE OBSERVATION OF... INTERRUPTION!


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как сделать чтобы idoc генерировался на локальной машине?
СообщениеДобавлено: Ср, июн 22 2011, 12:19 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Ср, май 19 2010, 12:10
Сообщения: 87
спасибо, но оно чето все равно не ест его(
а сервер да.... в конечном результате оно вроде как будет через сервер, но сейчас, так сказать "для тесту", приходится грузить на лакальный... вообщем долго обьяснять... :)
буду кароче через C13Z_FILE_DOWNLOAD_ASCII выгружать)

и с процесингом, еще не сразу был заметил что они не разблокирываются, что тоже мешало) тем кто тут пойдет по таким же граблям http://forums.sdn.sap.com/thread.jspa?t ... 0&tstart=0

niemda, спасибо!)


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

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


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

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


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

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