Текущее время: Чт, апр 18 2024, 13:53

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


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

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


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

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