Связывает таблицу и подтаблицу
#1
Отправлено 05 Август 2014 - 18:04
Создал в родительской таблице два новых поля: След.действие, Исполнить до: и создал связь в настройках полей с полями Действие и Дата подтаблицы Работа по заявке. Результата нет. Что делаю не так?
#2
Отправлено 06 Август 2014 - 10:48
- То, что вы создали поле связи с некой таблицей (и полем в ней), отнюдь не означает, что это поле должно как-то автоматически, само по себе заполняться. Одна из причин этого - то что в связанной таблице может быть несколько записей, и как программа должна по вашему понять, из какой именно записи ей брать значение? К тому же, вы можете вообще захотеть вручную выбирать эту связь с нужной записью, как например контрагента в поле связи счета. Для программы все поля связи одинаковые, и она не в состоянии понять, какое нужно заполнять автоматом, а какое вручную. Для этого как раз служат вычисления - они определяют алгоритм автоматического заполнения поля, т.е. откуда и как именно брать нужное значение для поля. Если же вычисления нет - поле можно заполнить только ручками.
- Соответственно, т.к. в любом случае необходимы вычисления, связь с подтаблицей у этих полей излишняя, она не играет никакой роли и только затрудняет работу с полем. Логичнее поставить типы полей такие же как у оригинальных полей, так проще будет их копировать.
#3
Отправлено 06 Август 2014 - 16:10
Для второго вычисления берем из подтаблицы "Работа по заявкам" запись поля Дата
Пробовал вычисление:
$line['След.действие']=$line['Действие']; результата нет
#4
Отправлено 06 Август 2014 - 16:16
[img][URL=http://hostingkartinok.com/show-image.php?id=830c3bb66de957448b9a7391701e7585][IMG]http://s7.hostingkartinok.com/uploads/thumbs/2014/08/830c3bb66de957448b9a7391701e7585.png[/IMG][/URL][/img]
#5
Отправлено 06 Август 2014 - 16:33
yKa3 (06 Август 2014 - 16:10) писал:
Для второго вычисления берем из подтаблицы "Работа по заявкам" запись поля Дата
Запись - это не поле. Запись - это по другому, строка в таблице. Т.е. мой вопрос был о том, из какой именно строки подтаблицы необходимо брать значения полей, т.к их там может быть несколько, например за разные даты.
yKa3 (06 Август 2014 - 16:10) писал:
$line['След.действие']=$line['Действие']; результата нет
Это вычисление бессмысленно по двум причинам: во-первых в $line лежат только поля текущей записи, а поле "Действие" расположено в другой. Во-вторых, как уже сказано выше, вначале необходимо определится, из какой именно записи (строки) берется поле. Это возможно сделать только запросом, где указаны условия отбора записей.
#6
Отправлено 06 Август 2014 - 16:49
yKa3 (06 Август 2014 - 16:16) писал:
Это неточность, из-за которой возникает двойное толкование. Фразу "значения из выбранного поля связанной таблицы будут автоматически подставляться в текущую таблицу" следует читать как "значения из выбранного поля связанной таблицы будут автоматически подставляться в текущую таблицу после выбора нужного значения из выпадающего списка".
Повторюсь: поля связи создают связь с другой таблицей, но сама по себе связь с конкретной записью не возникает, вы должны ее либо вручную в таблице указать, либо через вычисление.
#7
Отправлено 08 Август 2014 - 07:41
#8
Отправлено 08 Август 2014 - 08:14
#9
Отправлено 08 Август 2014 - 09:57
#10
Отправлено 08 Август 2014 - 09:59
#11
Отправлено 08 Август 2014 - 10:07
yKa3 (08 Август 2014 - 09:57) писал:
Почему одна? В подтаблице к одной родительской записи может быть привязано несколько подчиненных. Например, у контрагента в подтаблице "История контактов" может несколько записей о контактах за разные даты. У вас в подтаблице "Работа с заявкой" наверняка тоже не одна запись будет по одной заявке, иначе смысл в подтаблице теряется - те же поля можно поместить в основную запись.
yKa3 (08 Август 2014 - 09:59) писал:
Повторюсь: записи - это строки таблицы, а не поля. Это общеупотребимый термин для баз данных.
#12
Отправлено 08 Август 2014 - 10:18
#14
Отправлено 08 Август 2014 - 10:42
CbCoder (08 Август 2014 - 10:07) писал:
На картинке ниже 3 записи (но может быть и одна и десять и сто и сколько угодно). От вас требуется уточнить, из какой записи (не конкретный номер разумеется, а УСЛОВИЕ отбора - т.е. например с первой или последней датой) необходимо брать значения полей.
#15
Отправлено 08 Август 2014 - 11:19
Сообщение отредактировал yKa3: 08 Август 2014 - 11:20
#16
Отправлено 08 Август 2014 - 11:30
Я могу привести полностью аналогичный пример из реальной жизни: представьте, что вы директор и у вас стоит очередь из неопределенного количества людей на прием. Допустим я - ваш секретарь, и вы мне говорите: "возьмите паспорт у посетителя в очереди". Разумеется, у меня сразу возникнет вопрос: "извините, а у какого именно посетителя, если их там может быть несколько?". У первого в очереди, у последнего, или может у самого старого, или самого молодого? Предоставьте мне параметр отбора, по какому я должен выбрать того посетителя, у которого я должен взять информацию.
Что вам конкретно непонятно из скриншота? Там несколько записей в подтаблице, чтобы перенести дату в родительскую запись, нужно вначале понять, из какой записи ее взять, т.к. там их 3, в данном случае.
#17
Отправлено 08 Август 2014 - 11:47
#18
Отправлено 08 Август 2014 - 11:49
#19
Отправлено 08 Август 2014 - 12:59
// извлекаем с помощью запроса нужную запись: $data = data_table("Работа по заявке", "`Заявка №`=".$line['ID']." ORDER BY `Дата` DESC") // копируем значения нужных полей: $line['След.действие'] = $data['Действие']; $line['Исполнить до'] = $data['Дата'];
Это вычисление должно быть в родительской записи на условие "отображение поля След.действие" или "отображение поля Исполнить до" .
#20
Отправлено 08 Август 2014 - 16:30
Ошибка в вычислении.
Заявки.Отображение поля: След. действие
Заявки.Вычисление След. действие :
1: $data = data_table("Работа по заявке", "`Заявка №`=".$line['id']." ORDER BY `Дата` DESC")
2: $line['f3761'] = $data['Действие'];
3: $line['Исполнить до'] = $data['Дата'];
syntax error, unexpected T_VARIABLE
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных