Как редактировать "Выбор времени" в 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