Вычисление..
#1
Отправлено 18 Июнь 2014 - 07:05
#2
Отправлено 18 Июнь 2014 - 10:11
#3
Отправлено 18 Июнь 2014 - 12:02
#4
Отправлено 18 Июнь 2014 - 12:21
#5
Отправлено 24 Июнь 2014 - 19:41
#6
Отправлено 25 Июнь 2014 - 08:58
Соответственно, вам необходимо выполнять запрос data_delete без данного флага.
#7
Отправлено 12 Январь 2017 - 02:54
Dinak (18 Июнь 2014 - 07:05) писал:
#9
Отправлено 12 Январь 2017 - 10:50
Dinak (12 Январь 2017 - 06:44) писал:
Если откровенно, то практически все.
С самой системой (SaaS) ковыряюсь 3й день, еще не все и не совсем понятно, особенно вычисления всякие...
Пробовал 3 варианта парсинга курсов с сайта ЦБ - не работают.
Да и с пхп последний раз работал лет 7 незад, забыл уже все.
Собственно задача, думаю, мало отличается от чьих либо еще:
Есть прайс, в котором надо пересчитывыать цену розницы (из отдельного столбика еур) в рур по актуальному курсу каждый день.
Ну и есть счета, в которых надо прописывать цену именно на дату выставления счета и так, что бы она не менялась с изменением курса.
Можно в ЛС. С меня конь))))
#10
Отправлено 12 Январь 2017 - 13:43
require_once("include/snoopy.class.php");
$url = "http://www.cbr.ru/scripts/XML_daily.asp?";
$snoopy = new Snoopy();
$snoopy->fetch($url);
$xml = simplexml_load_string($snoopy->results);
$cnt=Count($xml->Valute);
for($i = 0; $i < $cnt; $i++)
{
$code=$xml->Valute[$i]->CharCode;
if ($code=='EUR')
{
$value=$xml->Valute[$i]->Value;
$EUR=str_replace (",", ".",$value); //Заменим запятую на точку
}
// Аналогично и с другими валютами..
if ($code=='USD')
{
$value=$xml->Valute[$i]->Value;
$USD=str_replace (",", ".",$value);
}
}
// Вставка в таблицу КБ, предварительно создал таблицу и поля: Дата, Курс Евро (f100), Курс Доллара(f101)
data_insert(id_таблицы, array('f101' => $USD, 'f100' => $EUR));
echo "Done";
Сообщение отредактировал Dinak: 12 Январь 2017 - 13:57
#11
Отправлено 12 Январь 2017 - 21:39
Dinak (12 Январь 2017 - 13:43) писал:
require_once("include/snoopy.class.php");
$url = "http://www.cbr.ru/scripts/XML_daily.asp?";
$snoopy = new Snoopy();
$snoopy->fetch($url);
$xml = simplexml_load_string($snoopy->results);
$cnt=Count($xml->Valute);
for($i = 0; $i < $cnt; $i++)
{
$code=$xml->Valute[$i]->CharCode;
if ($code=='EUR')
{
$value=$xml->Valute[$i]->Value;
$EUR=str_replace (",", ".",$value); //Заменим запятую на точку
}
// Аналогично и с другими валютами..
if ($code=='USD')
{
$value=$xml->Valute[$i]->Value;
$USD=str_replace (",", ".",$value);
}
}
// Вставка в таблицу КБ, предварительно создал таблицу и поля: Дата, Курс Евро (f100), Курс Доллара(f101)
data_insert(id_таблицы, array('f101' => $USD, 'f100' => $EUR));
echo "Done";
Агонь! Наконец- то заработало! Огромное спасибо!
Хотя и осталось пара нюансов - данные в новую таблицу парсятся, а вот поле Дата не заполняется, хотя и стоит галочка Дата добавления записи.
Хотя в сути можно на это забить и сделать просто через $data_update ежедневное обновление курса просто в двух ячейках.
Дальше, я так понимаю, нужно повесить вычисление на Цену в прайсе типа
if ($event['changed'][291, 'f4751']) // таблица и ячейка с курсом
{
$line['Цена'] = $line[291, 'f4751'] * $line['Цена в EUR'];
}
и словие выполнения при показе, например....ну или может я совсем дурак)
И еще вопрос, а не юудут ли в таком случае цены автоматически подтягиваться в уже выставленные счета и тд?
#12
Отправлено 12 Январь 2017 - 22:09
L-ink (12 Январь 2017 - 21:39) писал:
В данном коде нет добавления даты курса. Посмотрите на страницу XML от ЦБ в браузере - http://www.cbr.ru/sc.../XML_daily.asp?
И увидите там в самом начале дату, на которую представлены курсы.
<ValCurs Date="13.01.2017" name="Foreign Currency Market">
Чтобы считать ее и добавить в базу, немного скорректируйте код
require_once("include/snoopy.class.php");
$url = "http://www.cbr.ru/scripts/XML_daily.asp?";
$snoopy = new Snoopy();
$snoopy->fetch($url);
$xml = simplexml_load_string($snoopy->results);
/*****Получить дату курсов из файла XML****/
$date_rate = form_eng_time($xml['Date']);
/***********************************/
$cnt=Count($xml->Valute);
for($i = 0; $i < $cnt; $i++)
{
$code=$xml->Valute[$i]->CharCode;
if ($code=='EUR')
{
$value=$xml->Valute[$i]->Value;
$EUR=str_replace (",", ".",$value); //Заменим запятую на точку
}
// Аналогично и с другими валютами..
if ($code=='USD')
{
$value=$xml->Valute[$i]->Value;
$USD=str_replace (",", ".",$value);
}
}
// Вставка в таблицу КБ, предварительно создал таблицу и поля: Дата, Курс Евро (f100), Курс Доллара(f101)
data_insert(id_таблицы, array('ВАШЕ ПОЛЕ С ДАТОЙ КУРСА'=>$date_rate,'f101' => $USD, 'f100' => $EUR));
echo "Done";
//ВАШЕ ПОЛЕ С ДАТОЙ КУРСА - в формате fXXX
Сообщение отредактировал maksn: 12 Январь 2017 - 22:42
#13
Отправлено 13 Январь 2017 - 01:59
maksn (12 Январь 2017 - 22:09) писал:
И увидите там в самом начале дату, на которую представлены курсы.
<ValCurs Date="13.01.2017" name="Foreign Currency Market">
Чтобы считать ее и добавить в базу, немного скорректируйте код
require_once("include/snoopy.class.php");
$url = "http://www.cbr.ru/scripts/XML_daily.asp?";
$snoopy = new Snoopy();
$snoopy->fetch($url);
$xml = simplexml_load_string($snoopy->results);
/*****Получить дату курсов из файла XML****/
$date_rate = form_eng_time($xml['Date']);
/***********************************/
$cnt=Count($xml->Valute);
for($i = 0; $i < $cnt; $i++)
{
$code=$xml->Valute[$i]->CharCode;
if ($code=='EUR')
{
$value=$xml->Valute[$i]->Value;
$EUR=str_replace (",", ".",$value); //Заменим запятую на точку
}
// Аналогично и с другими валютами..
if ($code=='USD')
{
$value=$xml->Valute[$i]->Value;
$USD=str_replace (",", ".",$value);
}
}
// Вставка в таблицу КБ, предварительно создал таблицу и поля: Дата, Курс Евро (f100), Курс Доллара(f101)
data_insert(id_таблицы, array('ВАШЕ ПОЛЕ С ДАТОЙ КУРСА'=>$date_rate,'f101' => $USD, 'f100' => $EUR));
echo "Done";
//ВАШЕ ПОЛЕ С ДАТОЙ КУРСА - в формате fXXX
Огромное спасибо! Я с ПХП то 7 лет не работал (хотя у уже и начал вспоминаться), а с XML вообще никогда...
Теперь пытаюсь через вычисление Цену в прайсе привязать к курсу. В прайсе есть ячейка Цена в валюте.
$cur_date = date("d-m-Y");
data_select_field(281, "'f4741' as cur1", "'f4721' =", $cur_date);
$line['Цена'] = $line['Цена в валюте'] * $cur1;
но ничего не происходит....
#14
Отправлено 13 Январь 2017 - 07:19
$cur_date = date("d-m-Y"); // Неверный формат даты нужно date('Y-m-d 00:00:00')
data_select_field(281, "'f4741' as cur1", "'f4721' =", $cur_date); // а тут где преобразования в массив? sql_fetch_assoc
$line['Цена'] = $line['Цена в валюте'] * $cur1;
или можно проще сделать - сортировать таблицу по дате добавления записи в обратном порядке и выбрать 1 строчку, вот и актуальная дата
$result = data_select(id таблицы с курсами, "status=0 ORDER BY f5630(поле дата добавления) DESC LIMIT 1"); $row = sql_fetch_assoc($result); $line['Цена'] = $line['Цена в валюте'] * $row['f150'] (поле с курсом нужной валюты);
Сообщение отредактировал Dinak: 13 Январь 2017 - 07:22
#15
Отправлено 13 Январь 2017 - 13:51
L-ink (13 Январь 2017 - 01:59) писал:
$cur_date = date("d-m-Y");
data_select_field(281, "'f4741' as cur1", "'f4721' =", $cur_date);
$line['Цена'] = $line['Цена в валюте'] * $cur1;
но ничего не происходит....
Вопрервых, Вы не верно определили формат даты. В базе они хранятся в виде YYYY-mm-dd
А во вторых, нигде не используется результат запроса. Нужно так
//$cur_date = date("d-m-Y"); //Не верный формат даты
$cur_date = date("Y-m-d");
$result = data_select_field(281, "'f4741' as cur1", "'f4721' =", $cur_date);
$row = sql_fetch_assoc($result);
$cur1 = $row['cur1'];
$line['Цена'] = $line['Цена в валюте'] * $cur1;
Синтаксис в data_select_field не проверял. Взял Ваш. Честно сказать - не люблю все эти data_select.
Предпочитаю нативный SQL
Сообщение отредактировал maksn: 13 Январь 2017 - 14:57
#16
Отправлено 16 Январь 2017 - 10:17
$result = data_select_field(281, "'f4741' as cur1", "'f4721' =", $cur_date);
Т.к. не может найти select при условии дат, например пробовал так:
$result = data_select_field(281, "'f4741' as cur1", "`f4721` =", $cur_date); // Не работает $result = data_select_field(281, "'f4741' as cur1", date_format(f5630, '%Y-%m-%d')=", $newDate); // Не работает $result = data_select_field(281, "'f4741' as cur1", "`f4721` = CURDATE()"); // единственный вариант который работает, но он не совсем мне подходит
Есть идеи что может быть не так ?
#17
Отправлено 16 Январь 2017 - 12:12
Плюс у вас синтаксическая ошибка во втором запросе, которая очевидна уже при простом взгляде на подсветку кода. Подсказка: кавычка перед date_format не открыта.
#18
Отправлено 17 Январь 2017 - 06:53
CbCoder (16 Январь 2017 - 12:12) писал:
Плюс у вас синтаксическая ошибка во втором запросе, которая очевидна уже при простом взгляде на подсветку кода. Подсказка: кавычка перед date_format не открыта.
Нашёл ошибку в $cur_date и $newDate, а в синтаксисе - спасибо, это просто в примере не написал, а так была кавычка!
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных













