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


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


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

#1 Valerii

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

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

Отправлено 26 Май 2017 - 16:02

Есть таблица и подтаблица.


В таблице есть поле статус: Принято, В работе, Исполнено

В подтаблице тоже есть поле статус.


Как реализовать так, что бы при каждой смене статуса в подтаблице при добавлении записи менялся статус в основной таблице?

Возможно ли это реализовать?

#2 CbCoder

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

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

Отправлено 26 Май 2017 - 18:00

$line['поле связи с основной']['Статус'] = $line['Статус'];

#3 Valerii

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

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

Отправлено 29 Май 2017 - 13:51

Просмотр сообщенияCbCoder (26 Май 2017 - 18:00) писал:

$line['поле связи с основной']['Статус'] = $line['Статус'];

Подскажите, где именно прописать? В поле статус основной таблицы или в поле статус подтаблицы?

Поле статус основной таблиц выбрать текст?

---------------------------------------------------------------------

Поле статус основной таблицы выбрал текст. В конструкторе вставил вычисление ниже.


Название подтаблицы "Работа по заявке" - тип список


В конструкторе основной таблицы прописал следующее:



$line['Работа по заявке']['Статус выполнения'] = $line['Статус']



Получил ошибку:


Error generated:
/var/www/u111111111111/data/www/mysite.ru/include/functions1.php(563) : data_update()
/var/www/u111111111111/data/www/www/mysite.ru/include/functions1.php(647) : form_event_recurs()
/var/www/u111111111111data/www/www/mysite.ru/fields.php(2185) : calc_line()
Ошибка SQL запроса:
UPDATE cb_data250 SET Работа по заявке='' WHERE id=2
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'по заявке='' WHERE id=2' at line 1




Вот это пример рассматриваемый Вами тоже подходит, только не понял где именно прописать?

Ссылка на тему: https://clientbase.r...?showtopic=7586

Сообщение отредактировал Valerii: 29 Май 2017 - 17:12


#4 CbCoder

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

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

Отправлено 30 Май 2017 - 10:18

Разумеется прописывать надо в вычислении подтаблицы, там же к коде указано поле связи с основной, которое есть только в подтаблице. Узнать имя этого поля можно в настройках таблицы "Работа по заявке", например если это стандартная конфигурация то его имя "Заявка №", т.е. код будет $line['Заявка №']['Статус'] = $line['Статус выполнения']; Никаких имен таблиц там не используется, не придумывайте того чего я не писал.

#5 Valerii

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

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

Отправлено 31 Май 2017 - 09:22

Прописал данное выражение в конструкторе поля Статус выполнения в подтаблице, получил ошибку.


Ошибка системы.

Error generated:
/var/www/u1111111/data/www/mysite.ru/include/functions1.php(563) : data_update()
/var/www/u1111111/data/www/mysite.ru/include/functions1.php(647) : form_event_recurs()
/var/www/u1111111/data/www/mysite.ru/view_line2.php(2957) : calc_line()
Ошибка SQL запроса:
UPDATE cb_data260 SET Работа по заявке='' WHERE id=2
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'по заявке='' WHERE id=2' at line 1

Сообщение отредактировал Valerii: 31 Май 2017 - 11:02


#6 CbCoder

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

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

Отправлено 31 Май 2017 - 11:05

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

#7 Valerii

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

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

Отправлено 31 Май 2017 - 13:52

Просмотр сообщенияCbCoder (31 Май 2017 - 11:05) писал:

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

Так это своя таблица. Новая.

Написал в техподдержку. Не помогли. Сказали пишите на форум, хотя и доступ давал :))))

В основной таблице есть поле "Статус", тип ставлю текст.

Далее в связанной подтаблице с названием "Работа по заявке" создаю поле с названием "Стасус выполнения". Тип ставлю список и прописываю статусы Принято, Исполнено.

Далее в конструкторе вычислений в поле "Статус выполнения", в подтаблице "Работа по заявке" пишу вот это выражение:

$line['Работа по заявке']['Статус выполнения'] = $line['Статус']



Далее ставлю условие изменение поля статус выполнения.

В итоге ничего не происходит.

Если поставить условие отображение, то происходит ошибка описаная выше.

------------------------------------------------

Результат я хотел бы получить следующий, что бы при каждом изменении статус в подтаблице изменялся статус в основной таблице. Точнее получается по последней записи.
Поэтому и обратил внимание на эту тему с Вашим ответом. Может этот код как то поможет.



					
					<br />
					<p class= Сообщение отредактировал Valerii: 31 Май 2017 - 14:32


#8 CbCoder

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

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

Отправлено 31 Май 2017 - 15:11

Вы издеваетесь что ли :blink: Я же вам 2 раза написал: никаких имен таблиц, вроде "Работа по заявке", там быть не должно. А вы упорно продолжаете его писать :wacko:

Прочитайте еще раз внимательно:

Просмотр сообщенияCbCoder (30 Май 2017 - 10:18) писал:

Разумеется прописывать надо в вычислении подтаблицы, там же к коде указано поле связи с основной, которое есть только в подтаблице. Узнать имя этого поля можно в настройках таблицы "Работа по заявке", например если это стандартная конфигурация то его имя "Заявка №", т.е. код будет $line['Заявка №']['Статус'] = $line['Статус выполнения']; Никаких имен таблиц там не используется, не придумывайте того чего я не писал.

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

Еще раз код повторю: $line['поле связи с основной']['Статус'] = $line['Статус выполнения']; От вас нужно только поле связи и всё.

#9 maksn

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

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 31 Май 2017 - 15:17

Просмотр сообщенияValerii (31 Май 2017 - 13:52) писал:

Результат я хотел бы получить следующий, что бы при каждом изменении статус в подтаблице изменялся статус в основной таблице. Точнее получается по последней записи.


Обойдитесь без редактора. Он Вам не поможет. Откройте вычисление и вставьте туда этот код. Предварительно заменив XXX YYY ZZZ на соответствующие числовые значения. Цифры 999999 замените на ID Подтаблицы
/*****************Обозначения, принятые в коде
* fXXX - поле "Статус" в таблице основной таблице
* fYYY - поле связи подтаблицы с основной
* fZZZ поле "Статус" в подтаблице
* символы XXX YYY XXX - это ID соответствующих полей. Смотим их в настройках
* Вы хотите чтобы при изменении поля "Статус" в ПОСЛЕДНЕЙ записи подтаблицы
* присваивался полю "статус" в Основной
* Для этого сначала нужно проверить, а явлляется ли редактируемая запись подтаблицы
* последней. Если да, то выполняем код
* ******************************************/
$linked_id = $line['id'];//Это ID записи редактируемой в Подтаблице
$main_id = $line['fYYY']['id'];// Это ID записи в Основной таблице

/********Найдем последнюю в подтаблице**********/
$sql_max = "
SELECT MAX(id) as max_id FROM `".DATA_TABLE."999999`
WHERE `fYYY` = ".$main_id."
AND `status`=0  /****Исключим удаленные****/
";
$res_max=sql_query($sql_max);
while($row_max=sql_fetch_assoc($res_max))	
  $max_linked_id = intval($row_max['max_id']);

if($linked_id == $max_linked_id)//Наша редактируемая и есть последняя запись
{//Присвоим значение Статуса Основной таблице
  $line['fYYY']['fXXX'] = $line['fZZZ'];
}  

Сообщение отредактировал maksn: 31 Май 2017 - 15:57

"...Сижу, паяю. CRM починяю..."
Мои разработки

#10 Valerii

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

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

Отправлено 31 Май 2017 - 16:15

Просмотр сообщенияCbCoder (31 Май 2017 - 15:11) писал:

Вы издеваетесь что ли :blink: Я же вам 2 раза написал: никаких имен таблиц, вроде "Работа по заявке", там быть не должно. А вы упорно продолжаете его писать :wacko:

Прочитайте еще раз внимательно:



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

Еще раз код повторю: $line['поле связи с основной']['Статус'] = $line['Статус выполнения']; От вас нужно только поле связи и всё.



					
					<br />
					
				</div>
				
<script type= ipb.global.registerReputation( 'rep_post_33305', { domLikeStripId: 'like_post_33305', app: 'forums', type: 'pid', typeid: '33305' }, parseInt('0') );

#11 Valerii

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

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

Отправлено 31 Май 2017 - 16:28

Просмотр сообщенияmaksn (31 Май 2017 - 15:17) писал:

Обойдитесь без редактора. Он Вам не поможет. Откройте вычисление и вставьте туда этот код. Предварительно заменив XXX YYY ZZZ на соответствующие числовые значения. Цифры 999999 замените на ID Подтаблицы
/*****************Обозначения, принятые в коде
* fXXX - поле "Статус" в таблице основной таблице
* fYYY - поле связи подтаблицы с основной
* fZZZ поле "Статус" в подтаблице
* символы XXX YYY XXX - это ID соответствующих полей. Смотим их в настройках
* Вы хотите чтобы при изменении поля "Статус" в ПОСЛЕДНЕЙ записи подтаблицы
* присваивался полю "статус" в Основной
* Для этого сначала нужно проверить, а явлляется ли редактируемая запись подтаблицы
* последней. Если да, то выполняем код
* ******************************************/
$linked_id = $line['id'];//Это ID записи редактируемой в Подтаблице
$main_id = $line['fYYY']['id'];// Это ID записи в Основной таблице

/********Найдем последнюю в подтаблице**********/
$sql_max = "
SELECT MAX(id) as max_id FROM `".DATA_TABLE."999999`
WHERE `fYYY` = ".$main_id."
AND `status`=0  /****Исключим удаленные****/
";
$res_max=sql_query($sql_max);
while($row_max=sql_fetch_assoc($res_max))	
  $max_linked_id = intval($row_max['max_id']);

if($linked_id == $max_linked_id)//Наша редактируемая и есть последняя запись
{//Присвоим значение Статуса Основной таблице
  $line['fYYY']['fXXX'] = $line['fZZZ'];
}  


Спасибо огромное Вам!!!! Всё работает просто замечательно!!!!


Спасибо, благодарю, СПАСИБО!!!!

#12 CbCoder

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

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

Отправлено 31 Май 2017 - 17:14

Просмотр сообщенияValerii (31 Май 2017 - 16:15) писал:


#13 maksn

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

  • Пользователи
  • PipPipPip
  • 314 сообщений
  • Пол:Мужчина

Отправлено 31 Май 2017 - 18:22

Просмотр сообщенияCbCoder (31 Май 2017 - 17:14) писал:


Вариант maksn я не проверял, но даже если он верный, то излишне сложен, имхо. Мой гораздо проще.
А вы обратили внимание на то, что статус именно последней записи должен менять статус в основной таблице?
Без учета этого условия ваш вариант подойдет. Но если нужно, чтобы статус менялся при редактировании именно последней записи, то нет.

Сообщение отредактировал maksn: 31 Май 2017 - 18:23

"...Сижу, паяю. CRM починяю..."
Мои разработки

#14 CbCoder

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

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

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

Просмотр сообщенияmaksn (31 Май 2017 - 18:22) писал:

А вы обратили внимание на то, что статус именно последней записи должен менять статус в основной таблице?
Без учета этого условия ваш вариант подойдет. Но если нужно, чтобы статус менялся при редактировании именно последней записи, то нет.

В словах автора темы этого не увидел, но возможно это подразумевалось, спорить не буду.





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

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