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


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


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

#61 easysoftware

    Участник

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

Отправлено 25 Август 2015 - 15:40

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

Но есть вопрос про удаление. Таблица Поступившие товары является подтаблицей Приход. Настройка на удаление в вычислении стоит. https://yadi.sk/i/NoGtXFn3ieat3 Но если удаляю строку из таблицы или удаляю в таблице Приход, соответственно и связанная таблица удаляется, то кол-во Поступило в Товарах не пересчитывается. Как и где нужно настроить или прописать, чтобы и в этом случае пересчитывалось значение?

Код такой

$sqlQuery = "SELECT sum(f1670) as summa FROM ".DATA_TABLE."220 WHERE status=0 AND f1630='".$line['Название']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];
$line['Название']['Поступило'] = $summa ;

Сообщение отредактировал easysoftware: 25 Август 2015 - 15:48


#62 CbCoder

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

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

Отправлено 25 Август 2015 - 17:22

Не очень понял где и что удаляется. Вычисление настроено на удаление строки в таблице "Поступившие товары", при этом идет пересчет в поле "Поступило в Товарах" в "Приход", так? Или вычисление есть, а пересчет не происходит? Или Вы про удаление не в таблице "Поступившие товары", а в каком-то другом месте, и при этом также хотите перерасчет поля "Поступило в Товарах" в "Приход" ?

#63 easysoftware

    Участник

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

Отправлено 26 Август 2015 - 15:23

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

Не очень понял где и что удаляется. Вычисление настроено на удаление строки в таблице "Поступившие товары", при этом идет пересчет в поле "Поступило в Товарах" в "Приход", так? Или вычисление есть, а пересчет не происходит? Или Вы про удаление не в таблице "Поступившие товары", а в каком-то другом месте, и при этом также хотите перерасчет поля "Поступило в Товарах" в "Приход" ?

Да, вычисление настроено на удаление в таблице "Поступившие товары". При этом не происходит пересчет в поле "Поступило" таблицы "Товары" , если удаляю запись в таблице "Поступившие товары" или запись в таблице "Приход", для которой таблица "Поступившие товары" является подтаблицей.

#64 CbCoder

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

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

Отправлено 26 Август 2015 - 17:12

Если вы не ошиблись с полями и их id (например, поле Название - это связь с таблицей Товары), то все должно работать.

#65 easysoftware

    Участник

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

Отправлено 27 Август 2015 - 13:05

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

Если вы не ошиблись с полями и их id (например, поле Название - это связь с таблицей Товары), то все должно работать.
Нет, не ошибся с полями. Суммирование же происходит. Т.е. если я добавляю 100 единиц в приходе, потом еще 50, то в товаре кол-во 150. Но если удаляю Приход или Поступившие товары, то кол-во в товарах не меняется.

#66 CbCoder

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

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

Отправлено 27 Август 2015 - 13:37

Кажется понял в чем дело. Событие на удаление срабатывает до удаления записи. Соответственно, сумма, считаемая вами в коде вычисления, считает в том числе и по записи, отправленной на удаление, но еще не удаленной. Поэтому, собственно, в коде на удаление текущая запись учитываться не должна.

#67 easysoftware

    Участник

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

Отправлено 27 Август 2015 - 13:50

Просмотр сообщенияCbCoder (27 Август 2015 - 13:37) писал:

Кажется понял в чем дело. Событие на удаление срабатывает до удаления записи. Соответственно, сумма, считаемая вами в коде вычисления, считает в том числе и по записи, отправленной на удаление, но еще не удаленной. Поэтому, собственно, в коде на удаление текущая запись учитываться не должна.

А как сделать, чтобы при удалении считалось?

#68 CbCoder

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

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

Отправлено 27 Август 2015 - 14:01

Просмотр сообщенияeasysoftware (27 Август 2015 - 13:50) писал:

А как сделать, чтобы при удалении считалось?

Я же написал:

Цитата

текущая запись учитываться не должна

Соответственно, убираете ее из запроса, например добавив условие "id!=$ID". Естественно, вам придется создать отдельное вычисление, т.к. для других событий не требуется менять запрос.

#69 easysoftware

    Участник

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

Отправлено 27 Август 2015 - 15:09

Цитата

Соответственно, убираете ее из запроса, например добавив условие "id!=$ID". Естественно, вам придется создать отдельное вычисление, т.к. для других событий не требуется менять запрос.

А как его корректно в такой код вставить, подскажите, пожалуйста.

$sqlQuery = "SELECT sum(f1670) as summa FROM ".DATA_TABLE."220 WHERE status=0 AND f1630='".$line['Название']['ID']."'";
$res = sql_query($sqlQuery);
$row = sql_fetch_array($res);
$summa = $row['summa'];
$line['Название']['Поступило'] = $summa ;

#70 CbCoder

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

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

Отправлено 27 Август 2015 - 18:10

Вы не умеете запросы составлять? А как тогда написали вычисление?

Элементарно же:

$sqlQuery = "SELECT sum(f1670) as summa FROM ".DATA_TABLE."220 WHERE status=0 AND f1630='".$line['Название']['ID']."' and id!=$ID";

ну или

$sqlQuery = "SELECT sum(f1670) as summa FROM ".DATA_TABLE."220 WHERE status=0 AND f1630='".$line['Название']['ID']."' and id!=".$line['ID'];

#71 easysoftware

    Участник

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

Отправлено 27 Август 2015 - 20:05

Да, я не программист. Поэтому и спрашиваю. А ваша система, вроде как, позволяет под себя сделать приложение, не будучи программистом. Но вот приходится вникать :)
Спасибо :)

#72 CbCoder

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

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

Отправлено 28 Август 2015 - 09:07

Цитата

А ваша система, вроде как, позволяет под себя сделать приложение, не будучи программистом.

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

#73 Сан Саныч

    Участник

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

Отправлено 05 Март 2016 - 13:06

добрый день, как можно объединить в отдельном поле все записи другого поля,
Есть подтаблица в которой в поле "Информация" отражается инфо по результату звонка, каждый день новая запись.
Необходимо в поле "Все результаты" записи по полю "ИНформация" за определенный период который задается фильтрацией по дате создания записи. Т.е. в марте с клиентом общались N раз, нужно что бы при выборке они отразились в неком поле "Общий результат"
попробовал вот так: $line['Связь с Все портфели']['Все результаты']= $line['Информация'];
информация сохраняется по последней изменяемой записи, затирая предыдущую, а нужно чтобы она дополняла.

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

  • Прикрепленное изображение: база.png

Сообщение отредактировал Сан Саныч: 06 Март 2016 - 15:37


#74 CbCoder

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

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

Отправлено 09 Март 2016 - 11:26

$line['Связь с Все портфели']['Все результаты'].= $line['Информация'];

Отличие - в точке перед "равно", она присоединяет текст справа к тому что уже есть слева, а не затирает в отличие от простого присвоения.

#75 Сан Саныч

    Участник

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

Отправлено 09 Март 2016 - 15:08

Просмотр сообщенияCbCoder (09 Март 2016 - 11:26) писал:

$line['Связь с Все портфели']['Все результаты'].= $line['Информация'];

Отличие - в точке перед "равно", она присоединяет текст справа к тому что уже есть слева, а не затирает в отличие от простого присвоения.
спасибо, то что надо. А как можно сделать, что бы каждая запись которая добавляется в "Информацию" начиналась с новой строки и добавить перед каждой время ее создания. Например:
01.01.2015 позвонил
03.02.2015 отправил письмо
Пробовал:
$line['Связь с Все портфели']['add_time'].$line['Связь с Все портфели']['Все результаты'].= $line['Информация']; - не работает

Сообщение отредактировал Сан Саныч: 09 Март 2016 - 15:20


#76 GoGPS

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

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

Отправлено 09 Март 2016 - 15:23

. date('Y-m-d H:i:s')

Так попробуйте

А так будет . "\n" перевод каретки (строки)

CbCoder думаю поправит меня, если я не прав :)

Сообщение отредактировал GoGPS: 09 Март 2016 - 15:26


#77 CbCoder

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

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

Отправлено 09 Март 2016 - 15:30

Цитата

$line['Связь с Все портфели']['add_time']

Так нельзя писать, вы мешаете внешние и внутренние имена в одном массиве, в итоге вычисление просто некорректно сохранится и возвращаться будет пустота. У "add_time" есть нормальное имя "Время добавления".

#78 Сан Саныч

    Участник

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

Отправлено 09 Март 2016 - 15:57

Просмотр сообщенияCbCoder (09 Март 2016 - 15:30) писал:

Так нельзя писать, вы мешаете внешние и внутренние имена в одном массиве, в итоге вычисление просто некорректно сохранится и возвращаться будет пустота. У "add_time" есть нормальное имя "Время добавления".
исправил на "Время добавления", все равно не работает. С новой строкой разобрался GoGPS спасибо.

#79 CbCoder

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

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

Отправлено 09 Март 2016 - 16:22

Что-то я туплю тоже на пару с вами. Левая часть $line['Связь с Все портфели']['add_time'].$line['Связь с Все портфели']['Все результаты'] сама по себе бессмыслена, т.к. все добавления-присоединения должны быть справа, слева только поле-получатель. Тем более что Время добавления логичнее брать из исходной строки подтаблицы, а не из основной. Либо просто текущее время, как GoGPS предложил.

$line['Связь с Все портфели']['Все результаты'].= date("d.m.Y")." ".$line['Информация']."\n";


#80 Сан Саныч

    Участник

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

Отправлено 09 Март 2016 - 19:42

спасибо все работает





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

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