Текущее время: Пт, апр 19 2024, 16:48

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: dbf
СообщениеДобавлено: Чт, авг 26 2004, 09:03 
Гость
Тут в одном из погибших топиков по закачке dbf пробегал инклюд из HR с подходящей процедурой, напомните пожалуйста.


Принять этот ответ
Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт, авг 26 2004, 09:19 
Младший специалист
Младший специалист
Аватара пользователя

Зарегистрирован:
Чт, авг 26 2004, 09:14
Сообщения: 92
Откуда: Киев
процедура не стандартная и находится только в одной рпограмме - в какой точно я не помню... :(

_________________
Сохрани нас Бог от дураков, а уж с врагами мы сами справимся...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: HRUUKLADRLOAD
СообщениеДобавлено: Чт, авг 26 2004, 09:38 
Гость
form readdbffile using p_path
value(p_dbf)
value(p_tab)
p_ver.
** DBF filename
data: filename type string.
data: k(20) type n value 65535.
data: gui(255) type c.
data: gui_p type i.

** conversion string
field-symbols <hexchar> type any.
** index
data: offset type i value 0.
** buffers
data: buffer(1024) type x.
data: buffersize type i value 0.
data: bufferlength type i value 0.
data: bufferstart type i value 0.
** record counter
data: recordcount type i value 0.
** DBF parameters
data: dbffilesize type i.
data: dbfheader(32) type x.
data: dbfheadersize(5) type n.
data: dbfrecordscount(10) type n.
data: dbfrecordsize(5) type n.
data: dbffieldscount(3) type n.
data: dbfstartrecords type i.
** DBF table
data: dbf(65535) type x occurs 0 with header line.

** user exit
include zx_HRUUKLADRLOAD_readdbf.

** set DBF filename
concatenate p_path p_dbf into filename.
** upload binary DBF
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting percentage = 50
text = filename
exceptions others = 1.
call function 'GUI_UPLOAD'
exporting filename = filename
filetype = 'BIN'
importing filelength = dbffilesize
tables data_tab = dbf
exceptions file_open_error = 1
file_read_error = 2
invalid_type = 5
others = 17.
**
if sy-subrc ne 0.
write:/ 'File read error - '(002), p_dbf COLOR COL_NEGATIVE.
write:/ 'Error code = '(003), sy-subrc COLOR COL_NEGATIVE.
uline.
exit.
else.
write:/ 'File is open - '(004), p_dbf COLOR COL_POSITIVE.
uline.
endif.
** read DBF header
read table dbf index 1.
dbfheader = dbf+00(32).
** header size
perform hextonum using dbfheader+08(2) 2 changing dbfheadersize.
** records count
perform hextonum using dbfheader+04(4) 4 changing dbfrecordscount.
** record size
perform hextonum using dbfheader+10(2) 2 changing dbfrecordsize.
** fields count
dbffieldscount = ( dbfheadersize - 33 ) / 32.
** start records pointer
dbfstartrecords = dbfheadersize + 1.
** exit if no records
if dbfrecordscount eq 0.
write:/ 'No records found.'(005) color COL_NEGATIVE.
uline.
exit.
endif.
*write:/ 'filesize = ', dbffilesize.
*write:/ 'header = ', dbfheadersize.
*write:/ 'recordscount = ', dbfrecordscount.
*write:/ 'recordsize = ', dbfrecordsize.
*write:/ 'fieldscount = ', dbffieldscount.
*uline.
** get records
loop at dbf.
if sy-tabix eq 1.
** exclude header
offset = dbfstartrecords.
buffersize = 65535 - dbfstartrecords.
else.
offset = 0.
buffersize = 65535.
endif.
while buffersize ge dbfrecordsize.
** if buffer not empty
if not ( buffer is initial ).
** get full record in buffer
buffer+bufferlength(bufferstart) = dbf(bufferstart).
assign buffer(dbfrecordsize) to <hexchar> type 'C'.
** set offset of the next record
offset = bufferstart.
** set new buffer size
buffersize = buffersize - bufferstart.
else.
** get record & convert it from HEX to CHAR
assign dbf+offset(dbfrecordsize) to <hexchar> type 'C'.
** set offset of the next record
offset = offset + dbfrecordsize.
** set new buffer size
buffersize = buffersize - dbfrecordsize.
** change codepage to IBM-866
endif.
* if sy-langu eq 'R'.
* translate <hexchar> from code page '1503'
* to code page '1500'.
cstring = <hexchar>.
CALL FUNCTION 'HR_RU_CONVERT_STRING_FR_DOS'
CHANGING STRING = cstring.
<hexchar> = cstring.
* else.
* translate <hexchar> from code page '1504'
* to code page '1500'.
* endif.
** check KLADR version
if p_ver eq 3.
case p_tab.
** append record into specified table
when 1.
clear t_kladr_30.
t_kladr_30 = <hexchar>(dbfrecordsize).
append t_kladr_30.
when 2.
clear t_street_30.
t_street_30 = <hexchar>(dbfrecordsize).
append t_street_30.
when 3.
clear t_doma_30.
t_doma_30 = <hexchar>(dbfrecordsize).
append t_doma_30.
when 4.
clear t_socrbase_30.
t_socrbase_30 = <hexchar>(dbfrecordsize).
append t_socrbase_30.
when 5.
clear t_altnames_30.
t_altnames_30 = <hexchar>(dbfrecordsize).
append t_altnames_30.
endcase.
elseif p_ver eq 2.
case p_tab.
** append record into specified table
when 1.
clear t_kladr_20.
t_kladr_20 = <hexchar>(dbfrecordsize).
append t_kladr_20.
when 2.
clear t_street_20.
t_street_20 = <hexchar>(dbfrecordsize).
append t_street_20.
when 3.
when 4.
clear t_socrbase_20.
t_socrbase_20 = <hexchar>(dbfrecordsize).
append t_socrbase_20.
when 5.
clear t_altnames_20.
t_altnames_20 = <hexchar>(dbfrecordsize).
append t_altnames_20.
endcase.
endif.
** inc records counter
recordcount = recordcount + 1.
** exit if all records read
if recordcount eq dbfrecordscount.
exit.
endif.
** clear buffer
clear buffer.
** if isn't full record then put first record's part into the buffer
if buffersize gt 0 and buffersize lt dbfrecordsize.
buffer = dbf+offset(buffersize).
** set length of next part of the current record into offset
bufferstart = dbfrecordsize - buffersize.
** set buffer length
bufferlength = buffersize.
** message
concatenate 'Reading -'(011) k 'Bytes' into gui
separated by space.
gui_p = k * 100 / dbffilesize.
if gui_p ge 0 and gui_p le 100.
call function 'SAPGUI_PROGRESS_INDICATOR'
exporting percentage = gui_p
text = gui
exceptions others = 1.
endif.
k = k + 65535.
endif.
endwhile.
endloop.

endform. " readdbfile


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

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


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

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


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

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