Текущее время: Сб, июл 26 2025, 04:17

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Чт, ноя 24 2011, 16:55 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
Задача: необходимо выгрузить данные в фоновом режиме в текстовый файл. Решила попробовать через RFC. Создали RFC, версия librfc32.dll - 7000.0.319.7009.
Вот код: 1 вариант перекодировки
Code:

data: F_XTAB LIKE TABLE OF W_BUFFER.
data: F_XLINE LIKE  W_BUFFER occurs 1 with header line.
data: F_SIZE type I.
data: F_VALUE(120).

data: G_STRING type STRING.
data: G_STRING1 type STRING.
data: G_STRING2 type STRING.

data: G_BUFFER type XSTRING.
data: G_BUFFER1 type XSTRING.
data: G_BUFFER2 type XSTRING.

data: GCL_CONV_TO_X type ref to CL_ABAP_CONV_OUT_CE.

loop at P_FINAL.

G_STRING1 = P_FINAL-text1.
*G_STRING2 = P_FINAL-text2.

CONCATENATE G_STRING1 G_STRING2 INTO G_STRING.


call method CL_ABAP_CONV_OUT_CE=>CREATE
  exporting
    ENCODING = '1504'
  receiving
    CONV     = GCL_CONV_TO_X.

call method GCL_CONV_TO_X->WRITE
  exporting
    DATA = G_STRING1.

call method GCL_CONV_TO_X->GET_BUFFER
  receiving
    BUFFER = G_BUFFER1.


call function 'SCMS_XSTRING_TO_BINARY'
  exporting
    BUFFER               = G_BUFFER1
importing
   OUTPUT_LENGTH         = F_SIZE
  tables
    BINARY_TAB           = F_XLINE.


APPEND  F_XLINE to F_XTAB.
endloop.

или
2 вариант перекодировки
Code:
data: F_XTAB LIKE TABLE OF W_BUFFER.
data: F_XLINE LIKE  W_BUFFER occurs 1 with header line.


DATA:
gcl_conv_to_x TYPE REF TO cl_abap_conv_out_ce,
gcl_conv_to_c TYPE REF TO cl_abap_conv_in_ce.
DATA: in_codepage TYPE cpcodepage.
DATA:
g_buffer TYPE xstring,
l_string TYPE string,
l_string_out TYPE string.

*CALL FUNCTION 'SCP_GET_CODEPAGE_NUMBER'
*EXPORTING
*database_also = P_FINAL
*IMPORTING
*appl_codepage = in_codepage.


CALL METHOD cl_abap_conv_out_ce=>create
EXPORTING
encoding = in_codepage
RECEIVING
conv = gcl_conv_to_x.



loop at P_FINAL.

l_string = P_FINAL-text1.

CALL METHOD gcl_conv_to_x->write
EXPORTING
data = l_string.

CALL METHOD gcl_conv_to_x->get_buffer
RECEIVING
buffer = g_buffer.

CALL METHOD cl_abap_conv_in_ce=>create
EXPORTING
encoding = '1504'
input = g_buffer
RECEIVING
conv = gcl_conv_to_c.

CALL METHOD gcl_conv_to_c->read
IMPORTING
data = l_string_out.
F_XLINE-buffer = l_string_out.
APPEND F_XLINE to F_XTAB.
endloop.



заканчивается все :
Code:
call function 'RFC_REMOTE_FILE' destination c_dest
exporting
  file = p_readpath
  write = p_flag1
  tables
    filedata = P_FINAL
*    filedata = F_XTAB
  exceptions
      system_failure = 1 message dg_ermsg
      communication_failure = 2 message dg_ermsg.
if sy-subrc <> 0.
  format reset intensified off.
  write: / 'RFC ERROR:'(003), dg_ermsg.
else.
  if dg_flag = c_x.
    write : / 'Data is successfully Uploaded'(004).
  else. dg_flag1 = c_x.
    write : / 'Data is successfully Downloaded'(005).
  endif.
endif.


ни первый вариант, ни второй не помогают, даже если оба варианта закомментировать, то файл выходит один и тот же, пример:
01300;їа-Ым:OOO "±РеХвЫХ-1" ОаШФШзХбЪШЩ РФаХб: 420061, АЮббШп,;АВ, У. єРЧРЭм, гЫ. °Ъ. ігСЪШЭР, 1. ВХЫ. 537-76-00;ёЧУЮвЮТШвХЫм: OOO "±РеХвЫХ-1"
может кто сможет что-нибудь посоветовать.
P.S. RFC настраивала вот по этой ссылке http://www.scribd.com/doc/30284918/Comm ... -1#archive


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Чт, ноя 24 2011, 17:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
а без перекодировки что выводит?
как вариант, можно преобразовывать в utf-8


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 09:01 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
я тут порылась на форуме немного, вот что нашла :

"My computer"->"Properties"->"Advanced"->"Environment Variables"
А там хоть для системы в целом, хоть для юзера - на выбор (по мне лучше для системы) создавай, если она отсутствует.....
"New"
"Variable name" - SAP_CODEPAGE
"Variable value" - 1504

помогло, но теперь есть другая проблема, максимальная длина строки в текстовом файле 256 символов, иначе вываливается дамп...


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 09:13 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Вт, авг 31 2004, 14:57
Сообщения: 5258
Откуда: Ростов невеликий
Пол: Мужской
ablinka написал(а):
максимальная длина строки в текстовом файле 256 символов, иначе вываливается дамп...

ооо - это классика ;)
забыл даже как с этим боролись в 90-х ;)
на железке был отчётик (МО3 кажется) - так там этих символов!

_________________
Нет сегодняшних проблем -
есть вчерашние ошибки
(с)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 09:31 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
в логах вот такая бяка:


LOCATION SAP-Gateway on host ... / sapgw00
ERROR connection to partner '....local:4151' broken

TIME Fri Nov 25 10:21:11 2011
RELEASE 700
COMPONENT NI (network interface)
VERSION 38
RC -6
MODULE nixxi.cpp
LINE 4193
DETAIL NiIRead
SYSTEM CALL recv
COUNTER 10005

и вышибает rfc подключение : обнаружена ошибка. подключение будет закрыто.

как с этим бороться???


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 09:33 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, май 12 2008, 09:07
Сообщения: 334
Откуда: Tbilisi, GE
Пол: Мужской
ablinka написал(а):
помогло, но теперь есть другая проблема, максимальная длина строки в текстовом файле 256 символов, иначе вываливается дамп...


Вернитесь к opendataset
Для экспорта используйте построчную таблицу с одним текстовым полем длиной 4000 символов - у меня это работало.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 09:40 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
а в фоне разве работает opendataset?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 09:42 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, май 12 2008, 09:07
Сообщения: 334
Откуда: Tbilisi, GE
Пол: Мужской
ablinka написал(а):
а в фоне разве работает opendataset?


Да! Но на апликейшин сервер, или на любую рассшареную на запись папку
(если апликейшин на MS Windows Server)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 10:13 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
апликейшин сервер у нас не на MS Windows. Неужели эти 255 символов не обойти???
еще нашла вот такое:
Statements that are longer than 255 characters are splitted into
two lines or more than two lines if necessary. Concatenate
splitted statements again by removing the return character.

а с апликейшин сервер по FTP передавать в нужное место?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 10:31 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Пн, май 12 2008, 09:07
Сообщения: 334
Откуда: Tbilisi, GE
Пол: Мужской
ablinka написал(а):
апликейшин сервер у нас не на MS Windows.


Тогда, в фоне opendataset будет создавать файл именно на апликейшин сервере.

Огромное обсуждение - viewtopic.php?f=13&t=73225


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 10:32 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
спасибо!


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пт, ноя 25 2011, 18:04 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, авг 19 2004, 17:37
Сообщения: 1962
Откуда: Москва
Пол: Мужской
ablinka написал(а):
...Задача: необходимо выгрузить данные в фоновом режиме в текстовый файл...

Это не задача, а вариант решения какой то задачи. Любопытно какой?

_________________
"For all entries" не в SAP-ах, "for all entries" в головах! :)


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пн, ноя 28 2011, 11:19 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
сделала следующим образом:
табличку с результатом перекодирую:
Code:
data: F_XTAB LIKE TABLE OF SDOKCNTBIN.
data: F_XLINE LIKE  SDOKCNTBIN occurs 1 with header line.
data: F_SIZE type I.

data: G_STRING type STRING.
data: G_BUFFER type XSTRING.

loop at TBL_SOSTAV INTO WA_SOSTAV.

G_STRING = WA_SOSTAV.
call method CL_ABAP_CONV_OUT_CE=>CREATE
  exporting
    ENCODING = '1504'
  receiving
    CONV     = GCL_CONV_TO_X.

call method GCL_CONV_TO_X->WRITE
  exporting
    DATA = G_STRING.

call method GCL_CONV_TO_X->GET_BUFFER
  receiving
    BUFFER = G_BUFFER.


call function 'SCMS_XSTRING_TO_BINARY'
  exporting
    BUFFER               = G_BUFFER
importing
   OUTPUT_LENGTH         = F_SIZE
  tables
    BINARY_TAB           = F_XLINE.


APPEND  F_XLINE to F_XTAB.
endloop.


затем
Code:
  CALL FUNCTION 'HTTP_SCRAMBLE'
    EXPORTING
      SOURCE      = w_pwd
      sourcelen   = slen
      key         = c_key
    IMPORTING
      destination = w_pwd.
* Соединение
  CALL FUNCTION 'FTP_CONNECT'
    EXPORTING
      user            = w_user
      password        = w_pwd
      host            = host
      rfc_destination = c_dest
    IMPORTING
      handle          = w_hdl.

  IF sy-subrc NE 0.
    sy-subrc = 1.
    EXIT.
  ENDIF.


* Переход к каталогу
  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      handle        = w_hdl
      command       = path
    TABLES
      data          = result
    EXCEPTIONS
      tcpip_error   = 1
      command_error = 2
      data_error    = 3
      OTHERS         = 4.

  CALL FUNCTION 'FTP_COMMAND'
    EXPORTING
      handle        = w_hdl
      command       = 'binary'
    TABLES
      data          = result
    EXCEPTIONS
      tcpip_error   = 1
      command_error = 2
      data_error    = 3
      OTHERS         = 4.

* передача по фтп
  CALL FUNCTION 'FTP_R3_TO_SERVER'
    EXPORTING
      handle = w_hdl
      fname = fname
*      character_mode = 'X'
      blob_length = F_SIZE
    TABLES
*      text = TBL_SOSTAV.
*      text = F_XTAB.
       BLOB = F_XTAB.


не в фоне выгружается все хорошо, если в фоне выгружается только первая строка.
если без перекодировки то выгружается все в '####'.
думала все в одну строку F_XTAB записать, но как поставить символ разрыва строки?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пн, ноя 28 2011, 14:22 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
пробовала вставлять вот такой код
Code:
data: char_crlf value CL_ABAP_CHAR_UTILITIES=>CR_LF.

но в файле все в одну строку с разделителем "квадратик".


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: выгрузка в фоновом режиме через RFC, кодировка ####
СообщениеДобавлено: Пн, ноя 28 2011, 16:34 
Старший специалист
Старший специалист

Зарегистрирован:
Ср, дек 02 2009, 15:40
Сообщения: 255
P.S. система на которой стоит сервер приложений Юниксовая.


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

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


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

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


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

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