Dataexpress

Генерация html-контента на основе шаблонов

В DataExpress API добавлен класс TTemplate для генерации html-контента (и не только) на основе шаблонов. Этот класс поможет вам генерировать html-контент, возвращаемый веб-сервером. Шаблон представляет собой простой текстовый файл со специальными тегами, вместо которых будут подставлены значения. Пример:

        <form id="myform" name="myform" enctype=multipartform-data method="post" action="{+ACTION+}">
            <table>
                <tr>
                    <td>Устройство<td>
                    <td>
                        <select name="device" onchange="fillModels()">
                            <option value="0">Выберите устройство<option>
                            {+DEVICES+}
                        <select>
                    <td>
                <tr>
                <tr>
                    <td>Марка<td>
                    <td>
                        <select name="brand" onchange="fillModels()">
                            <option value="0">Выберите марку<option>
                            {+BRANDS+}
                        <select>
                    <td>
                <tr>
                <tr>
                    <td>Модель<td>
                    <td>
                        <select name="model">
                            <option value="0">Выберите модель<option>
                            {+MODELS+}
                        <select>
                    <td>
                <tr>
                <tr>
                    <td>Серийный номер<td>
                    <td>
                        <input name="serial" type="text" value="{+SERIAL+}">
                    <td>
                <tr>
                <tr>
                    <td>Дата выпуска<td>
                    <td>
                        <input name="date" type="text" value="{+DATE+}">
                    <td>
                <tr>
                ...

Специальные теги заключаются в скобки {+ … +}, которые можно поменять, задав свойства StartDelimiter и EndDelimiter. Теги могут иметь параметры, которые заключаются в скобки . Пример:

<table class="beautify1"><tr class="beautify2"><td class="beautify3">
  {+REPORTRESULT 
   
   
.
.snip, and so on more parameters if needed
.
   
   
  +}
<table>

Простые теги и теги с параметрами обрабатываются в событии OnReplaceTag. Для простых тегов более удобным вариантом может быть использование свойства Tags. Через это свойство определяются значения тегов, которые будут подставлены в шаблон. Пример:

Tpl = TTemplate.Create;
Tpl.Tags'device' = 1;
Tpl.Tags'serial' = 'ABCDEFG';
Tpl.FileName = '....';  // Указываем файл шаблона ...
Tpl.Template = 'текст шаблона'; // ... или содержимое шаблона
Result = Tpl.GetContent;  // Получаем готовый контент.

Монитор пользователей

Монитор пользователей отображает активные соединения с базой данных. Столбец CID — это идентификатор подключения к базе данных, ID — идентификатор редактируемой записи.

При обрыве соединения с базой может остаться информация о входе и редактируемых записях пользователем. Программа при следующем запуске пытается автоматически убрать ошибочные сведения. Но, к сожалению, это не всегда удается. Из-за этого некоторые пользователи не смогут войти в базу или изменить некоторые записи. Если вместо IP-адреса вы видите пустую ячейку, значит клиент по каким-то причинам потерял связь с базой (если это не встроенный сервер). Вы можете удалить сведения вручную командой «Удалить». Если вы удаляете активного пользователя, то пользователь все равно продолжает работать. Удаляется только запись из служебной таблицы. На стабильность работы программы это не влияет, разве что станет возможным войти под этим пользователем еще кому-нибудь (если не установлена множественная авторизация). Если вы удалите активную блокировку записи, то запись станет доступной и другим пользователям. Это может привести к тому, что эту запись сможет редактировать и другой пользователь. В этом случае в базе сохранятся сведения пользователя, который позже сохранил запись.

Тег grid

Тег grid, так же как и form, используется для печати множества записей источника данных. Отличие заключается в том, что grid применяется для печати данных в таблице документа. Пишется тег следующим образом:

{grid|имя источника данных}
{end}

Так схематично показана таблица документа, в ячейках которой пишутся теги grid и end. Теги определяют участок таблицы, который будет напечатан множество раз, равное количеству записей в источнике данных. Печать начинается с первой записи. Теги grid и end могут располагаться на одной строке. В этом случае повторяться будет только одна строка таблицы.

Рекомендуется указывать тег grid в первой колонке, а тег end в последней. Но это необязательно. Дело в том, что все равно будут напечатаны все ячейки, находящиеся на строках вместе с тегами grid и end. По другому просто и быть не может, потому что в противном случае структура документа нарушится и его невозможно будет открыть. Теги обязательно должны быть указаны в ячейках таблицы, а не вне ее, иначе структура документа будет нарушена.

Теги могут быть вложенными. Каждый тег grid должен находится в разных строках. Несколько тегов grid в одной строке не допускается. Пример:

{grid|Закупка}
{grid|Товары} …{end}{end}

Также допускается вложенная комбинация тегов form и grid:

{grid|Закупка} {form|Товары}…{end} {end}

Настройки отбора


В настройках отбора вы указываете из каких форм извлекать данные, какие вычисления проводить с ними, какие поля должны отображаться, а какие выступать в роли параметров. В качестве источника отбора может выступать форма и (необязательно) одна подчиненная форма (таблица). В отборе может быть один или несколько источников. Выберите поля, которые вы хотите видеть в результате. Для этого нажмите кнопку «Добавить поле» и в новой строке дважды щелкните по ячейке. Поля, принадлежащие основной форме, отмечаются восклицательным знаком перед именем.

Поля типа «объект» содержат в себе поля связанной формы — поля объектов, в том числе вложенные объекты. Обычно вам нужно будет выбирать какое-либо поле объекта, а не сам объект, т. к. если выбрать сам объект (к примеру, «Товар» или «Товар|Группа»), то в отчете вы увидите непонятные числа, вместо текста. На самом деле это ID записей связанной формы, но для пользователя они не имеют смысла. Имена полей должны быть уникальными. Напротив каждого поля вы можете указать видимость поля в отчете и возможность фильтрации по этому полю (флажок «Параметр»). Имена полей должны быть уникальными. Допускается совпадение имен только для пары полей, если одно видимое, а другое является параметром.

Над данными могут быть проведены вычисления. Вид вычислений зависит от того, какая выбрана функция. Функция выбирается для каждого поля, по которому нужно вычислить результат. Остальные поля образуют группы. Функция вычисляет результат для каждой группы. Назначение функций:

  • Сумма — вычисляет итоговую сумму.
  • Среднее — вычисляет среднее значение.
  • Максимум — вычисляет максимальное значение.
  • Минимум — вычисляет минимальное значение.
  • Количество — считает количество записей или непустых значений (зависит от того выбрано ли поле).
  • Баланс — вычисляет разницу прихода и расхода. Нужно обязательно указывать тип источника: приход или расход.
  • Кол-во различных — считает кол-во уникальных значений поля.
  • Соединить — соединяет значения поля в одну строку, разделяя значения точкой с запятой и пробелом. В результат не включаются повторяющиеся значения.
  • Соединить все — соединяет значения поля в одну строку, разделяя значения точкой с запятой и пробелом. В результат входят все значения, в том числе повторы.

Для функций «Сумма», «Среднее», «Баланс» подходят только числовые поля. Для остальных функций подходят любые поля.

Списки

DataExpress Wiki поддерживает нумерованные и маркированные списки. Чтобы создать элемент списка, поставьте в начале строки два пробела и потом звёздочку (*) в случае маркированного списка, или дефис (-) — в случае нумерованного.

  • Первый элемент маркированного списка
    • Второй элемент списка

      Можно сделать вложенный список

    • Ещё один элемент
  1. Тот же список, только нумерованный
    1. Ещё элемент
      1. Чем больше пробелов в начале, тем глубже вложенность
    2. Всё просто
  * Первый элемент маркированного списка
    * Второй элемент списка
      * Можно сделать вложенный список
    * Ещё один элемент

  - Тот же список, только нумерованный
  - Ещё элемент
    - Чем больше пробелов в начале, тем глубже вложенность
  - Всё просто

Размещение компонентов

Компоненты могут располагаться в произвольном месте формы. Для изменения положения компонента просто перетащите его мышкой в нужное место. Чтобы переместить несколько компонентов их надо предварительно выделить, а затем взяв за один из них, перетащить. Перемещение компонентов мышкой осуществляется с шагом 4 пикселя. Для более точного позиционирования компонента можно воспользоваться комбинацией клавиш <Ctrl-Стрелка влево/вправо/вверх/вниз>. Еще одним удобным способом являются команды выравнивания компонентов, которые расположены в контекстном меню дизайнера в пункте «Выравнивание». Чтобы ими воспользоваться, надо выделить несколько компонентов. Рекомендую потренироваться на тестовой форме, чтобы понять как они работают. Например, пункт «Выравнивание-По левому краю» переместит компоненты в позицию самого левого выделенного компонента.

Изменить размер компонента можно, потянув за один из манипуляторов. Манипуляторы появляются только при выделении одного компонента. Если вам надо изменить размер группы компонентов, выделите их, а затем воспользуйтесь комбинацией клавиш <Shift-Стрелка>. Еще одним удобным способом группового изменения размера компонентов являются команды контекстного меню «Размер». Для этого надо выделить несколько компонентов. Потренируйтесь на тестовой форме, чтобы понять как они работают. Например, пункт «Размер-Расширить», сделает ширину компонентов, равную самому широкому выделенному компоненту.

Использование параметров

Параметры отчета используются для фильтрации пользователем данных отчета. В настройках отбора поставьте флажок «Параметр» напротив полей, которые будут служить параметрами отчета. Когда пользователь откроет отчет, он увидит табличку, такую же как в , в которой можно задавать значения для параметров. Параметры применяются после нажатия кнопки «Обновить» на панели инструментов.

Вид параметра зависит от типа поля. Здесь все так же, как и в фильтре формы. Для чисел задается диапазон значений, для списков и объектов — раскрывающийся список, и т. д. Если в отборе поле объекта, то тип определяется по полю объекта. Чтобы в параметрах можно
было выбирать объект из списка, добавьте его в отбор и поставьте флажок «Параметр», флажок «Видимое» можете снять по желанию.

Имена полей-параметров и видимых полей могут совпадать при условии, что для первых снят флажок «Видимое».

Замечания

  1. Веб-сервер ничего не умеет. Его функциональность полностью зависит от вас.
  2. Сервер многопоточный, но обработчики событий выполняются в основном потоке приложения.
  3. По умолчанию используется порт 80. Через свойство Port можно назначить другой.
  4. Можно запустить несколько веб-серверов, создав несколько экземпляров THttpServer.
  5. Для обработки ошибок, возникающих в веб-сервере, подключитесь к событию OnError.
  6. Веб-сервер основан на стандартном компоненте TFPHttpServer, входящего в FreePascal и среду Lazarus. Так что всю необходимую информацию по классам можно найти в Интернете.
  7. Для программирования веб-сервера вам возможно потребуются знания html, css и javascript.
  8. Веб-сервер можно использовать не только для реализации веб-интерфейса к базе, но и для взаимодействия с какими-нибудь веб-сервисами, реализации своего веб-сервиса, взаимодействия между приложениями.

Пользователи

Пользователи создаются, когда с базой работают несколько человек и нужно ограничить доступ к формам и полям. Вы можете разрешить/запретить просмотр форм и отчетов, добавление, изменение, удаление. На уровне формы можно настроить видимость компонентов и доступность для редактирования. Для каждой формы можно настроить условие отбора записей, т. е. пользователь сможет видеть ограниченный набор данных. Также можно настроить редактирование только определенных записей (условие редактирования).

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

Все пользователи, у которых есть роль, имеют ограниченный доступ к базе данных. Для них недоступна настройка базы данных и меню «Сервис». Полные права есть только у разработчика. Нужно обязательно создать хотя бы одного пользователя-разработчика. Иначе изменить что-то в базе будет невозможно. В программе можно настроить интерфейс — набор закладок и структуру меню. Интерфейсов может быть несколько. У каждой роли может быть свой интерфейс. Интерфейс по умолчанию используется ролями, для которых не указан интерфейс, а также разработчиком и при индивидуальной работе (когда в базе пользователи не созданы).

Демо-база

Небольшой пример использования веб-сервера. Веб-сервер умеет отображать список устройств, добавлять, редактировать, удалять устройства, загружать фотографии, взаимодействует с javascript для подгрузки списка моделей в карточку устройства (AJAX). Клиентская часть (html, css, javascript) была подготовлена в NetBeans IDE.

Откройте базу, в браузере в адресной строке наберите: http://127.0.0.1 или localhost. Также на любом устройстве локальной сети в адресной строке браузера наберите IP-адрес сервера. Чтобы получить доступ к веб-серверу через интернет, надо настроить проброс портов в роутере или получить у провайдера статический ip-адрес.

Принцип работы функций

Рассмотрим на простом примере как работают функции и группировка данных. Пусть есть форма со следующими данными:

Номер Дата Товар Единица измерения Количество
12 10.02.2020 Крупа кг 100
15 13.02.2020 Хлеб шт 30
16 15.02.2020 Крупа кг 50
17 02.03.2020 Хлеб шт 20
18 09.03.2020 Крупа т 2

Посчитаем сколько всего хлеба и крупы с учетом единицы измерения. В отборе выберем поля и функцию. Будет это выглядеть следующим образом (схематично):

Поле Функция
Товар
Единица измерения
Количество Сумма

Если в отборе выбирается хотя бы одна функция, то все поля, для которых функция не выбрана, становятся группой. В нашем случае группой становятся поля «Товар» и «Единица измерения». Группа — это некоторая комбинация значений, которая может повторяться в базе и для которой будет вычислена функция. В примере мы можем выделить следующие группы: Крупа-кг, Крупа-т, Хлеб-шт. В результате работы отчета получится следующий результат:

Товар Единица измерения Сумма (Количество)
Крупа кг 150
Крупа т 2
Хлеб шт 50

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

Товар Единица измерения Среднее Максимум Минимум Количество Соединить
Крупа кг 75 100 50 2 100; 50
Крупа т 2 2 2 1 2
Хлеб шт 25 30 20 2 30; 20

Функции «Сумма», «Среднее» и «Баланс» могут работать только с числовыми полями. Для остальных функций поля могут быть любых типов.

Основные функциональные возможности

  • Эффективная автоматизация всех основных библиотечных процессов
  • Интуитивно-понятный интерфейс, широкие возможности настройки и индивидуализации
  • Каталогизация всех основных видов документов
  • Соответствие требованиям ГОСТ Р 7.0.100-2018
  • Поддержка форматов MARC21, RUSMARC
  • Поддержка UNICODE на уровне хранения и представления данных
  • Поддержка различных видов лингвистического обеспечения
  • Многовариантный поиск в библиографических базах данных
  • Поиск по содержимому полнотекстовых документов
  • Защищенный просмотр электронных документов
  • Поддержка произвольного количества библиографических баз данных
  • Автоматизация обслуживания читателей, соответствие требованиям по защите персональных данных
  • Возможность предварительного комплектования фондов библиотеки в удаленном режиме
  • Функционирование в локальных и глобальных сетях
  • Возможность работы с различным RFID-оборудованием
  • Возможность интеграции с другими информационными системами, используемыми Заказчиком
  • Возможность интеграции с внешними информационными системами, сервисами и поставщиками контента, включая крупнейшие федеральные, региональные и отраслевые системы

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

Переход на АИБС «МегаПро» позволит библиотеке сохранить и преумножить результаты уже проделанной работы по автоматизации.

 

Остались вопросы? Обращайтесь к нам

Таблицы

DataExpress Wiki поддерживает упрощённый синтаксис создания таблиц.

Заголовок 1
Заголовок 2
Заголовок 3
Ряд 1 Колонка 1
Ряд 1 Колонка 2
Ряд 1 Колонка 3
Ряд 2 Колонка 1
Объединение колонок (обратите внимание на двойную вертикальную черту)
Ряд 3 Колонка 1
Ряд 2 Колонка 2
Ряд 2 Колонка 3

Нормальные ряды должны начинаться и заканчиваться вертикальной чертой — |, а заголовки «крышечкой» — ^.

^ Заголовок 1 ^ Заголовок 2 ^ Заголовок 3 ^
| Ряд 1 Колонка 1 | Ряд 1 Колонка 2 | Ряд 1 Колонка 3 |
| Ряд 2 Колонка 1 | Объединение колонок (обратите внимание на двойную вертикальную черту) ||
| Ряд 3 Колонка 1 | Ряд 2 Колонка 2 | Ряд 2 Колонка 3 |

Чтобы объединить две соседние клетки в ряду, просто оставьте соседнюю клетку полностью пустой, как показано выше. Следите, чтобы количество разделителей клеток было одинаковым.

Вертикальные заголовки тоже можно сделать:

Заголовок 1 Заголовок 2
Заголовок 3 Ряд 1 Колонка 2 Ряд 1 Колонка 3
Заголовок 4 Объединения нет
Заголовок 5 Ряд 2 Колонка 2 Ряд 2 Колонка 3

Как легко увидеть, разделитель, стоящий перед клеткой, определяет форматирование:

|              ^ Заголовок 1       ^ Заголовок 2      ^
^ Заголовок 3  | Ряд 1 Колонка 2   | Ряд 1 Колонка 3  |
^ Заголовок 4  | Объединения нет   |                  |
^ Заголовок 5  | Ряд 2 Колонка 2   | Ряд 2 Колонка 3  |

Можно сделать вертикально объединённые ячейки добавлением трёх двоеточий в объединяемые нижележащие ячейки.

Заголовок 1 Заголовок 2 Заголовок 3
Ряд 1 Колонка 1 эта ячейка объединена вертикально Ряд 1 Колонка 3
Ряд 2 Колонка 1 Ряд 2 Колонка 3
Ряд 3 Колонка 1 Ряд 2 Колонка 3

В этих ячейках не должно быть ничего, кроме синтаксиса объединения ().

^ Заголовок 1        ^ Заголовок 2                       ^ Заголовок 3            ^
| Ряд 1 Колонка 1    | эта ячейка объединена вертикально | Ряд 1 Колонка 3        |
| Ряд 2 Колонка 1    | :::                               | Ряд 2 Колонка 3        |
| Ряд 3 Колонка 1    | :::                               | Ряд 2 Колонка 3        |

Текст клетки таблицы можно выравнивать. Просто добавьте минимум два пробела с противоположной стороны: слева — если надо выравнять вправо, справа — если надо выравнять влево, и по два с каждой стороны — если по центру.

Таблица с выравниванием
вправо по центру влево
влево вправо по центру
xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx
^           Таблица с выравниванием        ^^^
|        вправо|   по центру  |влево         |
|влево         |        вправо|   по центру  |
| xxxxxxxxxxxx | xxxxxxxxxxxx | xxxxxxxxxxxx |

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

Настройка роли

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

Полный доступ — доступны все операции: добавление, редактирование, удаление.

Только редактирование — можно только просматривать и редактировать существующие записи.

Только просмотр — можно только просматривать записи.

Нет доступа — форма невидима в интерфейсе программы.

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

Доступ к форме может быть ограничен на уровне компонентов. В окне «Роль» дважды щелкните по ячейке последнего столбца, чтобы открыть окно настройки.

К компоненту может быть полный доступ (выбрано «редактирование»), только просмотр, нет доступа. В последнем случае на месте компонента рисуется прямоугольник.

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

Условие отбора

Условие отбора позволяет ограничить доступный пользователю набор данных. Например:

='В работе'

С помощью этого выражения пользователю будут доступны только записи со статусом «В работе». При этом
не покажет вам записи с другими статусами. Условие отбора составляется аналогично . Условие отбора будет применяться к форме и окнам списка (окно списка открывается, если нажать на кнопку рядом с объектом). Условие отбора не влияет на содержимое выпадающего списка объектов. Чтобы содержимое выпадающего списка объектов соответствовало условию отбора формы, на которую они ссылаются, поставьте флажок напротив соответствующей формы в окне «Роль» в предпоследнем столбце (называется «применить условие отбора к объектам»). Число элементов списка может быть меньше, чем задано условием отбора, если в объекте используется еще и фильтр списка.

Условие редактирования

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

=user

В этом примере запись разрешается редактировать тем, кто ее создал (или ответственный и пр.). Если редактирование запрещено, то и удаление запрещено.

Ключевые возможности

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

Шаблоны документов — это печатные формы данных. Они создаются в любом текстовом редакторе, способном сохранять в форматах: Microsoft Word (*.docx, *.docm, *.xml), OpenOffice Writer (*.odt), OpenOffice Calc (*.ods) или HTML (*.html).

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

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

Отчеты и запросы. Программа может делать простую выборку из одной или нескольких форм и вычислять итоги: сумма, баланс, среднее, максимум, минимум, количество. Итоги могут быть разбиты по периодам: дням, неделям, месяцам, кварталам, полугодиям, годам. Запросы позволяют встраивать выборки в формы, а также создавать подчиненные связи с формами и другими запросами.

Диаграммы. Для графического представления информации и визуальной аналитики в программе предусмотрены диаграммы. На выбор пользователя имеется несколько представлений: гистограмма, линейная, круговая, линейный график, и график с областями

Работа в локальной сети и сети Интернет. Ядром базы данных служит сервер баз данных Firebird. Благодоря клиент-серверной технологии с базой данных могут работать удаленно по локальной сети или сети Интернет неограниченное число пользователей.

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

Скрипты. Начиная с DataExpress 3 beta в программу встроен скриптовый движок RemObject Pascal Script. Скрипты для тех кому выражения немного жмут :). Возможности скриптов очень широки: управление почти любым элементом интерфейса программы, управление стандартными окнами, создание своих вариантов окон, автоматизация OLE, подключение внешних DLL-библиотек, полноценные SQL-запросы и т. д.

SQL-запросы. В скриптах можно составлять полноценные выражения SELECT. Вам доступна вся мощь Firebird SQL.

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

Функции

Этот вид расширений позволяет дополнить выражения новыми функциями. В специальном комментарии пишется спецификация функции.

{@function
OrigName=GetFormName
Name=FormName
Args=
Result=s
Group=Мои функции
Description=Эта функция возвращает имя текущей формы @}
 
function GetFormName String; 
begin
  Result = Self.FormCaption;
end;
 
{@function
OrigName=ToWordsBel
Name=ToWordsBel
Args=n
Result=s
Group=Функции преобразования
Description=Эта функция возвращает число прописью на белорусском языке. @}
 
function ToWordsBel(N Double) String; 
begin
  …
end;

В комментарии должны быть следующие параметры:

  • OrigName – исходное имя функции в модуле.
  • Name – имя функции, используемое в выражениях.
  • Args – типы аргументов:
    • n – число,
    • s – строка,
    • d – дата,
    • t – время,
    • b – логический,
    • v – любой тип.

Записывается, как несколько идущих подряд символов: nns, s, ds и т. д.

  • Result – тип результата. Используются те же символы, что и в Args.
  • Group – название группы, в которой будет находиться функция в окне «Функции».
  • Description – описание функции. Отображается в окне «Функции». Описание может быть записано в несколько строк. Можно использовать некоторые html-теги.

Нужно строго соблюдать состав и последовательность полей. В случае нарушения правил, компилятор выдаст ошибку. Комментарии могут находиться в любом месте модуля, но рекомендуется писать их перед функцией.
Возможной проблемой является дублирование имен функций разными разработчиками модулей. Поэтому старайтесь давать функциям уникальные имена, например, добавляя какой-нибудь префикс: EX_EXEC, MY_FUNC, DA_FIRMGET и т. д.

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

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

Как хранится информация в БД

В основе всей структуры хранения лежат три понятия:

  • База данных;
  • Таблица;
  • Запись.

База данных

База данных — это высокоуровневное понятие, которое означает объединение совокупности данных, хранимых для выполнения одной цели.
Если мы делаем современный сайт, то все его данные будут храниться внутри одной базы данных. Для сайта онлайн-дневника наблюдений за погодой тоже понадобится создать отдельную базу данных.

Таблица

По отношению к базе данных таблица является вложенным объеком. То есть одна БД может содержать в себе множество таблиц.
Аналогией из реального мира может быть шкаф (база данных) внутри которого лежит множество коробок (таблиц).
Таблицы нужны для хранения данных одного типа, например, списка городов, пользователей сайта, или библиотечного каталога.
Таблицу можно представить как обычный лист в Excel-таблице, то есть совокупность строк и столбцов.
Наверняка каждый хоть раз имел дело с электронными таблицами (MS Excel).
Заполняя такую таблицу, пользователь определяет столбцы, у каждого из которых есть заголовок. В строках хранится информация.
В БД точно также: создавая новую таблицу, необходимо описать, из каких столбцов она состоит, и дать им имена.

Запись

Запись — это строка электронной таблицы.
Это неделимая сущность, которая хранится в таблице. Когда мы сохраняем данные веб-формы с сайта, то на самом деле добавляем новую запись в какую-то из таблиц базы данных. Запись состоит из полей (столбцов) и их значений. Но значения не могут быть какими угодно.
Определяя столбец, программист должен указать тип данных, который будет храниться в этом столбце: текстовый, числовой, логический, файловый и т.д. Это нужно для того, чтобы в будущем в базу не были записаны данные неверного типа.

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

  1. Создадим для сайта новую БД и дадим ей название «weather_diary».
  2. Создадим в БД новую таблицу с именем «weather_log» и определим там следующие столбцы:
    • Город (тип: текст);
    • День (тип: дата);
    • Температура (тип: число);
    • Облачность (тип: число; от 0 (нет облачности) до 4 (полная облачность));
    • Были ли осадки (тип: истина или ложь);
    • Комментарий (тип: текст).
  3. При сохранении формы будем добавлять в таблицу weather_log новую запись, и заполнять в ней все поля информацией из полей формы.

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

Реляционная база данных

Английское слово „relation“ можно перевести как связь, отношение.
А определение «реляционные базы данных» означает, что таблицы в этой БД могут вступать в отношения и находиться в связи между собой.
Что это за связи?
Например, одна таблица может ссылаться на другую таблицу. Это часто требуется, чтобы сократить объём и избежать дублирования информации.
В сценарии с дневником погоды пользователь вводит название своего города. Это название сохраняется вместе с погодными данными.
Но можно поступить иначе:

  1. Создать новую таблицу с именем „cities“.
  2. Все города в России известны, поэтому их все можно добавить в одну таблицу.
  3. Переделать форму, изменив поле ввода города с текстового на поле типа «select», чтобы пользователь не вписывал город, а выбирал его из списка.
  4. При сохранении погодной записи, в поле для города поставить ссылку на соответствующую запись из таблицы городов.

Так мы решим сразу две задачи:

  • Сократим объём хранимой информации, так как погодные записи больше не будут содержать название города;
  • Избежим дублирования: все пользователи будут выбирать один из заранее определённых городов, что исключит опечатки.

Связи между таблицами в БД бывают разных видов.
В примере выше использовалась связь типа «один-ко-многим», так как одному городу может соответствовать множество погодных записей, но не наоборот!
Бывают связи и других типов: «один-к-одному» и «многие-ко-многим», но они используются значительно реже.

Оцените статью
Рейтинг автора
5
Материал подготовил
Андрей Измаилов
Наш эксперт
Написано статей
116
Добавить комментарий