Странно, но вычисление выше прекрасно работает с внешнего обработчика. Уверен, очередной глюк КБ.
У нас купленная лицензия, но служба поддержки (а есть ли она вообще?) систематически отмахивается от решения вопроса, поэтому надежда только на CbCoder и форумчан...
Продолжаю тему с типичной проблемой - необоснованно не хочет работать вычисление. Подробнее:
В таблице
Семёрки имею набор полей:
М1, М-2, М-3, М-4, М-5, М-6, М-7 (поля связи) по событию заполнения
только всех должно срабатывать вычисление (вычисление на изменение, поле связь, висит на поле М-7), создающее в этой же таблице две записи с указанными полями, обновляющее записи в таблице
Участники по указанным полям, а затем удаляющее эту (исходную) запись.
//Как только последнее поле М-7 будет заполнено, срабатывает вычисление...
if(($line['М-1']['ID'] !== 0) && ($line['М-2']['ID'] !== 0) && ($line['М-3']['ID'] !== 0) && ($line['М-4']['ID'] !== 0) && ($line['М-5']['ID'] !== 0) && ($line['М-6']['ID'] !== 0) && ($line['М-7']['ID'] !== 0)) {
//Присваиваемые поля - типичны поля связи с той же таблицей...
//Создаём первую новую матрицу-семёрку в той же таблице и пишем в неё данные левого крыла старой матрицы
$data = Array();
$matr_l['f4550'] = $line['М-2'];//полем связи по логину присваиваем ID создателя матрицы полю связи по ID...
$matr_l['f4570'] = $line['М-2'];//2-е место ставим на первое
$matr_l['f4580'] = $line['М-4'];//4-е место ставим на второе
$matr_l['f4590'] = $line['М-5'];//5-е место ставим на третье
$matr_l['f4720'] = $line['Тип программы'];//присваиваем ID Программы
$matr_l['ID'] = data_insert(320, EVENTS_ENABLE, $matr_l);
//Создаём вторую новую матрицу-семёрку в той же таблице и пишем в неё данные правого крыла старой матрицы
$data = Array();
$matr_r['f4550'] = $line['М-3'];//присваиваем ID создателя матрицы
$matr_r['f4570'] = $line['М-3'];//3-е место ставим на первое
$matr_r['f4580'] = $line['М-6'];//6-е место ставим на второе
$matr_r['f4590'] = $line['М-7'];//7-е место ставим на третье
$matr_r['f4720'] = $line['Тип программы'];//присваиваем ID Программы
$matr_r['ID'] = data_insert(320, EVENTS_ENABLE, $matr_r);
//Переписываем поля М-?, IDТ-?, IDC-? Участников левого крыла
//Первый Участник
$data = Array();
//Обновляем поля М-? и IDС-? в записи 1-го Участника
if($line['Тип программы'] == 1) {
$data['f4730'] = 1;
$data['f4930'] = 0;
$data['f5020'] = $matr_l['ID'];
} elseif($line['Тип программы'] == 2) {
$data['f4740'] = 1;
$data['f4940'] = 0;
$data['f5030'] = $matr_l['ID'];
} elseif($line['Тип программы'] == 3) {
$data['f4750'] = 1;
$data['f4950'] = 0;
$data['f5040'] = $matr_l['ID'];
} elseif($line['Тип программы'] == 4) {
$data['f4760'] = 1;
$data['f4960'] = 0;
$data['f5050'] = $matr_l['ID'];
} elseif($line['Тип программы'] == 5) {
$data['f4770'] = 1;
$data['f4970'] = 0;
$data['f5060'] = $matr_l['ID'];
} elseif($line['Тип программы'] == 6) {
$data['f4780'] = 1;
$data['f5070'] = $matr_l['ID'];
} elseif($line['Тип программы'] == 7) {
$data['f4790'] = 1;
$data['f5080'] = $matr_l['ID'];
}
data_update(42, EVENTS_ENABLE, $data, "`id`='", $line['М-2'], "'");
//Для краткости урежем остальной, повторяющийся для других участников, код...
//*******************************************************************************************************
//*******************************************************************************************************
//*******************************************************************************************************
//удаляем поделившуюся матрицу таблицы Семёрки
data_delete(320, EVENTS_ENABLE, "`id`='", $line['ID'], "'");
}
но на выходе получаю ошибку и создаётся очень много пустых записей в Таблице Семёрки. Рекурсивный вызов отменял - не помогает.
Сообщение отредактировал zakoss: 10 Март 2015 - 08:25