За последние 24 часа нас посетили 22428 программистов и 999 роботов. Сейчас ищет 691 программист ...

Денежный отчёт(график!?)

Тема в разделе "Сделайте за меня", создана пользователем elektryk, 24 июл 2017.

  1. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    1) использовать переменные год и месяц удобно, так как дни идут, месяцы ползут и годы потихоньку пробираются.
    вот и временные переменные график должен сам определять, это универсально и гибко на мой взгляд
    2) так как график это встроенный рисунок в таблице (iframe), которому выделено поле 100% на 100% ячейки, разумнее всего иметь "резиновый расчёт размеров", мониторы у всех разные... у босса 3840×2160 экран, а у кого-то 800×600, вот и "резиновость" может пригодится.
    3)хорошо
    4)в один день может быть только одна сумма, если в какой-то день суммы нет - линия не идёт на 0 а пропускает этот день
    5) где))?

    p.s. модульный
     
  2. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    И я о том же. Эти параметры должны рассчитываться автоматически, а не в скрипте, где идет вывод графика.
    Ваш файл test.txt
    Код (Text):
    1. 23072017 10000
    2. 24072017 10000
    3. 27072017 1000
    4. 19072017 10000
    5. 24072017 11000
    6. 27072017 1500
    Я бы рекомендовал ООП, но можно и модульный. Только это опять будет каша из скриптов.
     
  3. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    хорошо, в том примере скорее всего выгрузка из двух файлов без разделения, на данный момент в тестовом режиме два файла со следующим содержимым:
    Код (Text):
    1. plusXY.txt
    2. 23072017 10000
    3. 24072017 10000
    4. 27072017 51000
    5. 28072017 315000
    6. 30072017 50000
    7.  
    8. minusXY.txt
    9. 19072017 10000
    10. 24072017 11000
    11. 27072017 157000
    12. 28072017 600500
    13. 30072017 5000
     
  4. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, по поводу представления графика:
    Код (Text):
    1. plusXY.txt
    2. 23072017 10000
    3. 24072017 10000
    4. 27072017 51000
    5. 28072017 315000
    6. 30072017 50000
    Вот эти данные будут представлены (по Вашим словам) так:
    из 1го числа из 0 рублей выходит линия в 23 число в 10000 рублей, потом в 24 число в 10000 рублей и т.д.
    Правильно я Вас понял?
     
  5. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    абсолютно
     
  6. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Я не экономист - спорить не буду)

    Вобщем, я предлагаю обойтись 3-мя классами:
    1. Данные графика
    2. Координатная сетка
    3. Сам график
     
  7. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    PHP:
    1. $width='<script>var ScreenWidth = screen.width; document.write(ScreenWidth);</script>';
    2. $height='<script>var ScreenHeight = screen.height;document.write(ScreenHeight);</script>';
    3. echo''.$width.' x '.$height.'';
    разрешение экрана
     
  8. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Так Вы не получите в php-скрипте разрешение экрана пользователя. Их не надо выводить пользователю на страницу - их надо отправить на сервер.
    Предположим у Вас скрипт grafik.php. К нему можно обратиться так:
    /grafik.php?y=2017&m=7&w=1200&h=920
    , где w и h вычислить как у Вас в javascript.
     
  9. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    совсем не подойдёт? а переменные от туда можно взять для графика( $width и $height)?
     
  10. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, что на счет классов?
     
  11. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    переменные для графиков, где выдаются значения текущего месяца и года, в виде только дней месяца, упомянутых в текстовых файлах
    пример
    27062017 - не прокатит, месяц уже 07
    24072017 - прокатит , но на горизонтальной оси графика для X значение должно быть равно 24, при условии, что цифры с 1 по 31(конкретно для примера с июлем, как действующим месяцем) должны быть выведены на ось Х.
     
  12. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    Вы пытаетесь решить несколько задач одновременно: выборка данных и сразу представление данных. А между ними еще и обработка должна быть. Решайте задачу последовательно.
    Сначала выборка:
    - все даты для июля этого года должны содержать на конце 072017
    - их вместе с суммами надо куда-то "складывать" (можно в массив)
    Потом обработка:
    - я предлагаю все даты представить в виде объекта DateTime
    - потом отсортировать, на тот случай, если они не отсортированы в файле.
    - вычисление максимального значения суммы прихода/расхода
    - и т.п.
    И после этого вывод графика:
    - рисование сетки
    - рисование букв/цифр
    - рисование линий графика
     
  13. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    используя баш, код выглядит так:
    Код (Text):
    1. dt=`date +%m%Y`; i="0"; cat plusXY.txt | grep $dt | sed 's/'$dt'//g' | while read X Y ; do i=$[$i+1] ; echo "тут координата X1($i)=$X а тут координата Y1($i)=$Y" ; done
    вывод:
    Код (Text):
    1. тут координата X1(1)=19 а тут координата Y1(1)=10000
    2. тут координата X1(2)=24 а тут координата Y1(2)=11000
    3. тут координата X1(3)=27 а тут координата Y1(3)=157000
    4. тут координата X1(4)=28 а тут координата Y1(4)=600500
    5. тут координата X1(5)=30 а тут координата Y1(5)=5000
    --- Добавлено ---
    @denis01 спят все походу, а так хорошо начиналось(нужен конвертер bin/bash то php7)))шутка)))
     
  14. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    PHP:
    1. $array = file('plusXY.txt');
    2. $max_y = 0;
    3. $debet = [];
    4.             foreach ( $array as $stroka )
    5.             {
    6.                 $parts = explode(' ', $stroka);
    7.                 if (preg_match('/072017$/', $parts[0]))
    8.                 {
    9.                     $debet[] = [
    10.                         date_create_from_format( 'dmY', $parts[0] ),
    11.                         (int) $parts[1]
    12.                     ];
    13.                     if($parts[1] > $max_y)
    14.                     {
    15.                         $max_y = (int) $parts[1];
    16.                     }
    17.                 }
    18.             }
    19.             usort( $debet,
    20.                 function( $a, $b )
    21.                 {
    22.                     return date_format($a[0], 'Ymd') - date_format($b[0], 'Ymd');
    23.                 }
    24.             );
    Получится двумерный массив с числами и суммами.
    Ночь на дворе.
     
  15. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, если не секрет, сколько Вам заплатят за эту работу?
     
  16. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    не секрет, нисколько, я хочу это оформить как GPL минималистический счётчик финансовых потоков, без заморочек на счёт документооборота, чеков, онлайн-банкинга, то есть, любой человек имея броузер и 2 кнопки на странице, и поле ввода будет знать свои расходы/доходы и остаток)
     
  17. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, посмотрите на график, что Вы хотите увидеть:
    [​IMG]
    На нем плохо читаются суммы.
    Вот что предлагал я:
    [​IMG]
    Тоже не айс. Зато видно маржу.
    А вот, наверное, тот график, что Вам нужен:
    [​IMG]
     
  18. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    первый- самый понятный для простого человека, второй не отдаёт немного картины приход-расход, третий хороший, но для глаза горизонтальные линии привычнее, чем вертикальные столбики)
    спасибо за примеры)
     
  19. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    а продолжение будет?
     
  20. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, а на чем Вы остановились?
     
  21. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    выбор вида графика)
     
  22. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, я имел ввиду в программной части на чем остановились? Массив получился?
     
  23. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    добрый день, с отсечением от даты никак не разберусь.
    PHP:
    1. $god = date('Y'); //значение текущего года
    2. $mesac = date('m'); //значение текущего месяца
    3.  
    4. if (preg_match('/$mesac$god$/', $parts[0]))
    5.                 {
    6.                     $debet[] = [
    7.                         date_create_from_format( 'dmY', $parts[0] ),
    8.                         (int) $parts[1]
    9.                     ];
     
  24. Maputo

    Maputo Активный пользователь

    С нами с:
    30 июл 2015
    Сообщения:
    1.136
    Симпатии:
    173
    @elektryk, если вставляете переменную в строку таким образом, то надо писать в двойных кавычках. И перед последним знаком доллара обратный слеш.
    PHP:
    1. "/$mesac$god\$/"
     
    #74 Maputo, 7 авг 2017
    Последнее редактирование: 7 авг 2017
  25. elektryk

    elektryk Новичок

    С нами с:
    24 июл 2017
    Сообщения:
    52
    Симпатии:
    4
    спасибо.
    PHP:
    1. $array = file('plusXY.txt');
    2. $max_y = 0;
    3. $debet = [];
    4.             foreach ( $array as $stroka )
    5.             {
    6.                 $parts = explode(' ', $stroka);
    7.                 if (preg_match("/$mesac$god\$/", $parts[0]))
    8.                 {
    9.                     $debet[] = [
    10.                         date_create_from_format( 'dmY', $parts[0] ),
    11.                         (int) $parts[1]
    12.                     ];
    13.                     if($parts[1] > $max_y)
    14.                     {
    15.                         $max_y = (int) $parts[1];
    16.                     }
    17.                 }
    18.             }
    19.             usort( $debet,
    20.                 function( $a, $b )
    21.                 {
    22.                     return date_format($a[0], 'Ymd') - date_format($b[0], 'Ymd');
    23.                 }
    24.             );
    25. echo $max_y ;
    вот так?
    --- Добавлено ---
    первый график получает по горизонтальной оси цифры текущего месяца?
    и максимальное значение по вертикальной оси исходя из всех значений по выборке сумм текущего месяца?