Последнее обновление: 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" %* ).
Прислал Борисов Андрей (ФКБ ГП "Газпромбанк", г.Саратов).
В качестве образца взял пример из "Гаранта", добавил внутрь переменные Ворда и сохранил в "шаблон". Подробности описаны ниже. По Shift-F8 на документе, скрипт открывает Ворд, создает новый документ на основе шаблона и загоняет в переменные документа значения.
И к ним "шаблоны":
Поправить путь на vbs-inc
Поправить путь на файлы шаблонов .DOT
Прислал Борисов Андрей (ФКБ ГП "Газпромбанк", г.Саратов).
[..]
Я тут для валютчиков
сделал отчет, по-моему он
называется 401 форма.
Можешь его выложить, может кому
пригодиться. Там
есть небольшой ньюанс.
Во-первых сама таблица valforel.mdb после
каждого отчета разростается и я не
знаю как ее
можно упаковать. Можно, например,
хранить пустой вариант этой
таблицы и при каждом
запуске отчета в батнике
копировать с нужным именем поверх
старой.
И во-вторых, на самом
деле отчет нужен приведенный в
доллары по всем валютам, но
я сделал в рублях, они
просто делят на курс доллара и
получают нужные цифры. Хотя это
тоже можно было
сделать, но ... ну короче вот как есть
:-)
[..]
Выкладываю как есть
Два образца: XLbalovR.rp7 - в рублях, и XLbalovT.rp7 - в тысячах.
Поправить путь на vbs-inc
Создавать пустой DBF довольно муторно, поэтому я просто копирую из пустого Obved.dbf. Имя выходного файла состоит из: "o_", 2 симв. - номер месяца, 1 симв. - последняя цифра года. Дата берется из даты конца отчета ("@ДатаК.@")
Т.к. раздел депо - в штуках, а остальные в тысячах, пришлось разбить на два отчета:
Поправить путь на файл obved.DBF
Поправить путь на каталог OBVED
Когда проверка из ЦБ захотела пересчитать ФОР, им понадобились балансы за каждый день за несколько месяцев. Очень обрадовались, что я могу выгрузить в .DBF. Имя выходного файла совпадает с датой конца отчета "@ДатаК.@".
Поправить путь на файл obvedR.DBF
Поправить путь на каталог OUT
Если отчет не хочет работать с .DBF - посмотри FAQ
А это именно "Форма 101" в Excel. Давно сделал, да забываю выложить, а сегодня очень пригодилась - ну и вспомнил.
Два образца: AXF101ag .rp7 -всех
области, кроме депо, и AXF101d.rp7
- депо.
Ну, и на всякий случай: AXF101b.rp7
- только балансовые счета
Но есть несколько моментов:
- В нашем балансе не используются: "Б. Счета доверительного управления" и "Г. Срочные операции", а посему там забиты нули. Если кому надо - я думаю разберетесь, а если нет - пишите, я помогу.
- Поскольку "депо" в штуках, а остальные в тысячах - опять пришлось разделить на две части. Но в первой части создается новая книга Excel, о которой вторая часть ничего не знает. Она просто ищет на текущем листе Excel симолы "---" в одной ячейке, и если находит - то говорит, что найдена первая часть. Если ей сказать "Да" - она добавит "депо" в конец после "---" (вернее - вместо) .
- Отчет предназначен для ручной правки округления, и поэтому правятся входящие и обороты в рублях и инвалюте, а итоги и исходящие - расчитываются. А за пределами таблицы (что бы не забыть что было) итоги от Диасофта. Не бойтесь печатать вместе с ними, на бумагу они не попадут (если конечно это не трогать).
Поправить путь на vbs-inc
Дождитесь MsgBox
А это для экономистов. Постоянно долбали, хочется им видеть динамику доходов и расходов помесячно. Теперь делают его сами. На этом отчете я потренировался выгружать данные в 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 данные не выводятся, а только итоги (так захотелось нашим экономистам).
Отчеты состоят из двух частей:
Поправить путь на vbs-inc
Поправить путь на mdbFile
Если было изменение наименования счета - Могут задваиваться строки
Работает долго, дождитесь MsgBox
То же, что и предыдущий, но группировка по балансовым счетам, и кроме оборотов выводится входящий остаток. (хорошо бы выводить средний остаток, но пока мне это не удалось)
Поправить путь на vbs-inc
Поправить путь на mdbFile
Если было изменение наименования счета - Могут задваиваться строки
Работает долго, дождитесь MsgBox
Если у Вас есть кредиты, с процентной ставкой меньше 3/4 ставки рефинансирования, то возможно Вы столкнулись с той же проблемой что и мы: в Диасофте материальная выгода расчитывается исходя из текущей ставки рефинансирования, а по Налоговому кодексу она должна расчитываться исходя из ставки на дату выдачи кредита. Вот и пришлось соорудить такой отчетик. Ставка рефинансирования (верней 3/4 от нее) лежит в файле Refstake.xml. Поправить или посмотреть ставки можно с помощью скрипта Refstake.abs. Ну и собственно отчет в AxMatFx.rpc. И опять не обошлось без проблем, дело в том, что из "Начисления процентов" нет доступа к информации о договоре, а если договор был пролонгирован, то "дата открытия счета" - это дата пролонгации. А с крипт выбирает ставки из Refstake.xml по "дате открытия счета". В этом случае прийдется поменять ставку рефинансирования вручную, а остальное сделает Excel.
Исправлено: Строка "ВСЕГО" формировалась как сумма ячеек, содержащих "ИТОГО", когда счетов много - строка получалась длинной и не влазила в Excel, в результате ошибка "мало памяти". Пришлось "ИТОГО" вынести за пределы таблицы и суммировать всю колонку.
Поправить путь на vbs-inc
Поправить путь на Refstake.xml
Работает долго, дождитесь MsgBox
Бухи очень просили именно в такой форме:
Доходы | ||||||
Счет | 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
Вечная проблема с округлениями.
Надоело править вручную. Нет, отчет
он не правит автоматом, но итоги
подсчитывает исправно. За
исключением раздела 3, там он
выводит как есть. А в красненькой
строке "Проверка" выводится
разница между доходами и расходами.
Наша задача - добиться, что бы она
соответсвовала результатам в
разделе 3, удалить ее и можно
печатать.
За основу я взял образец от
Диасофта. Несколько раз прошелся по
нему RegExp (регулярные выражения в
одном из редакторов), добавил
соответсвующие процедуры, и готово.
Разумеется, я и не пытался
оптимизировать работу отчета, мне
просто надо было относительно
быстро получить результат, поэтому
работает он не очень шустро.
Исходный образец был для
однофилиальной версии (нет у нас
филиалов). Насколько я понимаю, он
должен подойти и для
многофилиальных банков, только
надо заменить наименование формул
"@1м2" на "@1ф2"
Поправить путь на vbs-inc
Работает долго, дождитесь MsgBox
anketaJb.rpk: Вообще-то, все данные берутся из .DBF, подготовленного в программе "Анкета юридического лица", DiasoftBANK используется только что бы запустить скрипт и передать ему ID отмеченного клиента. Это же самое можно проделать и в "программе".
anketaJd.rpk: А это заготовка, для вывода в Word без .DBF, средствами Диасофта. Если все забито в классификаторы, то в соответствующих полях нужно подставить значения классификаторов.
Для отчетов нужен тот же шаблон Word anketa/AnketaJdot.zip, что и для "программы"
Доступ к данным в Ворде через "переменные документа" (см. AxDgWd )
Поправить путь на файл Anketa.DBF
Поправить путь на файл шаблона AnketaJ.DOT
Вид вклада мы забили в "Группу счетов" (@Группа счетов.....@), по виду вклада определяется файл шаблона документа 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@"). Сумма договора - исходящий остаток.
Два образца:
В примерах шаблонов документов .DOT использованы оба способа. Собственно, я сначала сделал через закладки, а потом нашел другой способ.
Для использования "закладок" надо в Ворде отметить текст и "Вставка\Закладка", добавить закладку. А в скрипте, что бы заменить текст, отмеченный закладкой:
With objWDdoc.Bookmarks .Item("ИмяЗакладки").Range.Text ="Текст" End With
Для использования "переменных
документа" надо в Ворде в
нужном месте вставить поле:
{DOCVARIABLE "ИмяПеременной"}
А в скрипте:
With objWDdoc.Variables .Add "ИмяПеременной","Текст" End With
Переменные более удобны, т.к. достаточно задать ее один раз, а закладки надо заменять все, даже если текст повторяется, и не стоит пытаться найти отсутствующую закладку.
И для переменных, осталось только:
objWDdoc.ActiveWindow.View.ShowFieldCodes = false objWDdoc.Fields.Update
Если у Вас есть чем поделиться - шлите мне: antscript@narod.ru