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


Не выполняется условие в вычислении

условие не выполняется

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

#1 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 17 Июнь 2014 - 16:48

Не выполняется условие в вычислении:

Как отменить создание записи в т. Заявки, если в выборке $row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); отсутствует результат по условиям? От запрета if(!$row) что то нету толку...


Сейчас алгоритм следующий

Если поле Связана по услуге (т. Заказчики) = какому то значению, то поле Состояние = Связана:

if ($line['Связана по услуге']['ID']==0) $line['Состояние'] = "Свободна";
else $line['Состояние'] = "Связана";

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


// 130 - ID т. Заявки, 240 - ID т. Исполнители

if($line['Состояние'] == "Связана") // связана будет тогда только, если...
{
	$zvka = data_table(130, "`status`<>'2' AND `f5620`='Исполняемая' AND `f1750`=" . $line['ID']); // проверяем на наличие дубля размещаемой заявки
	$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	if(!$zvka) {
	  if(!$row) {
		data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']); // присваиваем значение 0 полю Флаг по условиям
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	  }
	  // создаём запись и копируем значения полей в т. Заявки
	  $zvka['Город'] = $line['Город']['ID'];
	  $zvka['Заказчик'] = $line['ID'];
	  $zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
	  $zvka['Исполнитель'] = $row['id'];
	  $zvka['ID'] = insert_query($zvka, "Заявки");
	  // обновляем Флаг=1 по итогу
	  data_update(240, array('f6130' => 1), "id=", $row['id']);
	}
}


и всё бы ничего...
Все отрабатывается наотлично, но только когда выборка принесла какой то результат. А если результат = 0, то заявка создаётся (в т. Заявки) со значением поля Статус=В ожидании и конечно же пустым полем Исполнитель (так как нет такого, по условиям выборки). Как остановить вычисление, если в выборке отсутствует результат по условии и вывести сообщение во всплывающем окне: По запрошенной услуге отсутствует свободный исполнитель

Сообщение отредактировал All_ex74: 17 Июнь 2014 - 16:52


#2 CbCoder

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

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

Отправлено 17 Июнь 2014 - 16:56

В чем проблема поместить создание заявки под условие if ($row) ? Есть запись - создаем, нет - не создаем. Элементарная логика.

#3 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 17 Июнь 2014 - 17:43

Просмотр сообщенияCbCoder (17 Июнь 2014 - 16:56) писал:

В чем проблема поместить создание заявки под условие if ($row) ? Есть запись - создаем, нет - не создаем. Элементарная логика.

а основная логика не нарушится? там ведь проверка на дублирование заявки и обновление поля Флаг с проверкой состояния...

Сообщение отредактировал All_ex74: 17 Июнь 2014 - 17:43


#4 CbCoder

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

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

Отправлено 17 Июнь 2014 - 17:59

В чем она нарушится, не понял? Проверка и обнуление идет раньше. Ваше новое условие - ниже, на блоке добавления заявки.

#5 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 17 Июнь 2014 - 18:21

Просмотр сообщенияCbCoder (17 Июнь 2014 - 17:59) писал:

В чем она нарушится, не понял? Проверка и обнуление идет раньше. Ваше новое условие - ниже, на блоке добавления заявки.

if($line['f552'] == "Связана") // связана будет тогда только, если...
{
	$zvka = data_table(130, "`status`<>'2' AND `f5620`='Исполняемая' AND `f1750`=" . $line['id']); // проверяем на наличие дубля размещаемой заявки
	$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['f443']['id'], " AND `f4690`=", $line['f4710']['id'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	if(!$zvka) {
	  if(!$row) {
		data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $line['f443']['id'], " AND `f4690`=", $line['f4710']['id']); // присваиваем значение 0 полю Флаг по условиям
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['f443']['id'], " AND `f4690`=", $line['f4710']['id'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	  }
	  if(!$row <> 0) {
	  // создаём запись и копируем значения полей в т. Заявки
	  $zvka['Город'] = $line['f443']['id'];
	  $zvka['Заказчик'] = $line['id'];
	  $zvka['Тип услуги'] = $line['f4710']['id'];
	  $zvka['Исполнитель'] = $row['id'];
	  $zvka['ID'] = insert_query($zvka, "Заявки");
	  // обновляем Флаг=1 по итогу
	  data_update(240, array('f6130' => 1), "id=", $row['id']);
	  }
	}
}


Спасибо за подсказку, действительно все оказалось элементарно)

Сообщение отредактировал All_ex74: 17 Июнь 2014 - 18:39


#6 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 18 Июнь 2014 - 08:19

Хочу немного "разгрузить" вычисление. Решил перенести логику проверки выборки (на наличие положительного результата по условиям - if ($row &lt;&gt; 0) ) в т. Заказчики на поле Исполнитель. Сейчас там такое вычисление:
При выборе услуги из списка услуг поля Связана по услуге создается запись в т. Заявки...

if ($line['Связана по услуге']['ID']==0) $line['Состояние'] = "Свободна";
else $line['Состояние'] = "Связана";


, при Связана по услуге не равен 0 запускается вычисление на поле Состояние:

if($line['Состояние'] == "Связана") // связана будет тогда только, если...
{
	$zvka = data_table(130, "`status`<>'2' AND `f5620`='Исполняемая' AND `f1750`=" . $line['ID']); // проверяем на наличие дубля размещаемой заявки
	$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	if(!$zvka) {
	  if(!$row) {
		data_update(240, array('f6130' => 0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']); // присваиваем значение 0 полю Флаг по условиям
		$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'"); // делаем выборку по условиям и присваиваем массив значений полей переменной
	  }
	  // создаём запись и копируем значения полей в т. Заявки
	  $zvka['Город'] = $line['Город']['ID'];
	  $zvka['Заказчик'] = $line['ID'];
	  $zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
	  $zvka['Исполнитель'] = $row['id'];
	  $zvka['ID'] = insert_query($zvka, "Заявки");
	  // обновляем Флаг=1 по итогу
	  data_update(240, array('f6130' => 1), "id=", $row['id']);
	}
}


...создаётся запись в т. Заявки. Всё работает, но МНЕ НУЖНО ОТМЕНИТЬ КОПИРОВАНИЕ в т-цу Заявки, ИЗМЕНЕНИЕ ЗНАЧЕНИЯ ПОЛЯ СТАТУС в Исполняемая т. Заказчики и ПОДСТАНОВКУ ВЫБРАННОЙ УСЛУГИ в поле Связана по услуге т. Заказчики. В общем, оставить всё без изменений. Сейчас я поместил проверку if ($row &lt;&gt; 0) в вычисление на поле Связана по услуге в т. Заказчики:

$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
if($row <> 0) {
	if ($line['Связана по услуге']['ID']==0) $line['Состояние'] = "Свободна";
	else $line['Состояние'] = "Связана";
}

работает, но частично. Заявка не копируется и значение поля Состояние не меняется, но в поле Связана по услуге подставляется значение... Как подправить, оставив значение Связана по услуге = 0? Так будет правильно?:

$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
if($row <> 0) {
	if ($line['Связана по услуге']['ID']==0) $line['Состояние'] = "Свободна";
	else $line['Состояние'] = "Связана";
}
else $line['Связана по услуге']['ID'] = 0;

...проверил - так тоже не работает. Потому что в запросе идет опрос поля $line['Связана по услуге']['ID'] и он же должен быть со значением 0. Как сделать правильно?

Сообщение отредактировал All_ex74: 18 Июнь 2014 - 11:08


#7 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 18 Июнь 2014 - 10:26

подскажете?

#8 CbCoder

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

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

Отправлено 18 Июнь 2014 - 10:41

Просмотр сообщенияAll_ex74 (18 Июнь 2014 - 10:26) писал:

подскажете?

Честно говоря мало что понял в вашей логике. Может просто не будете ничего трогать и оставите как есть? Есть такое золотое правило - "если что-то работает, ради бога не меняйте"...

#9 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 18 Июнь 2014 - 11:02

но я ведь так и не добился требуемой логики - как не менять то... у меня по прежнему проставляется поле Связана по услуге, хотя и Заявка не копируется и поле Состояние не меняется благодаря запрету if($row <>0)

Согласитесь не логично как то выходит - Заявки нет, а в поле Связана по услуге стоит например Ремонт компьютеров...

Сообщение отредактировал All_ex74: 18 Июнь 2014 - 11:03


#10 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 18 Июнь 2014 - 11:06

Просмотр сообщенияCbCoder (18 Июнь 2014 - 10:41) писал:

Честно говоря мало что понял в вашей логике. Может просто не будете ничего трогать и оставите как есть? Есть такое золотое правило - "если что-то работает, ради бога не меняйте"...

Что же тут непонятного? Первое вычисление запускает второе - я поменял условие в первом, а именно добавил запрет if($row <>0) на копирование и изменение поля Состояние. Нужно еще, чтоб отменялось присваивание значения полю Связана по услуге... вот тут то весь ступор!

#11 CbCoder

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

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

Отправлено 18 Июнь 2014 - 11:12

Вы меня заставляете сидеть и разбирать ваше вычисление, хотя я не обязан это делать (написание вычислений - платная услуга). Это ведь уйма потраченного времени в том числе (а у меня свои задания на разработку стоят). Согласитесь, я уже итак вам более чем помог в плане работы вычислений, должны вроде уже сами научиться их писать, если проблема была в этом...

#12 All_ex74

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

  • Пользователи
  • PipPipPip
  • 138 сообщений
  • Пол:Мужчина
  • Город:Барнаул

Отправлено 18 Июнь 2014 - 11:37

Соглашаюсь, помогли





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

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