Обновлено 26.08.2019

Интерпретатор FoxPro

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

Встроенный в программу Интерпретатор FoxPro синтаксически мало чем отличается от класического. Но есть и отличия:

  1. Важное отличие заключается в том, что класический интерпретатор FoxPro рассматривает любую ранее не объявленную переменную как поле базы данных в текущей рабочей области, причем это станет известно только на этапе выполнения. Встроенный в программу Интерпретатор FoxPro требует, чтобы обращение к полю базы данных было записано по правилу ИмяАлиаса.ИмяПоля или ИмяАлиаса->ИмяПоля.
  2. В процедурном файле любая переменная, если она не объявлена явно, будет иметь тип Private. В FoxPro наоборот: переменная, не объявленая явно имеет тип Public;
  3. Кроме того встроенный интерпретатор не поддерживает операторы и функции, связанные со средой FoxPro;
  4. Названия переменных можно писать по-русски;
  5. Есть функции, которые отсутствуют в FoxPro, например, DayMonthCount, IsLeapYear и т.д.
  6. Есть функции специфичные для данной задачи, полный список таких функций можно найти по ссылке Квартплатные функции

Операции

Цифровые операции:

+Сложение

-Вычитание

*Умножение

/Деление

^Степень числа (или **)

Операции сравнения:

= равно

== тождественно равно

‹› не равно

# не равно

!= не равно

Меньше чем

Больше чем

"‹=" Меньше или равно

"›=" Больше или равно

$ Включает

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

.AND. Логическое "И"

.OR. Логическое "И"

.NOT. Логическое "Нет"

Операторы и функции для описания алгоритмов по группам:

  1. Операторы условия
  2. Операторы цикла
  3. Массивы
  4. Арифметические функции
  5. Функции над строками
  6. Функции над датой и временем
  7. Побитовые Функции
  8. Функции конвертации
  9. Функции работы с файлами
  10. Функции работы с папками
  11. Функции для организации диалогов
  12. Функции для работы с константами
  13. Функции для работы с формой
  14. Функции для работы с DBF-файлами
  15. Функции для работы с БД
  16. Функции для работы с HTML таблицами
  17. Функции для работы с EXCEL
  18. Системные функции
  19. Квартплатные функции

В качестве параметров функций могут быть

  • Поля баз данных, которые записываются как ИмяАлиаса.ИмяПоля (или ИмяАлиаса->ИмяПоля), например, для обращения к справочнику лицевых счетов можно записать acc.code (Лицевой счет) или accounts.code. Обращение к полю БД без имени алиаса не допускается.
  • значение числового типа
  • значение символьного типа
  • значение типа Дата
  • логическое значение

Комментарии в программе

* [комментарии]

Символ * в начале программной строки означает, что это строка комментариев

Оператор RETURN <Выр>

Используется для возврата управления вызывающей программе и позволяет определить возвращаемое значение <Выр> в свойствах отчета для алгоритмов, описанных в разделах Реквизиты и Суммирование

Например, в расчитываемом поле в зависимости от категории жилья (acc.kat) выведем сумму начислено по услуге с кодом 5-холодное водоснабжение (для 1-й категории) или сумму начислено по услуге с кодом 6-водоотведение (если не 1-я категория)

if acc.kat=1

return СумНач(5)

else

return СумНач(6)

endif

Операторы условия

  1. DO CASE...CASE...ENDCASE
  2. DO CASE

    CASE <вырL1>
    команды
    ...
    [CASE <вырL2>
    команды]
    ...
    [CASE <вырLN>]
    команды
    [OTHERWISE
    команды]

    ENDCASE

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

    Фраза CASE вырL устанавливает условное выражение для последующей оценки его "истинности". Это логическое выражение, такое, например, как: A = B или числовая переменная < 11.

    Если выражение оценено как "ложное", все последующие команды до следующей команды CASE будут пропущены и не выполняются.

    Когда условие "истинно" (.Т.), выполняются все последующие команды до появления одной из команд CASE, OTHERWISE или ENDCASE.

    После выполнения всех команд первой фразы CASE, для которой условие "истинно", остальные фразы CASE пропускаются и система переходит на первую команду, следующую за ENDCASE.

    Если все фразы CASE "ложны" и не указана фраза OTHERWISE, не выполняется никаких команд и система переходит на первую команду, следующую за фразой ENDCASE.

    Фраза OTHERWISE определяет выполнение альтернативной последовательности команд, когда все фразы CASE "ложны".

  3. IF...ELSE...ENDIF
  4. IF <вырL>

    команды

    [[ELSE]

    команды]

    ENDIF

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

    Команда устанавливает условие (логическое выражение) для последующей оценки его "истинности".

    Если условие оценивается как "истинное", выполняются все команды, следующие за IF до ELSE или до ENDIF, если команда ELSE не указана. Если условие "ложно" и не указана команда ELSE, все команды между IF и ENDIF игнорируются. Выполнение программы продолжается с первой после ENDIF команды.

    Если условие "ложно" и указана команда ELSE, то выполняются все команды между ELSE и ENDIF.

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

  5. IIF(вырL,выр1,выр2)
  6. Функция IIF() возвращает значение выр1 или выр2 в зависимости от значения вырL.

    Возвращаемое значение - числовое, символьное, логическое или дата.

    Если значение вырL - "истина" (.T.), функция возвращает значение выр1.

    Если значение вырL - "ложь" (.F.) - функция возвращает значение выр2.

    Функция IIF() может использоваться взамен структуры IF...ENDIF для создания условных выражений.

Операторы цикла

  1. DO WHILE...ENDDO
  2. DO WHILE вырL

    команды
    [LOOP]
    команды
    [EXIT]

    ENDDO

    Это команда структурного программирования, обеспечивающая повторение последовательности команд, заключенной в конструкции DO WHILE...ENDDO до тех пор, пока заданное условие "истинно".

    Команда DO WHILE открывает структурную процедуру, которая выполняет последующие команды только пока логическое выражение оценивается как "истинное".

    Если условие "истинно", выполняются все последующие команды до ENDDO, LOOP или EXIT. Команды ENDDO и LOOP возвращают управление команде DO WHILE для следующей оценки "истинности" условия. Команда EXIT передает управление следующей за ENDDO команде. Если условие оценивается как "ложное" (.F.), система FoxPro пропускает все команды, заключенные между DO WHILE и ENDDO и переходит на выполнение следующей за ENDDO команды.

    Команда ENDDO завершает структуру DO WHILE.

    Фраза EXIT передает управление из цикла DO WHILE...ENDDO первой команде, следующей за ENDDO.

    Фраза LOOP возвращает управление в начало структуры DO WHILE...ENDDO. Фраза LOOP предотвращает выполнение оставшихся в конструкции DO WHILE после нее команд.

    Hеобходимо следить за правильностью вложения всех структурных команд в конструкции DO WHILE.

  3. FOR...ENDFOR
  4. FOR пер = вырN1 TO вырN2 [STEP вырN3]

    команды
    [EXIT]
    [LOOP]

    ENDFOR

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

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

    Hет необходимости определять эту переменную до команды FOR...ENDFOR. Числовое выражение вырN1 задает начальное значение счетчика, а числовое выражение вырN2 - окончательное значение.

    Включенные в конструкцию команды выполняются последовательно, пока не встретится команда ENDFOR. При этом значение пер увеличивается на значение, задаваемое фразой STEP вырN3. Если эта фраза опущена, счетчик увеличивается на единицу.

    Затем значение счетчика сравнивается с вырN2. Если счетчик МЕHЬШЕ ИЛИ РАВЕH значению вырN3, цикл выполняется еще раз. В противном случае управление передается команде, следующей за ENDFOR.

    Используемые в команде числовые выражения вырN1, вырN2, вырN3 могут быть как допустимыми числовыми выражениями, так и числовыми временными переменными. Их значения считываются при инициализации команды. Их можно менять и внутри цикла, но это не приведет к изменению числа выполнений цикла. о следует очень осторожно менять внутри цикла значение счетчика пер.

    Если значение STEP вырN3 отрицательное, то значение счетчика всякий раз УМЕHЬШАЕТСЯ на эту величину, и исходное значение вырN1 должно быть больше значения TO вырN2.

    Команда EXIT прерывает выполнение цикла с передачей управления команде, следующей за ENDFOR. Она может располагаться в любом месте между FOR и ENDFOR. Команда LOOP также может быть помещена в любом месте между FOR и ENDFOR. Она передает управление команде FOR не дожидаясь команды ENDFOR.

    Конструкция FOR...ENDFOR может быть вложенной.

Массивы

Команда DIMENSION позволяет создавать одно- или двумерные массивы. Команда DIMENSION идентична по действию и синтаксису команде DECLARE или команде ARRAY.

DIMENSION <array1> (<вырN1> [, <вырN2>]) [, <array2> (<вырN3> [, <вырN4>])] ...
  • <array1> - Имя создаваемого массива.
  • <вырN1> [, <вырN2>] Размер массива.

Hумерация элементов массива временных переменных начинается с 1. Если массив определен с двумя индексами (двумерный массив), то к нему возможен доступ и посредством одного индекса. Если вместо пары индексов указывается один, то считается , что для элементов двумерного массива используется сплошная нумерация.

Изменение размеров массивов

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

Команда DIMENSION должна содержать имя массива, размеры которого будут изменены. Если количество элементов увеличивается, все элементы оригинального массива копируются во вновь созданный массив. Если количество элементов в массиве уменьшается, "лишние" элементы удаляются.

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

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

Наверх Задать вопрос