Текущее время: Ср, июл 23 2025, 14:20

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


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


ВНИМАНИЕ!

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



Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 00:47 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, сен 21 2009, 15:29
Сообщения: 43
Пол: Мужской
Добрый день уважаемые коллеги!!!!
В АВАР_е делаю первые шаги, а вообще я консультант в HR.
Возникла необходимость загрузки данных по инфотипам 1000, 1951, 1952 в эксель файл.
программа, которую я написал, работает безотказно, но появилась необходимость постоянного (непрерывного)
обновления этих данных каждые 15 секунд. Пробовал играться с циклами while, do - ничего не вышло.
У меня большая просьба - подскажите что необходимо сделать чтобы это реализовать.
Программа использует логическую базу данных PCH.
А вот собственно и она:

REPORT ZHR_TO_ARCGIS.

TYPE-POOLS ole2.

DATA: C80(80),
C70(70),
C60(60),
C40(40),
C30(30),
C20(20),
C10(10).

DATA: XLTEXT TYPE I.
DATA: XLWORKBOOKNORMAL TYPE I.
data: file_txt like rlgrap-filename. "C:\tmp\test.txt

DATA: EXCEL TYPE ole2_object.
DATA: BOOKS TYPE OLE2_OBJECT.
DATA: ACTIVWINDOW TYPE OLE2_OBJECT.
DATA: ACTIVSELEC TYPE OLE2_OBJECT.
DATA: ACTIVBOOKS TYPE OLE2_OBJECT.
DATA: CELL TYPE OLE2_OBJECT.
DATA: ACTIVSHEET TYPE OLE2_OBJECT.
DATA: SELECT1 TYPE OLE2_OBJECT.
DATA: COL TYPE I,
ROW TYPE I,
BEG_ROW TYPE I,
END_ROW TYPE I,
BEG_COL TYPE I,
END_COL TYPE I,
COL_POST TYPE I,
ROW_POST TYPE I,
NUM_ROW TYPE I.
DATA: COL_J10 TYPE I. " Позиция вывода столбца = col_j * 10
DATA: VALUE(40).

data: index(4).

FILE_TXT = 'C:\TEST1\locationtamplate.xls'.

INDEX = 1.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
TABLES: objec, hrp1000, hrp1951, hrp1952.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
infotypes: 1000, 1951, 1952 .



types: BEGIN OF HRP,
objid LIKE p1952-objid,
short LIKE p1000-short,
stext LIKE p1000-stext,
readiness LIKE p1951-readiness,
longitude like p1952-longitude,
latitude LIKE p1952-latitude,
END OF HRP.
DATA etab type standard table of HRP with header line .
data stab type HRP .
data gtab type etab .
data r type i.
DATA H TYPE I.


INITIALIZATION.
PCHPLVAR = '01'.
PCHOTYPE = 'O'.
pchobjid-low = '50000050'.
append pchobjid.

CLEAR etab.


start-of-selection.

get objec.
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Loop at p1952 WHERE begda LE pc-endda AND endda GE pc-begda.

if p1952-longitude ne 0 and p1952-latitude ne 0 .
if p1952-subty = 0008.
stab-objid = p1952-objid.
stab-longitude = p1952-longitude.
stab-latitude = p1952-latitude.
"append stab to etab.
WRITE: /, stab-longitude, stab-latitude.
endif.
ENDIF.
ENDloop.

Loop at p1951 WHERE begda LE pc-endda AND endda GE pc-begda.
if p1000-objid = stab-objid.
stab-readiness = p1951-readiness.
"append stab to etab.
WRITE: stab-readiness.
endif.
ENDloop.

Loop at p1000 WHERE begda LE pc-endda AND endda GE pc-begda.
if p1000-objid = stab-objid.
stab-short = p1000-short.
stab-stext = p1000-stext.
append stab to etab.
write: stab-objid, stab-short, stab-stext.
endif.
ENDloop.

clear stab.
end-of-selection.
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
CREATE OBJECT EXCEL 'EXCEL.APPLICATION'.
CALL METHOD OF EXCEL 'workbooks' = BOOKS.
SET PROPERTY OF EXCEL 'DisplayAlerts' = 0.

CALL METHOD OF BOOKS 'open' EXPORTING #1 = FILE_TXT
#2 = 2
#3 = 1 .
SET PROPERTY OF EXCEL 'visible' = 0. " =1-видимо, =0-не видимо

CALL METHOD OF EXCEL 'ActiveWorkbook' = ACTIVBOOKS.
IF SY-SUBRC NE 0.
WRITE: / ' ERROR WHEN OPENING EXCEL.APPLICATION', sy-msgli.
ENDIF.

PERFORM SET_CELL USING 1 1 'latitude'.
PERFORM SET_CELL USING 1 2 'longitude'.
PERFORM SET_CELL USING 1 3 'ID number'.
PERFORM SET_CELL USING 1 4 'Short name'.
PERFORM SET_CELL USING 1 5 'Full name'.
PERFORM SET_CELL USING 1 6 'Readiness'.


INDEX = 2.


************************************************************************************

LOOP at etab.

Perform set_cell using index 1 etab-latitude.
Perform set_cell using index 2 etab-longitude.
Perform set_cell using index 3 etab-objid.
Perform set_cell using index 4 etab-short.
Perform set_cell using index 5 etab-stext.
Perform set_cell using index 6 etab-readiness.
num_row = num_row + 1.
index = index + 1.



ENDLOOP.
FILE_TXT = 'C:\TEST1\location.xls'.
XLTEXT = -4158.
XLTEXT = 36.
XLWORKBOOKNORMAL = -4143.
CALL METHOD OF ACTIVBOOKS 'SaveAs'
EXPORTING #1 = FILE_TXT
#2 = XLWORKBOOKNORMAL
#3 = ''
#4 = ''
#5 = 0
#6 = 0
#7 = 1
#8 = 2.



CALL METHOD OF BOOKS 'close'.
FREE OBJECT CELL.
FREE OBJECT ACTIVBOOKS.


CALL METHOD OF EXCEL 'Quit'.
FREE OBJECT CELL.
FREE OBJECT BOOKS.
FREE OBJECT EXCEL.

INCLUDE ZGEOLOCA_EXCEL_FORM.

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

*&---------------------------------------------------------------------*
*& Include ZGEOLOCA_EXCEL_FORM
*&---------------------------------------------------------------------*
form GEt_cell using row col changing value.
CALL METHOD OF EXCEL 'activecell' = CELL
EXPORTING #1 = ROW #2 = COL.
GET PROPERTY OF CELL 'value' = VALUE.
endform.

FORM SET_CELL USING ROW COL VALUE.

CALL METHOD OF EXCEL 'cells' = CELL

EXPORTING #1 = ROW #2 = COL.
SET PROPERTY OF CELL 'value' = VALUE.
ENDFORM.

_________________
G O T T_M I T_U N S


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 06:13 
Специалист
Специалист
Аватара пользователя

Зарегистрирован:
Ср, июл 15 2009, 05:55
Сообщения: 174
Откуда: Мегион - > СПб
Пол: Мужской
SM36

фон

_________________
Ничто так не заразительно, как смех начальника...


Последний раз редактировалось LinevskiySV Пт, мар 30 2012, 06:53, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 06:37 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
LinevskiySV написал:

Тут выгрузка в Excel идет на фронтэнд, в фоне не получится.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 06:40 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Чт, ноя 11 2004, 16:25
Сообщения: 3109
Пол: Мужской
to alexkay, объясните подробнее что это за данные, для каких целей выгружать каждые 15 сек и как это будет потом использоваться? Может быть стоит подход поменять, например, собирать данные каждые 15 сек записывать/дозаписывать уже обработанные агрегированные данные в Z табличку, а дальше уже с ней работать?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 11:01 
Ассистент
Ассистент

Зарегистрирован:
Чт, июл 22 2010, 19:53
Сообщения: 34
Besa написал:
LinevskiySV написал:

Тут выгрузка в Excel идет на фронтэнд, в фоне не получится.

А если сервер приложений виндовс сервер?


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 12:14 
Старший специалист
Старший специалист

Зарегистрирован:
Чт, май 12 2011, 16:06
Сообщения: 351
alexkay написал:
Возникла необходимость загрузки данных по инфотипам 1000, 1951, 1952 в эксель файл.
программа, которую я написал, работает безотказно, но появилась необходимость постоянного (непрерывного)
обновления этих данных каждые 15 секунд.
Погуглите по ключевым словам "timer", "abap" или "autorefresh", "abap" - в инете есть куча примеров. Но возникают вопросы. ГДЕ должны обновляться данные каждые 15 секунд? В Excel-файле? - если он будет открыт пользователем, насколько я сталкивался, записать что-то туда не удастся. Если он не будет открыть пользователем - зачем насиловать файл каждые 15 секунд? Если это лог для скармливания внешней программе - зачем Excel-файл, а не текстовый файл?
Имхо, Besa правильно советует: уточните задание, может оно решается гораздо проще, чем Вы пытаетесь сделать.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 18:36 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, сен 21 2009, 15:29
Сообщения: 43
Пол: Мужской
Besa написал:
to alexkay, объясните подробнее что это за данные, для каких целей выгружать каждые 15 сек и как это будет потом использоваться? Может быть стоит подход поменять, например, собирать данные каждые 15 сек записывать/дозаписывать уже обработанные агрегированные данные в Z табличку, а дальше уже с ней работать?

Спасибо за совет коллега, возможно вы правы, но хотелось бы работать без Z таблиц.
Идея замысла такова:
Программа должна мониторить каждые 15сек таблицы, которые указаны в программе (р1000, р1951, р1952), соответственно выгружать их в Excel, дальше этот Excel файл подхватывает прога из ArcGIS и выводит координаты оргобъектов на карту.
Мониторинг необходим для того, чтобы полностью автоматизировать этот процесс. То есть в открытой транзакции /isdfps/toe1 инфотипе 1952 и подтипе 0008 изменяем координаты оргобъекта - видим изменение в аркгисе на карте.

_________________
G O T T_M I T_U N S


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 18:41 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, сен 21 2009, 15:29
Сообщения: 43
Пол: Мужской
LAT написал(а):
alexkay написал:
Возникла необходимость загрузки данных по инфотипам 1000, 1951, 1952 в эксель файл.
программа, которую я написал, работает безотказно, но появилась необходимость постоянного (непрерывного)
обновления этих данных каждые 15 секунд.
Погуглите по ключевым словам "timer", "abap" или "autorefresh", "abap" - в инете есть куча примеров. Но возникают вопросы. ГДЕ должны обновляться данные каждые 15 секунд? В Excel-файле? - если он будет открыт пользователем, насколько я сталкивался, записать что-то туда не удастся. Если он не будет открыть пользователем - зачем насиловать файл каждые 15 секунд? Если это лог для скармливания внешней программе - зачем Excel-файл, а не текстовый файл?
Имхо, Besa правильно советует: уточните задание, может оно решается гораздо проще, чем Вы пытаетесь сделать.


Спасибо коллега!!! Уже уточнил и это единственный вариант. Пока на первых порах только Excel. Дело в том, что програмист в ArcGIS тоже новичок как и я, но с его стороны он больше продвинулся в этом вопросе, у него удалось сделать мониторинг этого эксель файла.

_________________
G O T T_M I T_U N S


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 18:49 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Пт, сен 23 2005, 11:11
Сообщения: 963
пишите в .csv без ole в общую папку, или в txt и excel+vba на клиенте, который периодически ест заданный файл


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пт, мар 30 2012, 20:55 
Ассистент
Ассистент
Аватара пользователя

Зарегистрирован:
Пн, сен 21 2009, 15:29
Сообщения: 43
Пол: Мужской
trop написал(а):
пишите в .csv без ole в общую папку, или в txt и excel+vba на клиенте, который периодически ест заданный файл


Спасибо коллега!
Подскажите пожалуйста каким образом сделать, может нужно использовать какой то функциональный модуль или ещё что....
Если Вам не тяжело, пришлите в личку Ваш вариант решения (если Вас не затруднит...)

_________________
G O T T_M I T_U N S


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Фоновое задание
СообщениеДобавлено: Пн, апр 02 2012, 06:31 
Старший специалист
Старший специалист

Зарегистрирован:
Пт, авг 24 2007, 11:29
Сообщения: 350
Добрый день.
Попробуйте переделать выгрузку используя OPEN DATASET вместо OLE. Данная конструкция работает и при фоновом выполнении программы. В этом случае можно будет использовать возможности тр. SM36. В ниже приведенном коде выгружается текстовый файл с разделителями "Табуляция". Если этому файлу установить расширение *.xls то все должно работать.
Пример кода:
Code:
  CONCATENATE GV_FILEPATH GV_FILENAME INTO GV_FILE.
  GV_REP_1 = CL_ABAP_CHAR_UTILITIES=>HORIZONTAL_TAB.
  OPEN DATASET GV_FILE FOR OUTPUT IN TEXT MODE ENCODING DEFAULT.
  IF SY-SUBRC = 0.
    LOOP AT GT_STRING INTO GV_STRING.
      CONCATENATE GV_STRING GV_REP_1 INTO GV_STRING.
      TRANSLATE GV_STRING FROM CODE PAGE '1500' TO CODE PAGE '1504'.
      TRANSFER GV_STRING TO GV_FILE.
    ENDLOOP.
    CLOSE DATASET GV_FILE.
  ENDIF.


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

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


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

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


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

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