// проверка на существование item'а
ITEM_find_item(item_id,&item);
if(item==NULLTAG)
{
printf("\nitem %s не найден.\n",item_id);
shutdown_ITK_environment();
return ITK_ok;
}
// проверка на существование правила модификации
CFM_find(pm,&rul);
if(rul==NULLTAG)
{
printf("\nправило модификации %s не найдено.\n",pm);
shutdown_ITK_environment ();
return ITK_ok;
}
ITEM_ask_latest_rev(item,&item_rev); //получение последней ревизии по правилу модификации
ITEM_find_revision(item,"C",&rev); //получение номера ревизии "С" для сборки
//Создание окна структуры изделия
BOM_create_window(&window);
BOM_set_window_config_rule(window,rul); //установка правила модификации
BOM_set_window_top_line(window,item,item_rev,NULLTAG,&top_line);
///////////////////////////////////////////
BOM_create_window (&window2);//Создание окна структуры сборки
CFM_find( "Расцеховано", &rul2 ); //поиск правила модификации
CFM_rule_copy(rul2,"my_rule",&rul3 ); //копирование правила
ITEM_find_item ("T7-95", &end_item_tag); //поиск конечного изделия
//проверка на существование конечного изделия
if (end_item_tag == null_tag)
{
printf("\nконечное изделие T7-95 не найдено.\n");
shutdown_ITK_environment ();
return ITK_ok;
}
// конФигурирование правила модификации
CFM_rule_set_end_item(rul3,end_item_tag);//установка правила для конечного изделия
CFM_rule_add_entry(rul3,CFM_entry_unit_no,&u_n_tag);
CFM_unitno_entry_set_no(u_n_tag,rul3);
BOM_set_window_config_rule( window2, rul3 ); //установка правила модификации
out=fopen("D:\\users\\Rogozin\\sborka.txt","w"); // файл для вывода данных
rekurs(top_line,0,out);
return ITK_ok;
}
//////////////////////////////////////////////////////////////////////////////////
void rekurs(tag_t BOM_line, int level, FILE *out)
{
tag_t prop_tag, prop_tag2, process_item,top_line2, proc_rev;
int count,i,*child_lines;
char *str, *str2, *str3,item_rid, *arr;
fprintf(out,"\nУровень %d",level);
//чтение данных строки
PROP_ask_property_by_name(BOM_line,"bl_item_item_id",&prop_tag);
PROP_ask_value_string(prop_tag,&str);
fprintf(out,"\n%s",str);
///////////////////////
sprintf(&item_rid,"r%s",str);//преобразование идентификатора
ITEM_find_item(item_rid,&process_item); //поиск сборки
BOM_set_window_top_line(window2,process_item,NULLTAG,NULLTAG,&top_line2);
//получение названия ревизии
PROP_ask_property_by_name(top_line2,"bl_item_revision_number",&prop_tag2);
PROP_ask_value_string(prop_tag2,&str2);
ITEM_find_rev(item_rid, str2, &proc_rev ); //поиск по названию ревизии
//получение массива тегов (параметров) для найденной ревизии сборки
PROP_ask_property_by_name(proc_rev ,"IMAN_METarget",&prop_tag2);
//PROP_ask_value_tags(prop_tag2,arr);
PROP_ask_value_string(prop_tag2,&arr);
//проверка на существование тегов ревизии
if(arr==NULLTAG)
{
printf("Данная ревизия не имеет параметров");
shutdown_ITK_environment ();
return ITK_ok;
}
//получение идентификатора изделия в найденной ревизии сборки
PROP_ask_property_by_name(arr[0],"item_revision_id",&prop_tag2);
PROP_ask_value_string(prop_tag2,&str3);
fprintf(out," Запущена в производство ревизия %s",str3);
//сравнение ревизий
if(rev==str3)
{
printf(" (ревизии совпадают)");
}
else
{
printf(" (ревизии не совпадают)");
}
//получение дочерних строк
BOM_line_ask_child_lines(BOM_line,&count,&child_lines);
P+=1;
printf("%d\n",P);
for(i=0;i<count;i++)
{
rekurs(child_lines[i],level+1,out); //рекурсивный вызов функции чтения строк
}
}
//////////////////////////////////////////////////////////////////////////////////
int startup_ITK_environment()
{
CALL( ITK_auto_login());
CALL(ITK_set_journalling (TRUE)) ;
return TRUE;
}
int shutdown_ITK_environment()
{
CALL(ITK_exit_module (TRUE));
return TRUE;
}
void get_errors()
{
int i, n_ifails;
const int * severities;
const int * ifails;
const char ** texts;
EMH_ask_errors(&n_ifails,&severities,&ifails,&texts);
if (n_ifails == 0) return;
printf("\nNumber of errors: %d.",n_ifails);
for ( i=0; i<n_ifails; i++ )
printf("\nAttantion!!!%d -> %s",i+1,texts[i]);
EMH_clear_errors();
}
Результат работы программы:
Уровень 0
T7.92.1000.000.000.70/C-Центроплан (view) Запущена в производство ревизия C (ревизии совпадают)
Уровень 1
T7.92.1000.050.000.70/B-Лонжерон 2 (view) Запущена в производство ревизия B (ревизии совпадают)
Уровень 1
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.