Как редактировать "Выбор времени" в Report Designer?
Максим Елхов; 24.2.00

Вопрос в следующем - хочет юзер распечатать данные из TagLOG или, скажем, AlarmLOG. И приходится заходить в Report Designer и там в свойствах динамической таблицы ручками ставить. А как этот же диалог привязать к кнопочке в Graphics Designer?

Изменение свойств PrintJob с помощью ODK
Никаноров В. - Сименс, Москва; 29.2.00

Если я правильно понял, то речь идет о динамическом выборе диапазона времени для отчета из Runtime.

Это можно сделать, применяя функции ODK для изменения свойств PrintJob's.
Порядок примерно следующий.

1. Задание даты\времени через поля ввода\вывода.

SYSTEMTIME TimeFrom()
{
static SYSTEMTIME st;

st.wYear = GetTagWord("U16i_ex_rep_f1");
st.wMonth = GetTagWord("U16i_ex_rep_f2");
st.wDay = GetTagWord("U16i_ex_rep_f3");
st.wHour = GetTagWord("U16i_ex_rep_f4");
st.wMinute = GetTagWord("U16i_ex_rep_f5");
st.wSecond = GetTagWord("U16i_ex_rep_f6");
return st;
}


SYSTEMTIME TimeTo()
{
static SYSTEMTIME st;

st.wYear = GetTagWord("U16i_ex_rep_t1");
st.wMonth = GetTagWord("U16i_ex_rep_t2");
st.wDay = GetTagWord("U16i_ex_rep_t3");
st.wHour = GetTagWord("U16i_ex_rep_t4");
st.wMinute = GetTagWord("U16i_ex_rep_t5");
st.wSecond = GetTagWord("U16i_ex_rep_t6");
return st;
}

2. Изменение свойств PrintJob'а. Это универсальная функция изменения свойств любого joba.

BOOL ModifyPrintJob(SYSTEMTIME st1,SYSTEMTIME st2,char jobname[200])
{
BOOL fRet;
PCMN_ERROR pError;
HPROPERTIES hProp;
LPVOID ptr1,ptr2;
DWORD typ;
DWORD dwVal;
char propname1[200],propname2[200];
char buffer[200];
TCHAR g_szProj[MAX_PATH+1];

typ = VT_DATE;
strcpy( propname1, "ABSOLUTESELECTIONFROM");
strcpy( propname2, "ABSOLUTESELECTIONTO");
ptr1 = (LPVOID)&st1;
ptr2 = (LPVOID)&st2;

//-----get project path
if( !DMGetRuntimeProject( g_szProj, MAX_PATH, pError))
{
printf("Error DMGetRuntimeProject(...)\r\n");
return FALSE;
}

//-----create property handle
hProp = RPJCreatePropertyHandle ( g_szProj, pError );
if( !hProp)
{
printf("Error RPJCreatePropertyHandle(...)\r\n");
return FALSE;
}

//-----get job properties
if ( !RPJGetJobProps ( hProp, jobname, pError ))
{
printf("Error RPJGetProps(...)\r\n");
RPJDeletePropertyHandle ( hProp, pError);
return FALSE;
}

//-----set property
if ( !RPJSetProperty ( hProp, propname1, ptr1, (VARTYPE) typ, 200, pError ))
{
printf("Error RPJSetProperty(...)\r\n");
RPJDeletePropertyHandle ( hProp, pError);
return FALSE;
}

//-----save job properties
if ( !RPJSetJobProps ( hProp, jobname, pError))
{
printf("Error RPJSetProps(...)\r\n");
RPJDeletePropertyHandle ( hProp, pError);
return FALSE;
}

//-----get job properties
if ( !RPJGetJobProps ( hProp, jobname, pError ))
{
printf("Error RPJGetProps(...)\r\n");
RPJDeletePropertyHandle ( hProp, pError);
return FALSE;
}

//-----set property
if ( !RPJSetProperty ( hProp, propname2, ptr2, (VARTYPE) typ, 200, pError ))
{
printf("Error RPJSetProperty(...)\r\n");
RPJDeletePropertyHandle ( hProp, pError);
return FALSE;
}

//-----save job properties
if ( !RPJSetJobProps ( hProp, jobname, pError))
{
printf("Error RPJSetProps(...)\r\n");
RPJDeletePropertyHandle ( hProp, pError);
return FALSE;
}


//-----delete property handle
fRet = RPJDeletePropertyHandle ( hProp, pError);

//-----print out written time settings
printf("\r\nJob : %s ;\r\n\r\n",jobname);

printf("Prop: %s ;\r\n",propname1);
printf("%d.%d.%d %d:%d:%d\r\n",(WORD)st1.wDay, (WORD)st1.wMonth, (WORD)st1.wYear,
(WORD)st1.wHour, (WORD)st1.wMinute, (WORD)st1.wSecond );
printf("Prop: %s ;\r\n",propname2);
printf("%d.%d.%d %d:%d:%d\r\n",(WORD)st2.wDay, (WORD)st2.wMonth, (WORD)st2.wYear,
(WORD)st2.wHour, (WORD)st2.wMinute, (WORD)st2.wSecond );

return TRUE;

}

3. Теперь можно по кнопке в GraphicDesigner вызвать эту функцию.

ModifyPrintJob(TimeFrom(),TimeTo(),"Указатель на имя printjob");

4. Эти функции работают в WinCC V4.x-V5.0

Re: Изменение свойств PrintJob с помощью ODK
Максим Елхов; 13.6.00

При всем вышесказанном важно не забыть сделать две вещи

1. Отключить выбор времени в свойствах динамических объектов в Report Designer
2. Включить Absolute Time Select в свойствах Print Job