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


Не выходит через связь применить вычисление только к конкретной записи

запись связь вычисление

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

#1 All_ex74

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

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

Отправлено 13 Май 2014 - 13:02

Не могу решить задачку:

1. Таблица Заказчики: поле - Связана по услуге
2. Таблица Заявки: поле - Статус, Заказчик, Исполнитель
3. Таблица Исполнители: поле - Карточка

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


if ($line['Статус']=="Исполняемая") $line['Исполнитель']['Карточка'] = "Связана";
if ($line['Статус']=="Завершённая") $line['Заказчик']['Связана по услуге'] = "";
if ($line['Статус']=="Завершённая") $line['Исполнитель']['Карточка'] = "Свободна";


Всё работает пока по одной записи в таб. Заказчики, таб. Заявки и таб. Исполнители, но как только пытаюсь добавить несколько записей, отработка вычисления проходит на всех записях связанных таблиц сразу. Т.е. когда в одной из записей таб. Заявки полю Статус присваиваем Завершённая, то поля Связана по услуге всех записей в таб. Заказчики принимают значение "" и поля Карточка всех записей в таб. Исполнители принимают значение Свободна...

Действие происходит в массовом порядке со всеми записями связанных таблиц... Вот графический пример:

до отработки вычисления (Статус: Исполняемая)


					
					<br />
					<p class= Сообщение отредактировал All_ex74: 13 Май 2014 - 14:49


#2 CbCoder

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

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

Отправлено 13 Май 2014 - 14:27

Вы что-то не договариваете видимо. Пишете "когда в одной из записей таб. Заявки полю Статус присваиваем Завершённая..." но тем не менее на скриншоте у вас явственно видно что изменен статус не в одной заявке, а в нескольких. Естественно, что в этом случае вычисление сработает по всем связанным с ними записям.

#3 All_ex74

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

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

Отправлено 13 Май 2014 - 14:48

Просмотр сообщенияCbCoder (13 Май 2014 - 14:27) писал:

Вы что-то не договариваете видимо. Пишете "когда в одной из записей таб. Заявки полю Статус присваиваем Завершённая..." но тем не менее на скриншоте у вас явственно видно что изменен статус не в одной заявке, а в нескольких. Естественно, что в этом случае вычисление сработает по всем связанным с ними записям.

Как же я могу через одну запись вручную сразу поменять всем статус на Завершенная?)
Как то не так отрабатывает вычисление. Сначала статусы у всех заявок - Исполняемая, а после, как одной из них меняешь вручную статус на Завершенная, меняются массово значения полей всех трех таблиц - не связанных записей, а всех.
Все верно: на первом эскизе - до вычисления, а на втором эскизе - уже после того, как в поле Статус, записи таб. Заявки, из списка выбрано Завершенная. Я просто не дописал, что массово изменяется еще и таблица Заявки тоже...

Сообщение отредактировал All_ex74: 13 Май 2014 - 14:57


#4 CbCoder

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

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

Отправлено 13 Май 2014 - 14:55

Т.е. верно понимаю: меняете Статус в одной заявке, сохраняете, и ВНЕЗАПНО он меняется во всех записях? Сам собой?

#5 All_ex74

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

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

Отправлено 13 Май 2014 - 14:57

Просмотр сообщенияCbCoder (13 Май 2014 - 14:55) писал:

Т.е. верно понимаю: меняете Статус в одной заявке, сохраняете, и ВНЕЗАПНО он меняется во всех записях? Сам собой?

Да, совершенно верно! В том то и дело... Но не внезапно, а после сохранения. Открыл одну из заявок, выставил статус на Завершенная, сохранил и вернулся в таблицу. А все записи сменили статус - не одна в которой был, а все. Так же в остальных таблицах.

Сообщение отредактировал All_ex74: 13 Май 2014 - 15:02


#6 CbCoder

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

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

Отправлено 13 Май 2014 - 15:01

Тогда тут явно дело не в этом вычислении, оно всего лишь обновляет связанные записи, как и должно быть. Скорее всего виновато какое-то иное вычисление, с некорректным запросом на обновление таблицы Заявки.

#7 All_ex74

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

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

Отправлено 13 Май 2014 - 15:03

Просмотр сообщенияCbCoder (13 Май 2014 - 15:01) писал:

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

А как можно узнать? Уже все пересмотрел. Ошибки не выводятся.


#8 CbCoder

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

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

Отправлено 13 Май 2014 - 15:07

Тут и не выйдет ошибки, это не баг, а ошибка логики, алгоритма. Если сами не можете найти - отправьте заявку в техподдержку. Если у вас платный аккаунт, вам помогут. Если же выяснится что это наш баг - исправят и выпустят новую ревизию.

#9 All_ex74

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

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

Отправлено 13 Май 2014 - 15:25

Вот все вычисления:

1. Заказчики

if ($line['Состояние'] == "Связана")
{
				$zvka['Тип услуги'] = $line['Связана по услуге']['ID']; // в переменной $line поля связи разворачиваются, поэтому записано в 2 уровня
				$zvka['Город'] = $line['Город']['ID']; // аналогично
				$zvka['Заказчик'] = $line['ID'];
				$zvka['ID'] = insert_query($zvka, "Заявки");

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

2. Заявки

if ($line['Статус']=="Исполняемая") $line['Исполнитель']['Карточка'] = "Связана";
if ($line['Статус']=="Завершённая")
{
	  $line['Закрыта'] = date("d.m.Y H:i");
	  $line['Заказчик']['Связана по услуге'] = "";
	  $line['Исполнитель']['Карточка'] = "Свободна";
}
if ($line['Исполнитель']['ID']=="")
{
	 $line['Статус'] = "В ожидании";
}
else $line['Статус'] = "Исполняемая";

3. Исполнитель

if ($line['Карточка'] == "Свободна")
{
   $zvka['Статус'] = "Завершённая";
   $zvka['ID'] = update_query($zvka, "Заявки",$line['Статус']);
}

Это все вычисления для трех таблиц, больше нет.

Сообщение отредактировал All_ex74: 23 Май 2014 - 07:55


#10 CbCoder

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

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

Отправлено 13 Май 2014 - 15:27

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

#11 All_ex74

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

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

Отправлено 13 Май 2014 - 15:43

Просмотр сообщенияCbCoder (13 Май 2014 - 15:27) писал:

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

Подскажите пож, на что исправить...

#12 CbCoder

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

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

Отправлено 13 Май 2014 - 15:56

Просмотр сообщенияAll_ex74 (13 Май 2014 - 15:43) писал:

Подскажите пож, на что исправить...

Так вы напишите вначале для чего оно и какова логика вашего кода.





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

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