Байланысты: Сборник лабораторных работ для студентов учебных заведений (1)
Конструктор формы состоит из трех областей, каждая из которых отвечает за ту или иную функциональность формы:
Снизу находится область предпросмотра формы. Она позволяет лишь приблизительно понять, как будет отображаться данная форма для пользователя, поскольку может быть изменена с учетом множества различных факторов. Это своеобразная «иллюзия» того, что увидит пользователь.
В правой верхней области находятся данные, которые мы вообще можем использовать в каком-либо виде на этой форме. Они разделены по вкладкам «Реквизиты», «Команды» и «Параметры».
В левой верхней области конструктора форм описывается, какие именно данные будут изображены на форме и в каком именно виде. Здесь – две вкладки: «Элементы» и «Командный интерфейс». На вкладке «Элементы» настраивается внешний вид и расположение реквизитов на форме. Вкладка «Командный интерфейс» определяет положение команд (кнопок) на форме.
Теперь перейдем непосредственно к работе с остатком.
Остаток будем получать из регистра накопления «Касса» и выводить его на форму. Чтобы выводить на форму какую-либо информацию, необходимо добавить новый реквизит «Остаток».
Чтобы реквизит был виден на форме, удерживая левую кнопку мыши, перенесите его на элемент «Форма», чтобы он расположился под таблицей.
Теперь необходимо изменить вид данного элемента. Открываем его свойства и меняем вид с «Поле ввода» на «Поле надписи».
Данное поле не может заполниться само по себе. Оно будет заполняться по происшествии в системе какого-либо события. В нашем случае, необходимо, чтобы остаток денежных средств заполнялся всегда при открытии данной формы.
Создадим такое событие. Щелкнем на элемент «Форма» правой кнопкой мыши и в контекстном меню выберем пункт «События». Среди предложенных событий выберем «ПриСозданииНаСервере».
Откроется модуль формы, в котором будет представлен шаблон процедуры.
Алгоритм, описанный внутри данной процедуры, выполнится единожды при создании новой формы. Но нам нужно делать пересчет остатка каждый раз, когда мы добавляем новый документ в Журнал документов.
Возвращаемся на форму с помощью вкладки в нижней части конструктора форм.
На этот раз следует описать событие не для работы формы в целом, а для ее элемента «Список». Аналогично вызываем контекстное меню, выбираем в меню «События» ? «ПриИзменении».
Для решения поставленной задачи обращаться к серверу нет нужды, поэтому выберем обработчик события на стороне клиента.
Теперь модуль формы выглядит следующим образом:
Обе эти процедуры будут делать одинаковые действия, а именно – вызывать функцию, которая будет рассчитывать остаток денежных средств в кассе и передавать данные в реквизит «Остаток».
Создадим собственную функцию. Для этого спуститесь в самый низ модуля, ниже описанных процедур, наберите «Функ» и нажмите комбинацию клавиш Ctrl+Q. Система предложим вам на выбор несколько вариантов создания шаблона. Нам нужна самая обычная функция.
На следующем этапе необходимо дать функции имя. Назовем ее «ПолучитьОстаток».
Система сформирует шаблон для написания функции. Далее нужно добавить директиву компиляции, то есть дать функции понять, на чьей стороне она будет обрабатываться – на стороне клиента или сервера.
Поскольку данная функция должна будет обращаться к базе данных за получением данных в регистре накопления, а доступ к базе данных всегда имеется только со стороны сервера, то нам нужна директива сервера. Скопируйте ее у процедуры «ПриСозданииНаСервере» и поместите перед функцией. В результате модуль должен выглядеть следующим образом:
Для начала следует разобраться с функцией «ПолучитьОстаток». Эта процедура должна обратиться к данным регистра накопления и получить из него актуальный остаток в кассе.
Опишем получение остатков с помощью конструктора запроса с обработкой результата. Такой запрос позволит не только получить данные из базы данных, но и обработать их результат. Для этого необходимо установить курсор внутри функции, а затем вызвать контекстное меню правой кнопкой мыши и выбрать пункт «Конструктор запроса с обработкой результата…».
Система выдаст предупреждение о том, что запрос найден не был, и предложит создать свой. Соглашаемся.
На вкладке «Обработка результата» установите тип обработки в значение «Обход результата».
Далее переходим на вкладку «Таблицы и поля». Данное окно имеет три части:
Часть слева отображает все объекты конфигурации, имеющиеся в нашей базе данных. Необходимо выбрать лишь те объекты, из которых мы хотим получать данные.
Посередине находятся таблицы – это выбранные нами объекты, откуда мы хотим получать данные для конкретного отчета.
Справа поля – это те значения (поля), которые мы хотим увидеть в отчете.
Данные будем брать не из регистра накоплений напрямую, а из виртуальной таблицы, которую создает этот регистр автоматически. Эта виртуальная таблица позволит получить уже просуммированные значения по всем документам.
Чтобы перенести данные из одного окна в другое, просто перетащите нужные поля с помощью мыши либо воспользуйтесь стрелочками, расположенными между окнами.
В результате работы с конструктором получен готовый программный модуль, извлекающий сумму остатка денег в кассе.
Запрос будет либо возвращать одно значение, либо ничего не возвращать.
Немного изменим логику, которую создал конструктор, и вместо цикла опишем следующее условие:
Обратите внимание на служебное слово «Возврат». Оно будет возвращать остаток денежных средств в кассе. Если же остаток в кассе будет иметь значение «0», тогда запрос ничего не вернет, а мы с помощью условия заставим функцию вернуть значение «0». Таким образом, мы сформировали функцию, которая возвращает остаток денег в кассе.
Функция «ПолучитьОстаток» возвращает значение, которое необходимо передать в созданный ранее реквизит «Остаток». Значение остатка должно быть получено в обеих процедурах – «ПриСозданииНаСервере» и «СписокПриИзменении».