Простые вычисления

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

Для того, чтобы задавать простые арифметические вычисления со значениями полей, в ЦРМ программе Клиентская База используется Конструктор вычислений. Например, с его помощью можно задать, чтобы в поле "Сумма" заносилось произведение значений полей "Количество" и "Цена". Попробуем задать необходимые вычисления к подтаблице "Позиции Заказа", которую мы создали на 5 уроке.

Подтягиваем значения полей связи

Сначала нам необходимо, чтобы при выборе наименования из прайс-листа в поля "Ед. изм." и "Цена" автоматически подтягивались соответствующие значения из прайс-листа. Для этого сначала зайдем в настройки поля "Ед. изм.". В настройках есть пункт "Конструктор вычислений". В выпадающем меню предлагаются для выбора поле связи "Номер", связанное с таблицей "Заказы", и поле "Название", связанное с таблицей "Прайс". Через них можно получить доступ к другим полям связанных таблиц. 

photo

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

photo

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

Аналогичным образом настроим поле "Цена". Теперь в открывающемся списке "Конструктора вычислений" уже доступно больше значений, так как поле "Цена" имеет тип "Число", а значит мы можем задать для него вычисления с использованием других числовых полей из таблицы "Позиции заказа" ("Количество", "Сумма") и из связанных таблиц "Заказы" и "Прайс". Нам нужно подставлять значение цены из "Прайса", поэтому выбираем "Название (Прайс)".

photo

Нам нужно подставлять значение цены из "Прайса", поэтому выбираем "Название (Прайс)", а затем - поле "Цена". 

photo

Заметьте, что при этом появляется еще дополнительный список со знаками арифметических операций. С их помощью можно продолжить задание вычисления с числовыми полями. Этим функционалом воспользуемся при настройке поля "Сумма".

Задаем арифметические вычисления

Заходим в настройки поля "Сумма". В "Конструкторе вычислений" выбираем "Цена" "*" "Количество".

photo

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

Проверим, как это работает. Перейдите в таблицу "Заказы" и добавьте новый заказ. Затем добавьте строку в подтаблицу "Позиции Заказа". Выберите товар в поле "Название", в полях "Ед.изм." и "Цена" подставятся соответстствующие значения. Введите необходимое "Количество" товара — в поле "Сумма" отобразится сумма позиции. 

photo

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

Теперь осталось задать вычисления, которые будут подсчитывать общую сумму заказа. Эта уже не такая простая задача, но необходимость вычислять итоговую сумму значений поля по всем строкам подтаблицы на практике возникает довольно часто. Такие вычисления пишутся на языке программирования php. Пользуясь примерами вычислений, которые есть в стандартной конфигурации "Клиентской Базы" и документации к нашей программе, можно попробовать задать вычисления, не имея специальных знаний. 

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

photo

Там вы увидите три вычисления, которые были созданы нами с помощью "Конструктора вычислений". Теперь добавим новое вычисление.

photo

 

Назовем его "Сумма в заказ". Задайте условия срабатывания вычисления "Изменение поля Сумма". 

photo

Теперь скопируйте следующий код в буфер обмена:

$result = sql_query("SELECT SUM(f3980) AS sum FROM ".DATA_TABLE."280 WHERE f3930=".$line['Номер заказа']['raw']." and status=0 and id!=".$ID);
$row = sql_fetch_assoc($result);
$line['Номер заказа']['Сумма'] = $row['sum'] + $line['Сумма'];

И вставьте этот код в поле "Вычисления". Нажмите "Сохранить". Затем снова зайдите в это вычисление и откройте его для редактирования.

Теперь этот код необходимо отредактировать согласно структуре вашей базы. 

У каждой таблицы и каждого поля в программе Клиентская база есть свой уникальный номер. Доступ к полям и таблицам в php осуществляется по этим номерам. Номер поля или таблицы вы можете узнать, зайдя в настройки таблицы либо поля. 

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

photo

"table=280" означает, что таблица "Позиции заказа" имеет номер 280, а "field=3980" означает, что поле "Сумма" этой таблицы имеет номер 3980. Ваши номера таблиц и полей будут отличаться, т.к. структура базы у всех индивидуальна.

В вычислении "Сумма в заказ" нужно будет отредактировать строку:

$result = sql_query("SELECT SUM(f3980) AS sum FROM ".DATA_TABLE."280 WHERE f3930=".$line['Номер заказа']['raw']." and status=0 and id!=".$ID);

В ней вместо f3980 - впишите ваш номер поля "Сумма" таблицы "Позиции заказа", вместо 280 - ваш номер таблицы "Позиции заказа", а f3930 - это ваш номер поля "Номер заказа" таблицы "Позиции заказа". 

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

Но и это еще не все. Чтобы сумма заказа автоматически пересчитывалась при удалении позиции заказа, нужно задать еще одно вычисление. Сделаем это аналогично. Добавим в таблицу "Позиции заказа" вычисление "Сумма заказа при удалении" с условием "Удаление в таблице".

photo

Скопируйте в него этот код:

$result = sql_query("SELECT SUM(f3980) AS sum FROM ".DATA_TABLE."280 WHERE f3930=".$line['Номер заказа']['raw']." and status=0 and id!=".$ID);
$row = sql_fetch_assoc($result);
$line['Номер заказа']['Сумма'] = $row['sum'];

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

Сохраните код. Затем снова откройте для редактирования. Измените строку

$result = sql_query("SELECT SUM(f3980) AS sum FROM ".DATA_TABLE."280 WHERE f3930=".$line['Номер заказа']['raw']." and status=0 and id!=".$ID);

вставив в неё свои значения номеров полей и таблиц, которые вы уже добавляли в вычисление "Сумма в Заказ". Сохраните. Теперь можно проверить правильность работы вычислений при добавлении/удалении позиций заказа. 

photo

Итак, мы задали необходимые вычисления для таблицы "Заказы" и её подтаблицы "Позиция заказа". Если необходимо задать простые вычисления с полями одной таблицы или с полями связанных таблиц, то для этого можно использовать "Конструктор вычислений". Если же вычисления необходимо производить с полями подчиненных таблиц или другие более сложные вычисления, например, с использованием условий, то необходимо задавать вычисления с помощью php. Если у вас нет специалиста, обладающего такими знаниями, то заказать необходимые вычисления можно у разработчиков ЦРМ программы "Клиентская база".

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

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

Есть вопросы? Задайте их на форуме!
Нужна помощь? Оставьте заявку в техподдержку.
comments powered by HyperComments

+ сегодня

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

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

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