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


Как обратится к полю в родительской/связанной таблице


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

#1 calebfreeman

    Участник

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

Отправлено 01 Июль 2014 - 10:37

Добрый день.

Подскажите по какой причине может не работать вычисление.
Конфигурация стандарт - добавил в Таблицу Контрагенты поля: Дата, Резултат.
Нужно что бы при сохранении в подтаблице "Работа с клиентом" последние данные поля "Дата" и "Результат" сохранялись в таблицу "Контрагенты"
Сделал вот такое вычисление на при сохранении поля "Дата" в подтаблице "работа с клиентом"
$line['Контрагенты']['Дата']= $line['Дата'];

Судя по документации должно работать, но не работает.

валится вот в такую ошибку
"Error generated:
/home/mcg2/public_html/include/functions1.php(449) : data_update()
/home/mcg2/public_html/include/functions1.php(512) : form_event_recurs()
/home/mcg2/public_html/include/functions1.php(794) : calc_line()
/home/mcg2/public_html/view_line2.php(1104) : popup_event()
Ошибка SQL запроса:
UPDATE f_data62 SET Контрагенты='' WHERE id=9
Unknown column 'Контрагенты' in 'field list'

Но у вас в примере документации приведен подобный же пример


Цитата

Подобное вычисление может работать и в обратную сторону, когда согласно записи в подтаблице определенное значение будет переноситься в основную таблицу. Например, так[indent]
$line['Компания']['Телефон']=$line['Новый телефон'];[/indent]
Согласно этому вычислению, в родительскую таблицу "Компания" в поле "Телефон" будет внесено значение из поля "Новый телефон" подчиненной таблицы. Вычисление при этом заноситься в подтаблицу.

"

#2 CbCoder

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

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

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

Цитата

Но у вас в примере документации приведен подобный же пример

Если бы вы внимательнее посмотрели на данный пример, то увидели бы, что там не указывается имя таблицы, в переменной $line их вообще нет, там только поля. Поэтому, при необходимости обратится к родительской (или к любой другой связанной записи, т.к. родительская - ее частный случай), порядок обращения такой: $line['имя поля связи']['имя поля в связанной записи']. В частности, в подтаблице "Работа с клиентом", таковым полем связи является "Компания" (у вас даже в примере из документации оно же прописано).

Возможно, ваше заблуждение связано с тем, что в режиме подтаблицы поле связи с родительской записью скрывается, но его прекрасно видно, если перейти из подтаблицы в режим ее полного отображения (иконка в виде трех полос справа от вкладок подтаблиц).

#3 calebfreeman

    Участник

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

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

Почему то, я ошибочно считал, что указывается не поле связи, а имя таблицы. )) Теперь все встало на свои места. Спасибо.

#4 CbCoder

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

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

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

Имя таблицы не используется, т.к. в одной записи может быть более одной связи с данной таблицей. Например, поля Заказчик и Исполнитель могут вести на одну таблицу Контрагентов, но к разным записям. Поэтому логичнее указывать конкретное поле связи, тем более что именно в нем и хранится id связанной записи. Имя же таблицы без параметров отбора скорее означает всю совокупность записей в ней.

#5 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 01 Август 2014 - 11:22

Доброго здравия.
Подскажите пожалуйста, в подтаблице "История продаж" есть поле "Сумма" (тип поля число), стоит галочка считать итоговую сумму. Как сделать в таблице "Покупатели" в поле "Общая сумма" чтобы отражалась итоговая сумма подтаблицы из поля "Сумма".

#6 dolphin

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

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

Отправлено 01 Август 2014 - 11:32

Только вычислением.

Например так:
$line['ПОЛЕ_СВЯЗИ']['Общая сумма'] = $line['ПОЛЕ_СВЯЗИ']['Общая сумма'] + $line['Сумма'];

Поставить это вычисление в подтаблицу при добавлении поля Сумма.

#7 CbCoder

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

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

Отправлено 01 Август 2014 - 11:34

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

Если в документации непонятно, ищите на форуме, много раз разбирали подобный вопрос.

#8 CbCoder

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

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

Отправлено 01 Август 2014 - 11:37

Просмотр сообщенияdolphin (01 Август 2014 - 11:35) писал:

Например так:
$line['ПОЛЕ_СВЯЗИ']['Общая сумма'] = $line['ПОЛЕ_СВЯЗИ']['Общая сумма'] + $line['Сумма'];

Поставить это вычисление в подтаблицу при добавлении поля Сумма.

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

#9 dolphin

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

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

Отправлено 01 Август 2014 - 11:48

Что еще за изменения сумм?

#10 CbCoder

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

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

Отправлено 01 Август 2014 - 11:53

Обычное изменение значения в поле. Ваш код подразумевает только одноразовое заполнение поля Сумма в подстроке, а если я его поменяю, оно снова добавится. Я уж молчу что удаление строк тоже не учитывается.

#11 dolphin

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

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

Отправлено 01 Август 2014 - 11:58

А, ну да, всё верно :) На изменение и другие действия реагировать не будет ))) Это как бы уже разработчик должен продумать, что будет происходить с полем. Может быть у него как у меня, кроме добавления никто ничего с полем не сможет сделать ))))

#12 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 04 Август 2014 - 06:57

Просмотр сообщенияCbCoder (01 Август 2014 - 11:34) писал:

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

Если в документации непонятно, ищите на форуме, много раз разбирали подобный вопрос.

Благодарю, попробую разобраться.

#13 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 04 Август 2014 - 14:29

Уважаемый программист просмотрел форум....не смог найти....могли бы скинуть ссылку где в форуме есть информация по данному вопросу. Пожалуйста!

#14 CbCoder

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

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

Отправлено 04 Август 2014 - 15:02

Пример из документации:

// Получаем сумму содержимого полей "Сумма" таблицы "Позиции счета", где поле "Счет" равно номеру счета.
$sqlQuery = "SELECT sum(f810) as summa FROM ".DATA_TABLE."74 WHERE status=0 AND f807='".$line['Счет']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];
// Заносим полученную сумму в поле "Сумма" родительской таблицы, обращаясь через поле связи "Счет"
$line['Счет']['Сумма'] = $summa;


#15 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 04 Август 2014 - 15:51

Благодарю, буду пробовать!

Сообщение отредактировал Dobrinya: 04 Август 2014 - 15:52


#16 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 05 Август 2014 - 16:26

Просмотр сообщенияCbCoder (04 Август 2014 - 15:02) писал:

Пример из документации:

// Получаем сумму содержимого полей "Сумма" таблицы "Позиции счета", где поле "Счет" равно номеру счета.
$sqlQuery = "SELECT sum(f810) as summa FROM ".DATA_TABLE."74 WHERE status=0 AND f807='".$line['Счет']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];
// Заносим полученную сумму в поле "Сумма" родительской таблицы, обращаясь через поле связи "Счет"
$line['Счет']['Сумма'] = $summa;
Доброго здравия попробовал подставить свои таблицы и поля в код. Не получается! :(
// Получаем сумму содержимого полей "Сумма" таблицы "История продаж", где поле "№ карты" равно номеру карты покупателя.
$sqlQuery = "SELECT sum(f810) as summa FROM ".DATA_TABLE."74 WHERE status=0 AND f807='".$line['№ карты']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];
// Заносим полученную сумму в поле "Сумма" родительской таблицы, обращаясь через поле связи "№ карты"
$line['№ карты']['Сумма'] = $summa ;

Возможно (f810) не является полем "Сумма" в таблице История продаж.
Выдаёт ошибку
Error generated:
/home/dobrynya/public_html/include/functions1.php(449) : data_update()
/home/dobrynya/public_html/include/functions1.php(512) : form_event_recurs()
/home/dobrynya/public_html/fields.php(1700) : calc_line()
Ошибка SQL запроса:
UPDATE f_data371 SET № карты='' WHERE id=151
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'карты='' WHERE id=151' at line 1

Пожалуйста подскажите, что нужно подправить?
Заранее спасибо!

#17 CbCoder

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

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

Отправлено 05 Август 2014 - 16:33

У вас отсутствует поле "№ карты" в таблице "История продаж", поэтому программа его не распознает и выдает ошибку.

#18 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 05 Август 2014 - 16:57

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

У вас отсутствует поле "№ карты" в таблице "История продаж", поэтому программа его не распознает и выдает ошибку.

В таблице "История продаж" поле "№ карты" вроде есть (в прикрепленном файле фотка).
Попробовал заново создать данное поле в таблице всё равно не выходит......
Выручайте....

Прикрепленные изображения

  • Прикрепленное изображение: Безымянный.jpg


#19 CbCoder

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

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

Отправлено 05 Август 2014 - 17:02

Тогда, возможно, проблема в символе "№". Попробуйте заменить его на "Номер".

#20 Dobrinya

    Участник

  • Пользователи
  • PipPip
  • 16 сообщений
  • Пол:Мужчина

Отправлено 05 Август 2014 - 17:06

Просмотр сообщенияCbCoder (05 Август 2014 - 17:02) писал:

Тогда, возможно, проблема в символе "№". Попробуйте заменить его на "Номер".
Благодарю попробую!





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

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