Перейти к содержимому


Настройка CRON


Сообщений в теме: 3

#1 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 07 Июнь 2018 - 17:47

Добрый день. Есть задача - поставить вычисление на крон.
По аналогии со статьями на форуме сделал все в цикле по всем записям.
Однако он не работает. Отдельно , вне цикла, для конкретной записи, вычисление работает.
$result = data_select(42, "status=0"); // цикл по всем активным записям таблицы
while ($line = sql_fetch_assoc($result))
{
//Проверим, есть ли в карте поле E-mail
$card_email  = $line['f442'];
//Если он не заполнен, начинаем поиск по ХЗ
//Получим мыло из карточки и мыло ЛПР из карочки ХЗ
$cold_email = $line['f6860']['f6470'];
$lpr_email = $line['f6860']['f6480'];
if($card_email  == ''){
    //Если мыло из карточки не пустое ,добавляем его в котрагента
    if($cold_email != ''){
	    $line['f442']= $cold_email;
    }
    else{
	    if($lpr_email != ''){
		  $line['f442'] = $lpr_email;
	    }
    }
}

// проверяем поле мыло ЛПР
    if($lpr_email != ''){
		    //Если мыло существует,то получаем списко сотрудников контрагента
		    //и проверяем на наличие сотрудника с таким же адресом
		    $result = data_select(51, "f545=",$line['ID']);
		    $flag = 1; //Флаг наличия  совпадения
		    while($row5 = sql_fetch_array($result)){
				   //Если такого сотрудника нет, то добавляем его в таблицу сотрудники
				   if($row5['f549'] == $lpr_email){
					   $flag = 0;					   
				   }				
		    }
		 
		    if($flag == 1){
					   $addSot['ФИО'] = $line['f6860']['f6490'];
					   $addSot['Телефон'] = $line['f6860']['f6900'];
					   if($line['f6860']['f13651'] != ''){
						   $addSot['Должность'] = $line['f6860']['f13651'];
					   }
					   else{
						   $addSot['Должность'] = 'ЛПР';
					   }
					   $addSot['E-mail'] = $lpr_email;
					   $addSot['Контрагент'] = $line['ID'];
					   insert_query($addSot, "Сотрудники");  
				   }
		  
    }
   
}


#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 681 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Июнь 2018 - 09:07

$cold_email = $line['f6860']['f6470'];

Вот такая конструкция в кроне работать не будет, т.к. data_select возвращает только одномерный массив текущей записи, без связанных полей. К ним надо обращаться отдельными запросами, например:

$result2 = data_select(111, "id=", $line['f6860']); // получаем связанную запись (вместо 111 подставьте id связанной таблицы)
$line2 = sql_fetch_assoc($result2);
$cold_email = $line2['f6470'];


#3 TelecomMedia

    Активный участник

  • Пользователи
  • PipPipPip
  • 378 сообщений

Отправлено 08 Июнь 2018 - 09:55

Просмотр сообщенияCbCoder (08 Июнь 2018 - 09:07) писал:

$cold_email = $line['f6860']['f6470'];

Вот такая конструкция в кроне работать не будет, т.к. data_select возвращает только одномерный массив текущей записи, без связанных полей. К ним надо обращаться отдельными запросами, например:

$result2 = data_select(111, "id=", $line['f6860']); // получаем связанную запись (вместо 111 подставьте id связанной таблицы)
$line2 = sql_fetch_assoc($result2);
$cold_email = $line2['f6470'];

Ага, понял.
Исправил, но все равно не выполняет.
$result = data_select(42, "status=0"); // цикл по всем активным записям таблицы
while ($line = sql_fetch_assoc($result))
{
//Проверим, есть ли в карте поле E-mail
$card_email  = $line['f442'];
//Если он не заполнен, начинаем поиск по ХЗ
//Получим мыло из карточки и мыло ЛПР из карочки ХЗ
$result2 = data_select(350, "id=", $line['f6860']); // получаем связанную запись (вместо 111 подставьте id связанной таблицы)
$line2 = sql_fetch_assoc($result2);
$cold_email = $line2['f6470'];
$lpr_email = $line2['f6480'];
if($card_email  == ''){
    //Если мыло из карточки не пустое ,добавляем его в котрагента
    if($cold_email != ''){
	    $line['f442']= $cold_email;
    }
    else{
	    if($lpr_email != ''){
		  $line['f442'] = $lpr_email;
	    }
    }
}

// проверяем поле мыло ЛПР
    if($lpr_email != ''){
		    //Если мыло существует,то получаем списко сотрудников контрагента
		    //и проверяем на наличие сотрудника с таким же адресом
		    $result3 = data_select(51, "f545=",$line['ID']);
		    $flag = 1; //Флаг наличия  совпадения
		    while($row5 = sql_fetch_array($result3)){
				   //Если такого сотрудника нет, то добавляем его в таблицу сотрудники
				   if($row5['f549'] == $lpr_email){
					   $flag = 0;					   
				   }				
		    }
		 
		    if($flag == 1){
					   $addSot['ФИО'] = $line2['f6490'];
					   $addSot['Телефон'] = $line2['f6900'];
					   if($line2['f13651'] != ''){
						   $addSot['Должность'] = $line2['f13651'];
					   }
					   else{
						   $addSot['Должность'] = 'ЛПР';
					   }
					   $addSot['E-mail'] = $lpr_email;
					   $addSot['Контрагент'] = $line['ID'];
					   insert_query($addSot, "Сотрудники");  
				   }
		  
    }
   
}


#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 681 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 08 Июнь 2018 - 10:15

Еще одно отличие: если в вычислении достаточно просто заполнить переменную $line и движок автоматом обновит текущую запись после выполнения вычисления, то здесь вам надо самостоятельно выполнять запрос на обновление записи:

data_update(42, $line, "id = ", $line['id']);

И еще ошибка в коде: не $line['ID'], а $line['id'] в данном случае (первое - внешнее имя, а второе - в бд)





Количество пользователей, читающих эту тему: 3

0 пользователей, 3 гостей, 0 анонимных