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


Фильтр для поля по нескольким значениям

фильтр несколько значений

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

#1 All_ex74

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

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

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

Здравствуйте, такой вопрос...

Необходимо реализовать фильтр.

Что бы Исполнитель отсеивался по таб. Города и Сфера услуг + по полю Карточка = Свободна таб. Исполнители,
в зависимости от значений полей Город , Тип услуги , Карточка

Эскиз для общего понимания вопроса:

?зображение

#2 CbCoder

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

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

Отправлено 21 Май 2014 - 09:47

То, что вы хотите, разумеется никак не реализуется обычным фильтром (каковой вы начали делать), т.к. в стандартном фильтре указываются постоянные значения, а у вас, кроме Карточки, все значения динамические и зависят от выбора в данных полях. Для этого существует другой функционал - фильтров по полю. Не помню, описан ли он где-то в документации, на форуме точно не раз писали об этом. Суть в том, что в настройках поля связи, которое вы хотите фильтровать, необходимо указать не статичный фильтр, а вышестоящее поле связи.

#3 All_ex74

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

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

Отправлено 21 Май 2014 - 09:52

Просмотр сообщенияCbCoder (21 Май 2014 - 09:47) писал:

...все значения динамические и зависят от выбора в данных полях...

Запись в таб. Заявки создаётся с уже присвоенными значениями полям Город и Тип услуги, которые копируются из ещё одной таб. - Заказчики. Поэтому они не выбираются динамически... Хотя...
У меня в настройках поля Исполнители только два значения по полю:

по полю Исполнители. Город и по полю Исполнители. Сфера услуг

А как это проделать с обоими значениями для поля Исполнитель + ещё условие Карточка = Свободна?..

Сообщение отредактировал All_ex74: 21 Май 2014 - 10:05


#4 CbCoder

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

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

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

Цитата

Запись в таб. Заявки создаётся с уже присвоенными значениями полям Город и Тип услуги, которые копируются из ещё одной таб. - Заказчики

И во всех заявках одни и те же значения? Или все таки нет? Если нет - то об этом и речь, что значения динамические. Если же - да (сомневаюсь), то и проблемы с созданием фильтра не было бы.

Цитата

А как это проделать с несколькими значениями на одно поле?

Цепочкой фильтров. Например, выбираю Страну - Регион - Город, по очереди фильтруя вначале Регион страной, затем Город регионом.

#5 All_ex74

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

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

Отправлено 21 Май 2014 - 10:11

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

И во всех заявках одни и те же значения? Или все таки нет? Если нет - то об этом и речь, что значения динамические. Если же - да (сомневаюсь), то и проблемы с созданием фильтра не было бы.

Нет, во всех записях таблицы значения разные - тогда всё таки динамические...


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

Цепочкой фильтров. Например, выбираю Страну - Регион - Город, по очереди фильтруя вначале Регион страной, затем Город регионом.

В вашем примере цепочка вполне обоснована: создаешь три таблицы в Справочнике - Страна - Регион - Город и связываешь их полями, ну а как же мне то увязать абсолютно не связываемые таблицы Города и Виды услуг - ведь в каждом из городов будут все эти виды услуг, а не частично??

Может я туплю конечно, подтолкните к ответу)

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


#6 CbCoder

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

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

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

Можно изменить связи обоих полей на ту же таблицу Исполнителей (и добавить еще скрытое поле Карточка с той же связью, до кучи), тогда проблем с фильтрацией не будет вообще (т.к. они все будут вести на одну и ту же таблицу). Единственный минус для вас - придется переписывать код копирования, который усложнится. Ну и второй минус конечно - то что ссылки будут вести не сразу на город или услугу, а через исполнителя. Но других вариантов здесь не вижу.

#7 All_ex74

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

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

Отправлено 21 Май 2014 - 10:28

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

Можно изменить связи обоих полей на ту же таблицу Исполнителей (и добавить еще скрытое поле Карточка с той же связью, до кучи), тогда проблем с фильтрацией не будет вообще (т.к. они все будут вести на одну и ту же таблицу). Единственный минус для вас - придется переписывать код копирования, который усложнится. Ну и второй минус конечно - то что ссылки будут вести не сразу на город или услугу, а через исполнителя. Но других вариантов здесь не вижу.

Спасибо, буду думать.

#8 All_ex74

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

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

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

Два вопроса:

Не нарушаться ли общие вычисления?

Сделал, как Вы рекомендовали - поля Город, Тип услуги, Исполнитель таб. Заявки связаны теперь с таб. Исполнители:

Связь полей таб. Заявки
Город > Исполнители.Город
Тип услуги > Исполнители.Сфера услуг
Исполнитель > Исполнители.ФИО

Ещё я сделал связь полей таб. Заказчики по аналогии с таб. Заявки, окуда в неё собственно и копируются данные:
Город > Исполнители.Город
Связана по услуге > Исполнители.Сфера услуг

Но теперь при создании Заявки не копируется почему то поле Город из таб. Заказчики. Подправьте пожалуйста код копирования (вы упомянули, что он усложнится):


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


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


#9 CbCoder

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

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

Отправлено 21 Май 2014 - 16:40

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

#10 All_ex74

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

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

Отправлено 21 Май 2014 - 18:12

Просмотр сообщенияCbCoder (21 Май 2014 - 16:40) писал:

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

Да, тип услуги копируется без нареканий...

#11 CbCoder

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

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

Отправлено 21 Май 2014 - 18:20

Затрудняюсь тогда сказать, в чем дело. Вы точно все поменяли как надо? Я бы понял, если бы оба поля не копировались, но если Тип услуги копируется без проблем, то и Город должен, т.к. оба поля идентичны.

#12 All_ex74

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

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

Отправлено 21 Май 2014 - 19:23

Просмотр сообщенияCbCoder (21 Май 2014 - 18:20) писал:

Затрудняюсь тогда сказать, в чем дело. Вы точно все поменяли как надо? Я бы понял, если бы оба поля не копировались, но если Тип услуги копируется без проблем, то и Город должен, т.к. оба поля идентичны.

А эти вычисления никак не могут влиять?

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

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['Статус'] = "Исполняемая";


У меня вообще подозрение на конфигурацию, т.к. при настройке таб. Заказчики, при нажатии на кн. сохранить (http://yagool.ru/cb/...le.php?table=42) вызывает ошибку.

?зображение

Не думаю, что так и должно быть.

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


#13 All_ex74

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

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

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

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

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


#14 All_ex74

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

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

Отправлено 05 Июнь 2014 - 13:31

Здравствуйте. В продолжении темы выше...

Реализовал фильтрацию, применив функционал - фильтр по полю:

?зображение

В поле Исполнитель подтягиваются Исполнители, отфильтрованные по полям Город и Тип услуги.
В поле Карточка подтягиваются значения статусов всех Исполнителей.

необходимо вычисление на изменение в базе по полю Тип услуги (если не равно 0, то):

1. Делать выборку с "подтянутого" массива поля Исполнитель и Выбирать Исполнителей только со значением поля Карточка - Свободна.
2. Из выбранных Исполнителей (со статусом Свободна) записывать в поле Исполнитель только одного, а при следующем обращении - следующего после него Исполнителя (по кругу)

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

Подскажите, как можно реализовать данную логику одним вычислением? Перерыл весь форум, так ничего и не нашел...

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


#15 CbCoder

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

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

Отправлено 05 Июнь 2014 - 14:35

Первый пункт: изначально не совсем верно сделано. Поле Карточка должна тоже участвовать в фильтрации, ее можно вынести выше и фильтровать по нему поле Город (так же, как по Городу фильтруется Тип услуги), а само поле заполнять просто по умолчанию значением "Свободна".

Второй пункт не совсем понял честно говоря. Что значит "при следующем обращении"? При обращении где? В этой же карточке или следующей?

#16 All_ex74

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

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

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

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

Первый пункт: изначально не совсем верно сделано. Поле Карточка должна тоже участвовать в фильтрации, ее можно вынести выше и фильтровать по нему поле Город (так же, как по Городу фильтруется Тип услуги), а само поле заполнять просто по умолчанию значением "Свободна".

Второй пункт не совсем понял честно говоря. Что значит "при следующем обращении"? При обращении где? В этой же карточке или следующей?

1. Пробовал, не получается сделать фильтрацию по четвертому полю (Карточка). На двух уровнях фильтруется, а при добавлении третьего начинаются косяки. По форуму несколько сообщений с типичной проблемой. Значения у полей Город, ФИО, Сфера услуг в таб. Исполнители статичны (присвоены единожды и навсегда), а у поля Карточка значения постоянно меняются. Вот после того и появляется неверная фильтрация, а то и вовсе ничего не фильтруется - вываливается полным списком, причем по всем указанным полям. Пробовал разные способы, но так и не добился успеха. Думаю это баг. Ну а по массиву подтянутых в поле Исполнитель значений, вычислением, что нельзя никак вытащить нужное и присвоить его данному полю?...

2. Следующий по списку (с значением поля Карточка - Свободна) должен выбираться "глобально" - при любом запросе. Этот же Исполнитель может быть выбран только когда пройдут все по списку... Вот и не знаю как это реализовать - ведь количество Исполнителей со значением поля Карточка - Свободна не нормированное и постоянно меняется.

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


#17 CbCoder

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

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

Отправлено 05 Июнь 2014 - 15:24

Цитата

Ну а по массиву подтянутых в поле Исполнитель значений, вычислением, что нельзя никак вытащить нужное и присвоить его данному полю?...

Так вы что вычислять то хотите, в итоге? Если фильтровать список через вычисление, то это невозможно, фильтровать можно только по полям или статичным фильтром.

Цитата

Следующий по списку (с значением поля Карточка - Свободна) должен выбираться "глобально" - при любом запросе. Этот же Исполнитель может быть выбран только когда пройдут все по списку...

Все равно не понял объяснение. Попробую догадаться сам: у вас есть 3 записи: Иванов, Петров, Сидоров. Если я уже выбрал в одной заявке Иванова (из них троих), то в следующей заявке могу выбирать только Петрова или Сидорова, потом только Сидорова, а в 4-й заявке снова всех? Так что ли?

#18 All_ex74

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

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

Отправлено 05 Июнь 2014 - 15:39

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

Так вы что вычислять то хотите, в итоге? Если фильтровать список через вычисление, то это невозможно, фильтровать можно только по полям или статичным фильтром.

1. Я думал, что можно прямым запросом MySQL к базе делать выборку строк по таблице Исполнители, собирать в массив, отфильтровав лишнее назначать значение поля ФИО данному полю Исполнитель...

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

Попробую догадаться сам: у вас есть 3 записи: Иванов, Петров, Сидоров. Если я уже выбрал в одной заявке Иванова (из них троих), то в следующей заявке могу выбирать только Петрова или Сидорова, потом только Сидорова, а в 4-й заявке снова всех? (нет не всех, а следующего по кругу и только со значением поля Карточка - Свободна) Так что ли?

2. Вы правильно догадались) но не совсем. К 4-й заявке кто нибудь из них уже освободится и значение его поля Карточка станет Свободна. Он станет доступен для исполнения, а значит и для выбора. Как тут быть?..

Просто это жизненно необходимо реализовать.

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


#19 CbCoder

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

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

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

1. Нет, через вычисления можно менять только значения полей, формировать выпадающие списки каким-либо образом невозможно. Нет таких типов вычислений просто.

2. Опять не понял тогда. Вы имеете ввиду, что при выборе исполнителя, его поле Карточка должна стать "Несвободна"? Ну это то не проблема реализовать, добавьте вычисление на изменение поля Исполнитель: $line['Исполнитель']['Карточка'] = "Несвободна". Если бы у вас работал фильтр по полю Карточка из первого пункта, то все автоматом бы решилось, этот исполнитель просто не попадал бы больше в выпадающий список исполнителей в заявке (пока не освободится). А так даже не знаю, нужно исправлять тогда этот баг/недоработку, если это вообще возможно в данном случае.

#20 All_ex74

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

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

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

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

Нет, через вычисления можно менять только значения полей, формировать выпадающие списки каким-либо образом невозможно. Нет таких типов вычислений просто.

Мне и не нужно формировать никакой выпадающий список, я и хочу присваивать значение полю Исполнитель при СОЗДАНИИ Заявки. Просто вычисление будет срабатывать на изменения в БД по полю Тип услуги и при открытии для просмотра Заявки поле Исполнитель должно быть уже заполнено выбранным Исполнителем. Заявка создается вот этим вычислением поля Состояние в таб. Заказчики:

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

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

Опять не понял тогда. Вы имеете ввиду, что при выборе исполнителя, его поле Карточка должна стать "Несвободна"? Ну это то не проблема реализовать...

Я имею ввиду именно ВЫБОР ИСПОЛНИТЕЛЯ, а не смену значения его Карточки! Я вроде бы все подробно изложил выше...

Например у меня есть три записи: Иванов, Петров, Сидоров. Если я уже выбрал в одной заявке Иванова (из них троих), то в следующей заявке могу выбирать только Петрова или Сидорова, пока выбирал Петрова Иванов уже отработал заявку и "встал в список снова", потом пошёл Сидоров, а в 4-й заявке стал снова доступен Иванов... Пока Исполнитель не освободится от Заявки на которую был выбран и не сменит САМОСТОЯТЕЛЬНО (смена статуса происходит через голосовое IVR-меню внешним запросом к базе) свой статус Карточка - Связана на Карточка - Свободна, он не должен участвовать в выбираемом списке...

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






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

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