Программа для альтернативы в расчетной позиции
Для определенния срабатывания алтернативной записи к расчетной позиции типа конструкции (АЗРПТК) можно использовать ее программу.
Если ячейка программы не пуста, то автоматически будет выполняться не список условий, а программа.
Альтернативная запись сработает если в команде rvt_setresult(x) будет стоять 1. Если 0, то программа перейдет к следующей альтернативной записи.
Ниже приведен пример программы для альтернативной записи, которая самостоятельно определяет артикул (Part Number) материала.
Здесь определяется артикул ФБС.
int main()
{
int iTable_MaterialsEK; // объявляем переменную для получения дескриптора таблицы материалов
iTable_MaterialsEK = object("get_descr_by_type_and_name","ts_table","ts_table_MaterialsEK"); // получить из памяти значение и записать в дескриптор.
rvt_request("get_element_value","UP","Тип"); // запросить из текущего элемента свойство "Тип" у его семейства.
string fragment = rvt_getstrvalue(); // записать результат в виде текста в переменную fragment
// найти в таблице материалов запись с кодом класса "BFBS" и наименование содержит тип.
// В иных случаях возможны любые варианты - вплоть до поиска по шаблону и более сложные алгоритмические выкладки.
int ires = ts_table(iTable_MaterialsEK, "search_extended",
"", "ANY", "Folder", "=", "BFBS", "", "AND",
"" , "ANY", "MatName", "CONTAINS", fragment, "", "");
// теперь в ires содержится номер строки или -1, если такой записи нет.
if(ires >=0)
{
ts_table(iTable,"select_row",ires); // выбрать запись ires в таблице материалов
string PN, MatName; // объявляем переменные для чтения значений
ts_table(iTable,"get_value_of","PN",PN,"MatName",MatName); // получить значения из колонок "PN" и "MatName"(для примера)
rvt_setchanger("PN",PN); // зафиксировать в альтернативной записи выбранный артикул (Part Number)
rvt_setresult(1); // говорим, что эта альтернативная запись сработала
}
else
{
rvt_setresult(0); // если ires == -1 значит подходящей записи нет в таблице материалов. Говорим, что эта АЗ не сработала.
}
}