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



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

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

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

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

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

четверг, ноября 29, 2007

iScala VBA: Встроенные формы

Чаще всего при создании новой формы средствами VBA используют стандартные компоненты. В результате форма выглядит достаточно инородно:

В составе Scala идет набор своих компонентов - туннелированные компоненты, позволяющих встраивать VBA приложения без всяких швов. Сделаем простейшую форму.

  1. Создаем новое VBA приложение Tunneling: Tools -> VBA Developer -> Project Explorer. New Project. Set Active для нового приложения.
  2. Идем в среду разработки: Tools -> VBA Developer -> Visual Basic Editor
  3. Добавляем новую форму.
  4. Идем в Tools -> References и добавляем ссылку на ScaXVBProxies 1.0 Type Library
  5. На палитре компонентов Toolbox щелкаем правой клавишей мыши и выбираем Additional Controls. Отмечаем все ScaXVB* компоненты. Получится что-то вроде этого:
  6. Бросаем на форму ScaXVBForm. Он должен присутствовать на любой форме, где используются туннелированные компоненты.
  7. Рисуем фому, используя только скальские компоненты. Добавляем кнопку закрыть с кодом ScaXVBForm1.DelayUnload
  8. Добавляем событие ScaXVBForm1_OnScaReady. В этом событии нужно заполнить все заголовки на форме. Дело в том, что вы не сможете сделать это в дизайнере, т.к. по идеологии таких приложений они должны читать все строки из LAN-файлов. По уму и нужно создать пользовательский LAN-файл и читать строки оттуда, но для простоты я сделал это в коде.
  9. Добавляем кнопку для запуска (в меню добавляется аналогично):

Получаем стандартную встроенную форму:

Код примера.

' Файл UserForm2

Private Sub scaXVBButton1_OnScaClick()
ScaXVBForm1.DelayUnload
End Sub

Private Sub ScaXVBForm1_OnScaReady()
scaXVBLabel1.Caption = "Some Label 1:"
scaXVBLabel2.Caption = "Some Label 2:"
scaXVBLabel3.Caption = "Some Label 3:"
scaXVBButton1.Caption = "Close"
End Sub

' Файл ProjectMacros

Sub RunUserForm2()
UserForm2.ScaXVBForm1.Connect ThisProcess, scaXVBDockedForm
UserForm2.ScaXVBForm1.Show
End Sub

вторник, ноября 20, 2007

Расширение функциональности Scala/iScala.Внешние программы. На чем писать.

Рано или поздно встает вопрос написания внешних программ, для целей отчетности или дополнительной функциональности. Вот на выборе среды, в которой можно это сделать, и остановлюсь сегодня. Исходить буду из то, что нужно решение, которое легко освоить, недорогое (в идеале бесплатное). Поэтому я сразу отбросил C++, да и C# решил не упоминать.

Visual Basic 6 (VB6)

Очень простая среда программирования, легкая в освоении и понятная, правда немного устаревшая и я не уверен, что Microsoft еще продает лицензии на этот продукт. Если у вас уже освоен VBA, то особых проблем при переходе не будет. Скорее всего еще долго будет использоваться.

Delphi

http://www.codegear.com/

Для своего времени это была просто революционная среда, но сейчас она потеряла былую популярность, в основном благодаря большому количеству ошибок в процессе развития. Сейчас имеется бесплатная версия. В ней нельзя устанавливать дополнительные компоненты, но существующего набора компонентов будет достаточно для подавляющего большинства приложений. Среда сложнее в освоении, чем VB6. Если уже есть опыт использования Delphi, то ничто не мешает делать это дальше, осваивать же с нуля не советую, есть, на мой взгляд, лучшие варианты.

Access

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

Visual Basic 2005 Express Edition

http://www.microsoft.com/rus/msdn/vstudio/express/default.mspx

Это бесплатный вариант Visual Studio. Никаких лицензионных ограничений. Функциональные ограничения несущественны для простых разработок. Современная, удобная среда, с полным набором возможностей. Для запуска приложений требуется установленный .Net Framework 2.0, но он устанавливается вместе с iScala 2.3. Для более ранних версий придется поставить его руками. Буквально на дня вышел Visual Basic 2008 Express, но его я еще не смотрел. Думаю, что тоже будет достойный продукт.

SharpDevelop

http://www.icsharpcode.net/OpenSource/SD/

Бесплатная среда для разработки программ под .Net Framework с открытыми исходными кодами. Возможности шире, чем у VB Express, работает довольно стабильно. Мне его использовать в реальных проектах не приходилось, но рассмотреть его как вариант стоит.

Вывод

На чем остановиться нужно решить самому. У меня это VB6 для быстрых и простых задач и VB Express в остальных случаях.

вторник, ноября 13, 2007

MS SQL: Backup всех БД

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

Запускаем Enterprise Manager. Выбираем в дереве "Management/Database Maintenance Plan" . Команда "New Maintenance Plan...". Запускается визард. Дальше, если картинки нет, то соответствующие окна пропущены и в них менять ничего не нужно.

Выбор баз данных. Можно выбрать все, только системные, все кроме системных, указать конкретных список БД.

Здесь включаем бекап и, нажимаем на отмеченную кнопку.

Расписание запуска. В моем случае сделан запуск после каждого рабочего дня.

Указываем куда помещать файлы бекапов и нужно ли для каждой базы создавать свой подкаталог. Еще очень удобно, что можно указать сколько времени хранить, т.е. кроме самой процедуры резервного копирования, будут еще стираться старые файлы (тут бы я еще предусмотрел еще одну отдельную процедуру, которая, например, в выходные будет копировать текущие резервные копии на ленточку или другой сервер).
Логи и оповещение оператора.
Ну вот и все. Задаем имя для плана и сохраняем. Все сделано на примере 2000й версии. В 2005м никаких принципиальных отличий нет. Запускаем Management Studio. Путь "Managements/Maintenance Plans". Команда "Maintenance Plan Wizard".

вторник, ноября 06, 2007

DDF отчеты

DDF отчеты самая старая технология создания отчетов в Scala. Такой отчет представляет из себя текстовый файл. Файл является шаблоном отчета, где описано содержание всех секций, состав секций и последовательность их вывода жестко зашиты в коде, так что повлиять можно только на содержимое самих секций. Для примера можно взглянуть на довольно простой отчет OR06 Product Label:

:START-LABEL
╔═════════════════════════════════════╗
║ <805> ║
║ <806> ║
║ STOCK.COD: <804L25> ║
║ DEL.DATE : <615> QTY :<811R09> ║
║ ORDER : <04> POS : <801> ║
║ BUYER : <401L25> ║
║ CUSTOMER : <400> ║
║─────────────────────────────────────║
║ <86> ║
╚═════════════════════════════════════╝
:END-LABEL
0
2

Тут всего одна секция LABEL. Угловыми скобками выделены макросы. Коды полей можно посмотреть здесь: "Системные Утилиты - Документы - Изменение Определения Документа - Редактор Формата Отчета", предварительно выбрав нужный отчет. Например, макрос <804L25> означает следующее: 804 - код запаса,  L25 - взять 25 символов слева. Менять можно только содержимое внутри секций. Значения вне секций трогать не советую(в нашем примере это две последние строки), там часто бывают всякие настройки, без которых сам отчет будет работать некорректно.


Какие еще преобразования возможны в DDF файлах? В хелпе я не нашел полного описания. У меня откуда-то давно есть текстовый файлик. Правда, не все, что описано в нем удалось использовать, но несколько раз он мне очень помог, так что приведу его здесь полностью:

-------------
DDF processor
-------------

Start [Prefix] DDFCode [Selector] [Modifier]... [Language] [;] End

Start < Start of DDF Code

Prefix # Optional Prefix
D (1) Date in words format (old style)
! (1) Date in words format (old style)
$ (2) Amount in words format
Z (3) Old Amount in words Format
* (4) Leading ***
_ (5) Russian dash delimiter ("12.12" like "12-12")
= (6) Russian truncate decimals ("12.00" like "12=")
. (7) Numbers with "." delimiter
: (8) Trimming of spaces before formating

DDFcode ## DDF code
###
?## Extended DDF Code
?###
??###

Selector L## Left part selector
L###
R## Right part selector
R###
S##@## Substring,Length
S###@##
S##@###
S###@###

Modifier(s) /* To Currency Recalculation modifier
/?
/##
:* From Currency Recalculation modifier
:?
:##
.# Rounding modifier
-# Coding segment,Length
+## Price from Price List

Style @# Date style (Numeric format):
0 - Scala standard/2 digit year)
1 - Scala extended/4 digit year)
2 - Compressed(No delimiters)/2 digit year
3 - Compressed/4 digit year
4 - ISO 8601 (always YYYY-MM-DD)

@# Date Style (Date in word Format)
@* Output Currency Style (Amount in word format)
@?
@##

Language ??? Language
FitFlag ; Example w/o fit: 12345678901234567890
DDFCode=XXX 1234567890XXX 1234567890
DDFCODE=XXXXXXXXXXXX 1234567890XXXXXXXXXXXX4567890
Example with fit: 12345678901234567890
DDFCode=XXX 1234567890XXX12346567890
DDFCODE=XXXXXXXXXXXX 1234567890XXXXXXXXXXXX1234567890

& Equivalent to fit plus additionally substitutes XML internal entities
& -> &amp;
< -> &lt;
> -> &gt;
' -> &apos;
" -> &quot;
& prevent ANSII2OEM conversion of DDF Code as well
\ Equivalent to fit without trimming spaces
Example with fit: 12345678901234567890
DDFCode=XXX 1234567890XXX 12346567890
DDFCODE=XXXXXXXXXXXX 1234567890XXXXXXXXXXXX1234567890

> End of DDF Code

На что стоит обратить внимание:



  • операции над строками, <CodeL10> - взять 10 символов слева, <CodeR15> - взять 15 символов справа, < CodeS10@12> - подстрока 12 символов, начиная с 10го
  • разные варианты заполнения <Code>, <Code;>, <Code\>