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


Обновление значения при изменении в другой таблице


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

#1 freeman

    Участник

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

Отправлено 02 Июль 2014 - 11:14

Здравствуйте, прошу помощи..

Задача заключается в следующем:
Есть таблица "Касса", в которую автоматически поступают записи из таблицы "Счета", при условии, что поле оплачено > 0
if ($line['Оплачено'] > "0")
{
$zvka = data_table("Счета","id=$ID");
$kl = data_table("Касса","`status`<>'2' AND `По счету`=".$zvka['ID']);
if (!$kl)
{
    $kl['По счету'] = $zvka['ID'];
    $kl['Платеж'] = $zvka['Платеж'];
    $kl['Приход'] = $zvka['Оплачено'];
    $kl['Дата'] = $zvka['Дата'];
    $kl['ID'] = insert_query($kl, "Касса");
    }
}

Проблема в том, что после того как клиент оплачивает остаток происходит изменение поля "Оплачено", но данные не обновляются в таблице "Касса".
Как сделать так, чтобы эти данные совпадали?

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

#2 CbCoder

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

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

Отправлено 02 Июль 2014 - 12:17

Очень просто: дополняете свое вычисление запросом на обновление записи:

if ($line['Оплачено'] > 0)
{
    $kl = data_table("Касса", "`status`<>2 AND `По счету`=".$line['ID']);
    if (!$kl)
    { // записи в кассе еще нет, добавляем
        $kl['По счету'] = $line['ID'];
        $kl['Платеж'] = $line['Платеж'];
        $kl['Приход'] = $line['Оплачено'];
        $kl['Дата'] = $line['Дата'];
        insert_query($kl, "Касса");
    }
    else
    { // запись в кассе УЖЕ есть, ОБНОВЛЯЕМ
        $kl['Приход'] = $line['Оплачено'];
        update_query($kl, "Касса", "`id`=".$kl['ID']);
    }
}

Заметьте также, что я изменил ваш код и в части добавления, т.к. он не оптимизирован. Нет никакой необходимости считывать запросом текущую строку, т.к. все ее данные уже есть в $line, этот метод уже года 3 как устарел.

#3 freeman

    Участник

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

Отправлено 02 Июль 2014 - 12:59

Спасибо!

Подскажите пожалуйста, как мне реализовать такую задумку.

По счету формируется накладная дополнительным действием.
Если по этому счету накладная сформирована, то поле "отгружен" = да

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

#4 freeman

    Участник

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

Отправлено 02 Июль 2014 - 13:23

if ($line['Сумма'] > 0)
{
	$kl = data_table("Касса", "`status`<>2 AND `По расходу`=".$line['ID']);
	if (!$kl)
	{ // записи в кассе еще нет, добавляем
		$kl['По расходу'] = $line['ID'];
		$kl['Основание'] = $line['Примечание'];
		$kl['Расход'] = $line['Сумма'];
		$kl['Сотрудник'] = $line['Сотрудник'];
		$kl['Бригадир'] = $line['Бригадир'];
		$kl['Поставщик'] = $line['Поставщик'];
		$kl['Дата'] = $line['Дата'];
		$kl['Платеж'] = $line['Платеж'];
		insert_query($kl, "Касса");
	}
	else
	{ // запись в кассе УЖЕ есть, ОБНОВЛЯЕМ
		$kl['Расход'] = $line['Сумма'];
		update_query($kl, "Касса", "`id`=".$kl['ID']);
	}
}


поля связи не переносятся почему-то....
        $kl['Сотрудник'] = $line['Сотрудник'];
		$kl['Бригадир'] = $line['Бригадир'];
        $kl['Поставщик'] = $line['Поставщик'];

что делать, в чем ошибка?

Сообщение отредактировал freeman: 02 Июль 2014 - 13:25


#5 CbCoder

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

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

Отправлено 02 Июль 2014 - 13:56

Поля связи в переменной $line разворачиваются в массив второго уровня, с полями из связанной записи. Соответственно, при копировании значения в другое поле связи нужно брать ID связанной записи:

$kl['Сотрудник'] = $line['Сотрудник']['ID'];
$kl['Бригадир'] = $line['Бригадир']['ID'];
$kl['Поставщик'] = $line['Поставщик']['ID'];


#6 freeman

    Участник

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

Отправлено 02 Июль 2014 - 14:17

Просмотр сообщенияCbCoder (02 Июль 2014 - 13:56) писал:

Поля связи в переменной $line разворачиваются в массив второго уровня, с полями из связанной записи. Соответственно, при копировании значения в другое поле связи нужно брать ID связанной записи:

$kl['Сотрудник'] = $line['Сотрудник']['ID'];
$kl['Бригадир'] = $line['Бригадир']['ID'];
$kl['Поставщик'] = $line['Поставщик']['ID'];

Спасибо!


Подскажите, как мне создать создать условие (если нажимаешь на кнопку "выписать накладную", то у поля "Отгружен" меняется на значение = да), на выполнение вычисления???
Заранее спасибо.

#7 CbCoder

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

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

Отправлено 02 Июль 2014 - 15:13

Так добавьте это заполнение поля в доп.действие, в чем проблема то? Вы не знаете как поле заполнить вычислением?

#8 freeman

    Участник

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

Отправлено 03 Июль 2014 - 10:34

есть условие:
if ($line['Статус'] == "Активен")
{
    $line['Сумма к оплате'] = 0;
}

как его расширить, чтобы при статусе "Приостановлен", "Уведомить", "Ожидание оплаты" выполнялось $line['Сумма к оплате'] = $line['Цена'];
а при статусе "Активен" и "Слился" выполнялось $line['Сумма к оплате'] = 0;


заранее спасибо

#9 CbCoder

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

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

Отправлено 03 Июль 2014 - 10:53

К условию выше добавляете or (или) поле Слился. Аналогично формируете второе условие с заполнением поля Ценой.





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

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