AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: База знаний и проекты
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.12.2009, 17:45   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Lightbulb Еще один импорт курсов валют
GMCS представляет бесплатный сервис для импорта курсов валют в Microsoft DAX для тех, у кого ограничен доступ в интернет.

Созданный с использованием этого сервиса файл содержит курсы всех валют, данные о которых предоставляет сайт Центробанка за выбранный пользователем период дат, и может быть импортирован в систему с помощью разработанного нами проекта, который прикреплен к данному сообщению.

Установка

Проект не перекрывает стандартные объекты системы, что позволяет безболезненно импортировать его практически на любое приложение. После импорта необходимо добавить два пункта меню (MunuItem), входящие в состав проекта, в меню системы. Проект тестировался на Axapta 4 SP2.

Настройка

Настройка решения заключается в установке соответствия между кодами валют с сайта Центробанка и кодами валют в системе:



Перечень валют, курсы которых предоставляет сайт Центробанка можно скачать по ссылке и импортировать в систему, нажав клавишу "Взять из файла". При сохранении файла убедитесь, что он сохранился в формате XML.

Использование

1. Создаем файл, содержащий курсы валют за выбранный диапазон дат и загружаем его.
2. Открываем форму "Импорт котировок ЦБ":



3. Выбираем загруженный файл.

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

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

Все вопросы и замечания относительно проекта можно оставлять мне в этой ветке.

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

Последний раз редактировалось Андре; 21.12.2009 в 17:50.
Старый 21.12.2009, 17:46   #2  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Сам проект
Проект от 22 декабря (17:00).
Вложения
Тип файла: rar currency_import.rar (7.1 Кб, 177 просмотров)

Последний раз редактировалось Андре; 22.12.2009 в 17:05.
Старый 21.12.2009, 22:22   #3  
axbegin is offline
axbegin
Участник
 
14 / 10 (1) +
Регистрация: 16.06.2008
В GMCS стало все настолько плохо, что вы готовы раздавать свои доработки бесплатно ?
Старый 21.12.2009, 22:39   #4  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Скорее даже наоборот - мы чувствуем себя достаточно уверенно для того, чтобы пробовать для себя новые варианты взаимодействия с рынком.
Старый 22.12.2009, 10:43   #5  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Разрешите побрюзжать :
1 - на одной форме центробанк сокращен как "ЦБР", а на другой как "ЦБ"
2 - заголовок к форме настройки: по-русски правильно "соответствие кодов.. кодам", а не "соответствие кодов.. с кодами.."

updated: формы выбора файлов для загрузки списка валют и для загрузки курсов по-разному обрабатывают кнопку "Отмена": загрузка курсов просто закрывает форму (что правильно), а загрузка валют ругается "Ошибка импорта" (что неверно). Такое ощущение, что список валют и их загрузку писал один программист, а загрузку курсов - другой.

Последний раз редактировалось Zabr; 22.12.2009 в 11:02.
За это сообщение автора поблагодарили: Андре (2).
Старый 22.12.2009, 10:51   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Судя по заданным мне вопросам из описания не очень понятно - зачем, собственно, нужен этот сервис.

Дело в том, что у нас есть ряд клиентов, у которых интернет, в общем то, есть, но не в той сетке, где установлена Axapta. DMZ, например.

Этим клиентам подошел бы вариант со скачиванием файла с данными и последующим импортом данных в систему, но мы не нашли сервиса центробанка, который бы выдавал курсы всех валют за запрошенный диапазон дат. Либо все валюты на дату, либо одна валюта на диапазон дат.

Если у клиента в системе 20 валют, то скачивать и импортировать 20 файлов будет не очень удобно, поэтому наш сервис запрашивает 20 XML-файлов у центробанка, собирает из них один XML-файл и отдает его посетителям для последующего импорта в систему.
Старый 22.12.2009, 11:22   #7  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Цитата:
Разрешите побрюзжать
Ага, спасибо.
Чуть позже, когда наберется побольше замечаний выложим поправленную версию.
Старый 22.12.2009, 12:01   #8  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Еще совсем мелкие замечание. У формы неплохо бы сделать column width и column height, у таблицы GM_AxCurCode2CBRCurCode поля CurrencyCode и CBRCurrencyCode по логике должны быть мандатори. В проекте в трех местах используются метки @GMC*, однако меточного файла не приложено, да и в других местах метки не используются. Надо бы однообразие. Или метки и меточный файл или везде текст.

Форма сейчас работает по совсем неочевидной для пользователя логике. Создаем записи, задав только CurremcyCode, но при следующем открытии формы она откроется пустой из-за ренджа в ините, но создавать новые записи уже не получится, так как в таблице они есть. Надо бы как-то иначе.

Upd. Ой, не так с мандатори . CBRCurrencyCode == "" - это RUR? Тоже не очень прозрачно и хорошо.

Последний раз редактировалось oip; 22.12.2009 в 12:16. Причина: Update.
За это сообщение автора поблагодарили: Андре (2).
Старый 22.12.2009, 12:10   #9  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от oip Посмотреть сообщение
В проекте в трех местах используются метки @GMC*
Не нашел. Утром проект скачивал. Может поменяли уже ?
Старый 22.12.2009, 12:14   #10  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от oip Посмотреть сообщение
Надо бы как-то иначе.
Вряд ли у ЦБ поменяются коды валют, так что можно было бы облегчить жизнь юзерам: при первом запуске формы сразу заполнять справочник (зашить список в код). Либо к проекту приложить файл для импорта, скачанный с сайта ЦБ.
Старый 22.12.2009, 12:15   #11  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от Zabr Посмотреть сообщение
Не нашел. Утром проект скачивал. Может поменяли уже ?
EDT GM_CBRCurrencyCode, таблица GM_AXCurCode2ExtCurCode и ее группа Common.
За это сообщение автора поблагодарили: Zabr (1).
Старый 22.12.2009, 12:37   #12  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от oip Посмотреть сообщение
у таблицы GM_AxCurCode2CBRCurCode поля CurrencyCode и CBRCurrencyCode по логике должны быть мандатори
.. а еще и уникальными. сейчас можно для нескольких кодов валют ЦБ установить одинаковый код валюты Аксапты.

А еще: и при импорте списка валют, и при импорте курсов - можно указать неправильное (несуществующее) имя файла, нажать ОК и получить вместо сообщения об ошибке сообщение "импорт завершен". Как будто все в порядке. Какая тут есть опасность: например, кто-то регулярно выгружает файл с курсами, а задание на загрузку в Аксапте стоит в пакете. Если изменится местоположение каталога для выгрузки или файл назовут неправильно, а пакет продолжает работать, то никто не узнает, что файл перестал загружаться.

Последний раз редактировалось Zabr; 22.12.2009 в 12:49.
Старый 22.12.2009, 14:12   #13  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Цитата:
Сообщение от Андре Посмотреть сообщение
Скорее даже наоборот - мы чувствуем себя достаточно уверенно для того, чтобы пробовать для себя новые варианты взаимодействия с рынком.
Честно говоря, на вашем месте (я имею ввиду GMCS) я бы уделил больше времени подготовке подобного проекта.
Содержание кода не выдерживает критики ни в плане единого стиля в рамках проекта, ни в плане стиля стандартной аксапты.
По факту получается, что, помимо бета-тестирования, вы невольно организовали также "бета-кодревьюинг", так как "ляпов" немало (отсутствие меток, форма не ресайзится, грамматические ошибки, префиксы новых объектов в разном регистре - GM_ и gm_ и т.д.)
Старый 22.12.2009, 14:30   #14  
Zabr is offline
Zabr
Участник
Axapta Retail User
 
1,202 / 345 (14) ++++++
Регистрация: 26.06.2002
Адрес: Москва
Цитата:
Сообщение от Bishop Посмотреть сообщение
префиксы новых объектов в разном регистре - GM_ и gm_ и т.д.)
- вот, еще одно доказательство что несколько разных программистов работало над проектом. Хотя, казалось бы, небольшая ведь разработка...
Старый 22.12.2009, 14:37   #15  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Если уж совсем по мелочам, чтоб причесать, то есть два соседних метода...

X++:
static GM_AxCurCode2ExtCurCode find(CurrencyCode _currencyCode)
{
    gm_AxCurCode2ExtCurCode gm_AxCurCode2ExtCurCode;
    ;
    select gm_AxCurCode2ExtCurCode
        where gm_AxCurCode2ExtCurCode.CurrencyCode == _currencyCode;

    return gm_AxCurCode2ExtCurCode;
}
и
X++:
static GM_CBRCurrencyCode FindCBRCurrencyCode(CurrencyCode _currencyCode)
{
    GM_AxCurCode2ExtCurCode gm_AxCurCode2ExtCurCode;

    ;

    select gm_AxCurCode2ExtCurCode where gm_AxCurCode2ExtCurCode.CurrencyCode == _currencyCode;

    return gm_AxCurCode2ExtCurCode.CBRCurrencyCode;
}
Ну, то что писали, возможно, разные люди (перенос строк в селекте), это одно. А другое - я бы второй метод вообще бы убрал, он лишний, использовав первый. А в первом бы добавил "if (currencyCode)" и _forupdate с firstonly в селекте. Все-таки у метода find есть стандартная структура.
За это сообщение автора поблагодарили: EAlex (1).
Старый 22.12.2009, 15:01   #16  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от oip Посмотреть сообщение
я бы второй метод вообще бы убрал, он лишний
Не, убирать может и не нужно, но переназвать и переписать используя find стоит
X++:
static GM_CBRCurrencyCode CBRCurrencyCode(CurrencyCode _currencyCode)
{
    return GM_AxCurCode2ExtCurCode::find(_currencyCode).CBRCurrencyCode;
}

P.S.: Ещё немного и к теме можно будет добывить тег: "законченный пример"
За это сообщение автора поблагодарили: Андре (2).
Старый 22.12.2009, 15:12   #17  
oip is offline
oip
Axapta
Лучший по профессии 2014
 
2,564 / 1416 (53) ++++++++
Регистрация: 28.11.2005
Записей в блоге: 1
Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
Не, убирать может и не нужно
А зачем он? Вызывается один раз и возвращает просто поле самой таблицы.

Цитата:
Сообщение от S.Kuskov Посмотреть сообщение
P.S.: Ещё немного и к теме можно будет добывить тег: "законченный пример"
Ну, еще немного кодревью... Ну там подчеркивания в передаваемых параметрах в методах, импорт, вероятно, лучше делать в транзации, где-то там в паре мест при делении на переменную не проверяется, что у нее ненулевое значение, зачем-то объявляется переменная с начальным значение false, хотя оно и так false... Есть еще разные мелочи.
Старый 22.12.2009, 15:40   #18  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Цитата:
Сообщение от oip Посмотреть сообщение
А зачем он? Вызывается один раз и возвращает просто поле самой таблицы.
Ну на сколько я понял весь смысл этой таблица - служить интерфейсом преобразования из одного формата кодирования валюты в другой. Так что с перспективой на возможное развитие проекта почему бы не предоставить глобальную функцию преобразования
X++:
CBRCurrencyCode = GM_AxCurCode2ExtCurCode::CBRCurrencyCode(CurrencyCode)

Цитата:
Сообщение от oip Посмотреть сообщение
зачем-то объявляется переменная с начальным значение false, хотя оно и так false...
У такого подхода есть плюсы. Отсекается возможность случайно забытой инициализации и как следствие код лучше читается. Ну и потом пароноидальные мании... на компилятор надейся, а сам не плошай Я сам стараюсь не использовать не инициализарованные переменные.
За это сообщение автора поблагодарили: belugin (0).
Старый 22.12.2009, 15:45   #19  
Lemming is offline
Lemming
Участник
Аватар для Lemming
 
1,144 / 343 (14) ++++++
Регистрация: 20.04.2004
Адрес: Москва, Чайнатаун в Люблино
Записей в блоге: 10
;) Коллективный рефакторинг и новые варианты взаимодействия с рынком.
+5 копеек, по мелочи, ИМХО, вместо clicked на кнопке формы, начальный импорт кодов, теоретически, должен быть отдельным RunBase классом, а не вызывать "волшебный" статический метод fillCBRCurrencyCodeFromInternet, который к слову не "фром интернет", а "фром локал файл"

В объявлении класса gm_GetCurrencyFromFileCBR есть поля dialogDateFrom, dialogDateTo, которые нигде больше не используются, так же зачем-то там-же объявили саму переменную dialog.
За это сообщение автора поблагодарили: Андре (2).
Старый 22.12.2009, 16:54   #20  
Bober is offline
Bober
Участник
 
311 / 104 (4) +++++
Регистрация: 29.05.2007
Сколько программистов будет уволено из GMCS по результатам разбора примера ?
За это сообщение автора поблагодарили: Kabardian (1).
Теги
скачать (download), курс

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Импорт курса валют innavish DAX: Функционал 18 13.10.2009 09:25
Загрузка курсов валют Alenka DAX: Функционал 5 20.01.2009 11:50
Кэширование курсов валют Tony Green DAX: Программирование 8 09.02.2007 10:02
Закачка курсов валют с Интернета. Hans DAX: Программирование 1 22.09.2006 12:08
Импорт из текстового файла - один их вариантов. YVAS DAX: Программирование 5 13.01.2004 16:31
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:23.