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


Подстановка пользователя в поле типа "Связь"


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

#1 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 10 Апрель 2014 - 10:00

Поискал на форуме, не нашел.
Нужно автоматически связать таблицу "Контрагенты" с таблицей "Наши сотрудники"
Каждому контрагенту присваивается текущий менеджер в поле "Менеджер". Нужно, чтобы данная запись автоматически связалась с записью текущего менеджера в таблице "Наши менеджеры".

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

Как это сделать правильно? Подскажите пожалуйста.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#2 CbCoder

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

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

Отправлено 10 Апрель 2014 - 10:21

Обращаетесь запросом к таблице Наши сотрудники, с условием "поле пользователь из Наши сотрудники равно полю пользователь (Менеджер) таблицы Контрагенты". Затем, подставляете id полученной записи в поле связи.

#3 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 10 Апрель 2014 - 10:32

Проще значит никак?)
Напишите пример кода пожалуйста...
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#4 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 10 Апрель 2014 - 15:35

За целый день мой мозг выдал вот такой код:
$sqlQuery = "SELECT f2481 FROM ".DATA_TABLE."46 WHERE status=0 AND f916=$ID";
$res = mysql_query($sqlQuery);
$row = mysql_fetch_array($res);
$sotr = $row['f2481'];
if ($sotr = $line['Менеджер']) $line['Наши сотрудники'] = $sotr;
Ошибок нет, но и ничего не подставляет.
f2481 - поле типа пользователь в таблице "Наши сотрудники"
"Наши сотрудники" - поле типа связь в таблице "Контрагенты"
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#5 CbCoder

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

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

Отправлено 10 Апрель 2014 - 15:53

Напутали всё, хотя я совершенно другое писал в алгоритме.

$sqlQuery = "SELECT id FROM ".DATA_TABLE."46 WHERE status=0 AND f2481='".$line['Менеджер']."'";
$res = mysql_query($sqlQuery);
$row = mysql_fetch_array($res);
$sotr = $row['id'];
$line['Наши сотрудники'] = $sotr;


#6 CbCoder

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

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

Отправлено 10 Апрель 2014 - 15:56

И кстати, рекомендуется запросы в программе оформлять в таком стиле:

$res = data_select(46, "status=0 AND f2481=",$line['Менеджер']);
$row = sql_fetch_array($res);
$sotr = $row['id'];
$line['Наши сотрудники'] = $sotr;


#7 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 10 Апрель 2014 - 17:01

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

Теперь есть задача записать в таблицу "Контрагенты" в поле "Менеджер 2" по полю связи "Наши сотрудники" значение из поля "Менеджер 3" таблицы "Наши сотрудники", срабатываемое при изменении поля "Менеджер 3"
Я так понимаю, что код ниже не будет работать, т.к. отсутствует поле связи со стороны таблицы "Наши сотрудники"?
$line['Наши сотрудники']['Менеджер 2'] = $line['Менеджер 3'];

Как тогда быть в этом случае?
Срабатывание вычисление при сохранении и отображении поля не пойдет, т.к. нужно обновить поле "Менеджер 2" во всех строках.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#8 CbCoder

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

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

Отправлено 11 Апрель 2014 - 11:39

Цитата

Я так понимаю, что код ниже не будет работать

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

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

data_update(42, array('f111'=>$line['Менеджер 3']), "f222=",$line['ID']); // 111 - id поле Менеджер 2, 222 - поле Наши сотрудники


#9 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 11 Июнь 2014 - 12:31

Получается такая штука при работе кода:
$res = data_select(46, "status=0 AND f2481=",$line['Менеджер']);
$row = sql_fetch_array($res);
$sotr = $row['id'];
$line['Наши сотрудники'] = $sotr;
Если в поле "Менеджер" нет значения, то используется первая запись из таблицы 46 и подставляется в поле "Наши сотрудники"
А нужно, чтобы там пусто было...
Я так понимаю, что чего-то не хватает?
Пробовал добавлять условие срабатывания кода при условии, что $line['Менеджер'] != " ", но не сработало.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#10 CbCoder

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

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

Отправлено 11 Июнь 2014 - 13:11

Цитата

Если в поле "Менеджер" нет значения, то используется первая запись из таблицы 46 и подставляется в поле "Наши сотрудники"

Исходя из кода, быть такого не может. Если там действительно пусто, то запрос вернет false и $sotr будет пустым.

#11 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 11 Июнь 2014 - 15:02

Да, вычисление отключил. И так же по-умолчанию ставится тот Пользователь. Написал в техподдержку.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#12 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 27 Июнь 2014 - 17:20

Вот опять схожая проблема:
Делаю вычисление:
if ($line['Поле типа Связь'] == null)
{
$res = data_select(351, "status=0 AND f5251=",$line['Текстовое поле']);
$row = sql_fetch_array($res);
$sotr = $row['id'];
$line['Поле типа связь'] = $sotr;
}

351 - текущая таблица
f5251 - то же поле, что и $line['Текстовое поле']

В итоге в поле $line['Поле типа связь'] подставляется значение не соответствующее значение, а самое первое значение из таблицы.
Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#13 CbCoder

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

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

Отправлено 28 Июнь 2014 - 13:25

Текстовые значения в запросе должны быть в кавычках:

$res = data_select(351, "status=0 AND f5251='",$line['Текстовое поле'],"'");

Иначе, значение считается числовым и преобразуется в число. А если бы это был прямой sql-запрос - вообще вышла бы ошибка.

#14 goodcolor

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

  • Пользователи
  • PipPipPip
  • 206 сообщений
  • Пол:Мужчина
  • Город:Йошкар-Ола

Отправлено 28 Июнь 2014 - 18:58

Так, а запрос типа "Пользователь" не должен быть в кавычках?
Это относительно предыдущей ситуации:
$res = data_select(46, "status=0 AND f2481=",$line['Менеджер']);
$row = sql_fetch_array($res);
$sotr = $row['id'];
$line['Наши сотрудники'] = $sotr;

Компания "Хороший Цвет"
www.GoodColor.ru - поставки и производство самосветящихся товаров и материалов

#15 CbCoder

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

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

Отправлено 29 Июнь 2014 - 13:00

Нет, в поле пользователя хранится число - id пользователя.





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

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