Создайте аккаунт в течение и получите скидку!
Начать бесплатно
+

Вычисления (до версии 1.9.5)

Внимание! Настраивать вычисляемые поля рекомендуется только программистам обладающим необходимыми знаниями в этой области. В случае отсутствия данных специалистов вы всегда можете заказать написание кода для данных полей в нашей компании. Для заказа сформулируйте данные в техзадании и пришлите на info@clientbase.ru.

Внимание! Вычисляемые поля срабатывают и вычисляются заново каждый раз при отображении строк таблицы. 

1. Вычисления в полях и таблицах. В чем разница?

Для начала разъясним разницу между вычислениями в полях и таблицах.

 

Вычисления в полях Вычисления в таблицах
Код вычисления в полях срабатывает при любом ОТОБРАЖЕНИИ ПОЛЯ. Код вычисления в таблицах срабатывает при каждом СОХРАНЕНИИ ЗАПИСИ в данной таблице.

Таким образом вычисления в полях удобно использовать, например в случае когда есть поля A, B, C, где поле С должно заполняться автоматически в каждой записи таблицы и должно быть равно C = А — B. В этом случае используем "вычисление" в поле С (код для данного вычисления примерно приведен в пункте 3 данного раздела). Данное вычисление будет срабатывать и пересчитываться заново КАЖДЫЙ РАЗ при отображении данной таблицы.

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

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

2. Применение вычисляемых полей без использования данных из таблиц

Простой пример.
Вы можете задавать любые собственные переменные.
Результатом будет переменная возвращенная через return. Она отобразится во всех строках таблицы. В данном случае во всех строках отобразится одно и то же число.

$a = 25;
$b = 2;
$result = $a*$b;
return $result;

3. Использование данных из текущей таблицы

Наиболее частным случаем является работа вычислительных полей с данными из текущей таблицы.
Допустим мы имеем таблицу "Счета" в которой заведены поля "Сумма" и "Количество" и нам нужно создать поле "Цена", которое бы автоматически заполнялось бы значением "Сумма"/"Количество.

Для этого воспользуемся специальной функцией data_table($table, $index), где $table — название таблицы, $index — выбор строк которые нам необходимы.

В данном случае нам нужно получить данные из текущей строки таблицы "Счета", используем специальную переменную {ID} — которая равна ID текущей строки.

$nakl = data_table("Счета","id={ID}"); // берем все данные текущей строки и забиваем их массив
$result = $nakl["Сумма"]/$nakl["Количество"]; // элементы массива по названию столбцов.
return $result;

4. Использование данных из другой таблицы

Если возникает необходимость работать с данными не только из текущей таблицы, но и из других, то мы также используем функцию  data_table().

Такой пример в нашей базе случай с реквизитами, где нам необходимо получать адрес из таблицы "Контрагенты"

$rekv = data_table("Реквизиты","id={ID}");// получаем данные из текущей строки
$org = data_table("Контрагенты","id='".$rekv['Организация']."'");//получаем данные из таблицы "Контрагенты", где id равен $rekv['Организация']
return $org['Адрес'];

Также может возникнуть необходимость,  когда мы не просто должны взять данные из другой таблицы, но, например просуммировать их. Такая ситуация в нашей конфигурации с таблицей счета, в которой мы в поле "Сумма" заносим сумму из позиций счёта, по данному счету. Но через упрощенную функциональность (зная только имена таблиц и полей) на данный момент вы это не реализуете, здесь необходимо знать структуру базы данных, в частности как задавать таблицы и поля (физически в базе они хранятся под номерами, а не под "русскими" именами). Например, таблица "Позиции счета" в стандартной конфигурации имеет номер 74, поле Сумма в той же таблице — номер 812. Их истинные имена выглядят как <prefix>data74 и f812 соответственно, где <prefix> — текущий префикс таблиц. Таким образом запрос на выборку данных из поля Сумма таблицы "Позиции счета", при том что поле Счет будет равно номеру счета из таблицы "Счета", будет выглядеть так:

$sqlQuery = "SELECT sum(f812) as summa FROM ".DATA_TABLE."74 WHERE f807={ID}";//Получаем сумму содержимого полей "Сумма" таблицы "Позиции счета", где поле "Счет" равно номеру счета.
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
return $row['summa'];

Здесь DATA_TABLE — константа, равная <prefix>data (текущий префикс берется из файла config.php, он задается при установке программы), {ID} — шаблон номера ID текущей записи, подставляется при выполнении кода вычисляемого поля. Номера полей и таблиц можно посмотреть в Настройках соответствующих таблиц и полей, в адресной строке браузера (table и field соответственно)

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

 

5. Обновление данных в других полях таблицы

Используем специальную функцию update_query($array, $table, $index), где
$array = это массив с переменными которые мы записываем,
$table = таблица в которую производится запись
$index — выбор строк которые нам необходимы

Пример. Допустим мы вычисляем расчетную сумму и потом должны записать это число в одно из полей.

$nakl = data_table("Счета","id={ID}"); // берем все данные текущей строки и забиваем их массив
$array["Сумма"]=$nakl["Сумма"]*2-51; // производим нужные нам действия с необходимыми полями
update_query($array, "Счета", "id={ID}"); // обновляем данные нужных нам полей в текущей строке

Рекомендуем также ознакомиться с разделом "Примеры вычислений".

 

Внимание!  Не рекомендуется создавать вычисляемое поле на основе другого вычисляемого поля . Вычисления могут сработать не в том порядке или вообще не сработать, если к полю-источнику нет доступа. Если вы хотите использовать другое вычисляемое поле в качестве источника данных, то его вычисление должно войти в итоговое.

Пример:
1. Вычисляем Поле3 = Поле1 + Поле2, где оба поля — обычные поля без вычислений
2. Затем если вычислять на основе предыдущего поля скажем Поле5 = Поле3 (вычисляемое) + Поле 4 (обычное), то напрямую данный код употреблять не рекомендуется. Правильнее задать Поле5 = (Поле1 + Поле2) + Поле 4, где все поля — обычные. Результат будет тот же, но без обозначенных выше возможных ошибок.



+ сегодня

компаний уже выбрали Клиентскую базу!
Узнайте, почему.

  • компания
  • компании
  • компаний
  • выбрала
  • выбрали
  • выбрали

Создайте собственный аккаунт прямо сейчас! Бесплатно! Начать бесплатно