вторник, 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 }|.