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


Смена статуса

Смена статуса статус

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

#1 maxim

    Участник

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

Отправлено 19 Июль 2013 - 00:04

Добрый день.

Есть таблица "Заявка"
и подчиненная ей "Данные заявки", поле "Заявка" поле связи с табл."Заявка"

В табл. "Данные заявки" при смене ВСЕХ статусов в поле "Тест" на "готов" в табл. "Заявка" должно меняется поле "статус2"
но не меняет, никак не разберусь.

$lines = data_table("Данные заявки", "status=0", "all");
foreach ($lines as $data) // цикл
{
if ($data['тест']=="готов" and $data['ID'])
$line['Заявка']['Статус2'] = "заказ готов";
}

Прикрепленные изображения

  • Прикрепленное изображение: 12.png


#2 CbCoder

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

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

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

Во-первых, в запросе в первой строке нет фильтра по записям, связанным с основной:

$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");

Без этого проход будет по всем записям "Данные заявки", а не только тем, что связаны с текущей заявкой.

Во-вторых, в условии внутри цикла 'тест' с маленькой буквы, хотя выше вы пишете, что имя поля - "Тест" (регистр имеет значение). Основная причина несрабатывания скорее всего в этом.

Ну и по мелочи: 1) непонятно зачем в том же условии используется $data['ID'] - оно лишнее (хотя и не мешает) 2) по логике текущего кода Статус2 проставится если есть хоть одна запись с "Тест"="готов", хотя выше вы писали что надо чтобы ставилось при всех.

#3 maxim

    Участник

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

Отправлено 19 Июль 2013 - 11:50

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

Во-первых, в запросе в первой строке нет фильтра по записям, связанным с основной:

$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");

Без этого проход будет по всем записям "Данные заявки", а не только тем, что связаны с текущей заявкой.

Во-вторых, в условии внутри цикла 'тест' с маленькой буквы, хотя выше вы пишете, что имя поля - "Тест" (регистр имеет значение). Основная причина несрабатывания скорее всего в этом.

"тест" с маленькой и в табл и вычислении (тут опечатка).

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

2) по логике текущего кода Статус2 проставится если есть хоть одна запись с "Тест"="готов", хотя выше вы писали что надо чтобы ставилось при всех.
Задать условие: если все "Тест"="готов" то $line['Заявка']['Статус2'] = "заказ готов"; ?

#4 CbCoder

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

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

Отправлено 19 Июль 2013 - 11:59

Кстати, на картинке у вас только одна запись с "готов", код по идее должен был сработать.

Если же смотреть по всем, то при проходе цикла нужно проверять не на "равно", а на "не равно", и в случае если хоть одно такое выполняется - не заполнять Статус2, иначе - заполнять.

#5 maxim

    Участник

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

Отправлено 19 Июль 2013 - 15:01

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

Кстати, на картинке у вас только одна запись с "готов", код по идее должен был сработать.

Если же смотреть по всем, то при проходе цикла нужно проверять не на "равно", а на "не равно", и в случае если хоть одно такое выполняется - не заполнять Статус2, иначе - заполнять.

Спасибо все сделал,но работает только если меняется статус последней записи.
Если все записи статус "Не готов", а последняя "Заказ готов".
то поле 'Статус2' вычисляет "Заказ готов"
Статус2 -текстовое поле
вычисление при изменении поля "тест"


$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
foreach ($lines as $data) // цикл
{
if ($data['тест']!="готов"){
$line['Заявка']['Статус2'] = "Не готов";
}
else{
$line['Заявка']['Статус2'] = "Заказ готов";
}
}

Прикрепленные изображения

  • Прикрепленное изображение: 13.png

Сообщение отредактировал maxim: 19 Июль 2013 - 15:08


#6 CbCoder

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

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

Отправлено 19 Июль 2013 - 15:23

$no_ready = 0;
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
foreach ($lines as $data) // цикл
{
if ($data['тест']!="готов") $no_ready = 1; // если хоть одна запись будет без "готов", переменная $no_ready обратится в 1
}
if ($no_ready) $line['Заявка']['Статус2'] = "Не готов"; else $line['Заявка']['Статус2'] = "Заказ готов";


#7 maxim

    Участник

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

Отправлено 19 Июль 2013 - 15:31

Просмотр сообщенияCbCoder (19 Июль 2013 - 15:23) писал:

$no_ready = 0;
$lines = data_table("Данные заявки", "status=0 and `Заявка`=".$line['Заявка']['ID'], "all");
foreach ($lines as $data) // цикл
{
if ($data['тест']!="готов") $no_ready = 1; // если хоть одна запись будет без "готов", переменная $no_ready обратится в 1
}
if ($no_ready) $line['Заявка']['Статус2'] = "Не готов"; else $line['Заявка']['Статус2'] = "Заказ готов";

Спасибо большое!!!!
Все работает.
:)





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

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