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


Публикации Oleg

7 публикаций создано Oleg (учитываются публикации только с 21-Апрель 23)


#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;
    }
}



#31916 Копирование данных между таблицами

Отправлено от Oleg в 06 Сентябрь 2016 - 18:05 in Как это сделать

Спасибо! У меня так же всё работало,просто в моей голове это по-другому работало,но и так подойдёт) Скрою таблицу " Справочники" от менеджеров.

Хотел ещё спросить возможно ли такое или нет : решение проблемы,которое вы мне подсказали 31 августа(ссылка на родственника((написанный вами код в этой теме чуть выше)) ; бывает такое,что в семье несколько,например,братьев,и тогда в таблице " Родственники" если выбираешь два человека со статусом Брат,то сохраняется в ссылке у травмированного последний сохранённый,а первый пропадает. Возможно ли,чтобы просто появлялась вторая запись со ссылкой напротив Родственника в таблице " Травмированный" или нет? Я пока решил проблему так: просто создал дополнительные статусы : Брат2,Сестра 3 и Внук 4 и т.п.



#31910 Копирование данных между таблицами

Отправлено от Oleg в 05 Сентябрь 2016 - 21:29 in Как это сделать

Просмотр сообщенияCbCoder (31 Август 2016 - 16:08) писал:

Со списками так не получится, они статичные. Это можно сделать только для полей связи, если они к примеру оба указывают на одну таблицу-справочник, где первое поле - пол, а второе - тип родственника. Тогда во втором поле связи в настройках указываете в качестве фильтра первое поле.
Сделал,как вы советовали,но работает не совсем корректно: при выборе определенного поля(либо тип пола,либо тип родственника) и сохранения записи в таблице создаётся запись в таблице "справочники". При этом поставил второе поле (связанное с типом родственника) фильтр по полю "Пол" (связанное с полем пол соответственно )и только от этого нет). Нужно писать вычисление? И как при этом таблицу справочники с этими полями сделать невидимой?(Чтобы её не было в режиме добавления записей).



#31895 Копирование данных между таблицами

Отправлено от Oleg в 31 Август 2016 - 15:11 in Как это сделать

Спасибо огромное,всё работает так как надо!!! Не могли бы вы подсказать еще по одному моменту : Работа с одной таблицей ,в зависимости от статуса поля со списком(например,пол - м / ж), другое поле со списком ( в этой же таблице) отображает определенные строчки из списка,т.е. не все которые есть.
Необходимость такая : например,ставишь в поле со списком: пол - м,и в этой же записи в другом поле со списком отображаются для выбора только список из родственников,принадлежащих женскому полу(мать,жена и т.п.).



#31893 Копирование данных между таблицами

Отправлено от Oleg в 31 Август 2016 - 11:59 in Как это сделать

Спасибо огромное,сделал как вы сказали,получилось! В заранее же предупредил,что пока только начинаю что-то писать сам и доходит до смешного)
А возможно ли сделать так,чтобы эти данные(ФИО) которые копируются при сохранении были как ссылки на клиентов из карточки таблицы " Травмированные" ?
Буду очень благодарен.



#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



#31885 Копирование данных между таблицами

Отправлено от Oleg в 29 Август 2016 - 16:31 in Как это сделать

Добрый день,коллеги. Думаю,посмеётся от души,но уже кончаются нервы второй день бьюсь над простым кодом:

Есть 2 таблица: Травмированные и Клиенты. Нужно ,чтобы при смене поля на определённый статус из списка(поле типа со списком) в таблице Клиенты, в Таблице Травмированные автоматически появлялась ссылка(в идеале) на данного клиента в определенном поле или хотя бы заполнялась строка в таблице травмированные с ФИО записи,где меняется статус. Буду очень благодарен.