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


Вычисление на добавление записи


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

#1 TelecomMedia

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

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

Отправлено 19 Февраль 2016 - 13:18

Как в данном вычислении можно ограничить создание новой записи $new_id_zad4 только 1 раз?
Сейчас каждый раз при нажатии на доп действие добавляется новая запись.
Попробовал использовать $event, но ситуация не поменялась.





if ($line['Задача из списка']['Задача'] == 'Получение и согласование контента' AND $line['Статус'] == 'Выполнено')
{
$zad5['Клиент'] = $line['ID']; 
$zad5['Задача из списка'] = '8';
$new_id_zad5 = insert_query($zad5, "ЗАДАЧИ ПРОЕКТА");
}


if ($event['is_new_line'] != 1)
{
if ($line['Задача из списка']['Задача'] == 'Запрос информации' AND $line['Статус'] == 'Выполнено')
{

// Задача 4. Получение и согласование контента
$zad4['Клиент'] = $line['Клиент']['ID']; 
$zad4['Задача из списка'] = '4';
$new_id_zad4 = insert_query($zad4, "ЗАДАЧИ ПРОЕКТА");
}
}

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

$result = data_select_field(1000, "f23261 as cnt_rec", "  AND status=0 AND f23251=",$line['Клиент']['raw']);
$row = sql_fetch_assoc($result);

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

#2 CbCoder

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

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

Отправлено 19 Февраль 2016 - 14:53

$event['is_new_line'] к ситуации абсолютно никакого отношения не имеет. Это во-первых, во-вторых что не так с полем связи, не совсем понял? Какая именно проверка нужна?

#3 TelecomMedia

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

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

Отправлено 19 Февраль 2016 - 16:58

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

$result = data_select_field(921, "count(f38200) as cnt_rec","status=0 AND f37690='Получение и согласование контента' AND f24941=",$line['Клиент']['raw']);
$row = sql_fetch_assoc($result);
$line['тест'] = $row['cnt_rec'];

Сообщение отредактировал fabrika-r: 19 Февраль 2016 - 16:59


#4 CbCoder

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

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

Отправлено 19 Февраль 2016 - 17:08

В поле связи хранится ID связанной записи, соответственно его и нужно подставлять, вместо текста.

#5 TelecomMedia

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

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

Отправлено 19 Февраль 2016 - 17:17

:rolleyes:

Спасибо!!!

#6 TelecomMedia

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

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

Отправлено 20 Февраль 2016 - 11:00

Еще 1 вопрос: При выполнении подзадач в проекте (а именно последней добавленной) создается новая задача. Вычисление срабатывает на изменение поля. Записи добавляются в ту же таблицу, откуда происходит вычисление.
Проблема в том, что я вроде как реализовал механизм проверки на наличие записи с каким-то конкретным значением и если такая запись присутствует - новая задача не должна добавляться. Такой алгоритм работает в других таблицах. Но здесь столкнулся с тем ,что вычисление срабатывает каждый раз при смене значения. Например, если поставить статус "Выполнено", а потом поменять его "На в работе", а затем опять на "Выполнено", то запись создастся несколько раз.

// Считаем сколько записей по задаче: Установка CMS, Главной страницы id=10
$result3 = data_select_field(921, "count(f38200) as cnt_rec3","status=0 AND f37690='10' AND f24941=",$line['Клиент']['raw']);
$row3 = sql_fetch_assoc($result3);


if ($line['Задача из списка']['Задача'] == 'Площадка и привязка домена' AND $line['Статус'] == 'Выполнено') // Если видим, что предыдущая задача выполнена, то:
{
if ($row3['cnt_rec3'] == '0'); // Если видим, что задача "Установка CMS, Главной страницы" еще не создавалась по этому клиенту, то:
{
// Задача 6. Установка CMS, Главной страницы
$zad6['Клиент'] = $line['Клиент']['ID']; 
$zad6['Задача из списка'] = '10';
$zad6['Исполнитель'] = '321';
$zad6['Дата начала'] = date ("Y-m-d");
$zad6['Срок'] = date ("Y-m-d H:i:s", time() + 60*60*24*1);
$new_id_zad6 = insert_query($zad6, "ЗАДАЧИ ПРОЕКТА");
}
}


#7 CbCoder

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

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

Отправлено 20 Февраль 2016 - 11:08

Значит проверка у вас неправильная. Как бы сделал я: при создании задачи заполнял бы поле связи с подзадачей проекта. А соответственно перед ее созданием смотрел, есть ли уже такая запись в таблице задач (т.е. та, где поле связи с подзадачей равно текущей подзадаче)

Т.е. общий алгоритм создания связанной записи такой:
1. В таблице, куда добавляем, должно быть поле связи с текущей таблицей.
2. Перед добавлением смотрим, есть ли уже в той таблице запись с полем связи, равным id текущей записи
3. Если еще нет, добавляем запись, при этом заполняем поле связи.

#8 TelecomMedia

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

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

Отправлено 20 Февраль 2016 - 11:14

Дело в том, что запись добавляется в ту же таблицу, где происходит вычисление.
Сам подсчет записей со значениями идет верно, в вычисление добавил тестовое поле куда записывается $row3['cnt_rec3']

Сообщение отредактировал TelecomMedia: 20 Февраль 2016 - 11:22


#9 CbCoder

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

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

Отправлено 20 Февраль 2016 - 15:46

Цитата

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

Это вообще не имеет никакого значения. Поле связи может указывать на ту же самую таблицу, алгоритм никак не меняется от этого.

#10 TelecomMedia

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

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

Отправлено 23 Февраль 2016 - 21:19

Спасибо, сделал как вы посоветовали, все работает





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

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