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

Нравится

2 комментария

Можно воспользоваться открытыми веб-сервисами ЦБ РФ для синхронизации:
http://www.cbr.ru/scripts/Root.asp?PrtId=DWS

И, например, настроить БП по расписанию, который будет своевременно обновлять информацию.

Лучше это вынести в идею, чтобы реализовали в базовом пакете

Показать все комментарии

Коллеги, многим из нас будет полезен материал, который посвящен вопросам использования валют.
В bpm’online базовой валютой называется валюта, используемая для осуществления финансовых расчетов в системе. Курс валют определяет стоимость любой другой валюты относительно базовой, а кратность указывает, какому количеству денежных единиц базовой валюты соответствует установленный курс. Например, 100 российских рублей соответствуют 1,94 долларам США. Если рубль выбран в качестве базовой валюты, а кратность курса доллара — 100, то курс равен 1,94.
Кратность валюты относительно базовой указывается в карточке справочника [Валюты]. Курс
выбранной валюты относительно базовой задается на детали [Курс] справочника [Валюты].

http://i70.fastpic.ru/big/2015/0514/54/eebdfbecc8cc573bfa14d9a0efbf7154.png

Расчет стоимости продукта в заказе

Рассмотрим пример расчета стоимости продукта при его добавлении в заказ, если цена продукта указана в долларах, а заказ оформляется в рублях. Базовая валюта системы — российский рубль, кратность курса доллара — 100, стоимость добавляемого продукта — 14,6 $.
1. Откройте раздел [Заказы], добавьте новую запись.
2. На открывшейся странице заполните параметры заказа:
a. Укажите клиента, для которого оформляется заказ.
b. Заполните плановую дату выполнения заказа и сотрудника, ответственного за ведение заказа.
c. На вкладке [Паспорт заказа] выберите валюту, в которой оформляется заказ — “Рубль”. Поле [Курс] заполнится автоматически значением курса выбранной валюты относительно базовой, а т.к. базовая валюта и валюта заказа совпадают, то курс равен единице.
3. Разверните деталь [Продукты]. В меню кнопки выберите команду [Добавить].
4. В отобразившейся строке новой записи щелкните по кнопке в поле [Продукт].
5. В открывшемся справочнике выберите продукт, цена которого указана в долларах США.

http://i70.fastpic.ru/big/2015/0514/74/edbddcd2e1bec621a79f82d11c32d074.png

В результате на деталь будет добавлен необходимый продукт, цена которого указана в российских рублях и рассчитывается по формуле: [Цена продукта]*[Кратность]/[Курс] — 14,6*100/1,94=752,57

http://i72.fastpic.ru/big/2015/0514/43/702851206e9689cf77b2e3dcc77a9f43.png

Нравится

Поделиться

3 комментария

Здравствуйте.
Подскажите в каком разделе находится "Справочник Валют"?

Дмитрий, здравствуйте!

Как Вы и сами заметили, курсы валют находятся в справочнике "Валюты".
Открыть данный справочник можно, перейдя в Дизайнер системы - Справочники - В строке поиска напишите "Валюты"

Спасибо!

"Арменчу Артём Александрович" написал:

Дмитрий, здравствуйте!

Как Вы и сами заметили, курсы валют находятся в справочнике "Валюты".
Открыть данный справочник можно, перейдя в Дизайнер системы - Справочники - В строке поиска напишите "Валюты"

Спасибо!

С уважением, Арменчу Артём.

Благодарю, Артём.

Показать все комментарии

Вниманию предлагается набор функций для загрузки в Terrasoft 3.X актуального курса доллара к гривне по версии Нацбанка Украины. Можно получать как официальный, так и средневзвешенный рыночный курс.
 Национальный банк Украины

Функция непосредственного получения курса. Если входной параметр true – получает официальный курс, если false или без параметра – средневзвешенный.

Результат - объект с двумя полями. Rate – количество украинских гривен за 1 доллар США (например, 7.993). Date – указанная на сайте дата этого курса. Для официального – следующий рабочий день, для среднего – предыдущий.

function GetUSDRate(IsOfficial) {
        try {
            var Result = new Object();
                var webAddress = 'http://bank.gov.ua/control/uk/index';
                var xmlHttpReq = new ActiveXObject("MSXML2.XMLHTTP.6.0");
                xmlHttpReq.open("GET", webAddress, false);        
            xmlHttpReq.send();
            var HtmlText = xmlHttpReq.responseText.replace(/\s/g, "");
            if (IsOfficial) {
                var BeginText = '100 ДоларівСША';
                var EndText = '100 Євро';
               
                } else {
                        var BeginText = '
грн.за100доларівСША';
                        var EndText =  '
Детальніше...';
                }

                var BeginIndex = HtmlText.indexOf(BeginText)+ BeginText.length;
                var EndIndex = HtmlText.indexOf(EndText);
            var HtmlFragment = HtmlText.substring(BeginIndex, EndIndex);
                var Rate = parseFloat(HtmlFragment);
                if (isNaN(Rate)) {
                        Log.Write(2, 'Ошибка при получении курса Нацбанка');
                        return null;
                }
                Result.Rate = Rate/100;
            if (IsOfficial) {          
                BeginText = 'Офіційнийкурсгривнідоіноземнихвалютз14.00';
                EndText = '';
                } else {
                    BeginText = 'Середньозваженийкурснаміжбанківськомуринку(начасвстановленняофіційногокурсугривні)
';
                    EndText = '

Нравится

Поделиться

4 комментария

Александр, спасибо!
Правильно ли я понимаю, что функция рассчитана на текущую разметку официального сайта НБУ и Вы будете следить за ее изменениями, внося соответствующие правки в свое решение?

Да, так и есть. У НБУ, в отличие от ЦБРФ, нет публичного XML API.
За полгода дизайн сайта НБУ не менялся, пока работает нормально.

Александр! функция перестала работать!

выдает сообщение: "Ошибка при получении курса Нацбанка"

Поправьте скрипт как можно скорее!
Спасибо.

Исправлено.

Показать все комментарии

Часто для вывода в отчёте денежной суммы дробное число нужно оформить нужным образом, с разделением на нгултрумы и чертумы (или, скажем, рубли и копейки), также с пробелом или запятой между группами разрядов. Предлагается многофункциональная функция для осуществления такого форматирования.

function FormatFloat(Value, DecimalMark, ThousandSeparator, Prefix, Postfix, NoZero){
        DecimalMark = IsNull(DecimalMark, ',');
        ThousandSeparator = IsNull(ThousandSeparator, ' ');
        Prefix = IsNull(Prefix, '');
        Postfix = IsNull(Postfix, '');
        var Minus = (Math.abs(Value) != Value) ? ' - ' : '';
        Value = Math.abs(Value);
        var Result = '';
        var Cop = Math.round((Value - Math.floor(Value))*100);
        if (Cop.toString().length > 1 || !!NoZero) {
                Result = Result + DecimalMark + Cop.toString();
        } else {
                Result = Result + DecimalMark + '0' + Cop.toString();
        }
        var IsFirstIteration = true;
       
        while (true) {  
                var Thousand = Math.floor(Value) - Math.floor(Value / 1000) * 1000;
                if (IsFirstIteration) {
                        Result = Thousand + Result;
                        IsFirstIteration = false;
                } else {
                        Result = Thousand + ThousandSeparator + Result;        
                }
               
                Value = Math.floor(Value / 1000);
                if (Value == 0) {
                        return Prefix +Minus + Result + Postfix;
                } else {
                        if (Thousand 10) {
                                Result = '00' + Result;
                        } else
                                if (Thousand 100) {
                                        Result = '0' + Result;                         
                                }
                }
               
        }              
}

Параметры:

Value — исходное дробное число.
DecimalMark — десятичная запятая, точка или название валюты на её месте.
ThousandSeparator — пробел или запятая между единицами, тысячами, миллионами и т.д.
Prefix — название валюты перед числом.
Postfix — название валюты или разменной монеты после числа.
NoZero — если true, то 1 копейка, иначе — 01 копейка.

Примеры использования:

FormatFloat(-12345.67)//- 12 345,67
FormatFloat(1000003.62, ' руб. ', null, null, ' коп.')// 1 000 003 руб. 62 коп.

Также сходную задачу решает "коробочная" функция AmountToStr (скрипт scr_ConvertUtils), переводящая число в его написание словами. А если нужно ещё и склонять слово (1 копейка, 2 копейки,5 копеек), можно использовать соответствующий механизм.

Нравится

Поделиться

0 комментариев
Показать все комментарии

Будучи знакомым с WEB-разработкой, я однажды задумался на тем, что же мешает использовать тот же Ajax в Terrasoft CRM?. Не долго думая и зная ситуации на белорусском рынке валют, я решил сделать автоматическую загрузку курсов валют "черного" рынка. Скрипт был написан в версии системы 3.3. Но, вероятнее всего, подойдет для любой версии системы. Вот что получилось.

Пришлось немного повозиться, хочу вам сказать. Однако результат оказался довольно вменяемым. Итак, для того, чтобы протестировать сие чудное творение, распакуйте прикрепленный архив куда-нибудь на рабочий стол. Затем, через Администратор Terrasoft CRM загрузите сервисы из папки Ajax. Все сервисы появятся в дереве Common//Ajax. Далее нам нужно будет подправить в Администраторе wnd_Main, а точнее меню "Файл". Итак, открываем wnd_Main, заходим на вкладку "Невизуальные", ищем группу amiFile и создаем дочерний элемент amiCurrencyRates с заголовком "Получить курсы валют". Затем, в обработчике OnExecute() созданного элемента вписываем код, чтобы получилось вот так:

function amiCurrencyRatesOnExecute(ActionMenuItem, Sender) {
   InitializeAjax();
   GetUrl("http://prokopovi.ch/
informer_code_withoutdynamic/0/230/200/0/0/10/ru/
%D0%9A%D1%83%D1%80%D1%81%D1%8B+prokopovi.ch+%D0%BD%D0%B0+%21date"
);
}

В сам scr_Main добавляем в includes скрипт scr_AjaxCurrency. На этом предварительная настройка завершена! Заходим в Terrasoft Client, меню файл->получить курсы валют и наблюдаем результат.

Чтобы кастомизировать данный скрипт, нужно задать свой URL в GetUrl() обработчика amiCurrencyRatesOnExecute(ActionMenuItem, Sender) и переписать функцию ProcessProkopovich(txtResponse) в скрипте scr_AjaxCurrency под свой формат.

Оригинал публикации можно найти здесь.

Нравится

Поделиться

0 комментариев
Показать все комментарии

Предлагаю один из вариантов решения поставленной задачи.

1. В ds_InvoiceScript добавить функцию:

function ChangeCurrencyID(InvoiceID, CurrencyID) {
  if (IsEmptyValue(InvoiceID) || IsEmptyValue(CurrencyID)) {
   return;
   }
  if (!Assigned(InvoiceScript.OffDataset)) {
   InvoiceScript.OffDataset =
   Services.GetNewItemByUSI('ds_OfferingInInvoice');
   }
 var Dataset = InvoiceScript.OffDataset;
  Dataset.DisableEvents();
  ApplyDatasetFilter(Dataset, 'InvoiceID', InvoiceID, true);
  Dataset.Open();
 while (!Dataset.IsEOF) {
   Dataset.Edit();
   Dataset.Values('CurrencyID') = CurrencyID;
   Dataset.Post();
   Dataset.GotoNext();
  }
ApplyDatasetFilter(Dataset, 'InvoiceID', InvoiceID, false);
Dataset.Close();
}

2. В обработчике события OnDatasetAfterPost счета вставить вызов функции:
ChangeCurrencyID(Dataset.Values('ID'), Dataset.Values('CurrencyID'));

3. Сохранить все внесенные изменения. Перезапустить приложение и протестировать работоспособность системы.

Желаю удачи!

С уважением,
Мельникова Екатерина

Нравится

Поделиться

1 комментарий

Судя по функции, она делает только замену валюты в продуктах счета. А пересчет где делается?

Показать все комментарии