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


Публикации All_ex74

136 публикаций создано All_ex74 (учитываются публикации только с 21-Май 23)



#24299 шеф, всё пропало! (с)

Отправлено от All_ex74 в 11 Июнь 2014 - 09:54 in Как это сделать

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

В результате аварии с компьютером в наличии остались папка www с данными, старый архив от февраля месяца и дистрибутив программы. Возможно ли восстановить данные в полном объёме?
Версия 1.9.5 , Винда, Локальная версия.

Выражайтесь яснее. Какой аварии? С балкона выронили или в речку свалился)) у вас "полетела" Windows?

Если Да - то надеюсь вы не успели накатить новую? Если накатили - шансы на восстановление файловой структуры уменьшаются
Если Нет - 100% возможно все восстановить...



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

Отправлено от All_ex74 в 07 Июнь 2014 - 16:38 in Как это сделать

Цитата

Да, теперь все верно с $line. Еще раз повторюсь: $line - это массив полей текущей строки, т.к. строки в той таблице, где работает это вычисление, поэтому таблицу указывать не нужно.
...Я вот только не понимаю одного здесь, как в условии выборки полю f3450 будет присвоен выбранный в Заказчике Город и полю f4690 - выбранная в Заказчике услуга? Например f3450 = Барнаул, а f4690 = Ремонт компьютеров.

Цитата

Почему у вас в условии поле ФИО исполнителя (f3460) приравнено к $line['ID']? Что вы хотели этим сказать?

а как правильно будет?

Цитата

Затем у вас должен быть запрос на обновление этой записи, с изменением значения флага на 1, и в следующий раз эта запись уже не попадет в первый запрос.

Так нам же нужно еще и имеющийся уже флаг=1 (значит нужно его как то найти до этого) перезаписать на флаг=0, а так постепенно всем флаг=1 будет присвоен и выбирать некого будет)



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

Отправлено от All_ex74 в 05 Июнь 2014 - 13:31 in Как это сделать

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

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


				
			</div>
		</div>
	</div>
	<br />
</div>
<hr />
<br />

		

			
	<!--Begin Msg Number 24249-->
<div class=

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

Отправлено от All_ex74 в 09 Июнь 2014 - 13:31 in Как это сделать

Я всё исправил:

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



всё заработало, но почему то Флаг=1 проставляется всей выборке:


				
			</div>
		</div>
	</div>
	<br />
</div>
<hr />
<br />

		

			
	<!--Begin Msg Number 24161-->
<div class=

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

Отправлено от All_ex74 в 05 Июнь 2014 - 15:10 in Как это сделать

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

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

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

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

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



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

Отправлено от All_ex74 в 12 Июнь 2014 - 13:12 in Как это сделать

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

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

Перенес "запрет" ниже выборки - ничего не поменялось, как копировалось по две записи даже при отсутствии результата в выборке, так и осталось. Залез в базу, посмотрел в таблицу cb_calc - все в порядке, код такой же:

if ($line['Состояние'] == "Связана")
{
		$zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$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']);
						$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, "Заявки");
				data_update(240, array('f6130'=>1), "id=",$row['id']);
		}

		sendsms("Вами была сформирована заявка &#8470;".$zvka['ID']." на услугу ".$line['Связана по услуге']['ID'].". Ожидайте ответа.", $line['Телефон'], "ENU");
}


2. Мало того СМС, пришли скопом (проблема была не в коде, а со стороны агрегатора) и на каждую отправку тоже по две штуки...



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

Отправлено от All_ex74 в 05 Июнь 2014 - 15:39 in Как это сделать

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

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

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

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

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

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

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



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

Отправлено от All_ex74 в 07 Июнь 2014 - 18:05 in Как это сделать

1. Вставил запрос на обновление флага (Флаг=1), но сейчас обновляется поле у всех выбранных строк, а как сделать, чтобы менялся только у первой записи из выбранных запросом?

2. Как правильно назначить переменной $isp значение поля ФИО т. Исполнители, что бы потом скопировать его в поле Исполнитель т. Заявки??

3. И по синтаксису общего запроса на выборку проверьте пож. - я не накосячил? Да и ошибок вроде нет, но всё равно не копируется Исполнитель в Заявку:

if ($line['Состояние'] == "Связана")
{
				$row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
				$isp = $row['f3460'];  // у меня не получается назначить переменной значение поля ФИО, где f3460 - поле ФИО т. Исполнители.
				$flag = $row['f6130'];
				data_update(240, array($flag=>1), "`status`=0 and `f6130`='0'"); // запрос на обновление флага добавил, но теперь выводит ошибку, что такого поля нет.

				$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']);
				if (!$zvka)
				{
								   $zvka['Город'] = $line['Город']['ID'];
								   $zvka['Заказчик'] = $line['ID'];
								   $zvka['Тип услуги'] = $line['Связана по услуге']['ID'];
								   $zvka['Исполнитель'] = $isp['ID']; // тут пытаюсь копировать...
								   $zvka['ID'] = insert_query($zvka, "Заявки");
				}
}


Ошибка на работу вычисления:

				
			</div>
		</div>
	</div>
	<br />
</div>
<hr />
<br />

		

			
	<!--Begin Msg Number 24165-->
<div class=

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

Отправлено от All_ex74 в 05 Июнь 2014 - 16:27 in Как это сделать

Просмотр сообщения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-меню внешним запросом к базе) свой статус Карточка - Связана на Карточка - Свободна, он не должен участвовать в выбираемом списке...



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

Отправлено от All_ex74 в 09 Июнь 2014 - 15:22 in Как это сделать

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

Ну и? заработало как надо?

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

if ($line['Состояние'] == "Связана")
{
		$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']); // тут в условии запроса нужно как то указать, чтобы проверялись только активные..
		if (!$zvka)
		{
				$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, "Заявки");
				data_update(240, array('f6130'=>1), "id=",$row['id']);
		}
}



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

Отправлено от All_ex74 в 05 Июнь 2014 - 17:35 in Как это сделать

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

Тогда в чем проблема то, не понимаю? Делаете стандартный запрос в таблицу Исполнителей с выбранным Типом услуги и параметром Карточка = "Свободна" и выбираете первую запись. Если нужно проверить, брался ли уже этот исполнитель для заявки, делаете еще один запрос, но уже в таблицу заявок. Если он там есть и еще не освободился - берете вторую запись из первого запроса, и т.д.

Так вот с данным вычислением я и затрудняюсь) можете привести пример? Думаю, вас это не затруднит как меня)

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

Я то думал у вас реально проблема из-за невозможности фильтрации...

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

Вход в Клиентскую Базу

логин: admin
пароль: gkihyA4TZFYJ



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

Отправлено от All_ex74 в 06 Июнь 2014 - 10:30 in Как это сделать

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

Вы же вроде умеете делать запросы? Поищите на форуме data_table или data_select.

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

Что то вроде этого запроса?:


$res = data_select(240, "status=0 AND f4690=",$line['Сфера услуг']); // где 240 - id таб. Исполнители, а f4690 - id поля Сфера услуг
$row = sql_fetch_array($res);
$isp = $row['id'];


Цитата

Делаете стандартный запрос в таблицу Исполнителей с выбранным Типом услуги и параметром Карточка = "Свободна" и выбираете первую запись.

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

Цитата

Если нужно проверить, брался ли уже этот исполнитель для заявки, делаете еще один запрос, но уже в таблицу заявок. Если он там есть и еще не освободился - берете вторую запись из первого запроса, и т.д.

Мне нужно выбирать не просто Свободного Исполнителя, а всегда Следующего Свободного (с Карточка = Свободна) по списку...
У нас Исполнители - это исполнители бытовых услуг, организации которые платят за нахождение в базе. Им будет обидно, что заявки будут уходить не всем по очереди)
Но как запоминать, что данный Исполнитель уже брался? Наверное поле Флаг в таблице Исполнитель нужно какое то добавить и писать туда 1 при выборе Исполнителя_1, при следующем выборе искать поле Флаг = 1 и выбирать следующего за ним Исполнителя_2 с полем Флаг = 0, затем Исполнителю_1 переписывать поле Флаг в = 0, а Исполнителю_2 поле Флаг = 1, и так далее, простым перебором по циклу, по очереди подставлять значение полю Исполнитель данным запросом.

Но логику то я понять могу, а вот выразить кодом никак, нужна ваша помощь! Думаю, данная логика будет полезна многим на этом форуме. Помогите пожалуйста...



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

Отправлено от All_ex74 в 21 Май 2014 - 08:14 in Как это сделать

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

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

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

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


				
			</div>
		</div>
	</div>
	<br />
</div>
<hr />
<br />

		

			
	<!--Begin Msg Number 24185-->
<div class=

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

Отправлено от All_ex74 в 06 Июнь 2014 - 11:34 in Как это сделать

Цитата

Зачем вам сейчас то фильтрация по нему, если все равно выбор идет через запрос с фиксированным значением поля Карточка? Уберите это поле просто, оно лишнее в этой ситуации.

1. Согласен, что ненужно. Когда создается Заявка, либо внешним запросом, либо оператором КБ, поля в ней уже должны быть заполнены и Исполнитель назначен - ТАК ДОЛЖНО БЫТЬ В ИДЕАЛЕ. Но пока шел к этому пониманию - понагородил лес...

Цитата

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

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

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

Цитата

Если же вернуть, проблемы никакой нет, добавляете просто в условие запроса эти поля, аналогично вашему же примеру выше (только не понял, почему там $line['Сфера услуг'], тогда как в заявке "Тип услуг", плюс к полям связи надо добавлять ['ID'], т.е. $line['Тип услуг']['ID'])

3. Я как понял, можно в это же вычисление добавить и весь запрос и сразу же в нём скопировать в поле Исполнитель нужное значение?

Цитата

Я же пояснил - для проверки делаете второй запрос уже к таблице Заявки и смотрите, используется там этот Исполнитель, или еще нет. Зачем для этого флаги городить?

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

Я добавлю нужное поле в таб. Исполнители за 1 минуту, вы мне только с вычислением помогите...



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

Отправлено от All_ex74 в 07 Июнь 2014 - 16:49 in Как это сделать

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

		$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']); // запрет на вторичное размещение - заявка будет размещаться, как вручную оператором, так и внешним запросом...
		if (!$zvka)
		{
				   $zvka['Город'] = $line['Город']['ID'];
				   $zvka['Заказчик'] = $line['ID'];
				   $zvka['Тип услуги'] = $line['Связана по услуге'];
				   $zvka['Исполнитель'] = $isp; // а как тут то быть? как отсортировать с массива нужного исполнителя?
				   $zvka['ID'] = insert_query($zvka, "Заявки");
		}
}





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

Отправлено от All_ex74 в 06 Июнь 2014 - 12:27 in Как это сделать

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

2. Да, конечно. Откатить везде.
3. Да, действительно, если сейчас выходит что никакого исполнителя в Заявке вручную выбирать не нужно, то логично его заполнять сразу в вычислении по созданию Заявки.
4. Я так и понял вас изначально, однако вы подчеркнули, что прежний исполнитель может освободится от заявки (или не от заявки?), поэтому и предложил проверять по заявкам. Теперь же вы пишите про "никогда"... В таком случае естественно остается только поле-флаг, которое нужно учитывать при запросе к Исполнителям, и заполнять после его выбора.

Вот и я про то же)

Так все же, если верну:

у т. Заказчики
поле Город связано с т. Города (Справочник)
поле Тип услуги связано с т. Виды услуг (Справочник)

а у т. Заявки
поле Город связано с т. Города (Справочник)
поле Тип услуги связано с т. Виды услуг (Справочник)
поле Исполнитель связано с т. Исполнители

и у т. Исполнители

имеется поле Флаг (текст, 0 или 1)
поле Карточка (список) - Свободна, Связана, Неактивна, Заблокирована

при условии этих двух вычислений (одно срабатывает при выборе типа услуги в поле Связана по услуге и запускает второе, которое создаёт Заявку и копирует в неё нужные поля):

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

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



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

Отправлено от All_ex74 в 09 Июнь 2014 - 12:23 in Как это сделать

Какой Вы молодец все таки! Спасибо большое за терпение к таким "специалистам" как я. Сейчас быстренько всё поменяю и продолжу...



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

Отправлено от All_ex74 в 06 Июнь 2014 - 12:35 in Как это сделать

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

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

Я заплачу, не вопрос, но только не отсылайте к менеджерам - это такое БОЛОТО! Вы в тысячу раз быстрее реагируете на вопрос.



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

Отправлено от All_ex74 в 09 Июнь 2014 - 15:00 in Как это сделать

Вычисление стоит на событие - изменение поля, сохранение в таблице. Ведь у нас добавляться заявки будут не только диспетчерами, но и внешними запросами - автоматически... Да, спасибо. Я уже увидел изменения и добавил их...



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

Отправлено от All_ex74 в 07 Июнь 2014 - 09:53 in Как это сделать

1. Здравствуйте, ломал до пол ночи голову над запросом, вернул как было раньше и удалил поле карточка из т. Заявки, добавил поле Флаг в т. Исполнители и сделал его скрытым для просмотра.
Напомню, что необходимо было сделать выборку строк из т. Исполнители по условиям (отфильтровать, согласно значениям полей при создании Заявки).
Вот что получилось:

if ($line['Состояние'] == "Связана")
{
  $zkzch = data_table("Заказчики","id=$ID");
  $zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$zkzch['ID']);

  $result = data_select(240, "`status`=0 AND `f3450`=", $line['Заказчики']['Город']['ID'], " AND `f4690`=", $line['Заказчики']['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f3460`=", $line['ID'], " ORDER BY `f6130` ASC LIMIT 1");
  $row = sql_fetch_assoc($result); // извлекаем возвращенную запросом строку в массив $row
  $isp = $row['f3460']; // тут присваиваем значение переменной

  // делаем выборку строк по условию, где 240 - ID таблицы Исполнители, status=0 - активные записи
  // f3450 - поле Город в т. Исполнители, связь с т. Города (Справочники) равно $line['Заказчики']['Город']['ID'] - ID поля Город т. Заказчики, связь с т. Города (Справочники)
  // f4690 - поле Сфера услуг в т. Исполнители, связь с т. Виды услуг (Справочники) равно $line['Заказчики']['Связана по услуге']['ID'] - ID поля Связана по услуге т. Заказчики, связь с т. Города (Справочники)
  // f3530 - поле Карточка в т. Исполнители, поле типа СПИСОК равно требуемому значению - Свободна
  // f3460 - поле ФИО т. Исполнители, тип поля ТЕКСТ - (собственно, его и нужно отфильтровывать и скопировать в поле Исполнитель т. Заявки)
  // f6130 - поле Флаг в т. Исполнители, поле типа текст со значениями 1 или 0

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


...в итоге нихрена не получилось), при выполнении данного вычисления Заявка создаётся, а Исполнитель не назначается. Что я не так сделал?

2. Чувствую, что с флагом я накосячил. Не по флагу нужно наверное сортировать, ведь значения 1 может и не быть во всей таблице. Как то нужно еще проверять, есть ли в выборке по данным условиям флаг с 1-й, если нет, то назначить его первому в списке (допустим по ID записи), а можно поставить на убывание и брать первый в выборке: ORDER BY f6130 DESC LIMIT 1, тогда выбран будет самый последний и если как то постоянно перезаписывать - 1 следующему, то всё срастается.
проверьте пожалуйста на ошибки, да буду дальше кумекать)



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

Отправлено от All_ex74 в 10 Июнь 2014 - 19:04 in Как это сделать

Погонял немного и обнаружился "интересный" косяк - если по условиям выборки строки отсутствуют, то заявка скопируется всегда 2 раза... Подскажите, как исправить...

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



				
			</div>
		</div>
	</div>
	<br />
</div>
<hr />
<br />

		

			
	<!--Begin Msg Number 24216-->
<div class=

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

Отправлено от All_ex74 в 07 Июнь 2014 - 15:45 in Как это сделать

Цитата

$line['Заказчики']['Город']['ID'] - это что? Поле Город в таблице Заказчики что ли? В переменной $line нет имен таблиц! Это массив полей текущей строки, в данном случае в таблице Заказчики, поэтому указывать таблицу в $line не нужно!

1. а если не указать таблицу, то как тогда присвоить нужные значения полям для фильтрации при выборке?
2. И как назначить первую запись из выбранного массива (по значениям состояния полей) и не повторить выбор уже использованной до этого? Может всё таки нужна сортировка?

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

		$zvka = data_table("Заявки","`status`<>'2' AND `Заказчик`=".$line['ID']);
		if (!$zvka)
		{
                   $zvka['Город'] = $line['Город']['ID'];
                   $zvka['Заказчик'] = $line['ID'];
                   $zvka['Тип услуги'] = $line['Связана по услуге'];
                   $zvka['Исполнитель'] = $isp; // а как тут то быть? как отсортировать с массива нужного исполнителя?
                   $zvka['ID'] = insert_query($zvka, "Заявки");
		}
}





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

Отправлено от All_ex74 в 11 Июнь 2014 - 14:01 in Как это сделать

Но копируется дважды, если не выбрано ничего. На скрине же видно, сам удивился.
1. Нужно как то добавить запрет на копирование вовсе, если выборка по условиям пуста...

if ($line['Состояние'] == "Связана")
{
	    $zvka = data_table("Заявки","`status`<>'2' AND `Статус`='Исполняемая' AND `Заказчик`=".$line['ID']);
	    if (!$zvka)
	    {
			    $row = data_select_array(240, "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID'], " AND `f3530`='Свободна' AND `f6130`='0'");
			    if (!$row)
			    {
					    data_update(240, array('f6130'=>0), "`status`=0 AND `f3450`=", $line['Город']['ID'], " AND `f4690`=", $line['Связана по услуге']['ID']);
					    $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, "Заявки");
			    data_update(240, array('f6130'=>1), "id=",$row['id']);
	    }
	   
	    sendsms("Вами была сформирована заявка №".$zvka['ID']." на услугу ".$line['Связана по услуге']['ID'].". Ожидайте ответа.", $line['Телефон'], "ENU");
}


2. Добавил отправку СМС, но что то не отправляет. Хотя в базе данных код отрабатывается... выложу код модуля шлюза - проверьте пожалуйста:

function send_sms() {
 
  global $sms;
  $user = "abc@yagool.ru";
  $password = "5BQY5mvklwNX";
  $phone = $sms["phone"];
  $sender = "ENU";
  $text = $sms["text"];
  $translit = array(
					    "А"=>"A","Б"=>"B","В"=>"V","Г"=>"G",
					    "Д"=>"D","Е"=>"E","Ж"=>"J","З"=>"Z","И"=>"I",
					    "Й"=>"Y","К"=>"K","Л"=>"L","М"=>"M","Н"=>"N",
					    "О"=>"O","П"=>"P","Р"=>"R","С"=>"S","Т"=>"T",
					    "У"=>"U","Ф"=>"F","Х"=>"H","Ц"=>"TS","Ч"=>"CH",
					    "Ш"=>"SH","Щ"=>"SCH","Ъ"=>"","Ы"=>"YI","Ь"=>"",
					    "Э"=>"E","Ю"=>"YU","Я"=>"YA","а"=>"a","б"=>"b",
					    "в"=>"v","г"=>"g","д"=>"d","е"=>"e","ж"=>"j",
					    "з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l",
					    "м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r",
					    "с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h",
					    "ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"sch","ъ"=>"y",
					    "ы"=>"yi","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya"	
				    );
  $text_tran = strtr($text, $translit);
  $message = $text_tran;
  if (file_get_contents('http://gate.smsaero.ru/send/?user='.$user.'&password='.md5($password).'&to='.$phone.'&from='.$sender.'&text='.urlencode($message))) {
	
  return 'OK';
    }
  else {
 
	 return 'ERROR';
    }
}


Заполнено вроде верно - что за хрень такая!..



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

Отправлено от All_ex74 в 07 Июнь 2014 - 16:12 in Как это сделать

Обновитесь, только что добавил...



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

Отправлено от All_ex74 в 13 Июнь 2014 - 10:42 in Как это сделать

Вопрос снят в этой теме - создана отдельная...