пользователям программных продуктов Scala 5.1, iScala 2.1, iScala 2.2, iScala 2.3, iScala 3.0, iScala 3.1, iScala 3.2 (и так далее)

Так ли необходима библиотека CRUFLavv.dll?

Некоторые клиенты, использующие Кристалловские шаблоны печати документов из iScala, при переходе на новую версию (3.1 или 3.2) столкнулись с проблемами печати документов. А дело всё в используемой внешней библиотеке CRUFLavv.dll.

Начнём с того, откуда взялась эта библиотека.
CRUFLavv.dllИтак, название продукта: «iScala 2.2 RTP-template extention». На самом деле здесь опечатка. Должно быть не RTP, а RPT.

Из других файлов, входящих в состав проекта, можно найти такое описание: «Additional Users Functions for Crystal Reports»

Как расшифровывается название библиотеки?

  • CR — явно Crystal Reports;
  • UF — очевидно, Users Functions (пользовательские функции)
  • L — скорее всего Library (Библиотека)
  • avv — Алексей Викторович Вишняков

Кроме этого, библиотека редактировалась Рушаном Абдряшитовым:

' Author:       A.V.Vishnyakov (AVV - Scala Technical Consultant).
' Modified by:  R.I.Abdryashitov (ARI - Scala Technical Consultant), 15.02.2013.

Здесь не указана дата создания, только дата изменения. Но, так как я точно знаю, что Алексей Вишняков в конце декабря 2004 года покинул Эпикор, значит создана эта библиотека была не позднее 2004 года.
А теперь давайте попытаемся разобраться чего в ней такого, почему она перестала работать и так ли нужно её использовать сейчас, в 2018 году.

  1. Библиотека содержит функцию, которая позволяет из кристалловского отчёта обращаться к базе данных iScala используя строку соединения открытой сессии iScala и получить значение одного из полей строки какой-либо таблицы. В версиях до 3.1. объект, к которому обращается библиотека, назывался SfwIII (Scala for Windows III), мои коллеги называли его «Эс Эф Вэ ай-яй-яй» 🙂 В версиях, начиная с 3.1. он называется iScala. Из-за этого библиотека и перестала работать. Разумеется, есть перекомпилированный вариант под версию 3.1, но официально никто его не поддерживает, так что давайте не спешить его искать 🙂
  2. Также из открытой сессии можно получить код компании, финансовый год, числовой формат, количество знаков после запятой, формат даты и разделитель даты, которые, в свою очередь, используются в пользовательских функциях, встроенных в библиотеку.
  3. Кроме этого имеется несколько полезных функций, например,
    • Public Function NumStr(N As Currency, rub As Integer) As String
      '   Представление числа прописью.
      '   Числа типа Currency - до ~922 триллионов
      '   При втором аргументе функции равном:
      '              0, вывод только числа прописью,
      '              1, дополнительно вывод "рублей" и "копеек"
      '              2, дополнительно вывод у.е. и сотых у.е.
      '              3, дополнительно вывод "долларов" и "центов"
      '              4, дополнительно вывод "ЕВРО" и "центов"
      '              5, дополнительно вывод "ГРИВНЫ" и "копейки" (на укр. языке)
    • Public Function ScaNumToNumber(strNum As String) As Double
      'Конвертация текстовой строки в число
    • Public Function ScaFormatNumber(Num As Double, ThousandSeparator As String, DecimalSeparator As String, DecimalPlaces As Integer) As String
      ' форматирование числа
    • Public Function ScaNumberToStr(Num As Double) As String
      'Конвертация числа в строку в соответствии с настройками компании
    • Public Function ScaShortDateToDate(StrDate As String) As Date
      'Конвертация текстовой строки типа в дату

А теперь позвольте мне популярно объяснить, что эта библиотека Вам больше не нужна.

Начнём с пункта 1. Внимательно прочитайте следующую цитату из статьи «Сравнение разных технологий печати документов в Scala, iScala»:

Возможность обращения к базе данных — иногда в наборе DDF кодов нет нужного. В то же время в таблице базы данных информация имеется и было бы весьма желательно эту информацию получить. Именно из-за этого в своё время мой коллега Алексей Вишняков создал специальную библиотеку для кристала. Она до сих пор работает у многих клиентов, хотя давно пора перейти на новую современную технологию (канал MSRS), где возможность обращения к базе данных является «родной» и где можно сразу получить один набор данных из многих строк, в отличие от использования вышеупомянутой библиотеки, где приходится посылать много запросов на возврат одного значения, из-за чего построение документа может выполняться достаточно длительное время.

Пункт 2 можно пропустить, т.к. в первую очередь он используется для работы функций, кратко описанных в п.3. Хочу лишь добавить, что получить параметры сессии можно более простым способом
Пункт 3:
NumStr — сумма прописью. Никто не запрещает использовать эту функцию непосредственно в отчёте, а не из «внешней» библиотеки
ScaNumToNumber — эта функция нужна, чтобы преобразовать текстовое представление числового значения в число, которое можно будет использовать в арифметических операциях, т.к. набор данных, который iScala передаёт отчёту содержит все числа, отформатированные в соответствие с числовым форматом, заданным для компании, например, 123’456’789,01. С одной стороны, это утверждение верно, однако, это не полная информация. Возможно, Вы просто не знаете, что в DDF файле можно в явном виде задать формат числа без всяких разделителей тысяч, а также с использованием точки, как десятичного разделителя. Это, так называемые Extended DDF форматы, например, <.13> (будет выведено 123456789.01) вместо <13> (будет выведено в отформатированном виде, например, 123’456’789,01). То же самое, касается и ScaShortDateToDate , например, <10@1> (год — 4 знака) вместо <10> (год 2 знака) или, например, <10@4> — ISO format 8601 (всегда YYYY-MM-DD). Таким образом, эти функции просто теряют смысл.

А теперь подумайте, хотите ли Вы использовать библиотеку, которую никто не поддерживает, или может быть всё-таки задаться вопросом: «А что в ней такого, что в настоящий момент не может быть сделано более оптимальным способом?» 🙂
Я понимаю, что переделывать не хочется, но если Вы переходите на новую версию iScala, значит в этом есть какой-то смысл, верно? Наверное, есть смысл и в том, чтобы избавиться от устаревших технологий, которые мы тащим из прошлого просто потому что нам лень оторваться от социальных сетей и заняться, наконец, работой 🙂

Если у Вас возникли вопросы, не стесняйтесь написать:

Ваше имя или псевдоним (обязательно)

Ваш e-mail (обязательно)

Тема (обязательно)

Сообщение