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

Последнее обновление: 03.06.2003


Новые:


В некоторых отчетах используются константы из приложений MS Office, например wd.. - константы Word, xl.. - из Excel, ad.. - ADO (работа с базами данных) и т.д.

Конечно, можно сразу заменить их на значения, но т.к. я обычно сохраняю в макрос (в Excel или Word), а потом копирую полученный код в скрипт, то мне их лень менять. Можно их описать в начале скрипта:

Const xlLandscape = 2

Так я стараюсь и делать, но иногда бывает лень, или их много - тогда я делаю "инклюд", т.е. где-нибудь, в конце файла добавляю процедуру:

Sub Include( cNameInc )
Dim s
  Set oFS = CreateObject("Scripting.Filesystemobject")
  Set oFile = oFS.OpenTextFile(IncPath+cNameInc)
  s=oFile.ReadAll()
  oFile.Close
  ExecuteGlobal s
End Sub

А вызываю ее в начале скрипта, примерно так:

Const IncPath="MyPath\vbs-inc\"
Include "Excel8.vbi"

Можно инклюдить все что угодно, только надо иметь ввиду, что в случае ошибки во включаемом файле, скрипт будет ругаться на оператор ExecuteGlobal а не на саму ошибку, а если в "инклюживаемом" файле есть функции или процедуры, и в них ошибки, то скрип будет ругаться на первую строку.

Некоторые константы для Office-2К не совпадают с константами для Office-97, но есть утилита, которая выдергивает константы из файлов .OLB, .TLB или .DLL. Для некоторых приложений я надергал сам, они лежат в файлах *8.vbi - для Office-97, и *9.vbi - для Office-2К.

Константы лежат в файле Vbs-inc.zip, для использования в отчетах надо выложить их в доступное место и поправить пути на него в образцах.


В файле bat.zip лежат батники, которые я запускаю из-под Диасофта. См. FAQ.

И еще, если скрипт (не отчет под Диасофт, а просто скрипт) одинаково работает под MS VBScript и ANTscript, то он будет иметь расширение .VBS, а если только под ANTscript - то расширение .ABS. Для таких скриптов я настроил по умолчанию запуск ANTscrC.exe ( ANTSCRC.EXE /de /asp /oem "%1" %* ).


Отчеты для DiasoftBANK for DOS:

RP3

Прислал Борисов Андрей (ФКБ ГП "Газпромбанк", г.Саратов).


RP4

В качестве образца взял пример из "Гаранта", добавил внутрь переменные Ворда и сохранил в "шаблон". Подробности описаны ниже. По Shift-F8 на документе, скрипт открывает Ворд, создает новый документ на основе шаблона и загоняет в переменные документа значения.

  1. 03ppWdV - Платежное поручение
  2. 03ppWdVb - Платежное поручение, для собственных платежей (плательщик - банк)
  3. 03poWdV - Платежный ордер
  4. 03poWdVb - Платежный ордер, для собственных платежей (плательщик - банк)

И к ним "шаблоны":

  1. Pp-var.dot - Платежное поручение
  2. Pord-var.dot - Платежный ордер

Поправить путь на vbs-inc
Поправить путь
на файлы шаблонов .DOT


RP7

Прислал Борисов Андрей (ФКБ ГП "Газпромбанк", г.Саратов).

[..]
Я тут для валютчиков сделал отчет, по-моему он называется 401 форма.
Можешь его выложить, может кому пригодиться.
Там есть небольшой ньюанс.
Во-первых сама таблица valforel.mdb после каждого отчета разростается и я не знаю
как ее можно упаковать. Можно, например, хранить пустой вариант этой таблицы и при каждом запуске отчета в батнике копировать с нужным именем поверх старой.
И во-вторых, на самом деле отчет нужен приведенный в доллары по всем валютам, но я сделал в рублях, они просто делят на курс доллара и получают нужные цифры. Хотя это тоже можно было сделать, но ... ну короче вот как есть :-)
[..]

Выкладываю как есть


Два образца: XLbalovR.rp7 - в рублях, и XLbalovT.rp7 - в тысячах.

Поправить путь на vbs-inc


Создавать пустой DBF довольно муторно, поэтому я просто копирую из пустого Obved.dbf. Имя выходного файла состоит из: "o_", 2 симв. - номер месяца, 1 симв. - последняя цифра года. Дата берется из даты конца отчета ("@ДатаК.@")

Т.к. раздел депо - в штуках, а остальные в тысячах, пришлось разбить на два отчета:

  1. AXobved1.rp7 - копирует пустую таблицу в Obved и заполняет ее в тыс, для всех областей, кроме депо
  2. AXobved2.rp7 - добивает данные для депо

Поправить путь на файл obved.DBF
Поправить путь на каталог OBVED

Когда проверка из ЦБ захотела пересчитать ФОР, им понадобились балансы за каждый день за несколько месяцев. Очень обрадовались, что я могу выгрузить в .DBF. Имя выходного файла совпадает с датой конца отчета "@ДатаК.@".

Поправить путь на файл obvedR.DBF
Поправить путь на каталог OUT

Если отчет не хочет работать с .DBF - посмотри FAQ


А это именно "Форма 101" в Excel. Давно сделал, да забываю выложить, а сегодня очень пригодилась - ну и вспомнил.

Два образца: AXF101ag .rp7 -всех области, кроме депо, и AXF101d.rp7 - депо.
Ну, и на всякий случай: AXF101b.rp7 - только балансовые счета

Но есть несколько моментов:

Поправить путь на vbs-inc
Дождитесь MsgBox


RP8

А это для экономистов. Постоянно долбали, хочется им видеть динамику доходов и расходов помесячно. Теперь делают его сами. На этом отчете я потренировался выгружать данные в Access, а потом, по ним заполнять таблицу в Excel.

Можно грузить данные и не в Access а в любую ODBC базу. Только для этого надо создать через "Панель управления" "Системный DSN" в "Источнике данных ODBC" и указать его имя в образце:
   oConn.Open "dsn=xxx;uid=yyy;pwd=zzz"
   где xxx-имя источника, yyy и zzz - имя для входа и пароль (если надо).
Потом в нем созать таблицу и запросы, как в XLobDtR7.mdb. Короче, просто положите XLobDtR7.mdb куда вам удобно и укажите на него путь в образце "Const mdbFile="

Два образца: XLobDtR7.rp8 и XLobDt7a.rp8. Второй делает тоже, что и первый, за исключением того, что по символу 11115 данные не выводятся, а только итоги (так захотелось нашим экономистам).

Отчеты состоят из двух частей:

  1. В первой - выгрузка оборотов по счетам 701 и 702 в Access. Данные для отчетов надо готовить за каждый месяц, по отдельности. (ну, если кому-нибудь надо, то можно готовить по-неделям или по-кварталам). Сначала убиваются старые данные за период, если они были, а потом загоняются новые. Так-что можно использовать отчет и при откатах-накатах. Только, надо иметь ввиду, что в качестве ключа используется дата начала @ДатаН...@ и дата конца периода @ДатаК...@, т.е. на SQL это примерно так:
       DELETE FROM obrt WHERE ((DateBgn=@ДатаН...@) AND (DateEnd=@ДатаН...@));
      (ну, не совсем так ...) , Поэтому, если загнать данные за интервал, который не нужен - то вычищать его прийдется вручную в Access.
  2. Во второй части отчета - он спросит, нужно ли выводить отчет в Excel, и если ответить "ДА" - то по данным из Access заполняется таблица в Excel. Остается только проверить, что бы таблица влезла на принтер и распечатать. (У меня есть принтер А3 и это проблемы не составляет) . А можно запустить XLobDt7a.abs, который сделает тоже самое.

Поправить путь на vbs-inc
Поправить путь
на mdbFile
Если было изменение наименования счета - Могут задваиваться строки
Работает долго, дождитесь MsgBox


То же, что и предыдущий, но группировка по балансовым счетам, и кроме оборотов выводится входящий остаток. (хорошо бы выводить средний остаток, но пока мне это не удалось)

Поправить путь на vbs-inc
Поправить путь
на mdbFile
Если было изменение наименования счета - Могут задваиваться строки
Работает долго, дождитесь MsgBox


RPС

Если у Вас есть кредиты, с процентной ставкой меньше 3/4 ставки рефинансирования, то возможно Вы столкнулись с той же проблемой что и мы: в Диасофте материальная выгода расчитывается исходя из текущей ставки рефинансирования, а по Налоговому кодексу она должна расчитываться исходя из ставки на дату выдачи кредита. Вот и пришлось соорудить такой отчетик. Ставка рефинансирования (верней 3/4 от нее) лежит в файле Refstake.xml. Поправить или посмотреть ставки можно с помощью скрипта Refstake.abs. Ну и собственно отчет в AxMatFx.rpc. И опять не обошлось без проблем, дело в том, что из "Начисления процентов" нет доступа к информации о договоре, а если договор был пролонгирован, то "дата открытия счета" - это дата пролонгации. А с крипт выбирает ставки из Refstake.xml по "дате открытия счета". В этом случае прийдется поменять ставку рефинансирования вручную, а остальное сделает Excel.

Исправлено: Строка "ВСЕГО" формировалась как сумма ячеек, содержащих "ИТОГО", когда счетов много - строка получалась длинной и не влазила в Excel, в результате ошибка "мало памяти". Пришлось "ИТОГО" вынести за пределы таблицы и суммировать всю колонку.

Поправить путь на vbs-inc
Поправить путь
на Refstake.xml
Работает долго, дождитесь MsgBox


RPN

Бухи очень просили именно в такой форме:

Доходы
Счет 30.03.01 29.06.01 28.09.01 29.12.01 ИТОГО Наименование
70101810200001110901   1 234.55 23 456.33 56 789.95 67 890.23 АО "Рога и Копыта"
70101810500001110902     12 345.55 345 678.67 123 456.38 ЗАО "Копыта и Рога"
...
ИТОГО по 70101 1 234 567.44 2 345 678.16 3 445 678.67 2 345 678.29 10 987 654.56  
...
ВСЕГО Доходы 4 566 789.49 6 789 876.70 4 567 890.44 5 678 876.87 23 456 789.50  

В генераторе выбираются все документы в корреспонденции со счетом свертки и загоняются в ADODB.Recordset, выбираются все счета и даты в которых были движения и все это запихивается в Excel.

Делал на скорую руку, и поэтому есть один момент:

Дебетовый или кредитовый документ определяется по наличию символа, для счета свертки в плане счетов символ не должен быть задан. Документ не попадет в отчет если и для корреспондирующего счета символ не задан ( и это правильно... Например 70302 - в отчете не нужен)

Зато, я полностью избавился от дополнительных файлов, вся обработка идет в памяти с использованием ADO.

Два образца: AxOpuDB.rpn - группировка по балансовым и AxOpuDS.rpn - по символам.

Подключить запрос AxOpuDoc.req
Настроить константы в запросе (ACCsvert -счет, на который производилась свертка)
Поправить путь на vbs-inc
Работает долго, дождитесь MsgBox


Вообще-то это так, скорее для красоты. Точнее, как-то, понадобился "кое-кому" такой график для доклада. Ну, я быстренько и нарисовал.

Дата окончания процентной ставки (@ДатаОк..@) считается датой планируемого погашения кредита. Берутся остатки на запрошенную дату и в соответствии с датой суммируются, все это вываливется в Excel и там отрисовывается график.

А еще, я попробовал создавать пустой Recordset, добавлять к нему поля и отбирать записи с помощью фильтров (сначала я делал это с помощью запросов в Access - ох и медленно работало).

Поправить путь на vbs-inc
Подключить запрос AXDogDt.req


RPT

Вечная проблема с округлениями. Надоело править вручную. Нет, отчет он не правит автоматом, но итоги подсчитывает исправно. За исключением раздела 3, там он выводит как есть. А в красненькой строке "Проверка" выводится разница между доходами и расходами. Наша задача - добиться, что бы она соответсвовала результатам в разделе 3, удалить ее и можно печатать.
За основу я взял образец от Диасофта. Несколько раз прошелся по нему RegExp (регулярные выражения в одном из редакторов), добавил соответсвующие процедуры, и готово. Разумеется, я и не пытался оптимизировать работу отчета, мне просто надо было относительно быстро получить результат, поэтому работает он не очень шустро. Исходный образец был для однофилиальной версии (нет у нас филиалов). Насколько я понимаю, он должен подойти и для многофилиальных банков, только надо заменить наименование формул "@1м2" на "@1ф2"

Поправить путь на vbs-inc
Работает долго, дождитесь MsgBox


RPK

anketaJb.rpk: Вообще-то, все данные берутся из .DBF, подготовленного в программе "Анкета юридического лица", DiasoftBANK используется только что бы запустить скрипт и передать ему ID отмеченного клиента. Это же самое можно проделать и в "программе".

anketaJd.rpk: А это заготовка, для вывода в Word без .DBF, средствами Диасофта. Если все забито в классификаторы, то в соответствующих полях нужно подставить значения классификаторов.

Для отчетов нужен тот же шаблон Word anketa/AnketaJdot.zip, что и для "программы"

Доступ к данным в Ворде через "переменные документа" (см. AxDgWd )

Поправить путь на файл Anketa.DBF
Поправить путь на файл шаблона AnketaJ.DOT


Отчеты для DiasoftREATIL for DOS:

RP1

Вид вклада мы забили в "Группу счетов" (@Группа счетов.....@), по виду вклада определяется файл шаблона документа Word ( .DOT), примерно так:

Const DotPath="MyPath\DOGOVOR\"

  VidVklada=trim(`@Группа счетов.....@`)

Select Case VidVklada
    Case "До востребования" Set objWDdoc = objWD.Documents.Add (DotPath+"Dovostr.dot")
    Case "Срочный (91 день)" Set objWDdoc = objWD.Documents.Add (DotPath+"Srok91.dot")
    Case "До востребования USD" Set objWDdoc = objWD.Documents.Add (DotPath+"DovostrV.dot")
    Case "До востребования DEM" Set objWDdoc = objWD.Documents.Add (DotPath+"DovostrV.dot")
    Case "До востребования EUR" Set objWDdoc = objWD.Documents.Add (DotPath+"DovostrV.dot")
Case Else

    s="Неизвестный вид вклада:"+vbCrLf+VidVklada
    WriteLine s
    MsgBox s
    quit
End Select

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

Номер договора - лицевая часть счета, а дата договора - дата открытия вклада ("@ОткВклD6@"). Для срочных вкладов, дата окончания договора - дата планируемого закрытия ("@ЗакрВклПD6@"). Сумма договора - исходящий остаток.

Два образца:

  1. AxDgWdB.rp1 - доступ к тексту в Ворде через "закладки"
  2. AxDgWdV.rp1 - доступ к тексту в Ворде через "переменные документа"

В примерах шаблонов документов .DOT использованы оба способа. Собственно, я сначала сделал через закладки, а потом нашел другой способ.

Для использования "закладок" надо в Ворде отметить текст и "Вставка\Закладка", добавить закладку. А в скрипте, что бы заменить текст, отмеченный закладкой:

    With objWDdoc.Bookmarks
        .Item("ИмяЗакладки").Range.Text ="Текст"
    End With

Для использования "переменных документа" надо в Ворде в нужном месте вставить поле:
{DOCVARIABLE "ИмяПеременной"}

А в скрипте:

    With objWDdoc.Variables
        .Add "ИмяПеременной","Текст"
    End With

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

И для переменных, осталось только:

	objWDdoc.ActiveWindow.View.ShowFieldCodes = false
	objWDdoc.Fields.Update

Скрипты не для Diasoft:


Если у Вас есть чем поделиться - шлите мне: antscript@narod.ru

 

 

 



Rambler's Top100

 

Используются технологии uCoz