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


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


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

#1 TelecomMedia

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

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

Отправлено 03 Январь 2014 - 12:44

Здравствуйте, подскажите пожалуйста как сделать следующее простое вычисление.

Есть 2 таблицы: Холодные звонки и Контрагенты.

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

Например я хочу перенести 1 поле (Название компании) из таблицы Холодные звонки в таблицу Контрагенты:

$data = data_table("Холодные звонки","id=170"); // Заносим данные текущей строки в массив $data
$insert_data["Название компании"] = $data["Название"]; // Создаем массив для полей второй таблицы и заносим туда нужные значения из массива $data. При этом названия полей в этих двух таблицах разные.
insert_query($insert_data, "Контрагенты"); // Вставляем данные из массива $insert_data в таблицу "Контрагенты"

Вообщем это действие ни к чему не приводит.

#2 CbCoder

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

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

Отправлено 09 Январь 2014 - 10:38

Во-первых, вы используете устаревшую модель вычислений. Перед написанием вычислений, даже по какому-то найденному примеру, необходимо для начала ознакомиться с текущей документацией на сайте. В частности, получать данные текущей строки через функцию data_table давно уже не требуется, т.к. они изначально находятся в системном массиве $line (например, данные из поля "Название"лежат в $line["Название"]).

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

#3 GoGPS

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

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

Отправлено 24 Январь 2014 - 15:46

Здравствуйте,

Просьба помочь с вычислением (если такое вычисление не из области фантастики).

Опишу ситуацию.

Есть таблица "Обьекты"
Есть таблица "Сим карты", в таблице есть поле "Сим карта" и есть поле "Комментарий" (многострочное)

В таблице "Обьекты" есть поле "Сим карта" куда через поле связи подтягивается номер симки из таблицы "Сим карты"

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

Т.е. что типа такого (поле "Комментарий"):
Обьект1
Свободная
Обьект 2
Свободная

и так далее.

Заранее спасибо за ответ

#4 CbCoder

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

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

Отправлено 24 Январь 2014 - 16:10

Вычисление на изменение поля "Сим карта":

if ($line['Сим карта']['row']!=0)
{ // сим-карта выбрана
    $sim_id = $line['Сим карта']['row'];
    $add_text = $line['Название объекта']."\n"; // 'Название объекта' заменяете на реальное имя поля (у вас в описании его нет)
}
else
{ // сим-карта убрана
    $sim_id = $event['changed'][111]['old']; // вместо 111 подставляете id поля "Сим карта"
    $add_text = "Свободная\n";
}
$sim_data = data_table("Сим карты", "id=".$sim_id);
$sim_data['Комментарий'].= $add_text;
update_query($sim_data, "Сим карты", "id=".$sim_id);

Код не тестировал, возможны ошибки.

#5 GoGPS

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

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

Отправлено 25 Январь 2014 - 12:24

Попробовал, не получилось...

Вот такую ошибку возвращает: SELECT * FROM cb_data440 WHERE id= LIMIT 1

#6 CbCoder

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

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

Отправлено 25 Январь 2014 - 12:31

При каком условии? Выбрано, убрано? Код поля подставили вместо 111 ?

#7 GoGPS

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

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

Отправлено 25 Январь 2014 - 12:50

Для теста создал 2 таблицы.

Первая таблица "Обьект" в которой есть два поля - Обьект и СИМ
Вторая таблица "СИМ" в которой есть два поля - СИМ и Комментарий

Вычисление поставил в таблицу Обьект и вычислять при изменинии поля СИМ

if ($line['СИМ']['row']!=0)
{ // сим-карта выбрана
    $sim_id = $line['СИМ']['row'];
    $add_text = $line['Обьект']."\n";
}
else
{ // сим-карта убрана
    $sim_id = $event['changed'][440]['old'];
    $add_text = "Свободная\n";
}
$sim_data = data_table("СИМ", "id=".$sim_id);
$sim_data['Комментарий'].= $add_text;
update_query($sim_data, "СИМ", "id=".$sim_id);

Сообщение отредактировал CbCoder: 25 Январь 2014 - 13:04


#8 CbCoder

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

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

Отправлено 25 Январь 2014 - 13:04

Опечатка, не row, а raw. Исправьте у себя.

#9 GoGPS

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

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

Отправлено 25 Январь 2014 - 13:20

Заработало на добавление названия Обьекта в поле комментарий, но ошибка если убираю СИМ (выбираю пустое значение) в таблице Обьект в поле СИМ.

Вот код, который на данный момент в вычислении:

if ($line['СИМ']['raw']!=0)
{ // сим-карта выбрана
	$sim_id = $line['СИМ']['raw'];
	$add_text = $line['Обьект']."\n";
}
else
{ // сим-карта убрана
	$sim_id = $event['changed'][440]['old']; // вместо 111 подставляете id поля "СИМ" в "Объектах"
	$add_text = "Свободная\n";
}
$sim_data = data_table("СИМ", "id=".$sim_id);
$sim_data['Комментарий'].= $add_text;
update_query($sim_data, "СИМ", "id=".$sim_id);

Ошибка: SELECT * FROM cb_data440 WHERE id= LIMIT 1
Ругается на синтаксис: You have an error in your SQL syntax

#10 CbCoder

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

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

Отправлено 25 Январь 2014 - 13:50

Значит ошиблись с id поля СИМ в Объектах, он не 440.

P.S. Добавляйте код внутри тэгов [ code ][ /code ] (без пробелов), так легче читать (см. выше)

#11 GoGPS

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

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

Отправлено 25 Январь 2014 - 21:15

Все заработало! Спасибо большое!

#12 GoGPS

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

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

Отправлено 30 Январь 2014 - 14:25

Ув. CbCoder

Помогите плс еще раз, если лимит моей наглости еще не зашкаливает :)

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

Категория "Обьекты", таблица "Обьекты", поле "Номер СИМ" с ИД 8220.
Категория "Операторы", таблица "Сим карты", поле "Комментарий".



Заранее спасибо!

#13 CbCoder

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

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

Отправлено 30 Январь 2014 - 14:44

Причем тут разные категории? Расположение таблиц не играет абсолютно никакой роли. Если вы просто скопировали вычисление в другое поле, вероятно опять забыли поменять id или имена полей и таблиц

#14 GoGPS

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

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

Отправлено 30 Январь 2014 - 16:24

Прошу прощения. Невнимательность тому виной...

#15 GoGPS

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

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

Отправлено 06 Февраль 2014 - 15:43

Ув. CbCoder,

подмогните плс разобраться :)

$dut_id = $line['Номер ДУТ 1 (Бак 1)']['raw'];
if ($dut_id != 0)
{ // ДУТ выбран
	$add_text = $line['Рег. номер'];
	$add_text .= (", " . $line['Клиент']);
}
else
{ // ДУТ убран
	$dut_id = $event['changed'][8290]['old'];
	$add_text = "Свободный";
}

if ($dut_id)
{
	$condition = "id=" . $dut_id;
	$dut_data = data_table("Позиции прихода", $condition);
	$dut_data['Хронология'] .= ($add_text . " (" . date('Y-m-d H:i:s') . ")\n");
	update_query($dut_data, "Позиции прихода", $condition);
}

Клиент подтягивается в таблицу Обьекты через поле связи и если я ставлю вот этот код: $add_text .= (", " . $line['Клиент']); то после того как вычисление срабатывает на выходе получаю:
000 ААА, Array (2014-02-06 14:41:08).

Как правильно прописать что бы вместо Array получить название клиента?

Заранее спасибо!

#16 CbCoder

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

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

Отправлено 06 Февраль 2014 - 17:28

"Клиент" - это что, поле связи? Поле связи представляет собой массив с именами полей из связанной таблицы. Т.е. если вам нужно поле Название из Клиента, соответственно нужно писать $line['Клиент']['Название']

#17 GoGPS

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

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

Отправлено 06 Февраль 2014 - 17:42

Все заработало. Спасибо большое!

#18 direktordovole

    Новичок

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

Отправлено 07 Февраль 2014 - 15:44

Здравствуйте! Подскажите, пожалуйста, как мне правильно указать в формуле, что $line['текущее сальдо'] нужно брать из предыдущей строки таблицы
сама формула
$line['текущий остаток'] = $line['текущее сальдо'] + $line['приход'] - $line['расход'];
я работала в таблице расходы. создала аналогию простенькой кассы
спасибо

#19 CbCoder

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

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

Отправлено 10 Февраль 2014 - 09:40

Для этого необходимо сначала выбрать эту предыдущую строку. Выборка осуществляется через запрос, например с помощью функции data_table:

$prev_record = data_table("Ваша таблица", "status=0 ORDER BY id DESC");
$line['текущий остаток'] = $prev_record['текущее сальдо'] + $line['приход'] - $line['расход'];


#20 Саня

    Участник

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

Отправлено 14 Апрель 2015 - 16:54

Здравствуйте. вопрос по вычислению ответственного сотрудника по работе с заявкой: у нас в большинстве заявок в поле "На данный момент ответственный" каким-то образом встает сотрудник Фролова Наталья Владимировна, хотя изначально там указан другой сотрудник. При повторном редактировании проблема остается. с чем связано?

global $done_calcs;
if (!$done_calcs) $done_calcs = array();
$now_raw = intval($line['№']['raw']);
if (!in_array($now_raw,$done_calcs))
{
$sql = "SELECT `f2511` FROM `".DATA_TABLE."150` WHERE `f1880`='{$now_raw}' AND `status`=0 ORDER BY `add_time` DESC LIMIT 1";
$result = sql_fetch_assoc(sql_query($sql));
if ($result['f2511'])
$line['№']['На данный момент ответственный'] = $result['f2511'];
}





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

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