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


Данные из полей пользователей


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

#1 Davyd80

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

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

Отправлено 26 Май 2015 - 11:01

Доброго времени суток!

Суть проблемы: в таблице "Сотрудников" создал поле "Данные контакта", в таблице "Тех.заявка" создал такое же поле, как сделать, что бы "Данные контакта" копировалось в таблицу "Тех.заявка"?
Пробовал
$user_profile = sql_select_array(USERS_TABLE, "id=",$line['Заявитель заявки']);
$line['Данные контакта'] = $user_profile['Данные контакта'];
не цепляется :(
Что я делаю не так?

#2 CbCoder

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

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

Отправлено 26 Май 2015 - 12:25

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

#3 Davyd80

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

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

Отправлено 26 Май 2015 - 12:40

Вначале побывал сделать просто
$line['Данные контакта'] = $line['Сотрудники']['Данные контакта'];
не показывает данные :(

#4 CbCoder

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

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

Отправлено 26 Май 2015 - 14:37

А в таблице "Тех.заявка" есть что ли поле связи "Сотрудники"? Или вы таким странным способом пытаетесь непосредственно к таблице обратиться? Тогда учтите 2 вещи: 1) в переменной $line содержатся только поля, никаких таблиц там нет и быть не может; 2) даже если теоретически предположить, что в переменной $line могли бы быть таблицы, то абсолютно непонятно, каким образом программа должна понять, к какой именно записи таблицы в этом случае обращаться, т.к. в общем случае их может быть более одной. Поэтому к таблицам обращаются либо через поля связи (где уже выбрана пользователем конкретная запись связанной таблицы), либо через запросы (где обязательно указывается условие отбора записей).

Таким образом у вас 2 варианта получения нужных данных из таблицы Сотрудники:
1: создать поле связи с сотрудниками и заполнить его в заявках. Тогда можно будет обращаться к данным выбранного сотрудника через это поле связи.
2. обратится к таблице сотрудников через запрос с нужным условием. Например, если у вас есть поле "пользователь", можно сравнить 2 поля пользователь в обоих таблицах, если совпадают - это искомая запись.

#5 Davyd80

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

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

Отправлено 26 Май 2015 - 15:36

Как я понял, в таблице "Тех.заявка" есть поле "Заявитель заявки" и там стоит по умолчанию текущий пользователь, поэтому связать эту тех. заявку с "Пользователем" будет невозможно? Т.е. остается только запрос? Каким образом можно сравнить 2 поля и найти искомую запись?

#6 CbCoder

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

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

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

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

#7 Davyd80

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

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

Отправлено 27 Май 2015 - 09:54

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

#8 CbCoder

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

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

Отправлено 27 Май 2015 - 10:42

Цитата

тип этого поля Пользователь, это как я понимаю и есть связь с таблицей Сотрудники

Нет, неправильно понимаете, из-за этого у вас и возникла путаница в варианте кода в начале темы. Поле Пользователь связано только со служебной таблицей пользователей (USERS) и прямого отношения к таблице Сотрудники не имеет. Там связь только косвенная, через аналогичное поле Пользователь уже в таблице Сотрудники. Поэтому вам подходит только второй вариант с запросом к таблице Сотрудники.

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

#9 Davyd80

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

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

Отправлено 27 Май 2015 - 11:55

Т.е. мне нужно создать запрос на сравнение 2-х полей "Заявитель заявки" в таблице "Тех.заявка" и "ФИО" в таблице "Сотрудники", если совпадают, то подставляются "Данные контакта" из таблицы "Сотрудники"? Если я правильно понял, не подскажите как этот запрос реализовать?

#10 CbCoder

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

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

Отправлено 27 Май 2015 - 13:00

Нет, опять неправильно поняли... :wacko: Сравнивать нужно поля с типом "пользователь"! Я же написал об этом уже выше 2 раза. Поле "ФИО" - это обычный текст, а не пользователь.

#11 Davyd80

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

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

Отправлено 27 Май 2015 - 13:03

Сделал вычисление в таблице Сотрудники
data_update(381, array("f5681" => $line['Данные контакта']), "f5001='",$line['Пользователь'],"'");
381 - Таблица "Тех.заявка"
f5681 - Данные контакта в таблице "Тех.заявка"
f5001 - Заявитель заявки в таблице сотрудников

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

Сообщение отредактировал Davyd80: 27 Май 2015 - 17:22


#12 CbCoder

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

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

Отправлено 27 Май 2015 - 18:25

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

#13 Davyd80

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

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

Отправлено 28 Май 2015 - 12:00

Данные которые нужно подставить в таблицу "Тех.заявка" с строку "Данные контакта", содержатся в таблице "Сотрудники" в строке "Данные контакта" и эта запись не меняется, соответственно, что бы данные отобразились в таблице "Тех.заявка" нужно зайти в сотрудника у которого эта запись есть. Как это можно обойти?

#14 CbCoder

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

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

Отправлено 28 Май 2015 - 12:17

Абсолютно ничего не понял из вашего сообщения. Я вижу задачу так: в данные сотрудников заполняются некие "Данные контакта". Затем при добавлении заявки выбирается пользователь (в поле "Заявитель заявки") или оставляется текущий по умолчанию. После сохранения заявки вычисление копирует данные контакта в аналогичное поле заявки. Что тут не так? И зачем для этого еще раз заходить в сотрудника?

#15 Davyd80

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

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

Отправлено 28 Май 2015 - 12:24

Вычисление стоит в таблице "Сотрудники", если бы вычисление было в таблице "Тех.заявка", то проблем бы не было с отображением, но я не знаю как переделать такое вычисление :(

#16 CbCoder

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

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

Отправлено 28 Май 2015 - 12:29

А что оно делает в таблице Сотрудники, простите? :o Разумеется оно должно быть в заявках, т.к. подтягивать данные нужно именно туда.


Цитата

но я не знаю как переделать такое вычисление

В чем проблема то не пойму? Всего-то поменять номера таблицы и полей?

#17 Davyd80

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

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

Отправлено 28 Май 2015 - 12:35

Пытался написать, что бы Данные подтягивались из таблицы Сотрудники, но получается наоборот, что Данные подтягиваются из таблицы Тех.заявка в таблицу Сотрудники и не могу понять, как переделать запрос :(
data_update(46, array("f5611" => $line['Данные контакта']), "f1400='",$line['Заявитель заявки'],"'");
46 - Таблица Сотрудников
5611 - Данные контакта в таблице Сотрудников
1400 - Пользователь в таблице Сотрудников

#18 CbCoder

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

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

Отправлено 28 Май 2015 - 12:38

Тут не data_update нужен, а data_select, чтобы вначале получить Данные контакта из Сотрудника, а не обновлять их, как вы делаете. Затем уже копируете их в поле текущей записи:

$row = data_select(46, "f1400=",$line['Заявитель заявки']);
$line['Данные контакта'] = $row['f5611'];


#19 Davyd80

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

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

Отправлено 28 Май 2015 - 12:59

Попробовал Ваш запрос, не работает :(

#20 Davyd80

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

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

Отправлено 28 Май 2015 - 13:20

Сам разобрался, не хватает array
$row = data_select_array(46, "f1400=",$line['Заявитель заявки']);
$line['Данные контакта'] = $row['f5611'];

Спасибо большое за помощь!

Сообщение отредактировал Davyd80: 28 Май 2015 - 13:33






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

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