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

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


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

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


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

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