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


Вопрос по вычислениям


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

#61 CbCoder

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

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

Отправлено 04 Июнь 2012 - 10:49

Я имею ввиду несколько записей, привязанных к одной основной. Т.е., в вашей интерпертации, несколько записей с одним и тем же номером 2. Какую из них вы хотите отобрать? Это в поле связи может быть только одна запись, а в подчиненных, в общем случае, их может быть несколько. Например, несколько сотрудников в одной компании.

#62 AssVlad

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

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

Отправлено 04 Июнь 2012 - 10:57

Практические может быть несколько, но теоретически должна быть одна! Т.е. есть заказ с номером 1 в подтаблице ПС существуют статьи затрат и доходов Р304 и Формы (одна запись). Р304 + Формы долдна считаться и заноситься в таблицу Маржа, поле Маржа

#63 CbCoder

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

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

Отправлено 04 Июнь 2012 - 11:08

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

#64 AssVlad

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

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

Отправлено 04 Июнь 2012 - 11:16

Суть подтаблицы была сделана для удобства добавления записей по организации, например ПС это подрядчик (Таблица) где около 20 полей дохода и столько расхода, а этих подрядчиков у меня сейчас 4. Представляет как в вертикальном ввиде добавлять 160 позиций. А так они будут разбиты на четыре организации по 40 позиций в горизонталь

#65 CbCoder

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

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

Отправлено 04 Июнь 2012 - 11:37

Дело ваше конечно, если вам удобнее вводить подтаблицей - пользуйтесь подтаблицей, я всего лишь рекомендую. Если вы настаиваете, что запись может быть только одна, то алгоритм извлечения примерно следующий:

$PS = data_table("ПС", "`Номер`=".$line['ID']); // извлекаем первую (она же единственная) запись из подчиненной таблицы "ПС", связанной с текущей (основной) через поле связи "Номер"
$line['Маржа'] = $PS['R304'] + $PS['Формы']; // вычисляем маржу


#66 CbCoder

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

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

Отправлено 04 Июнь 2012 - 11:41

Меня только это смущает в вашем сообщении:

Просмотр сообщенияAssVlad (04 Июнь 2012 - 11:16) писал:

А так они будут разбиты на четыре организации по 40 позиций в горизонталь

Так все таки, запись в подтаблице одна, или четыре? Или вы о чем-то другом?

#67 AssVlad

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

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

Отправлено 04 Июнь 2012 - 11:52

Запись одна! Я имею ввиду что четыре организации это 4 подтаблицы. Спасибо, попробую!

#68 AssVlad

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

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

Отправлено 04 Июнь 2012 - 12:10

Че то не получается $PS = data_table("ПС", "`Номер`=".$line['ID']); $line['Маржа'] = $PS['R304'] + $PS['Формы'];
Ничего не происходит! Может есть в программе лог вычислений? У меня две таблицы Маржа и ПС. ПС подчиненная к Маржа полями Номер (и в одной и во второй таблице). Каждая строчка в Марже имеет свой номер, соответственно и в ПС есть строки с данными связанные с Маржа по Номер. Пробовал ID в вашем коде менять на Номер, тоже ничего не получается! Вычисления добавляю в таблицу Маржа на сохранение в таблицу и на обновление пробовал!

#69 AssVlad

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

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

Отправлено 04 Июнь 2012 - 12:21

Вроде получилось! Спасибо! Номер не соответствовал в основной таблице!

#70 AssVlad

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

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

Отправлено 05 Июнь 2012 - 16:23

Ну подскажите еще пожалуйста. Считаю в подчиненной таблице $line['Сумма'] = $line['R304'] + $line['Формы']; Сумму маржи! И теперь хочу эту сумму вставить или обновить (если изменяется) в основной таблице, пробовал и sqlQuery update (insert) и update_table у меня вешается CRM не могу понять как........

#71 CbCoder

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

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

Отправлено 05 Июнь 2012 - 16:33

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

#72 AssVlad

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

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

Отправлено 05 Июнь 2012 - 16:42

Хочу узнать что да как работает! Подойдет она нам или нет!!! А изменить условие хочу, потому что не подходит оно! Надо заходить в редактирование заказа и после этого сохранять, что бы в поле Маржа основной таблицы вписывалось значение! А если делать в подчиненной, то в низу экрана эта таблица редактируется и при изменение поля Р304 и Формы - автоматически происходит просчет Суммы, которую хочу вписывать в основную таблицу! Как это сделано в Склад -приход на склад

#73 CbCoder

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

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

Отправлено 05 Июнь 2012 - 17:36

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

$line['Номер']['Маржа'] = $line['R304'] + $line['Формы']; // заносим маржу в основную запись через поле связи "Номер"

Вычисление должно стоять на изменение полей "R304" и "Формы"

#74 AssVlad

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

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

Отправлено 06 Июнь 2012 - 11:39

Спасибо большое))) Все получилось! Подскажите пожалуйста где можно почитать про функции вычисления, mysql и т.п. В документации Администратора очень исчерпывающая документация!

#75 CbCoder

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

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

Отправлено 06 Июнь 2012 - 11:44

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

#76 AssVlad

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

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

Отправлено 06 Июнь 2012 - 14:31

ясно! Еще вопрос, если надо по условию например:
if ($line['Маржа']['Генеральный'] == "ПС")
{
$line['Номер']['Маржа'] = $line['R304'] + $line['Формы'];
}

т.е. в главной таблице по условию поле Генеральный = ПС, то вычисляется!! Вроде написал правильно, а ничего не происходит

#77 CbCoder

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

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

Отправлено 06 Июнь 2012 - 14:46

Опять перепутали имя таблицы и поля связи. Правильно:
if ($line['Номер']['Генеральный'] == "ПС") // ссылаемся на поле в таблице "Маржа" через поле связи "Номер"!
{
$line['Номер']['Маржа'] = $line['R304'] + $line['Формы'];
}


#78 AssVlad

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

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

Отправлено 06 Июнь 2012 - 14:47

Проясните пожалуйста, если мне нужны данные из другой таблицы, то я указываю связь ['Номер']['Генеральный'] == что то (у меня так получилось), а не таблицу и поле ['Маржа']['Генеральный'] = что то

#79 AssVlad

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

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

Отправлено 06 Июнь 2012 - 14:48

Все! Теперь начинаю понимать

#80 CbCoder

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

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

Отправлено 06 Июнь 2012 - 14:56

Просмотр сообщенияAssVlad (06 Июнь 2012 - 14:47) писал:

Проясните пожалуйста, если мне нужны данные из другой таблицы, то я указываю связь ['Номер']['Генеральный'] == что то (у меня так получилось), а не таблицу и поле ['Маржа']['Генеральный'] = что то
Проясняю: при получении данных из другой (связанной с текущей!) таблицы, обращаться к полям этой таблицы нужно через поле связи с этой таблицей. В данном случае связь идет через поле "Номер".





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

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