Вход • Регистрация

Некорректно отображается сумма заказа.

  • 04 февраля 2017 г.
  • Доброго. Уж не знаю ошибка это Диафана или баг какой то. Но не правильно отображается сумма заказа. Разница в копейку. Подразумеваю, что это просто некорректное округление. Но почему только в конечной сумме? Прикрепил скрин для примера.
    Почему это собственно важно- не могу настроить работу Яндекс Касса.
    • 04 февраля 2017 г.
    • предположу как вариант что сумма идет и после 2-х знаков запятой, а в настройках округляет до 2-х знаком после запятой
      1841,85
      2792,76*2=5585,52
      возможно у вас вторая цена к примеру 2792,766

      Вы сами задаете 2 цифры после запятой или это конвертируется с какой-то валюты?
      • 04 февраля 2017 г.
      • т.е. в итоге 1841,85 + 2792,76 * 2 = 7427,37 он правильно посчитал
  • 04 февраля 2017 г. , редакция: 04 февраля 2017 г.
  • Первая цена на трех знаках 1 841,845
    Вторая цена 2 792,763 Сумма 2шт.- 5585,526
    Цитата
    Вы сами задаете 2 цифры после запятой или это конвертируется с какой-то валюты?

    Цены заливаются на сайт из сервиса МойСклад. Цены там указаны в Евро. На сайте основная валюта рубли, и стоит модуль вот этот https://addons.diafan.ru/modules/modules-and-services/obnovlenie-kursov-valyut-po-tsb/ (автоматическое изменение курсов валют). Ну и соответственно отображается на сайте все в рублях.
    Те же товары которые в Мойсклад в рублях указаны, с ними такой проблемы нет. Считается все правильно.
    • 04 февраля 2017 г.
    • Еще раз, если числа сначало округлять, что делает cms, а затем складывать, то будет один результат. Если сначало складывать, а затем округлять, то другой результат. Это арифметика. Cms сначала округляет, так как работает с ценами товаров, значения которых не должны выскакивать за два знака после запятой. Если это не устраивает, то нужно использовать округления только в конце всех итераций.
      • 04 февраля 2017 г.
      • Меня то все устраивает, не устраивает Яндекс кассу.
        Вот с ТП Диафана, они проводили тестовый платеж. И один я. Так получилось, что ТП набрали заказ из товаров что в рублях представлены. У них прошел платеж.
        "В нашем заказе 27.01.2017 12:46 №30 7555.68 руб и в запросе от Яндекса 7555.68

        А в Вашем заказе 27.01.2017 15:34 №31 7305.32 руб, но Яндекс запрашивал 7305.31"
        Ещё раз повторюсь. Данный баг только с товарами которые конвертируются.
    • 04 февраля 2017 г.
    • Да это неважно, откуда заливается! Настройки формата цены и количества знаков после запятой, вот что важно!
  • 04 февраля 2017 г.
  • В настройках магазина "Количество знаков после запятой" для "Формат цены" стоит "2"? Если нет, установите 2!
    • 04 февраля 2017 г.
    • Уже ставил все возможные значения и 0 и 1и 2 и т.д. Не важно, все равно то же самое. Яндекс касса пропускает только там где изначально в рублях цены. Где они конвертятся ошибка. И разница в 1 копейку
  • 08 февраля 2017 г.
  • Так и не разобрались с этим. ТП яндекса и Диафана ничего толком не сказали. Кто сайт обслуживает то же не сообразят никак что не так. Может есть ещё какие мысли как побороть это?
    • 10 февраля 2017 г.
    • нужен код, смотреть всю цепочку, что в БД хранится, как выводится, где округляется, кто складывает (сервер или браузер) так не сказать.
      Есть одно предположение но это маловероятно, в javascript вычисления бывают иногда очень своеобразные (0.3 - 0.1 = 0.19999999999999998)
      • 10 февраля 2017 г. , редакция: 10 февраля 2017 г.
      • Все проще некуда:)

        Берем файл shop.inc.price.php и находим там функцию
        Код
        public function calc($good_id = 0, $discount_id = 0, $currency_id = 0) { ... }
        и в ней вот эту строчку
        Код
        $new_price = $c["exchange_rate"] * $row["price"];
        и меняем ее на эту строчку
        Код
        $new_price = round(($c["exchange_rate"] * $row["price"]), 2);


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

        Данное исправление изначально ограничивает двумя знаками после запятой, исключая погрешность, так как нет цен с большим количеством знаков после запятой.

        Успехов.
  • 11 февраля 2017 г.
  • Спасибо, за помощь, попробую, отпишусь о результате.
  • 13 февраля 2017 г. , редакция: 13 февраля 2017 г.
  • Всё заработало!!!
    Отлично. Спасибо большое.
  • 27 января 2021 г.
  • Хоть тема и старая но отпишусь здесь.. возникла необходимость для бухгалтерии указания стоимости товара с точностью до сотых, даже если число целое (для всех товаров в заказе, а не только итоговой суммы).
    Во вложении сформированный чек с демо-сайта диафан. Красным, обозначены необходимые нули. Как это сделать?
    p.s. При добавлении копеек, в чеке они отсутствуют, это ошибка?
    • 27 января 2021 г.
    • Цитата
      При добавлении копеек, в чеке они отсутствуют, это ошибка
      Да, если в настройках магазина есть знаки после запятой, но не выводятся, пишите в багтрек
      • 27 января 2021 г.
      • Да, у меня вот так. На "лету", без багтрека не подскажите как исправить :)
        • 27 января 2021 г.
        • Ну там один файл, надо result глянуть, оно или приходит урезанное или урезается там. Если приходит урезанное, то рядом и нефооматированная есть точно
        • 27 января 2021 г.
        • во вьюхе функцией number_format обработай и будет тебе счастье
          • 28 января 2021 г.
          • Нафик такое счастье))) Как ты такой НДС number_format обработаешь? )
            • 28 января 2021 г.
            • В Багтрек. И будьте готовы доступ к своему сайту дать, сохранив ошибку

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум