#

Синтаксис:

# текст

Команда печати.

Примеры:

а) # Оборот 51 счета [ОБ("51")]

Будет напечатано: Оборот 51 счета 1200000.00.

б) # Сальдо 01 счета [СНД("01")]

Команда печати работает следующим образом:

а) все, что не заключено в квадратные скобки, выводится на печать без всяких изменений;

б) в квадратные скобки заключается произвольное выражение ( в том числе, макросы, выражения и т.д.). Значение этого выражения сначала вычисляется, а затем выводится на печать.

Пример:

# Остаточная стоимость основных средств:

# [СНД("01") - СНК("02")]


$include

Синтаксис:

$include <имя файла>

Оператор включает в текст программы содержимое указанного файла. Этот файл может содержать определение часто используемых подпрограмм. По умолчанию расширение файла .BAS

Пример:

$include macros


abort_trn

Синтаксис:

abort_trn

Отмена транзакции.

Пример:

d = open("EXAMPLE")

getfirst(d)

begin_trn

'DbS_конец'.d = 'DbS_конец'.d * 2

update(d)

if find(d,1,2,200000)<>0 then

rem искомое значение не найдено, "откатка" изменений

abort_trn

else

rem поиск успешный, запомнить изменения

end_trn

end if

close(d)

end

В приведенной программе значение поля 'DbS_конец' таблицы EXAMPLE.BTR увеличивается в 2 раза, если найдено значение 200000 2-го ключа, состоящего из одного сегмента.


abs

abs( <число>)

Функция возвращает абсолютное значение (модуль) числа.


array

Синтаксис:

array(<размер>,<элементы>)

Создать массив указанного размера, записать в него заданные значения и вернуть его дескриптор. Элементы массива нумеруются от 0 до <размер>. Получить элемент массива можно с помощью операции []. Уничтожение массива происходит автоматически при исчезновении ссылок на массив. В 0-м элементе рекомендуется помещать текущую длину массива (первоначально равно количеству значений элементов при создании массива, т.е. если указан только размер, в 0-м элементе 0). Максимальную длину можно узнать с с помощью функуции size.

Пример:

a=array(10)

for i=1 to 10

a[i]=0

next

rem Уничтожить массив

a=0

rem Двумерный массив

a=array(10)

for i=1 to 10

a[i]=array(20)

next

rem Обращаемся к элементу (5,12)

a[5][12]=10

MonNames=array(12,"январь","февраль","март","апрель","май","июнь","июль","август","сентябрь","октябрь","ноябрь","декабрь")


begin_trn

Синтаксис:

begin_trn

Начало транзакции.

Пример:

d = open("EXAMPLE")

getfirst(d)

begin_trn

'DbS_конец'.d = 'DbS_конец'.d * 2

update(d)

if find(d,1,2,200000)<>0 then

rem искомое значение не найдено, "откатка" изменений

abort_trn

else

rem поиск успешный, запомнить изменения

end_trn

end if

close(d)

end

В приведенной программе значение поля 'DbS_конец' таблицы EXAMPLE.BTR увеличивается в 2 раза, если найдено значение 200000 2-го ключа, состоящего из одного сегмента.


bof

bof( <дескриптор файла> )

Данная функция возвращает 1, если достигнуто начало файла, и 0, в противном случае.

Пример.

d1=open("EXAMPLE")

oborot = 0

getlast(d1)

while bof(d1)=0

oborot = oborot + 'Сумма'.d1

getprev(d1)

wend

close(d1)

end


chr

Синтаксис:

chr(<код>)

Функция возвращает строку из одного символа с указанным ASCII-кодом.

Пример:

rem печать "

print chr(34)


clearbuf

Синтаксис:

clearbuf( <дескриптор файла> )

Очистка буфера текущей записи BTR - файла (таблицы) с заданным дескриптором.

Пример.

d1 = open("EXAMPLE")

getfirst(d1)

clearbuf(d1)

insert(d1)

close(d1)

end

Приведенная программа вставляет пустую запись в базу данных.


close

Синтаксис:

close( <дескриптор файла> )

Закрытие BTR - файла (таблицы) с заданным дескриптором.


closeall

Синтаксис:

closeall(<значение>)

Используется для закрытия таблиц BTR путем уменьшения числа открытых таблиц до указанного значения.


current_tables

Текущие открыттые таблицы доступны через этот массив

current_tables[0] - количество уровней

current_tables[1] - таблица для текущего окна, чем больше номером, тем выше уровень


date_add

date_add( <дата>, изм, ед)

date_add( <дата>, изм)

Функция возвращает дату, увеличенную (уменьшенную) на изм. ед по умолчанию 0 (дни), 1 (месяц), 2 (год).


date_diff

date_diff( <дата1>, <дата2>[, <разница>=0])

Функция возвращает разницу между двумя датами в днях (по умолчанию) или в месяцах (если разница=1)


date_set

date_set( <дата>, <изм>)

Функция возвращает дату, соответствующую <изм> из вариантов -1 (начало месяца), 1 (конец месяца), -2 (начало года), 2 (конец года).


datetofld

datetofld( <дата> )

Данная функция преобразует значение <дата>, из формата даты (DD/MM/YY) в формат поля типа Date базы данных.

Пример: d = datetofld("01/02/97")

Результат: d = "19970201"


DBASIC

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

Пример программы с разбором

Операторы языка

Логические и арифметические операции

Подпрограммы для работы с базами данных

Подпрограммы для работы со строками и преобразования

Подпрограммы для работы с окнами

Подпрограммы для работы с отчетами

Прочие подпрограммы

Подпрограммы для бухгалтерских программ


dde_close

Синтаксис:

dde_close

Закрыть соединение с Excel или Word


dde_execute

Синтаксис:

dde_execute(<команда>)

Выполнить указанную команду (полная информация о возможных командах доступна в документации по MS Excel)


dde_open

Синтаксис:

dde_open(<приложение> [,<документ>])

Открыть соединение с Excel или Word

Пример:

dde_open("EXCEL")

dde_execute("OPEN("+chr(34)+"SAMPLE.XLS"+chr(34)+")")

dde_poke("R1C1","Отчет за 2003г.")

dde_close

page="Книга1"

rem выбрать страницу

dde_execute("[WORKBOOK.ACTIVATE("+chr(34)+page+chr(34)+")]")

rem проверить выбор

s=dde_request("Selection")

if page=substr(s,strlen(fname)+4,strlen(page)) then

dde_close

rem подключиться для чтения

dde_open("EXCEL","[SAMPLE.XLS]"+page)

rem извлечь значение

s=dde_request("R1C1")

rem убрать cr-lf

s=substr(s,1,strlen(s)-2)

rem отключиться

dde_close

dde_open("EXCEL")

end if


dde_poke

Синтаксис:

dde_poke(<поле>,<значение>)

Вывести значение в указанное поле (адрес ячейки таблицы формируется как R#C#)


dde_request

Синтаксис:

dde_request(<поле>)

Функция возвращает значение указанного поля (адрес ячейки таблицы формируется как R#C#)


delete

Синтаксис:

delete( <дескриптор файла> )

Удаление текущей записи таблицы с заданным дескриптором.

Пример.

d1 = open("EXAMPLE")

getfirst(d1)

delete(d1)

close(d1)

end

Приведенная программа удаляет первую запись базы данных.


divstr

Синтаксис:

divstr(<строка>,<ширина>,<номер>)

Разбить строку на подстроки не более указанной ширины и вернуть подстроку с указанном номером


end

Синтаксис:

end

Конец программы.

Пример.

print "Удаление базы данных EX.BTR"

system("delete EX.BTR")

print "База данных удалена, нажмите любую клавишу... "

pause

end


end_trn

Синтаксис:

end_trn

Завершение транзакции.

Пример:

d = open("EXAMPLE")

getfirst(d)

begin_trn

'DbS_конец'.d = 'DbS_конец'.d * 2

update(d)

if find(d,1,2,200000)<>0 then

rem искомое значение не найдено, "откатка" изменений

abort_trn

else

rem поиск успешный, запомнить изменения

end_trn

end if

close(d)

end

В приведенной программе значение поля 'DbS_конец' таблицы EXAMPLE.BTR увеличивается в 2 раза, если найдено значение 200000 2-го ключа, состоящего из одного сегмента.


eof

eof( <дескриптор файла> )

Данная функция возвращает 1, если достигнут конец файла, и 0, в противном случае.

Пример.

d1=open("EXAMPLE")

oborot = 0

getfirst(d1)

while eof(d1)=0

oborot = oborot + 'Сумма'.d1

getnext(d1)

wend

close(d1)

end


error

Синтаксис:

error(<сообщение>)

Функция завершает выполнение программы и выводит сообщение об ошибке


executeflag

Синтаксис:

executeflag( <режим> )

Функция устанавливает режим реагирования на ошибки исполнения. Режим является суммой флагов. Флаг 1 означает реакцию на неинициализированную (пустую) переменную. Флаг 2 означает реакцию на ошибку отсутствия базы данных. Функция возвращает старый режим исполнения.

Пример:

e=executeflag(0)

db=open("table")

if vartype(db)!=0 then

rem таблица существует

else

rem такой таблицы нет

end if

executeflag(e)


fieldname

findfield( <дескриптор файла>, <номер поля> )

Данная функция возвращает имя поля с указанным номером. Нумерация полей начинается с 0.


find*

find*( <дескриптор файла>, <список полей>,

<значение 1 поля>, [<значение 2 поля>...] )

Если ключ совпадает с текущим, вместо списка полей указывается пустая строка. Для временных таблиц допускается использовать find и findge. Для DBF и DB поиск по ключу невозможен.

find( <дескриптор файла>, <количество сегментов>, <ключ поиска>,

<значение 1 сегмента поиска>, [<значение 2 сегмента поиска>...] )

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

findge( <дескриптор файла>, <количество сегментов>, <ключ поиска>,

<значение 1 сегмента поиска>, [<значение 2 сегмента поиска>...] )

Поиск записи с равным или большим значением ключа.

findgt( <дескриптор файла>, <количество сегментов>, <ключ поиска>,

<значение 1 сегмента поиска>, [<значение 2 сегмента поиска>...] )

Поиск записи с большим значением ключа.

findle( <дескриптор файла>, <количество сегментов>, <ключ поиска>,

<значение 1 сегмента поиска>, [<значение 2 сегмента поиска>...] )

Поиск записи с равным или меньшим значением ключа.

findlt( <дескриптор файла>, <количество сегментов>, <ключ поиска>,

<значение 1 сегмента поиска>, [<значение 2 сегмента поиска>...] )

Поиск записи с меньшим значением ключа.

find_l( <дескриптор файла>, <количество сегментов>, <ключ поиска>,

<значение 1 сегмента поиска>, [<значение 2 сегмента поиска>...] )

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

ВНИМАНИЕ: нумерация ключей во всех функциях поиска начинается с 1. Ключ 0 означает использование текущего ключа.

Данные функции возвращают значение:

0 - если запись, удовлетворяющая заданным условиям, найдена;

1 - если запись не найдена.

Пример:

d = open("EXAMPLE")

if find(d,1,2,200000)<>0 then

rem искомое значение не найдено

else

rem поиск успешный

end_if

close(d)

end


findfield

findfield( <дескриптор файла>, <имя поля> )

Данная функция возвращает 1, если поле с заданным именем существует в файле, и 0, в противном случае.


fldtodate

fldtodate( <дата> )

Данная функция преобразует значение <дата>, из формата поля (19970201) в формат даты 01/02/97.

Пример: d = fldtodate("19970201")

Результат: d = "01/02/97"


fldtofulldate

fldtofulldate( <дата> )

Данная функция преобразует значение <дата>, из формата поля (19970201) в формат даты 01/02/1997.

Пример: d = fldtodate("19970201")

Результат: d = "01/02/1997"


fmod

fmod( <делимое>,<делитель>)

Функция возвращает остаток от деления при делении чисел нацело.


for

Синтаксис:

for <начальное выражение> to <конечное выражение>

<операторы>

next

Оператор цикла. Тело цикла выполняется до тех пор, пока начальное выражение, увеличиваемое при каждом выполнении цикла на единицу, не станет больше конечного выражения.

Пример:

d = open("EXAMPLE")

getfirst(d)

for i=1 to size(d)

'DbS_конец'.d = 'DbS_конец'.d + 100

update(d)

getnext(d)

next

close(d)

end


fromeof

Синтаксис:

fromeof

Функция позволяет проверить, окончился ли текущий входной файл

Пример:

fromfile("TEXT.TXT")

while fromeof=0

input s

print s

wend

fromfile()


fromfile

Синтаксис:

fromfile( [<имя файла>][, <кодировка>=0])

Подпрограмма позволяет выполнять ввод из указанного файла.

Если имя файла не указано, то восстанавливается режим интерактивного ввода.

По умолчанию используется кодировка DOS (866), для кодировки Windows (1251) вторым аргументом указать 1, для UTF8 - 4.

Пример:

fromfile("TEXT.TXT")

while fromeof=0

input s

print s

wend

fromfile()


function

Синтаксис:

function <имя функции> [ (<имя1> [, <имя2>]...) ]

<операторы>

result=<выражение>

end function

Определение пользовательской функции. Результат, возвращаемый функцией должен быть записан в переменную result. Для досрочного выхода можно использовать оператор return. Подпрограмма может иметь переменное количество аргументов, для этого в заголовке нужно указать символ * вместо списка параметров подпрограммы. Фактические аргументы функции будут помещены в массив arg. Элемент массива arg[0] содержит количество аргументов. Если аргументы разделялись символом ; или какой-либо аргумент пропущен (например, f(1,,3) или f(1;3)), то массиве будут содержаться пустые значения (для обработки пустых значений установите флаги исполнения).

Определения подпрограмм не могут быть вложенными. Функции не могут быть рекурсивными.

Пример:

function cube(x)

result=x*x*x

end function

print "4^3=";cube(4)


getbuffer

getbuffer( <дескриптор файла> )

Функция возвращает содержимое текущей записи в виде одной строки. Удобно для копирования записей.


getfirst

Синтаксис:

getfirst( <дескриптор файла> )

Переход к первой по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором.

getfirst_l( <дескриптор файла> )

Переход к первой по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором с блокировкой этой записи.

Пример.

d1 = open("EXAM_1")

d2 = open("EXAM_2 ")

getfirst(d1)

getfirst_l(d2)

for i=1 to 10

'DbS_конец'.d2 = 'DbS_конец'.d1

update(d2)

getnext(d1)

getnext_l(d2)

next

close(d1)

close(d2)

end

Приведенная программа осуществляет копирование значений поля 'DbS_конец' 10-ти первых записей базы данных EXAM_1.BTR в соответствующее поле 10-ти первых записей базы данных EXAM_2.BTR. Причем, записи дополняемой базы данных берутся с блокировкой.


getkey

getkey( <дескриптор файла>)

getkey( <дескриптор файла>, <номер индекса>)

Данная функция возвращает текущий индекс в таблице или индекс с указанным номером (нумерация с 0) .


getlast

Синтаксис:

getlast( <дескриптор файла> )

Переход к последней по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором.

getlast_l( <дескриптор файла> )

Переход к последней по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором с блокировкой этой записи.

Пример.

d1 = open("EXAM_1")

d2 = open("EXAM_2 ")

getlast(d1)

getlast_l(d2)

for i=1 to 10

'DbS_конец'.d2 = 'DbS_конец'.d1

update(d2)

getprev(d1)

getprev_l(d2)

next

close(d1)

close(d2)

end

Приведенная программа осуществляет копирование значений поля 'DbS_конец' 10-ти последних записей базы данных EXAM_1.BTR в соответствующее поле 10-ти последних записей базы данных EXAM_2.BTR. Причем, записи дополняемой базы данных берутся с блокировкой.


getnext

Синтаксис:

getnext( <дескриптор файла> )

Переход к следующей по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором.

getnext_l( <дескриптор файла> )

Переход к следующей по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором с блокировкой этой записи.

Пример.

d1 = open("EXAM_1")

d2 = open("EXAM_2 ")

getfirst(d1)

getfirst_l(d2)

for i=1 to 10

'DbS_конец'.d2 = 'DbS_конец'.d1

update(d2)

getnext(d1)

getnext_l(d2)

next

close(d1)

close(d2)

end

Приведенная программа осуществляет копирование значений поля 'DbS_конец' 10-ти первых записей базы данных EXAM_1.BTR в соответствующее поле 10-ти первых записей базы данных EXAM_2.BTR. Причем, записи дополняемой базы данных берутся с блокировкой.


getpath

Синтаксис:

getpath

Функция, возвращающая текущую базу данных в формате "UFINyymm" или "UFINMAIN"


getprev

Синтаксис:

getprev( <дескриптор файла> )

Переход к предыдущей по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором.

getprev_l( <дескриптор файла> )

Переход к предыдущей по текущему индексу записи BTR - файла (таблицы) с заданным дескриптором с блокировкой этой записи.

Пример.

d1 = open("EXAM_1")

d2 = open("EXAM_2 ")

getlast(d1)

getlast_l(d2)

for i=1 to 10

'DbS_конец'.d2 = 'DbS_конец'.d1

update(d2)

getprev(d1)

getprev_l(d2)

next

close(d1)

close(d2)

end

Приведенная программа осуществляет копирование значений поля 'DbS_конец' 10-ти последних записей базы данных EXAM_1.BTR в соответствующее поле 10-ти последних записей базы данных EXAM_2.BTR. Причем, записи дополняемой базы данных берутся с блокировкой.


gettime

Синтаксис:

gettime

или

gettime( <формат> )

Получить текущее время на компьютере и дату. По умолчанию формат "dd/mm/yyyy hh:ii:ss"


gosub

Синтаксис:

gosub <метка>

Оператор перехода к подпрограмме. Передает управление подпрограмме, помеченной <метка>.

Пример:

d = open("EXAMPLE")

getfirst(d)

gosub 100

close(d)

end

100

for i=1 to 10

'DbS_конец'.d = 'DbS_конец'.d + 100

update(d)

getnext(d)

next

return


goto

Синтаксис:

goto <метка>

Оператор безусловного перехода. Передает управление на оператор, помеченный <метка>.

Пример:

d = open("EXAMPLE")

getfirst(d)

if 'Сумма'.d > 1000000 then goto 100

print "Сумма остается прежней"

goto 200

100 'Сумма'.d = 1000000

update(d)

200 close(d)

end


if-then

Синтаксис:

if <выражение> then <оператор-then>

или

if <выражение> then

<операторы-then>

[else if <выражение> then

<операторы-then> ]

[else

<операторы-else> ]

end if

Условный оператор. Если значение <выражения> истинно, то <операторы-then> выполняется, в противном случае, выполняется <операторы-else>. Часть else может быть пропущена.

Пример 1:

d = open("EXAMPLE")

getfirst(d)

if 'Сумма'.d > 1000000 then goto 100

print "Сумма остается прежней"

goto 200

100 'Сумма'.d = 1000000

update(d)

200 close(d)

end

Пример 2:

d = open("EXAMPLE")

getfirst(d)

if 'Сумма'.d <= 1000000 then

print "Сумма остается прежней"

else

'Сумма'.d = 1000000

end if

update(d)

close(d)

end


input

Синтаксис:

input [<выражение>] <переменная>

Ввод с клавиатуры значения переменной.

<выражение> - сообщение выдаваемое при вводе.

Пример:

input "Введите cтроку:" string

input number

print "Строка: ",string;"Число: ",number

end

Результат работы программы:

Введите строку:ПРИМЕР СТРОКИ

?1234

Строка: ПРИМЕР СТРОКИ Число: 1234


insert

Синтаксис:

insert( <дескриптор файла> )

Вставка записи в BTR - файл (таблицы) с заданным дескриптором и текущим содержимым буфера данных.

Пример.

d1 = open("EXAMPLE")

getfirst(d1)

clearbuf(d1)

insert(d1)

close(d1)

end

Приведенная программа вставляет пустую запись в базу данных.


keyarray

Синтаксис:

keyarray

Создать ассоциативный массив и вернуть его дескриптор. Получить элемент аасоциативного массива можно с помощью операции [], в качестве индекса указывается непустая строка. При обращении всегда создается новый элемент с неопределенным значением. Для проверки наличия элемента нужно использовать функцию keyfind.

Пример:

a=keyarray

a["first"]=1

a["second"]=2

print a["first"]+a["second"]


keyfind

Синтаксис:

keyfind( <ассоц.массив>,<ключ> )

Функция проверяет наличие ключа в ассоциативном массиве и возращает 0, если элемента с таким ключом нет, или 1, если есть.

Пример:

if keyfind(a,"third")=0 then

print "Элемент с ключом third не существует"

else

print "Элемент с ключом third существует"

end if


keyfirst,keynext

Синтаксис:

keyfirst( <ассоц.массив>)

keynext( <ассоц.массив>,<ключ>)

Функция keyfirst возвращает ключ первого элемента в ассоциативном массиве, а функция keynext - ключ следующего элемента за указанным. Если следующего элемента нет, то функция возвращает пустую строку.

Пример:

s=keyfirst(a)

while s<>""

print s,a[s]

s=keynext(a,s)

wend


keylast,keyprev

Синтаксис:

keylast( <ассоц.массив>)

keyprev( <ассоц.массив>,<ключ>)

Функция keylast возвращает ключ последнего элемента в ассоциативном массиве, а функция keyprev - ключ предыдущего элемента за указанным. Если предыдущего элемента нет, то функция возвращает пустую строку.

Пример:

s=keylast(a)

while s<>""

print s,a[s]

s=keyprev(a,s)

wend


kkm_command

kkm_command( <команда>)

Выполнение команды ККМ: "operator_login", "open_shift", "report", "open_receipt", "registration", "payment", "close_receipt", "continue_print", "check_document_closed", "print_text", "payment", "cancel_receipt", "fn_query_data", "query_data","receipt_total", "util_form_tlv"

Пример:

kkm_set_str(65536, "Печать строки")

kkm_command("print_text")


kkm_get_str, kkm_get_int, kkm_get_bool, kkm_get_double, kkm_get_datetime, kkm_get_bytearray

kkm_get_...

kkm_get_str( <номер_параметра>)

Чтение строкового параметра

kkm_get_int( <номер_параметра>)

Чтение целого параметра

kkm_get_bool( <номер_параметра>)

Чтение булевого параметра

kkm_get_double( <номер_параметра>)

Чтение числового параметра

kkm_get_datetime( <номер_параметра>)

Чтение параметра в формате yyyymmdd hh:nn:ss

kkm_get_bytearray( <номер_параметра>)

Чтение байтового параметра


kkm_set_str, kkm_set_int, kkm_set_bool, kkm_set_double, kkm_set_datetime, kkm_set_bytearray

kkm_set_...

kkm_set_str( <номер_параметра>, <строка>)

Установка строкового параметра

kkm_set_int( <номер_параметра>, <число>)

Установка целого параметра

kkm_set_bool( <номер_параметра>, <0 или 1>)

Установка булевого параметра

kkm_set_double( <номер_параметра>, <число>)

Установка числового параметра

kkm_set_datetime( <номер_параметра>, <строка>)

Установка параметра в формате yyyymmdd hh:nn:ss или yyyymmdd

kkm_set_bytearray( <номер_параметра>, <строка>)

Установка байтового параметра


kkm_setup, kkm_open, kkm_close

kkm_setup( <номер модели ККМ>, <адрес_порт>, <пароль>, <проверка> )

Установка параметров соединения с ККМ.

kkm_open

Соединение с ККМ.

kkm_close

Отключение от ККМ.

Пример:

kkm_setup(67,"COM3","",1)

kkm_open

...

kkm_close


local

Синтаксис:

local <имя1>[, <имя2>]...

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


lower

lower( <cтрока> )

Данная функция возвращает строку, в которой все буквы переведены в нижний регистр.

Пример:

print lower("Строка")

end

Результат:

строка


max

max( <выражение1>,<выражение2> )

Данная функция возвращает большее из двух значений выражений.

Пример.

d1 = open("EXAMPLE")

getfirst(d1)

num1 = min(100000,'DbS_конец'.d1)

num2 = max('DbS_начало'.d1,num1)

'DbS_конец'.d1 = num1

'DbS_начало'.d1 = num2

update(d1)

close(d1)

end


min

min( <выражение1>,<выражение2> )

Данная функция возвращает меньшее из двух значений выражений.

Пример.

d1 = open("EXAMPLE")

getfirst(d1)

num1 = min(100000,'DbS_конец'.d1)

num2 = max('DbS_начало'.d1,num1)

'DbS_конец'.d1 = num1

'DbS_начало'.d1 = num2

update(d1)

close(d1)

end


move_spoop, move_spprov

move_...

move_spoop( <дескриптор файла> )

Перенос текущей проводки в отложеннные

move_spprov( <дескриптор файла> )

Перенос из отложенных в справочник проводок


npro

spro( <число> )

Данная функция возвращает "Число прописью".

Пример: sp = spro(12.34)

Получится sp = "Двенадцать целых тридцать четыре сотых"


num

num( <строка> )

Данная функция возвращает числовое представление заданной строки.

Пример:

print trim("36.6")+100

end

Результат:

136.6


numfields

numfields( <дескриптор файла>)

Данная функция возвращает количество полей в базе данных.


numkeys

numkeys( <дескриптор файла>)

Данная функция возвращает количество индексов в базе данных.


numtables

Синтаксис:

numtables

Узнать число открытых таблиц BTR

Пример:

n=numtables

db=open("table")

closeall(n)


open

open( <имя базы данных>[, <режим>] )

Данная функция открывает BTR или DBF таблицу и возвращает дескриптор.

Режим 0 позволяет открыть файл для чтения и записи, режим -2 - только для чтения, а режим -4 - для эксклюзивного использования.

По умолчанию используется режим 0.

Для обращения к полям можно использовать синтаксис d["имя поля"], d[номер_поля] или 'имя поля'.d

Последний вариант работает только для btr.

Для создания временной таблицы в памяти вместо имени указывается список полей через ;

После имени поля указывается символ : и тип поля: C (строка), N (число) и D (дата). Для С обязательно указывается размер, для N - количество цифр и необязательная точность. Временная таблица может иметь один ключ сортировки. Для вставки записи в упорядоченную таблицу необходимо выполнить поиск места для вставки с помощью функции findge.

Пример.

d1 = open("EXAMPLE")

getfirst(d1)

'DbS_конец'.d1 = 'DbS_начало'.d1

d1["DbS_начало"] = 0

update(d1)

close(d1)

end


pause

Синтаксис:

pause

Ожидание нажатия клавиши.

Пример.

print "Удаление базы данных EX.BTR"

system("delete EX.BTR")

print "База данных удалена, нажмите любую клавишу... "

pause

end


print

Синтаксис:

print <выражение> [;] [,] [<выражение>]...

Вывод данных на монитор.

; - начиная с очередной позиции табуляции;

, - начиная с текущей позиции.

Пример:

d = open("EXAMPLE")

getfirst(d)

string = " печати"

print "Пример оператора",string;;'Дата'.d

close(d)

end

Результат работы программы:

Пример оператора печати 10/11/95


printque

Синтаксис:

printque( <имя файла>)

Печать QUE-отчета в текущий файл.


putkey

putkey(<дескриптор файла>,<номер ключа>)

putkey(<дескриптор файла>,<список полей>)

putkey(<дескриптор файла>,<номер ключа>,<массив выделения по ключу>)

putkey(<дескриптор файла>,<список полей>,<массив выделения по ключу>)

Данная функция устанавливает активный ключ для указанного файла. Ключи нумеруются от 0. По умолчанию в качестве активного устанавливается нулевой ключ. Вызов с <массив выделения по ключу> может пригодиться при работе с w_select.

rem Проход по одной дате
rng=array(1,"Дата=20100120")
putkey(db,"Дата;Документ",rng)
getfirst(db)
while eof(db)=0
  ...
  getnext(db)
wend
rem Проход по диапазону дат
rng=array(2,"Дата>20100120","Дата<20100130")
putkey(db,"Дата;Документ",rng)
getfirst(db)
while eof(db)=0
  ...
  getnext(db)
wend


redirect

Синтаксис:

redirect( [<имя файла>][,<режим>=0] )

Подпрограмма позволяет перенаправить дальнейший вывод в указанный файл.

Если имя файла не указано, то восстанавливается вывод в стандартный файл, содержимое которого будет показано на экране после завершения выполнения программы.

Режим является суммой флагов, кодировка: DOS (866) - флаг 0, Windows (1251) - флаг 1, UTF8 - флаг 4, BOM для UTF8 - флаг 8, способ открытия: перезапись - флаг 0, добавление - флаг 2.

Пример:

redirect("REPORT.TXT")

print "Отчет за "+data

redirect()


regex_find_all

Синтаксис:

regex_find_all(<рег.выр.>,<строка>)

Найти все подстроки, соответствующие регулярному выражению. Возвращается массив подстрок. Если ни одной подстроки не найдено, то в 0-м элементе массива будет число 0.

Пример:

rem обработка файлов ;

a=regex_find_all("(([^;\\]|\\.)+$|([^;\\]|\\.)*;)",";a\;aa;d;;b\\bb")

print a[0] rem количество элементов

for i=1 to a[0]

print regex_replace("\\(.)","$1",regex_replace(";$","",a[i])) rem убрать символы \ и завершающий ;

next


regex_flags

Синтаксис:

regex_flags(<строка>)

Установить флаги для обработки регулярных выражений в соответствии со строкой. Флаг i - игнорировать регистр, флаг s - метасимвол . (точка) включает и переход на новую строку, флаг m - строка содержит символы перехода новую строку, на которые должны реагировать метасиволы ^ и $. Включаемые флаги нужно уазать в начале строки, а выключаемые -после символа - (минус).

Пример:

regex_flags("i-ms")


regex_match

Синтаксис:

regex_match(<рег.выр.>,<строка>)

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

Пример:

if regex_match("^[0-9]+/[0-9]+/[0-9]+$",s)=1 then rem строка является датой


regex_replace

Синтаксис:

regex_replace(<рег.выр.>,<замена>,<строка>)

Функция производит замену подстрок, соответствующих регулярному выражению, на указанную строку, в которой можно ссылаться на части подстроки, соответствующие подвыражениям в (). $0 - вся подстрока, $1 - первая скобка и т.д.

Пример:

print regex_replace("([0-9]{4})([0-9]{2})([0-9]{2})","$3/$2/$1","20110201") rem 01/02/2011


regex_replacef

Синтаксис:

regex_replace(<рег.выр.>,<имя функции>,<строка>)

Функция производит замену подстрок, соответствующих регулярному выражению, на строку, возвращаемую заданной функцией.

Функции передается массив, в котором содержатся подстрока и ее части, соответствующие подвыражениям в ().

i-й скобке в регулярном выражении соответствует (i+1)-й элемент массива. 1-й элемент - всей найденной подстроке. Функция должна вернуть строку.

Пример:

function chgdat(m)

result=m[2]+"/"+m[3]+"/"+str(num(m[4])+1)

end function

print regex_replacef("([0-9]+)/([0-9]+)/([0-9]+)","chgdat","Сдвиг даты 01/02/2011 на 1 год")


regex_split

Синтаксис:

regex_split(<рег.выр.>,<строка>)

Разделить строку на подстроки. Функция возвращает массив подстрок.

Пример:

a=regex_split("[ ,;.]+","Разделить текст на слова.")

print a[0] rem количество слов

for i=1 to a[0]

print a[i] rem слова

next


regex_submatch

Синтаксис:

regex_submatch(<рег.выр.>,<строка>)

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

Если подстрока не найдена, то в 0-м элементе массива будет число 0.

Пример:

rem обработка файлов ;

a=regex_submatch("([0-9]+)/([0-9]+)/([0-9]+)","Здесь есть дата 01/05/2007")

print a[0] rem количество элементов = 4

print a[1] rem вся дата 01/05/2007

print a[2] rem день 01

print a[4] rem год 2007


rem

Синтаксис:

rem [<текст до конца строки>]

' [<текст до конца строки>]

/' [<многострочный текст>] '/

Комментарии в программе. После ' должен быть пробел или переход на новую строку

Пример:

d = open("EXAMPLE") ' открыть файл

getfirst(d)

begin_trn

'DbS_конец'.d = 'DbS_конец'.d * 2

update(d)

if find(d,1,2,200000 /' или 100000 '/ )<>0 then

rem искомое значение не найдено, "откатка" изменений

abort_trn

else

rem поиск успешный, запомнить изменения

end_trn

end if

close(d)

end


resultfield

Синтаксис:

resultfield(<имя функции>,<таблица>,<имя поля>)

Используется для возрата поля таблицы из функции для последующих действий (обычно функция может вернуть только значение).

Пример:

function ПАРАМ(n)

local i

db=open("param")

getfirst(db)

for i=1 to n-1

getnext(db)

next

resultfield("ПАРАМ",db,"Значение")

end function


return

Синтаксис:

return

Возврат из подпрограммы, управление которой было передано оператором перехода к подпрограмме.

Пример:

d = open("EXAMPLE")

getfirst(d)

gosub 100

close(d)

end

100

for i=1 to 10

'DbS_конец'.d = 'DbS_конец'.d + 100

update(d)

getnext(d)

next

return


round, floor, ceil

Синтаксис:

round( <число>,<кол-во знаков>)

floor( <число>,<кол-во знаков>)

ceil( <число>,<кол-во знаков>)

Функции предназначены для округления к ближайшему числу, вниз или вверх с указанным количеством знаков после запятой (по умолчанию <кол-во знаков> равно 0, т.е. округление до целого).


rpt_close

Синтаксис:

rpt_close

Закрытие файла отчета.

Пример:

d = open("EXAMP")

rpt_open("TEST.REP")

sum=0

while not eof(d)

rpt_write("Сумма",'Сумма'.d)

rpt_line

sum = sum+ 'Сумма'.d

getnext(d)

wend

rpt_write("Итого",sum)

rpt_view

rpt_close

close(d)

end


rpt_line

Синтаксис:

rpt_line

Вывести сформированный повторяющийся блок отчета.

Пример:

d = open("EXAMP")

rpt_open("TEST.REP")

sum=0

while not eof(d)

rpt_write("Сумма",'Сумма'.d)

rpt_line

sum = sum+ 'Сумма'.d

getnext(d)

wend

rpt_write("Итого",sum)

rpt_view

rpt_close

close(d)

end


rpt_open

Синтаксис:

rpt_open( <имя файла>[, <иниц_подпр>, <начало_стр>, <конец_стр>] )

Открытие файла отчета. Печать происходит в два прохода. В первый проход готовится результат для первоначального просмотра, для печати на принтер программа повторно выполняется с команды rpt_open до rpt_view.

Пример 1:

d = open("EXAMP")

rpt_open("TEST.REP")

sum=0

while not eof(d)

rpt_write("Сумма",'Сумма'.d)

rpt_line

sum = sum+ 'Сумма'.d

getnext(d)

wend

rpt_write("Итого",sum)

rpt_view

rpt_close

close(d)

end

Пример 2:

sub init_rep

npage=1

end sub

sub start_page

rpt_write("N_page",str(npage,3,0))

end sub

sub end_page

npage=npage+1

end sub

rpt_open("TEST.REP","init_rep","start_page","end_page")

...

rpt_close


rpt_view

Синтаксис:

rpt_view

Показ сформированного отчета.

Пример:

d = open("EXAMP")

rpt_open("TEST.REP")

sum=0

while not eof(d)

rpt_write("Сумма",'Сумма'.d)

rpt_line

sum = sum+ 'Сумма'.d

getnext(d)

wend

rpt_write("Итого",sum)

rpt_view

rpt_close

close(d)

end


rpt_write

Синтаксис:

rpt_write( <имя поля>, <выражение> )

Вывод значения в указанное поле отчета. Формат поля определяется в отчете.

Пример:

d = open("EXAMP")

rpt_open("TEST.REP")

sum=0

while not eof(d)

rpt_write("Сумма",'Сумма'.d)

rpt_line

sum = sum+ 'Сумма'.d

getnext(d)

wend

rpt_write("Итого",sum)

rpt_view

rpt_close

close(d)

end


selectfiles

Синтаксис:

selectfiles(<фильтр>)

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

Пример:

files=selectfiles("Файлы c платежками|*.XLS")

for i=1 to files[0]

print files[i]

next


setbuffer

setbuffer( <дескриптор файла>, <буфер> )

Подпрограмма устанавливает новое содержимое текущей записи. Удобно для копирования записей.


setfilter

setfilter( <дескриптор файла>.<фильтр>)

Установить фильтр для записей в таблице. Имена полей записываются в [], строковые константы в ' '.

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

Для временных таблиц допускается фильтрация только через функцию.


setpath

Синтаксис:

setpath(<имябд>)

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


size

size( <дескриптор файла> )

Данная функция возвращает количество записей в BTR - файле (базе данных) с заданным дескриптором.

Для массивов возвращается номер последего элемента в массиве (размер массива).

Пример.

d1=open("EXAMPLE")

oborot = 0

for i = 1 to size(d1)

if i = 1 then getfirst(d1)

if i>1 then getnext(d1)

oborot = oborot + 'Сумма'.d1

next

close(d1)

end


sleep

Синтаксис:

sleep(<время в мс>)

Задержка на указанное время.


spro

spro( <число> )

Данная функция возвращает "Сумму прописью".

Пример: sp = spro(12.34)

Получится sp = "Двенадцать рублей 34 копейки."


str

str( <выражение>, <длина строки>, <число десятичных позиций> )

Данная функция возвращает представление числового <выражения> в виде строки длиной <длина строки> символов и с заданным числом десятичных позиций.

По умолчанию длина строки равна 1, число позиций 0.

Если длина строки отрицательна, то вместо пробелов в начало строки добавляются 0.

Пример:

print str(12.5,10,3)

print str(12.9)

print str(7,-3)

end

Результат:

12.500

13

007


strlen

strlen( <cтрока> )

Данная функция возвращает длину указанной строки.

Пример:

print strlen("СТРОКА")

end

Результат:

6


strpos

Синтаксис:

strpos(<подстрока>, <строка>)

strpos(<подстрока>, <строка>, <начальная позиция поиска>)

strpos(<подстрока>, <строка>, -1) - поиск с конца строки

Функция возвращает индекс вхождения подстроки в строке. Если подстроки, возвращается 0.


sub

Синтаксис:

sub <имя подпрограммы> [ (<имя1> [, <имя2>]...) ]

<операторы>

end sub

Определение пользовательской подпрограммы. Для досрочного выхода можно использовать оператор return. Подпрограмма может иметь переменное количество аргументов, для этого в заголовке нужно указать символ * вместо списка параметров подпрограммы. Фактические аргументы будут помещены в массив arg. Элемент массива arg[0] содержит количество аргументов. Если аргументы разделялись символом ; или какой-либо аргумент пропущен (например, f(1,,3) или f(1;3)), то массиве будут содержаться пустые значения (для обработки пустых значений установите флаги исполнения).

Определения подпрограмм не могут быть вложенными. Подпрограммы не могут быть рекурсивными.

Пример:

sub clear(db)

local i

getfirst(db)

for i=1 to size(db)

delete(db)

next

end sub


substr

substr( <cтрока>, <начальная позиция>, <длина подстроки> )

Данная функция возвращает подстроку <строки> заданной длины, начиная с заданной позиции.

Пример:

print substr("СТРОКА",4,2)

end

Результат:

ОК


system

Синтаксис:

system( <строка> )

Выполнение <строки> как команды MS-DOS.

Пример.

print "Удаление таблицы EX.BTR"

system("delete EX.BTR")

print "Таблица удалена, нажмите любую клавишу... "

pause

end


trim

trim( <cтрока> )

Данная функция возвращает строку с отсеченными концевыми пробелами.

Пример:

print trim("СТРОКА ")+"!"

end

Результат:

СТРОКА!


trimfull

trimfull( <cтрока> )

Данная функция возвращает строку с отсеченными начальными и конечными пробелами.

Пример:

print trimfull(" СТРОКА ")+"!"

end

Результат:

СТРОКА!


triml

triml( <cтрока> )

Данная функция возвращает строку с отсеченными начальными пробелами.

Пример:

print triml(" СТРОКА ")+"!"

end

Результат:

СТРОКА !


unlock

Синтаксис:

unlock( <дескриптор файла> )

Разблокировка текущей записи базы данных с указанным дескриптором.

Пример.

getfirst_l(d1)

'DbS_конец'.d = 'DbS_конец'.d * 2

update(d1)

unlock(d1)

В приведенной программе блокируется 1-я запись таблицы, увеличивается ее поле 'DbS_конец' в 2 раза, обновляется эта запись на диске, а затем блокировка снимается.


update

Синтаксис:

update( <дескриптор файла> )

Запись на диск текущего содержимого буфера данных (обновление текущей записи).

Пример:

d = open("EXAMPLE")

getfirst(d)

'DbS_конец'.d = 'DbS_конец'.d + 100

update(d)

close(d)

end


upper

upper( <cтрока> )

Данная функция возвращает строку, в которой все буквы переведены в верхний регистр.

Пример:

print upper("Строка")

end

Результат:

СТРОКА


vartype

Синтаксис:

vartype( <значение> )

Функция определяет тип указанного значения и возвращает

0 - если значение является пустым (только если разрешено обращение к неинициализированным переменным)

1 - если значение является числом

2 - если значение является строкой

3 - если значение является таблицей BTR

4 - если значение является массивом

5 - если значение является таблицей DBF

6 - если значение является ассоциативным массивом

Пример:

e=executeflag(0)

db=open("table")

if vartype(db)!=0 then

rem таблица существует

else

rem такой таблицы нет

end if

executeflag(e)


w_button

Синтаксис:

w_button(<номер>,<x>,<y>,<w>,<h>,<текст>)

Создать в окне кнопку в указанных координатах


w_close

Синтаксис:

w_close

Закрыть окно


w_edit

Синтаксис:

w_edit(<номер>,<x>,<y>,<w>,<h>,<текст>[,<режим>,<маска>])

Создать в окне поле значения в указанных координатах. Если режим не 0, то создается нередактируемое поле ввода

Последний аргумент содержит маску для редактирования

Например, маска для даты "99/99/9999"

В случае маски "+-" создается чекбокс. Текст должен быть "+" ИЛИ "-".


w_gettext

Синтаксис:

w_gettext(<номер>)

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


w_label

Синтаксис:

w_label(<номер>,<x>,<y>,<w>,<h>,<текст>)

Создать в окне метку в указанных координатах


w_message

Синтаксис:

w_message(<заголовок>,<сообщение>,<кнопки>)

Функция выводит сообщение и ожидает нажатие кнопки. Возвращает номер нажатой кнопки.

Комбинации кнопок и значков (3-й аргумент)

0 OK

1 OK, Cancel

2 Abort, Retry, Ignore

3 Yes, No, Cancel.

4 Yes, No

5 Retry, Cancel

16 Знак STOP

32 Знак ?

48 Знак !

64 Знак i

Номер нажатой кнопки

1 OK

2 Cancel

3 Abort

4 Retry

5 Ignore

6 Yes

7 No


w_open

Синтаксис:

w_open(<x>,<y>,<w>,<h>,<заголовок>)

Создать окно

w_open(300,250,300,220,"Введите старую и новую фамилии МОЛ")

w_label(1,10,5,100,40,"ФИО:")

w_edit(4,10,25,100,24,old,0)

w_label(5,10,55,100,40,"Изменить на ФИО:")

w_edit(6,10,75,100,24,new,0)

w_button(2,10,160,50,25,"Принять")

w_button(3,70,160,50,25,"Отмена")


w_progress

Синтаксис:

w_progress(<заголовок>,n1,n2)

w_progress(n)

w_progress

Функция предназначена для показа хода выполнения. Функция возвращает 0, если нажата кнопка Отменить

Пример:

w_progress("Обработка файла",0,size(db))

getfirst(db)

n=1

whle eof(db)=0

rem обработка

w_progress(n)

getnext(db)

n=n+1

wend

w_progress


w_select

Синтаксис:

w_select(<x>,<y>,<w>,<h>,<заголовок>,<дескриптор файла>,<список полей>)

Показать окно для выбора значения из таблицы. Функция возвращает 1, если пользователь выбрал запись и нажал кнонку Принять, или 0, если пользователь нажал Отменить. При нажатии клавиши F1-F12 функция возвращает коды 112-123.

Пример:

subdb=open("listpr")

if w_select(100,50,200,100,"Выберите запись",subdb,"Номер;Наименов")=1 then

res=subdb["Наименов"]

else

res=""

end if

close(subdb)


w_settext

Синтаксис:

w_settext(<номер>,<текст>)

Функция изменяет текст, связанный с элементом окна под указанным номером


w_show

Синтаксис:

w_show

Показать окно. Функция возвращает номер нажатой кнопки.

Пример:

k=1

while k<>0

k=w_show

if k=1 then

subdb=open("listpr")

if w_select(100,50,200,100,"Выберите запись",subdb,"Номер;Наименов") then

w_settext(4,subdb["Наименов"])

end if

close(subdb)

else if k=2 then

rem нажата OK

db["Сумма"]=w_gettext(5)

k=0

else if k=3 then

rem нажата Отмена

k=0

end if

wend


while

Синтаксис:

while <выражение>

<операторы>

wend

Оператор цикла. Тело цикла выполняется до тех пор, пока выражение является истинным.

Пример:

d = open("EXAMPLE")

getfirst(d)

while eof(d)=0

'DbS_конец'.d = 'DbS_конец'.d + 100

update(d)

getnext(d)

wend

close(d)

end


ДО

ДО("Счет"[,"Субсчет"])

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

Примеры:

а) ДО("51") - вычисляет дебетовый оборот 51 счета за отчетный период;

б) ДО("68","68-1") - вычисляет дебетовый оборот субсчета 68-1 за отчетный период.

Макрос ДО может находиться только в правой части оператора присваивания.


ДОНГ

ДОНГ("Счет"[,"Субсчет"])

Вычисляет дебетовый оборот счета (субсчета) с начала года.

Все остальное аналогично макросу ДО.


КО

КО("Счет"[,"Субсчет"])

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

Все остальное аналогично макросу ДО.


Команды округления

Совместно с командой печати # используются команды округления:

а) ТЫС - при печати все числовые значения будут округляться до тысяч;

б) РУБ - при печати все числовые значения будут округляться до рублей;

в) КОП - до копеек.

Пример:

ТЫС

# Сальдо 51 счета на начало в тысячах [СНД("51")]

РУБ

# Сальдо 51 счета на начало в рублях [СНД("51")]

Будет напечатано:

Сальдо 51 счета на начало в тысячах 1200.00

Сальдо 51 счета на начало в рублях 1200000.00


КОНГ

КОНГ("Счет"[,"Субсчет"])

Вычисляет кредитовый оборот счета (субсчета) с начала года.

Все остальное аналогично макросу КО.


КС

КС("имя константы")

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

База данных CONST.BTR должна содержать поля Код, Название, Значение.

Пример:

КС("А1") - возвращает символьное значение константы с именем А1.


КЧ

КЧ("имя константы")

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

База данных CONST.BTR должна содержать поля Код, Название, Значение.

Пример:

КЧ("А1") - возвращает числовое значение константы с именем А1.


Логические и арифметические операции

В выражениях можно использовать операции:

Арифметические действия: *, /, +, -.

(+ для строк означает сцепление строк)

Операции сравнения чисел и строк: =, ==, !=, <>, >, <, >=, <=.

Логические действия: not, and, &, or, |.

Обращение к полю базы данных:

'<имя поля>'.<дескриптор файла> (только для BTR)

или

<дескриптор файла>["<имя поля>"] (BTR и DBF)

<дескриптор файла>[<номер поля>] (BTR и DBF, нумерация полей с 1)

Обращение к элементу массива:

<дескритор масcива>[<номер элемента>]


ОБ

ОБ("Счет1"[,"Субсчет1"];"Счет2"[,"Субсчет2"])

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

Пример:

ob = ОБ("68","68-1"; "51").

Переменной ob будет присвоено значение оборота за отчетный период между субсчетом 68-1 68 счета и 51 счетом.

Обороты субсчетов могут быть вычислены только для тех счетов, для которых при настройке плана счетов проставлена буква "д" в графе "Обороты".

Макрос ОБ может находиться только в правой части оператора присваивания.


ОБНГ

ОБНГ("Счет1"[,"Субсчет1"];"Счет2"[,"Субсчет2"])

Вычисляет оборот между счетами или,при необходимости,их субсчетами с начала года.

Примеры:

a) ОБНГ("69","69-1"; "51") - оборот по дебету 69-1 с кредита 51 с начала года;

б) ОБНГ("68";"51") - оборот по дебету 68 с кредита 51 с начала года.

Все остальное аналогично макросу ОБ.


Операторы языка DBASIC

Операторы для управления последовательностью выполнения программы:

if-then

for

while

goto

gosub

return

end

Операторы для определения подпрограмм пользователя:

sub

function

local

$include

Команды для ввода-вывода:

print

input

pause

#

Команды округления

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

rem


Подпрограммы для бухгалтерских программ

Эти подпрограммы (макросы) определены в файле macros.bas и предназначены для упрощения программ, выполняющих бухгалтерские расчеты.

Большинство макросов предназначены для получения различной информации о счетах:

ДО

ДОНГ

КО

КОНГ

ОБ

ОБНГ

ПР

СКД

СКК

СНД

СНК

Прочие:

УП

Все макросы допускают в качестве параметров выражения.

Примеры:

а) ОБ("6"+"8");

б) ОБНГ("68",'Db_расчеты'.d);

в) рег = "9703"

УП(рег).


Подпрограммы для работа с окнами

Подпрограммы для работы с окнами

w_open

w_close

w_select

w_show

w_button

w_edit

w_label

w_gettext

w_settext

w_progress

w_message

selectfiles


Подпрограммы для работы с базами данных

Подпрограммы для работы с базами данных:

close

begin_trn

end_trn

abort_trn

clearbuf

delete

getfirst

getlast

getnext

getprev

unlock

update

closeall

setbuffer

setfilter

Функции для работы с базами данных:

open

size

eof

bof

putkey

find*

numtables

findfield

getbuffer

numfields

numkeys

fieldname

getkey

КС

КЧ

Предопределенные переменные

current_tables


Подпрограммы для работы с ККМ

kkm_setup, kkm_open, kkm_close

kkm_command

kkm_set_str, kkm_set_int, kkm_set_bool, kkm_set_double, kkm_set_datetime, kkm_set_bytearray

kkm_get_str, kkm_get_int, kkm_get_bool, kkm_get_double, kkm_get_datetime, kkm_get_bytearray


Подпрограммы для работы с отчетами

Подпрограммы для работы с REP-отчетами:

rpt_open

rpt_view

rpt_close

rpt_write

rpt_line

Подпрограммы для работы с QUE-отчетами:

printque

Подпрограммы для работы с XLS- и DOC-отчетами:

dde_open

dde_close

dde_execute

dde_poke

dde_request

Подпрограммы для создания текстовых отчетов

redirect

fromfile

fromeof


Подпрограммы для работы с файлами

file_exists(имя) - файл существует?

copyfile(имя1,имя2) - копировать файл имя1 в имя2

renamefile(имя1,имя2) - переименовать файл имя1 в имя2

deletefile(имя) - удалить файл


Подпрограммы для работы со строками и преобразования

Функции преобразования:

fldtodate

fldtofulldate

datetofld

num

str

spro

npro

chr

Функции для работы со строками:

strlen

substr

trim

chr

divstr

strpos

triml

trimfull

upper

Функции для работы с регулярными выражениями:

regex_find_all

regex_flags

regex_match

regex_replace

regex_replacef

regex_split

regex_submatch


ПР

ПР(N,"имя_поля")

Макрос работы с проводками. Он используется в момент формирования проводок регистрируемой операции.

N - номер проводки;

имя_поля - имя поля проводки.

Например, операция состоит из двух проводок:

60 51

19 60.

При этом сумма второй проводки должна рассчитываться по формуле:

(Сумма 1 проводки / 120) * 20.

Файл prim.bas будет содержать:

ПР(2,"Сумма") = (ПР(1,"Сумма") / 120) * 20.

Макрос ПР может находиться как в левой, так и в правой части оператора присваивания.


Пример программы с разбором

Проведенный разбор программы позволит понять вдумчивому читателю механизм

работы программ.

     d2 = open("tdata")

     getfirst(d2)

     data = substr('Тек.дата'.d2,1,6)

     close(d2)

     d = open("c:\btr_main\01")

     d1 = open("vrem")

     getlast(d1)

     sch = 'Db_счета'.d1

     sum = 0

     for i = 1 to size(d)

        if i = 1 then

          getfirst(d)

        else

          getnext(d)

        end if

        if trim(sch) != trim('Бал.счет'.d) then goto 100

        if substr('Дата'.d,1,6) >= data then goto 100

        'Износ'.d = 'Износ'.d - 'Износ_ТМ'.d

        'Износ_ТМ'.d = 0.0

        'Остаточная'.d = 'Бал.ст-ть'.d - 'Износ'.d

        if 'От_пробега'.d = 0.0 then

          'Износ_ТМ'.d = 'DbS_конец'.d * 'От_стоим.'.d / 1200

        else

          'Износ_ТМ'.d = 'DbS_конец'.d * ('От_пробега'.d/100) * ('Пробег'.d/1000)

        end if

        izn_old = 'Износ'.d

        'Износ'.d = 'Износ'.d + 'Износ_ТМ'.d

        if 'Износ_ТМ'.d >= 0.0 then 'Остаточная'.d = 'Бал.ст-ть'.d - 'Износ'.d

        if 'Остаточная'.d < 0.0 then

          'Износ'.d = 'Бал.ст-ть'.d

          'Остаточная'.d = 0.0

          'Износ_ТМ'.d = 'Износ'.d - izn_old

        end if

        sum = sum + 'Износ_ТМ'.d

100     update(d)

     next

     close(d)

     getlast(d1)

     'Сумма'.d1 = sum

     update(d1)

     close(d1)

     end

Разберем построчно представленную выше программу.

d2 = open("tdata") - открывается база данных tdata.btr, содержащая текущую дату. При этом создается новая переменная d2, которой присваивается номер открытой базы данных.

getfirst(d2) - читается первая запись БД с номером d2.

data = substr('Тек.дата'.d2,1,6) - создается переменная data и ей присваивается значение подстроки поля 'Тек.дата' БД tdata.btr начиная с позиции 1 и длиной 6 символов.

close(d2) - Закрывается БД с номером d2.

d = open("c:\btr_main\01") - открывается база данных 01.btr, содержащая картотеку основных средств. При этом создается новая переменная d, которой присваивается номер открытой базы данных.

d1 = open("vrem") - открывается временная база данных vrem.btr, содержащая информацию об уже сформированных проводках текущей регистрируемой операции. Структура vrem.btr:

1. Номер - номер проводки

2. Db_расчеты

3. Kr_расчеты

2 и 3 - содержат субсчета соответствующих счетов (4 и 5), если счета являются аналитическими;

4. Db_счета

5. Kr_счета

4 и 5 - номера счетов;

6. Шифр - шифр проводки

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

7. Количество - проводимое количество

8. Сумма - проводимая сумма

Поле "Сумма" последней строки таблицы vrem.btr имеет нулевое значение. Задача по подсчету реального значения этого поля и возлагается на нашу программу.

getlast(d1) - прочитать последнюю запись БД с номером d1.

sch = 'Db_счета'.d1 - создается переменная sch и ей присваивается значение поля 'Db_счета' БД с номером d1.

sum = 0 - создается новая переменная sum и ей присваивается значение 0.

for i = 1 to size(d) - заголовок цикла, который должен будет перебрать записи от 1 до последней ( size(d) ) базы данных с номером d.

if i = 1 then

getfirst(d) - прочитать первую запись БД с номером d.

else

getnext(d) - прочитать следующую запись БД с номером d.

end if

if trim(sch) != trim('Бал.счет'.d) then goto 100 - если содержимое поля 'Бал.счет' не совпадает со значением переменной sch, то переход на конец цикла.

if substr('Дата'.d,1,6) >= data then goto 100 - если содержимое поля 'Дата' больше или совпадает с текущей датой, то переход на конец цикла.

'Износ'.d = 'Износ'.d - 'Износ_ТМ'.d - восстанавливается значение поля "Износ" (это делается на тот случай, если производится повторный перерасчет амортизации за текущий месяц).

'Износ_ТМ'.d = 0.0 - содержимое поля 'Износ_ТМ' БД с номером d устанавливается равным 0.0

'Остаточная'.d = 'Бал.ст-ть'.d - 'Износ'.d -расчет остаточной ст-ти ОС

if 'От_пробега'.d = 0.0 then

'Износ_ТМ'.d = 'DbS_конец'.d * 'От_стоим.'.d / 1200 - расчитывается износ текущего месяца от бал. стоимости.

else

|

'Износ_ТМ'.d = 'DbS_конец'.d * ('От_пробега'.d/100) * ('Пробег'.d/1000) - расчитывается износ текущего месяца от пробега.

end if

izn_old = 'Износ'.d

'Износ'.d = 'Износ'.d + 'Износ_ТМ'.d - расчитывается общий износ основного средства (с учетом текущего месяца).

if 'Износ_ТМ'.d >= 0.0 then 'Остаточная'.d = 'Бал.ст-ть'.d - 'Износ'.d

if 'Остаточная'.d < 0.0 then - проверка и расчет износа для тех ОС, которые полностью амортизировались.

'Износ'.d = 'Бал.ст-ть'.d

'Остаточная'.d = 0.0

'Износ_ТМ'.d = 'Износ'.d - izn_old

end if

sum = sum + 'Износ_ТМ'.d - накапливается общая сумма износа за текущий месяц для всех основных средств, амортизация которых относится на бал. счет, запомненный в переменной sch.

100 update(d) - запись изменений на диск.

next - конец цикла.

close(d) - закрыть БД с номером d.

getlast(d1) - прочитать последнюю запись БД с номером d1.

'Сумма'.d1 = sum - значение поля 'Сумма' БД с номером d1 устанавливается равным переменной sum.

update(d1) - запись изменений БД d1 на диск.

close(d1) - закрыть БД с номером d1.

end - конец программы.


Прочие подпрограммы

Прочие:

min

max

round, floor, ceil

abs

system

array

error

executeflag

vartype

resultfield

getpath

setpath

keyarray

keyfind

keyfirst

keynext

keylast

keyprev

gettime

sleep

date_add

date_diff

date_set


СКД

СКД("Счет"[,"Субсчет"])

Вычисляет дебетовое сальдо счета (субсчета) на конец отчетного периода.


СКК

СКК("Счет"[,"Субсчет"])

Вычисляет кредитовое сальдо счета (субсчета) на конец отчетного периода.


СНД

СНД("Счет"[,"Субсчет"])

Вычисляет дебетовое сальдо счета (субсчета) на начало отчетного периода.

Примеры:

а) СНД("50");

б) СНД("68","68-2").


СНК

СНК("Счет"[,"Субсчет"])

Вычисляет кредитовое сальдо счета (субсчета) на начало отчетного периода.


УП

УП("Период")

Данный макрос устанавливает указанный отчетный период.

Период может иметь значения:

a) "Т", тогда УП("Т") - установить текущий отчетный период (по умолчанию всегда устанавливается текущий отчетный период);

б) "П", тогда УП("П") - установить предыдущий отчетный период;

в) "С", тогда УП("С") - установить следующий отчетный период;

г) "ГГММ"(где ГГ - год,ММ - месяц), тогда УП("9701") - установить январь 1997 года.

Возвращаемые значения:

1) в случае успеха макрос УП возвращает числовое значение соответствующее установленному отчетному периоду.

Например: S = УП("9703"), S будет равно 9703.00.

2) в случае неудачи возвращается 0.0.


DBASIC

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

Пример программы с разбором

Операторы языка

Логические и арифметические операции

Подпрограммы для работы с базами данных

Подпрограммы для работы со строками и преобразования

Подпрограммы для работы с окнами

Подпрограммы для работы с отчетами

Подпрограммы для работы с ККМ

Прочие подпрограммы

Подпрограммы для бухгалтерских программ