Jump to content
clockwork

Как убрать цифры после запятой в БД?

Recommended Posts

Здравствуйте, может кто подскажет, товары выгружаются из 1С через модуль, в цены добавляются копейки, стоит округление и копейки убраны (визуально), но в БД они остались.

Когда например отправляется письмо покупателю, он видит эти копейки.

Можно ли как то сделать, чтобы он в БД уже округлял, а не на сайте? Или еще какие-то варианты подскажете, просто в голову не лезет.

 

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

Share this post


Link to post
Share on other sites
4 минуты назад, clockwork сказал:

товары выгружаются из 1С через модуль

Надо на этапе загрузки, перед тем как писать в БД округлять

Share this post


Link to post
Share on other sites

модуль зашифрован, не вариант. В 1С он округляет видимо визуально.

Share this post


Link to post
Share on other sites
1 hour ago, clockwork said:

Можно ли как то сделать, чтобы он в БД уже округлял, а не на сайте? Или еще какие-то варианты подскажете, просто в голову не лезет.

 

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

можно. самый простой и костыльный вариант - изменить формат хранения\типа данных для колонки price прямо в бд.

вот так. Все имеющиеся записи цены в таблице округлятся автоматически. Но важно понимать, что в таком случае Вы вообще не сможете хранить в базе дробное значение цены, т.к. оно будет постоянно округляться

 

Бэкап таблицы oc_product ОБЯЗАТЕЛЕН!

Spoiler

ALTER TABLE oc_product
  CHANGE COLUMN `price` `price` DECIMAL(15, 0) NOT NULL DEFAULT 0.0000;

 

 

Альтернативный вариант - использовать механизм триггеров самой БД. Триггеры срабатывают сразу же по событию добавления\изменения строк в таблице oc_products и будут округлять цену до нужной точности. вариант более сложный, но зато тип данных и формат колонки прайс останется неизменным + триггеры можно гибко настроить. Текст ниже рабочий, но он больше для примера. Без глубокого понимания сути не советую этот вариант. В любом случае, не забудьте заменить выделенные цветом значения на свои.

 

Бэкап таблицы oc_product ОБЯЗАТЕЛЕН!

Spoiler

USE название_вашей_базы_данных;

 

-- разово-принудитеьно округляем все имеющиеся цены в табличке oc_products с точностью до 0 знаков после запятой

UPDATE oc_product p SET p.price = ROUND(p.price, 0);

 

-- создаем триггеры

DELIMITER $$

 

--  Создаем триггер на округление цены для новых записей\строк.

CREATE
    DEFINER = 'имя_пользователя_БД_из-под_которого_работает_опенкарт'@'localhost'
TRIGGER round_price_before_insert
    BEFORE INSERT
    ON oc_product
    FOR EACH ROW
BEGIN
  SET new.price = ROUND(new.price, 0);
END
$$

 

-- создаем триггер на округление цены при изменении записей\строк

CREATE
    DEFINER = 'имя_пользователя_БД_из-под_которого_работает_опенкарт'@'localhost'
TRIGGER round_price_before_update
    BEFORE UPDATE
    ON oc_product
    FOR EACH ROW
BEGIN
  SET new.price = ROUND(new.price, 0);
END
$$

 

DELIMITER ;

 -- конец
 

 

P.S.: важно!

обратите внимание на строчку

DEFINER = 'имя_пользователя_БД_из-под_которого_работает_опенкарт'@'localhost'

если модуль обмена с 1с у Вас вносит изменения в базе из-под локального пользователя опенкарт - тогда все будет как в примере. Но если модуль обмена работает так, что 1с-ка вносит изменения в базу из-под своего не-локального пользователя БД, то будут нюансы

 

 

Share this post


Link to post
Share on other sites

Система > Локализация > Валюты - выбрать нужную и указать число знаков после запятой 0

или такой вариант не подходит?

Share this post


Link to post
Share on other sites
В 11.12.2019 в 23:22, AlexDW сказал:

Система > Локализация > Валюты - выбрать нужную и указать число знаков после запятой 0

или такой вариант не подходит?

Нет.

 

Ищу решение такое только с весом. Где поковырять?)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.