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)!
пятница, 28 марта 2014 г.
пятница, 21 марта 2014 г.
Родителям +
Утро началось с того что ребенок проснулась в 4, т.к. ей приснился волк. Провозился с ней, до 6. никак не засыпает. Был раздражен. В 6 пришла жена, чтобы я поел и оделся...
у неё было открыто это видео
https://www.youtube.com/watch?v=KJRcPl7WOqQ
https://www.youtube.com/watch?v=XwQ6owfXRSs
короче кашу я доедал со слезами на глазах и комком в горле. весь негатив ушел.
вернулся к дочери, поцеловал её, крепко обнял и через 10 минут она уже спала...
p.s. что то меня на лирику потянуло :)
у неё было открыто это видео
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.
Получилось даже гибче, ибо:
В общем в силу сложившихся обстоятельств "непреодолимой" силы, я не могу хранить значения констант и переменных в TVARV.
Выход был найден в использовании инфо-объект ZCONST.
Получилось даже гибче, ибо:
- ведение констант идет через стандартное ведение мастер-данных, и не надо никаких отдельных прав на таблицу\транзакцию (короче базису спокойней)
- у переменных теперь есть тексты - можно добавить короткое описание
- можно массово загрузить переменные из файла
Пример данных:
Пишем\Читаем из таблицы
SELECT SINGLE *
INTO ls_PZCONST
FROM /BIC/PZCONST
WHERE /BIC/ZCONST = 'LCM_OFFSET_DATE'
AND OBJVERS = 'A'.
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'.
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
Понятно что можно руками, макросом, и ...
Есть вариант через 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(24) type c value 'RSRMON W000',
c_seconds type i 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 = |{ replace( val = I_VNAM off = strlen( I_VNAM ) - 1 len = 1 with = '0' ) }|.
(ещё одна другая тема - ведущий ноль)
DATA:
l_val(2) type c,
l_val2 type string.
l_val = |{ sy-index WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.
l_val2 = |{ sy-index WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.
DATA: l_str TYPE string.
l_str = |{ 'START:' } { sy-uname } { sy-datum DATE = USER } { sy-uzeit TIME = USER }|.
Результаты измерений соответственно отражаются логе загрузки.
CONSTANTS:
c_msg_header(24) type c value 'RSRMON W000',
c_seconds type i 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 = |{ replace( val = I_VNAM off = strlen( I_VNAM ) - 1 len = 1 with = '0' ) }|.
(ещё одна другая тема - ведущий ноль)
DATA:
l_val(2) type c,
l_val2 type string.
l_val = |{ sy-index WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.
l_val2 = |{ sy-index WIDTH = 2 ALIGN = RIGHT PAD = '0' }|.
DATA: l_str TYPE string.
l_str = |{ 'START:' } { sy-uname } { sy-datum DATE = USER } { sy-uzeit TIME = USER }|.
Подписаться на:
Сообщения (Atom)



