Для реализации циклов в макросах используется макрокоманда ЗапускМакроса. Рассмотрим примеры.
Пример 16. Выдать на экран три раза одно и то же сообщение. Для решения этой задачи можно три раза использовать макрокоманду ОкноСообщения, а можно это сделать с помощью цикла:
· создать макрос, содержащий единственную макрокоманду ОкноСообщения, в аргументах которой укажем повторяемое сообщение, например, слово Ура!. Сохранить макрос, задав ему имя, например, Сообщить.
· создать другой макрос по имени Запуск сообщения,который показан на рисунке 90:
Рисунок 90 – Макрос Запуск сообщения
· исполнить макрос Запуск сообщения.
Рассмотрим более сложные примеры.
Пример 17. Пусть имеем загруженную данными таблицу Det. Требуется отобрать в отдельную таблицу детали с ценой больше 100 руб., а в другую таблицу – остальные детали. Эту задачу можно решать несколькими способами.
Способ 1. С использованием запросов:
· создать запрос с именем Дорогие на создание таблицы по имени Дорогие детали, куда будут отбираться записи из таблицы Det, с условием отбора >100 для поля CENA;
· cоздать запрос с именем Дешевые на создание таблицы по имени Дешевые детали, куда будут отбираться остальные детали, в том числе и те, цена для которых не введена; запрос показан на рисунке 91;
!!! Талицы и запросы должны иметь разные имена
Рисунок 91 – Запрос на создание таблицы дешевых деталей и цена которых не введена
· создать макрос по имени Отбор деталей,который показан на рисунке 92:
Рисунок 92 – Макрос для отбора деталей в таблицы Дешевые детали и Дорогие детали
Но тогда макрос выполнится «молча». Чтобы проинформировать пользователя БД, что макрос «сделал свое дело» нужно его завершить макрокомандой ОкноСообщения, как показано на рисунке 92.
· исполнить макрос Отбор деталей. В результате будут созданы две таблицы Дорогие детали и Дешевые детали с отобранными данными.
Способ 2. С использованием циклов в макросах.
Просматривая записи от первой до последней в таблице Det, будем копировать запись либо в одну таблицу, либо в другую в зависимости от значения поляCENA. Причем работу с данными таблиц будем осуществлять через формы. Последовательность шагов может быть такой:
· создать пустую таблицу для дорогих деталей. Назовем ее ДорДет. Ее структура должна быть такой же, как и структура таблицы Detза исключением ключевого поля, которое должно быть не счетчиком, а числовым:
¨ выделить таблицу Det в окне браузера объектов;
¨ скопировать ее в буфер обмена;
¨ вставить из буфера обмена, указав в открывшемся окне факт копирования только структуры (соответствующий переключатель);
¨ сохранить таблицу с именем ДорДет;
¨ открыть таблицу ДорДет в режиме конструктора, и, если ключевое поле – счетчик, то заменить его на числовое;
· аналогично создать пустую таблицу для дешевых деталей и деталей без цены по имени ДешДет;
· создать автоформы ДорДет и ДешДет, источником данных для которых являются соответствующие таблицы;
· создать условный макрос по имени Отбор, который буде выполняться в цикле при условии, что форма Det открыта (предполагается, что форма Det была заранее создана). Этот макрос в зависимости от значения поля CENA в форме Det будет копировать запись из таблицы Det в таблицу ДорДет или ДешДет через соответсвующие формы. Макрос Отбор приведен на рисунке 93:
Рисунок 93 – Макрос Отбор
· создать макрос Завершение отбора, который даст возможность убедиться в правильности заполнения данными таблиц ДорДет и ДешДет, а также закрыть все вспомогательные открытые объекты, то есть корректно завершить задачу (см. рисунок 94);
· создать макрос Отбор в цикле, который запускает два макроса: Отбор и Завершение отбора.
Макрос Отбор в цикле показан на ри-
сунке 95.
В этом макросе вместо аргумента Чис-
ло повторов можно указать Условие
повтора:
Not is Null (Формы![Det]![DIM]),
что означает“Пока не пусто значение
поля DIM в таблице Det”. Это условие можно использовать, если для всех де-
талей введено имя. Здесь поле DN ис
пользовать нельзя, так как DN – ключ.
Рисунок 94 – Макрос Завершение отбора
· на форму Det в режиме конструктора нанести кнопку, на которой написать
Отбор в цикле;
· связать событие Нажатие кнопки с макросом Отбор в цикле.
· открыть форму Det в режиме формы, 1с по кнопке Отбор в цикле и убедиться, что поставленная задача решается правильно.