пятница, 28 марта 2014 г.

BI IP

7.3

Конвертнул кубик с помощью программы SAP_CONVERT_NORMAL_TRANS в транзационный. Но система всё равно не видела его правильно. Пришлось достать из мультика, активировать и затащить снова - тогда всё нормализовалось.

Понадобилось запустить функцию планирования при старте рабочей книги.
После некоторого "исследования" получилась такая схема.

2 кнопка - Расчет и Reset

Для глобальной переменной пришлось создать отдельный модуль
Option Explicit
Public pRun As Integer



и код
'----------------------------------------------------------------------------------------
'--- Call-Back Macro: Executed on Refresh for each Table Item
'----------------------------------------------------------------------------------------
Sub CallBack(ParamArray varname())
  'varname(0): BExExcelItem.DataProvider.Name
  'varname(1): BExExcelItem.Range
  'varname(2): BExExcelItem.Name
 
  If pRun = 0 Then
    'hide activity
    Application.Interactive = False
    Application.EnableEvents = False
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    
    'reset previous result
    'pRun = pRun + 1
    'Application.Run ("test.xlsm!Sheet2.BUTTON_40_Click")
    
    'calculate
    pRun = 2
    'Application.Run ("test.xlsm!Sheet2.BUTTON_38_Click")
    Call ThisWorkbook.Sheets(2).BUTTON_38_Click
    
    pRun = 0
    Application.Interactive = True
    Application.EnableEvents = True
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Exit Sub 'we don't need update screen
      
  ElseIf pRun = 1 Then
    Exit Sub 'we don't need update screen
    
  Else       'update screen
    pRun = 0 'if button pressed
  End If
 
  'Remember current EnableEvents setting and set to False (disable)!

пятница, 21 марта 2014 г.

Родителям +

Утро началось с того что ребенок проснулась в 4, т.к. ей приснился волк. Провозился с ней, до 6. никак не засыпает. Был раздражен. В 6 пришла жена, чтобы я поел и оделся...
у неё было открыто это видео

https://www.youtube.com/watch?v=KJRcPl7WOqQ
https://www.youtube.com/watch?v=XwQ6owfXRSs

короче кашу я доедал со слезами на глазах и комком в горле. весь негатив ушел.
вернулся к дочери, поцеловал её, крепко обнял и через 10 минут она уже спала...

p.s. что то меня на лирику потянуло :)

четверг, 6 марта 2014 г.

Бессмертный пони

Я люблю свою работу.
Я приду сюда в субботу,
И конечно в воскресенье.
Здесь я встречу День Рожденья,
Новый Год, 8 марта!
Ночевать здесь буду завтра!
Плащ-палатку, вещь-мешок.
У супруги будет шок!!!
Если я не заболею,
Не сорвусь, не озверею –
Здесь я встречу все рассветы,
Все закаты и приветы!
От работы дохнут кони.

вторник, 18 февраля 2014 г.

tvatv constat's

Мне казалось что уже писал, но по ходу дела нет...
В общем в силу сложившихся обстоятельств "непреодолимой" силы, я не могу хранить значения констант и переменных в TVARV.

Выход был найден в использовании инфо-объект ZCONST.
Получилось даже гибче, ибо:

  • ведение констант идет через стандартное ведение мастер-данных, и не надо никаких отдельных прав на таблицу\транзакцию (короче базису спокойней)
  • у переменных теперь есть тексты - можно добавить короткое описание
  • можно массово загрузить переменные из файла



Пример данных:

Пишем\Читаем из таблицы 

   SELECT SINGLE *
     INTO ls_PZCONST
     FROM /BIC/PZCONST
     WHERE /BIC/ZCONST 'LCM_OFFSET_DATE'
     AND OBJVERS 'A'.

    UPDATE /BIC/PZCONST
         SET TCTHIGH l_date
         WHERE /BIC/ZCONST 'LCM_OFFSET_DATE'
           AND OBJVERS 'A'.


Разобрать pivot обратно

Возникла задачка разобрать pivotTable обратно...
Понятно что можно руками, макросом, и ...

Есть вариант через PivotTable and PivotChart Wizard - Multiple Consolidation Ranges
http://www.launchexcel.com/pivot-table-flatten-crosstab/

Есть правда небольшое ограничение, что первая колонка ключ...
В моем случае, можно было преобразовать,а потом lookup'ом подтащить значения
Либо слить первые столбцы в один ключ, преобразовать, потом 1й столбец распарсить

Основная фишка, что все делается стандартными средствами
Функция присутствует в Excel c версии 2010

Нестандартное использование экстракторов

Порадовали коллеги необычностью подхода - использовать экстрактор в качестве ERP отчета - типа выдает как надо пользователю... o_O

Даже расширения экстрактора можно использовать для добавления характеристик в отчет...

понедельник, 3 февраля 2014 г.

Измерение времени выполнения в трансформации

Для измерения времени выполнение кода (или блока) использую следующую конструкцию.
Результаты измерений соответственно отражаются логе загрузки.

  CONSTANTS:
    c_msg_header(24type value 'RSRMON              W000',
    c_seconds type value 1000000.

MOVE c_msg_header TO monitor_rec.
.
.
.
.
GET RUN TIME FIELD l_timer1.
.
. <измеряемый код>
.
GET RUN TIME FIELD l_timer2.
monitor_rec-msgv1 'Block XX:'.
monitor_rec-msgv2 |{ l_timer2 l_timer1 / c_seconds   } сек (l_timer2 l_timer1 NUMBER USER })|.
append monitor_rec to MONITOR.



(другая тема)
Пример функции replace в string template
L_VNAM |{ replaceval I_VNAM off strlenI_VNAM 1  len with '0' }|.

(ещё одна другая тема - ведущий ноль)
DATA:
      l_val(2type c,
      l_val2 type string.

        l_val  |{ sy-index WIDTH ALIGN RIGHT PAD '0' }|.
        l_val2 |{ sy-index WIDTH ALIGN RIGHT PAD '0' }|.

DATAl_str TYPE string.
l_str |{ 'START:' } { sy-uname } { sy-datum DATE USER } { sy-uzeit TIME USER }|.