Apico Soft / АПИКО Софт



Спонсором блога ScalaHelp.RU является компания АПИКО Софт.

Мы предоставляем:
- Качественный ERP консалтинг.
- Внедрение и сопровождение системы.
- Российские формы первичных документов, бухгалтерская и налоговая отчетность.

- Разработка корпоративной отчетности.

Наш телефон 8 (495) 961 98 48
Сайт http://www.apicosoft.ru/

Позвоните нам, мы сделаем все, чтобы помочь Вам.

пятница, июля 06, 2007

Дополнительные функций для CR

Crystal Reports имеет встроенный язык(даже два), который позволяет писать дополнительные функции. Эти функции можно выделять в общие и использовать в разных отчетах. Вот, например, простая функция печати даты вида "31 декабря 2007 г.", работа которой не зависит от региональных и языковых настроек компьютера пользователя:

Function (DateVar Dt)
  numberVar dd;
  numberVar mm;
  numberVar yy;
  stringVar sm;
  dd := Day(Dt);
  mm := Month(Dt);
  yy := Year(Dt);
  stringVar array MonthNames := ["Января", "Февраля", "Марта", "Апреля", "Мая", "Июня", "Июля", "Августа", "Сентября", "Октября", "Ноября", "Декабря"];
  CStr(dd, 0) & " " & MonthNames[mm] & " " & CStr(yy, 0, "") & " г."

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

Спецификация по созданию таких библиотек можно найти на сайте CR.

В составе iScala идет такая библиотека. Более подробно смотри раздел помощи "Special Functions for Crystal Reports".

В своей работе я часто пользуюсь одной такой библиотекой. Изначально она была написана Alexey Vishnyakov из SCALA CIS. С тех пор разными людьми в нее вносились изменения и добавлялись новые возможности.

Список функций библиотеки:

  • avvScaCRGetStringField(SqlString As String) As String - выполняет произвольный SQL запрос SqlString и возвращает значение текстового поля из БД. В запросе можно использовать макросы <CC> и <YY> - они будут заменены на код компании и финансовый год соответственно.
  • avvScaCRGetNumericField(SqlString As String) As Double - тоже, но для числового поля
  • avvScaCRGetDateField(SqlString As String) As Date - тоже, но для поля типа дата
  • avvScaCRNumStr(N As Currency, rub As Integer) As String - представление числа прописью.
    При втором аргументе функции равном:
    0 - вывод только числа прописью,
    1 - дополнительно вывод "рублей" и "копеек"
    2 - дополнительно вывод у.е. и сотых у.е.
    3 - дополнительно вывод "долларов" и "центов"
    4 - дополнительно вывод "ЕВРО" и "центов"
    5 - дополнительно вывод "ГРИВНЫ" и "копейки" (на украинском языке)
  • avvScaCRScaNumToNumber(strNum As String) As Double - конвертация текстовой строки в число
  • avvScaCRScaFormatNumber(Num As Double, ThousandSeparator As String, DecimalSeparator As String, DecimalPlaces As Integer) As String - форматирование числа
  • avvScaCRScaNumberToStr(Num As Double) As String - конвертация числа в строку в соответствии с настройками компании
  • avvScaCRScaShortDateToDate(StrDate As String) As Date - конвертация текстовой строки типа в дату

К сожалению функции, работающие с БД, не всегда правильно работают с несколькими сессиями. Я уже описывал эту проблему тут.

Саму библиотеку и ее исходный код можно скачать здесь.

Для установки нужно зарегистрировать DLL на всех компьютерах, где будут использоваться такие отчеты командой: regsvr32 CRUFLavv.dll

Должно появиться сообщение "DllRegisterServer в CRUFLavv.dll завершено успешно."

После этого новые в списке функций появятся новые пункты, путь к ним Functions/Additional Functions/Visual Basic UFLs (u2lcom.dll):

Можно пользоваться.

Комментариев нет:

Отправить комментарий