пятница, 10 декабря 2010 г.
Половинка ключа
Source_table Result
KeyA KeyB ................... KeyA KeyB
100 10 ................... 100 10 - вместо 10, могло быть и 11 и 12
100 11 ................... 200 12
100 12 ................... 300 10
200 13
200 14
200 15
300 10
Решение... ну самое простое, выбрать всё и сделать DELETE ADJACENT DUPLICATES FROM, но когда данных много, как то хотелось бы сократить объемы передаваемых данных.
Выход, был найден (правда не знаю как будет работать на не цифровых ключах)
SELECT KeyA MIN(KeyB)
INTO ...
FROM ...
WHERE ...
GROUP BY KeyA.
понедельник, 6 декабря 2010 г.
Вертикальное выделение в MS Word
для клавиш - войти в режим вертикального выделения Ctrl+Shift+F8
для мыши - при выделении нажать ALT
вторник, 30 ноября 2010 г.
Тихий лог
Но после обсуждения, было принято решение, сделать чуть по своему... не выкидывать записи в error stack, а просто писать лог в случае если мы попали на какую-то некорректную ситуацию. Писать что то в Z-table как то не тянуло... решили использовать стандартный DTP LOG - RSBMONMESS
Вот ещё немного табличек с логами.
p.s. Первый же запуск дал много информации к размышлению... и как у пользователей всё сходиться, ума не приложу.
DATA:
ls_MSG TYPE RSPC_S_MSG.
ls_MSG-MSGID = 'ZLOG'.
ls_MSG-MSGNO = '000'.
ls_MSG-MSGTY = 'I'.
ls_MSG-MSGV1 = 'Х..... >> Y..... Загрузка цены'.
ls_MSG-MSGV2 = SPACE.
ls_MSG-MSGV3 = SPACE.
ls_MSG-MSGV4 = SPACE.
CONCATENATE
INTO ls_MSG-MSGV2
SEPARATED BY SPACE.
CALL METHOD LOG->ADD_MSG
EXPORTING
I_S_MSG = ls_MSG.
вторник, 23 ноября 2010 г.
Сам себе дельта
1.Приходят записи
а.по определенным ключам из DSO цели считываются уже существующие значения, выставляется RECORDMODE = 'D', записи помещаются в результат
b.идет обработка пришедших строк, записи помещаются в результат
В принципе, всё хорошо работает. Но тут столкнулись с ситуацией, что дельта формируемая уже из целевой DSO может вызвать большие изменения в системе, при описанном подходе... хотя по факту изменений может и не быть...
В принципе, можно было бы реализовать внутри блока 1b разного рода проверки, на наличие идентичной записи... но читабельность кода была бы хуже, да и душа требовала чего то более универсального.
Как мне кажется был придуман интересный способ, как это сделать красиво :)
Схематично выглядит ~ следующее..
0. Объявляется сортированная таблица = RESULT_PAK с ключами по всем полям кроме RECORD
1.Приходят записи
а.по определенным ключам из DSO цели считываются уже существующие значения, выставляется RECORD = -1, записи помещаются в результат
b.идет обработка пришедших строк, RECORD = 1, записи помещаются в результат с помощью операнда COLLECT
c. Записи с
RECORD = 0 >> отбрасываются
RECORD = 1 >> RECORDMODE = SPACE
RECORD = -1>> RECORDMODE = 'D'
Вот так и живём... :)
ABAP. Штаны через голову
Синтаксис:
FIELD-SYMBOLS
ASSIGN ('(<имя программы>)структура') TO
Пример:
REPORT ZCALL_LEVEL2
FIELD-SYMBOLS
ASSIGN ('(ZCALL_LEVEL1)SODAT') TO
пятница, 19 ноября 2010 г.
Авторизация +
Был проведен анализ существующих ФМ, итого...
BAPI_USER_GET_DETAIL - информация о пользователе
SUSR_USER_AUTH_FOR_OBJ_GET << возможно получить объекты авторизации
S_RS_AUTH - по объекту, можно выйти на exit-переменные
Но это не так интересно... интересно другие
RSEC_GET_AUTH_FOR_USER - модуль собственно делает основную работу, вызывая exit'ы
RSSB_GET_AUTH_FOR_USER - тоже самое, но у учетом авторизация *
Для определения логина текущего пользователя, соответственно использовалась sy-uname.
В данном случае exit работал всё равно для текущего пользователя... анализ транзакции RSUDO
Нашел интересный метод RSEC_GET_USERNAME который используется для подмены пользователя RSUDO. Взял на вооружение.
EXPORT uname FROM 'VALERIV02MOS' TO MEMORY ID 'RSECUNAME'.
среда, 17 ноября 2010 г.
A что это у Вас тут торчит?
FUNCTION EXIT_SAPLRRS0_001.
*" CHANGING
*" VALUE(C_S_CUSTOMER) TYPE RRO04_S_CUSTOMER OPTIONAL
Не смог понять зачем данный параметр может быть использован?
Задал вопрос на sapforum, посмотрим силу всемирного разума...
p.s. Подебажил немного... действительно SAP имеет на параметр некоторые виды, правда так и не догнал какие...
Ещё эта подпись "ACN - наводит на ощущение, что был разум и была мысль, вот какая только неясно...
В модуле RRS_VAR_VALUES_EXIT_BEFORE, можно увидеть
l_s_customer-vproctp =
CALL CUSTOMER-FUNCTION '001'
...
да, и нашел красивый способ делать всякие сравнения (там-же)
Ну да, BW'шники знают ABAP но не на столько хорошо... :) Учиться никогда не поздно, в общем.
CONSTANTS:
* processing type of a reporting variable
BEGIN OF rro04_c_vproctp,
reppath TYPE rro04_s_globv-vproctp VALUE '1',
userexit TYPE rro04_s_globv-vproctp VALUE '3',
sapexit TYPE rro04_s_globv-vproctp VALUE '4',
table TYPE rro04_s_globv-vproctp VALUE '5', "Globv Vorschlag
authority TYPE rro04_s_globv-vproctp VALUE '6',
shiftuser TYPE rro04_s_globv-vproctp VALUE '9', "Nielson
END OF rro04_c_vproctp,
BEGIN OF rro04_ca_vproctp_exit_table,
userexit TYPE rro04_s_globv-vproctp VALUE rro04_c_vproctp-userexit,
sapexit TYPE rro04_s_globv-vproctp VALUE rro04_c_vproctp-sapexit,
table TYPE rro04_s_globv-vproctp VALUE rro04_c_vproctp-table,
authority TYPE rro04_s_globv-vproctp VALUE rro04_c_vproctp-authority,
END OF rro04_ca_vproctp_exit_table,
BEGIN OF rro04_ca_vproctp_exit,
userexit TYPE rro04_s_globv-vproctp VALUE rro04_c_vproctp-userexit,
sapexit TYPE rro04_s_globv-vproctp VALUE rro04_c_vproctp-sapexit,
END OF rro04_ca_vproctp_exit,
И теперь вкусное...
LOOP AT c_thx_var ASSIGNING
WHERE vproctp CA rro04_ca_vproctp_exit_table
AND vproctp NE rro04_c_vproctp-table
AND processed EQ rs_c_false.
IF
воскресенье, 31 октября 2010 г.
XML-parser
Смена системы разработки
Export Excel from web
LRSR_XLS_EXPORTF01.
вторник, 26 октября 2010 г.
Big & Fat Cubes
четверг, 14 октября 2010 г.
2DIM
Разбор проблемы показал интересную деталь... ИНОГДА, при параллельной загрузке в кубы возникает ситуация когда создается два DIM'a с абсолютно одинаковым содержимым.
Нас такая ситуация не устраивала, т.к. в отчетах стали отображаться 0-е строки (подавить 0-ли в отчете нельзя, т.к. есть реально ситуации, когда по человеку показатели 0), начали переписываться с SAP.
понедельник, 20 сентября 2010 г.
понедельник, 23 августа 2010 г.
Links
четверг, 19 августа 2010 г.
Data Source
Самое полезное, что можно перебросить новый DS в старый.
p.s. Касается только тех инфо-источников, которые были в контенте как старые.
SAPa SAPa тук-тук-тук
L_SYST TYPE RFCDEST.
L_SYST = 'BIX000'.
CALL FUNCTION 'RFC_PING'
DESTINATION L_SYST
EXCEPTIONS
SYSTEM_FAILURE = 1
COMMUNICATION_FAILURE = 2
OTHER = 99.
И вставить custom-формулу, и после вставить в цепочку.
Ещё пять минут ...
Почему это произошло - это безусловно отдельный вопрос... понятно, что можно договорится с базисом на какое время об увеличении оного... Можно что-нить пооптимизировать (индексы, логику, ABAP ежли есть), но есть и альтернативный путь...
Сбросить счетчик процесса можно программными средствами... вызов спец.функцию
* сбрасываем счетчик timeout
CALL FUNCTION 'TH_REDISPATCH'.
Либо, если Вам и этого не дозволено, то можете зайти в debug процесса, и пустить процесс дальше... - счетчик будет процесса обнулен.
Export to Excel
Собственно в этом инклюде напрямую и зашито, как будет выглядеть экспортированный отчет (стили и всё такое)... - блин!!! и это в наше время... вот так вот взять и тупо зашить всё в коде... нет, чтобы сделать XSLT преобразование... которое можно было бы переопределить или через настройку поменять... :(
среда, 18 августа 2010 г.
пятница, 13 августа 2010 г.
КАК УСТАНОВИТЬ ИНСУЛЬТ?
Mне прислали следующее и попросили меня разослать это другим.
Если хотя бы кто-то запомнит эту несложную информацию, можно спасти жизни некоторым людям!!!
Во время отдыха на природе, женщина споткнулась и упала – она заверила всех, что с ней все хорошо (друзья настаивали на вызове скорой помощи) и что она просто споткнулась о камень т.к. еще не привыкла к своей новой обуви. Друзья помогли ей отряхнуться и протянули ей новую тарелку с едой. Она продолжала наслаждаться отдыхом, несмотря на то, что она казалась немного взбудораженной...
А вечером позвонил ее муж и сообщил, что его жену забрали в больницу – (в 6 часов вечера ее не стало ). Во
время пикника у нее случился инсульт. Если бы ее друзья знали, как установить признаки инсульта, может, она была бы с нами сегодня.
Врач невролог в последствии заявил, что если бы он мог добраться до пострадавшего в течение трех часов, он бы мог полностью устранить последствия инсульта…полностью!!?!. Он также обратил внимание, что проблема в том, как установить инсульт, поставить правильный диагноз и затем доставить пострадавшего в течение 3 часов в медицинское учреждение для оказания помощи, что достаточно сложно осуществимо силами свидетелей происшествия.
РАСПОЗНАЕМ ИНСУЛЬТ:
(Чтобы прочесть эту информацию нужно потратить всего 1 минуту !)
Постарайтесь запомнить 3 основных приёма распознавания симптомов инсульта, так называемые «УЗП».
У - Попросите пострадавшего УЛЫБНУТЬСЯ.
З - Попросите eго ЗАГОВОРИТЬ.
Попросить выговорить простое предложение. Связно.
Например: "За окном светит солнце"
П - Попросите его ПОДНЯТЬ обе руки.
Внимание - ещё один способ распознать инсульт помимо вышеупомянутых: попросите пострадавшего высунуть язык. И если язык кривой или неправильной формы и западает на одну или другую сторону, то это тоже признак инсульта. Если Вы отметили у пострадавшего проблему с каким-то из этих заданий, немедленно вызывайте скорую и опишите симптомы прибывшим на место медикам.
Кардиологи уверяют, что каждый, кто получит это письмо и разошлет его 10 людям, может быть уверен, по крайней мере, одну жизнь он спас.
среда, 11 августа 2010 г.
вторник, 10 августа 2010 г.
SAPBEX0.XLA
проблема в том, что почему то при запуске транзакции RRMX система пытается найди нужный ей файл SAPBEX0.XLA по старому пути…
Вариант решения
- Убедитесь что по пути ”C:\Program Files\Common Files\SAP Shared\BW” есть файл SAPBEX0.XLA
- если нет, то п.4
- если да
- найдите ключ в реестре HKEY_CLASSES_ROOT\SAP.BusinessExplorer.Analyzer\path или HKEY_CLASSES_ROOT\SAP.BusinessExplorer.Analyzer\ApolloPath
- в значении по умолчанию, он всего скорей содержит путь ”C:\Program Files\SAP\FrontEnd\Bw” – это не верно
- замените на путь ”C:\Program Files\Common Files\SAP Shared\BW”
- перегрузитесь, пусть пользователь попробует запустить RRMX
- если не помогло, то переустановка системы
понедельник, 9 августа 2010 г.
where used list
пятница, 6 августа 2010 г.
Округление
Long time processing
CALL FUNCTION 'TH_REDISPATCH'.
среда, 28 июля 2010 г.
RSPC
В поле LOG_ID вводим ID лога, который можно взять из журнала транзакции RSPC, и для записей с пустым значением в поле ACTUAL_STATE, меняем значение на G или R.
После этого журнал RSPC отразит зеленый статус.
Для поиска вызовов цепочек из других цепочек, можно воспользоватся таблицей RSPCCHAIN. Поле TYPE = CHAIN, CHAIN_ID - предок, VARIANTE - потомок.
вторник, 20 июля 2010 г.
Запуск BEx
четверг, 15 июля 2010 г.
SAPLOGON.INI
Иногда есть проблума с русскими символами, лечиться через реестр
В Registry установить ключ
HKEY_LOCAL_MACHINE
Software
Microsoft
WindowsNT
Current Version
Font Substitutes
Arial Monospaced for SAP, 0 = Arial,204
+ к этому
http://sapboard.ru/forum/viewtopic.php?f=13&t=22798
Для Windows 7 MUI
HKEY_CURRENT_USER\Control Panel\International имя параметра Locale должно иметь значение 00000419 а не 00000409
SAP_CODEPAGE = 1504