Курс валют - как передать значение из модуля в сущность

Все вопросы/проблемы по установке и использовании.
Аватара пользователя
Develop-Soft
Сообщения: 690
Зарегистрирован: 27 мар 2019, 01:22
Имя: Владимир
Откуда: Россия, Белгород
Контактная информация:

Re: Курс валют - как передать значение из модуля в сущность

Сообщение Develop-Soft »

nruslan2 писал(а): 05 окт 2021, 12:13 А вообще шикарные коды!!
Главное их обернуть:

Код: Выделить всё

if ($_GET['item_id'] == 0) {
//...
}
иначе будет долбить новое значение при каждом открытии.
Lexxor2011
Спонсор
Спонсор
Сообщения: 67
Зарегистрирован: 01 фев 2023, 18:12
Имя: Алексей Грибков
Откуда: Россия, г. Южно-Сахалинск
Организация: ООО "Интер Энерджи"

Re: Курс валют - как передать значение из модуля в сущность

Сообщение Lexxor2011 »

nruslan2 писал(а): 05 окт 2021, 12:13 А не проще было обратиться к существующей базе данной и забрать оттуда значения, которые были получены через модуль)
А вообще шикарные коды!!

А вопрос отображения - это чистая математика!! что верно подмечено.
Если кого-то еще интересует этот функционал, то можно обойтись встроенным модулем, без применения дополнительного запроса PHP за курсами в ЦБ.

1. Создаем сущность "Курсы валют", создаем поле "Дата курса" (0 - по умолчанию), поля с MySQL формулами (!!! не JS формулы - работать не будет!!!) на нужные валюты, с формулой: 1/[USD] (соответственно нужной валюте меняем переменную):
Новый рисунок (1).jpg
и пустые числовые поля под нужные валюты для сохранения данных:
Новый рисунок (2).jpg
2. Идем в автоматизацию действий, и создаем процесс (Выполнить по расписанию (cron)):
Новый рисунок.jpg
Новый рисунок (4).jpg
в нем действие "Добавить запись" на сущность "Курсы валют":
Новый рисунок (3).jpg
в настройках действия в числовые поля валют добавляем коды полей, содержащие MySQL формулы, соответствующие каждой валюте, и в поле дата добавляем текущую дату "0":
Новый рисунок (5).jpg
Собственно все! :roll: Настраиваете cron у себя на сервере на время позднее задачи встроенного модуля обновления валют, получаете таблицу с курсами за каждый день:
Новый рисунок6.jpg
Аватара пользователя
alcompstudio
Спонсор
Спонсор
Сообщения: 1704
Зарегистрирован: 03 янв 2016, 20:42
Имя: Александр Афанасьев
Откуда: г. Славянск, Донецкая обл.
Организация: Alcomp

Re: Курс валют - как передать значение из модуля в сущность

Сообщение alcompstudio »

Да, это круто! ) Не додумался ранее... Интересная идея, спасибо за подсказку!

Еще пытаюсь вставить автоматику для использования одного поля с динамической подстановкой валюты (вместо создания нескольких специальных поле для каждой валюты/курса).

Т.е. например, есть сейчас USD, создаю запись курса для USD (в поле наименование валюты вставляю USD). И далее хочу, чтобы формула "забирала" заголовок из поля Наименование валюты (в данном случае - USD) и как-то добавляла квадратные скобки, чтобы получилась переменная валюты автоматически, т.е. "[USD]" и воспринялась полем MySQL формула именно как переменная, а не текст... Но не получается почему-то... Поле 123 - поле для текста, куда я ввожу наименование валюты (USD)

Делал по разному в поле формула:
[[123]]
'['[123]']'
concat('[',[123],']')
и в самом заголовке прописывал [USD].

Но не видит формульное поле это выражение как переменную... или ошибка, или пусто, или просто текст, не хочет динамически формировать, нужно прямо и вводить в формулу [USD] и т.п. А мне не нужно плодить полей, т.к. сегодня есть [USD], завтра добавится [EUR], потом еще что-то добавится, а что-то удалится, то придется поля создавать или условия наворачивать в зависимости от валюты.

Может есть решение как сконструировать переменную валюты из отдельных частей?
Lexxor2011
Спонсор
Спонсор
Сообщения: 67
Зарегистрирован: 01 фев 2023, 18:12
Имя: Алексей Грибков
Откуда: Россия, г. Южно-Сахалинск
Организация: ООО "Интер Энерджи"

Re: Курс валют - как передать значение из модуля в сущность

Сообщение Lexxor2011 »

alcompstudio писал(а): 03 фев 2023, 21:53 Еще пытаюсь вставить автоматику для использования одного поля с динамической подстановкой валюты (вместо создания нескольких специальных поле для каждой валюты/курса).

Т.е. например, есть сейчас USD, создаю запись курса для USD (в поле наименование валюты вставляю USD). И далее хочу, чтобы формула "забирала" заголовок из поля Наименование валюты (в данном случае - USD) и как-то добавляла квадратные скобки, чтобы получилась переменная валюты автоматически, т.е. "[USD]" и воспринялась полем MySQL формула именно как переменная, а не текст... Но не получается почему-то... Поле 123 - поле для текста, куда я ввожу наименование валюты (USD)
Не совсем понял задачу.. Но сразу говорю, что наверное динамически менять переменную не получится.
Тут наверное можно использовать в MySQL формуле что-то типа:
case
when [123] ='USD' then ([154]*[USD])
when [123] ='EUR' then ([154]*[EUR])
end
где [123] - это ваше поле для текста (куда вставляется название валюты), а [154] - любое числовое поле, которое вы используете для вычислений в формуле.
Аватара пользователя
alcompstudio
Спонсор
Спонсор
Сообщения: 1704
Зарегистрирован: 03 янв 2016, 20:42
Имя: Александр Афанасьев
Откуда: г. Славянск, Донецкая обл.
Организация: Alcomp

Re: Курс валют - как передать значение из модуля в сущность

Сообщение alcompstudio »

Да, это я и имею ввиду, чтобы было только одно поле для курса, и там было условие расчета в зависимости от "текущей" валюты. Т.е. если у меня есть сущность Валюты, то каждая добавленная запись в эту сущность - это, собственно, валюта. И Там есть поле для расчета текущего курса - добавляю новую валюту (запись), и формула "видит" что это за валюта из текстового поля и делается расчет.

Вы правильно написали условие для текущего решения, но тут все равно придется каждый раз влазить в это поле формулы при добавлении (или удалении) записи в сущности Валюты. Т.е. например, если сейчас в сущности валюты есть 2 записи: USD и EUR, то в формуле расчета курса мне нужно прописать такое выражение:

case
when [11] ='USD' then (1/[USD])
when [11] ='EUR' then (1/[EUR])
end
где [11] - это поле для текста, наименование, где ввожу валюту (код).

Но как только у меня например добавится запись с новой валютой CNY, то придется менять формулу:

case
when [11] ='USD' then (1/[USD])
when [11] ='EUR' then (1/[EUR])
when [11] ='CNY' then (1/[CNY])
end

И так каждый раз, при добавлении новой валюты. Конечно, как показывает практика, валюты имеют редкое добавление, это ограниченный набор данных, но все-таки валюты добавляют менеджеры в сущность Валюты, и естественно, возникнет вопрос "а почему у меня не подтягиваются курсы, я ж добавил валюту, код правильно написал согласно ISO...?" - и админу придется идти и дописывать формулу.

Вот этого хотелось бы избежать, но видимо пока придется так. Спасибо вам за подсказки!
Lexxor2011
Спонсор
Спонсор
Сообщения: 67
Зарегистрирован: 01 фев 2023, 18:12
Имя: Алексей Грибков
Откуда: Россия, г. Южно-Сахалинск
Организация: ООО "Интер Энерджи"

Re: Курс валют - как передать значение из модуля в сущность

Сообщение Lexxor2011 »

Тут мне кажется проще с менеджерами сразу договориться, какой набор валют будет использоваться в учете, и сразу его везде реализовать, чтобы потом ничего добавлять не нужно было. :)
Если использовать встроенный модуль, то скорее всего так, как вы хотите, не получится.
Даже если ваш менеджер добавит новую валюту в вашу сущность валют, все равно придется ее добавлять во встроенный модуль валют, она туда автоматом не добавится.
То, что вы хотите, как раз нужно реализовывать отдельно от этого модуля, через скрипты PHP, которые были представлены выше в теме.
Последний раз редактировалось Lexxor2011 04 фев 2023, 17:52, всего редактировалось 1 раз.
Аватара пользователя
alcompstudio
Спонсор
Спонсор
Сообщения: 1704
Зарегистрирован: 03 янв 2016, 20:42
Имя: Александр Афанасьев
Откуда: г. Славянск, Донецкая обл.
Организация: Alcomp

Re: Курс валют - как передать значение из модуля в сущность

Сообщение alcompstudio »

Lexxor2011 писал(а): 04 фев 2023, 13:55 Тут мне кажется проще с менеджерами с разу договориться, какой набор валют будет использоваться в учете, и сразу его везде реализовать, чтобы потом ничего добавлять не нужно было. :)
Если использовать встроенный модуль, то скорее всего так, как вы хотите, не получится.
Даже если ваш менеджер добавит новую валюту в вашу сущность валют, все равно придется ее добавлять во встроенный модуль валют, она туда автоматом не добавится.
То, что вы хотите, как раз нужно реализовывать отдельно от этого модуля, через скрипты PHP, которые были представлены выше в теме.
Тут - да, согласен с вами, не подумал, что мы-то "пляшем" от модуля валют, а в нем только админ права имеет... Да, вероятно придется пока использовать "фиксированные" данные в формуле и все вручную добавлять.
Ответить