Вычисление..
#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 анонимных