Текущее время: Пт, июл 25 2025, 05:38

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


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

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


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

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