- Форум CRM программы Клиентская база
- → Публикации Oleg
Публикации Oleg
7 публикаций создано Oleg (учитываются публикации только с 19-Май 23)
#31885 Копирование данных между таблицами
Отправлено от Oleg в 29 Август 2016 - 16:31 in Как это сделать
Есть 2 таблица: Травмированные и Клиенты. Нужно ,чтобы при смене поля на определённый статус из списка(поле типа со списком) в таблице Клиенты, в Таблице Травмированные автоматически появлялась ссылка(в идеале) на данного клиента в определенном поле или хотя бы заполнялась строка в таблице травмированные с ФИО записи,где меняется статус. Буду очень благодарен.
#31890 Копирование данных между таблицами
Отправлено от Oleg в 30 Август 2016 - 17:49 in Как это сделать
if (($line['Кем приходится травмированному'] == "Матерью") { $data['Мать'] = $line['Фамилия'] && $line['Имя'] && $line['Отчество']; insert_query($data,"Травмированные","'id'=$ID"); update_query($data,"Травмированные","'id'=$ID"); } elseif($line['Кем приходится травмированному'] == "Отцом") { $data['Отец'] = $line['Фамилия']; insert_query($data,"Травмированные","`id`=ID"); update_query($data,"Травмированные","`id`=ID"); }Создает в таблице новую запись и добавляет Фамилию всем записям в данной таблице а не конкретной.
Как добиться того,чтобы не создавал новую запись,а просто добавлял в определенную строку в уже существующей записи. При этом запись из таблицы Травмированные связана с другим полем из таблица Клиенты. Вычисление сохранено в таблице Клиенты
http://storage1.stat..._c5cb38a994.png
http://storage1.stat..._4ef0ba50ba.png
#31893 Копирование данных между таблицами
Отправлено от Oleg в 31 Август 2016 - 11:59 in Как это сделать
А возможно ли сделать так,чтобы эти данные(ФИО) которые копируются при сохранении были как ссылки на клиентов из карточки таблицы " Травмированные" ?
Буду очень благодарен.
#31895 Копирование данных между таблицами
Отправлено от Oleg в 31 Август 2016 - 15:11 in Как это сделать
Необходимость такая : например,ставишь в поле со списком: пол - м,и в этой же записи в другом поле со списком отображаются для выбора только список из родственников,принадлежащих женскому полу(мать,жена и т.п.).
#31910 Копирование данных между таблицами
Отправлено от Oleg в 05 Сентябрь 2016 - 21:29 in Как это сделать
CbCoder (31 Август 2016 - 16:08) писал:
#31916 Копирование данных между таблицами
Отправлено от Oleg в 06 Сентябрь 2016 - 18:05 in Как это сделать
Хотел ещё спросить возможно ли такое или нет : решение проблемы,которое вы мне подсказали 31 августа(ссылка на родственника((написанный вами код в этой теме чуть выше)) ; бывает такое,что в семье несколько,например,братьев,и тогда в таблице " Родственники" если выбираешь два человека со статусом Брат,то сохраняется в ссылке у травмированного последний сохранённый,а первый пропадает. Возможно ли,чтобы просто появлялась вторая запись со ссылкой напротив Родственника в таблице " Травмированный" или нет? Я пока решил проблему так: просто создал дополнительные статусы : Брат2,Сестра 3 и Внук 4 и т.п.
#31952 Представление Воронка
Отправлено от Oleg в 14 Сентябрь 2016 - 22:40 in Как это сделать
if ($event['type'] == 'delete') { $deleteCond = " AND id<>" . $ID; } if (!$line['Тип клиента']) { $line['Тип клиента'] = $line['Клиент']['Тип']; } // значение при добавлении позиции $line['Текущий тип клиента'] = $line['Клиент']['Тип']; if ($line['Тип клиента'] == "Клиент") { if (!$line['Статус до']) { $line['Статус до'] = $line['Клиент']['Статус']; } if (!$line['Статус']) { $line['Статус'] = $line['Статус до']; } } /* Цель: находим сколько времени контрагент сидел в каждом статусе */ if ($line['Клиент']['raw']) { // статусы $result = sql_select_field(FIELDS_TABLE, "type_value", "id=", 530); $row = sql_fetch_assoc($result); $statusArray = explode("\r\n", $row['type_value']); $timeDiff = array(); foreach ($statusArray as $status) { $timeDiff[$status] = 0; } // выбираем все позиции, кроме текущей $positions = data_select_array( 80, "ALL_ROWS", "f1660=", $line['Клиент']['raw'], " AND status=0 AND f510='Да' AND f480<>'0000-00-00 00:00:00' AND f530<>'' AND f550='Клиент' AND id<>", $ID ); foreach ($positions as $pid => $position) { $positions[$pid]['date'] = strtotime($position['f480']); $positions[$pid]['status'] = $position['f530']; } // заносим данные текущей строки if ($line['Дата'] && $line['Дата'] != "0000-00-00 00:00:00" && $line['Статус'] && $line['Выполнено'] == "Да" && $line['Статус записи'] == 0 && !$deleteCond && $line['Тип клиента'] == 'Клиент' ) { $positions[$ID] = $line; $positions[$ID]['date'] = strtotime($line['Дата']); $positions[$ID]['status'] = $line['Статус']; } // сортируем по дате, если даты равные то по id if (!function_exists("mySort")) { function mySort($a, $B)/> { if ($a['date'] == $b['date']) { return ($a['id'] > $b['id']) ? -1 : 1; } return ($a['date'] > $b['date']) ? -1 : 1; } } uasort($positions, "mySort"); //print_r($positions); // проходим по всем записям $last_status = ""; $this_data = array(); foreach ($positions as $id => $pos_data) { // первая итерация, последний статус в клиента if (!$last_status) { $last_status = $pos_data['status']; } // считаем разницу во времени if ($this_data['date']) { $timeDiff[$pos_data['status']] += $this_data['date'] - $pos_data['date']; } // сохраняем данные для следующей итерации $this_data = $pos_data; } // после прохода по всем работам, рассчитываем время от времени добавления контрагента до первого статуса $timeDiff[$this_data['f480']] += $this_data['date'] - strtotime($line['Клиент']['Время добавления']); $line['Клиент']['Время в статусах'] = serialize($timeDiff); // ставим текущий статус клиента, если нет ставим самый первый статус if ($last_status) { $line['Клиент']['Статус'] = $last_status; } }Добрый вечер. Такая проблема: после того,как долго добивался,чтобы воронка(представление написанное самим) работала правильно,всё-таки этого добился!! Но после этого этого обнаружил лишний статус в воронке и удалил его через конфигурацию(просто удалил лишнюю строку/поле в поле статус в таблице и под таблице,по которой делалась воронка. После этого перестало корректно работать вот это вычисление (Сохранение работы по клиенту) ,"статус до" вписывался корректно,а " статус" который нужно выбирать не обновлялся в карте клиента в нормальной форме.(имею ввиду поле "статус" в подтаблице "работы с клиентом" ,сделанной по абсолютной аналогии с вашей. Статус начинал обновляться только при добавлении ещё одной записи тут же в подтаблице,при чем меняя статус второй записи,в карте обновлялся статус из первой записи. Много чего перепробовал, решил удалить вычисление и написать его заново( просто скопировал предыдущий код,представленный здесь). Сохранил,теперь переход из статуса в статус работает ещё более некорректно и изменяется как ему хочется(если вообще изменяется).
Подскажите , пожалуйста,всё перепробовал. Дело скорее всего не в коде,так как аналогичный код(имеется в виду сохранения изменения в записи подтаблицы) в другой таблице работает корректно. Дело ,скорее всего, в том,что удалил один из статусов " криво". Не знаю что теперь делать,чтобы всё работало как до этого!? Заново таблицы что ли создавать ??? Вот представлен код(сохранения работы с пострадавшим) из аналогичной таблицы.
P.S. при этом пока удалил временно Отображение (Воронку),чтобы не влияло на подтаблицу,так как ссылается на неё.
if ($event['type'] == 'delete') { $deleteCond = " AND id<>" . $ID; } // значение при добавлении позиции // $line['Статус до'] = $line['Пострадавший']['Статус']; if (!$line['Статус до']) { $line['Статус до'] = $line['Пострадавший']['Статус']; } if (!$line['Статус']) { $line['Статус'] = $line['Статус до']; } /* Цель: находим сколько времени контрагент сидел в каждом статусе */ if ($line['Пострадавший']['raw']) { // статусы $result = sql_select_field(FIELDS_TABLE, "type_value", "id=", 1050); $row = sql_fetch_assoc($result); $statusArray = explode("\r\n", $row['type_value']); $timeDiff = array(); foreach ($statusArray as $status) { $timeDiff[$status] = 0; } // выбираем все позиции, кроме текущей $positions = data_select_array( 140, "ALL_ROWS", "f1100=", $line['Пострадавший']['raw'], " AND status=0 AND f1030='Да' AND f1000<>'0000-00-00 00:00:00' AND f1050<>'' AND id<>", $ID ); foreach ($positions as $pid => $position) { $positions[$pid]['date'] = strtotime($position['f1000']); $positions[$pid]['status'] = $position['f1050']; } // заносим данные текущей строки if ($line['Дата'] && $line['Дата'] != "0000-00-00 00:00:00" && $line['Статус'] && $line['Выполнено'] == "Да" && $line['Статус записи'] == 0 && !$deleteCond ) { $positions[$ID] = $line; $positions[$ID]['date'] = strtotime($line['Дата']); $positions[$ID]['status'] = $line['Статус']; } // сортируем по дате, если даты равные то по id if (!function_exists("mySort")) { function mySort($a, $B)/> { if ($a['date'] == $b['date']) { return ($a['id'] > $b['id']) ? -1 : 1; } return ($a['date'] > $b['date']) ? -1 : 1; } } uasort($positions, "mySort"); // проходим по всем записям $last_status = ""; $this_data = array(); foreach ($positions as $id => $pos_data) { // первая итерация, последний статус в пострадавшего if (!$last_status) { $last_status = $pos_data['status']; } // считаем разницу во времени if ($this_data['date']) { $timeDiff[$pos_data['status']] += $this_data['date'] - $pos_data['date']; } // сохраняем данные для следующей итерации $this_data = $pos_data; } // после прохода по всем работам, рассчитываем время от времени добавления контрагента до первого статуса $timeDiff[$this_data['f980']] += $this_data['date'] - strtotime($line['Пострадавший']['Время добавления']); $line['Пострадавший']['Время в статусах'] = serialize($timeDiff); // ставим текущий статус компании, если нет ставим самый первый статус if ($last_status) { $line['Пострадавший']['Статус'] = $last_status; } }
- Форум CRM программы Клиентская база
- → Публикации Oleg