Разработка циклических типовых операций
В простых случаях достаточно показа окна типовой операции с однократным вызовом оператора ВВЕСТИ (см. пример здесь). Если требуется организовать более сложное взаимодействие с пользователем во время работы с окном типовой операции, то оператор ВВЕСТИ должен вызываться многократно. Обычно для этого организуется цикл. Значения переменных формульного раздела типовой операции определяют фазу работы окна и условие выхода из цикла.
Пример
В следующем примере выход из цикла происходит при наборе в графе слова "выход":
ОПЕРАЦИЯ Демонстрация циклического ввода Введите текст : *текст*********************************** ВЫЧИСЛИТЬ текст="" ЦИКЛ ПОКА (текст<>"выход") ВВЕСТИ КОНЕЦ_ЦИКЛА КОНЕЦ
Для циклических типовых операций важной является возможность передавать для оператора ВВЕСТИ список доступных или недоступных граф. Так некоторые графы могут быть всегда недоступными и использоваться для вывода информации. Какие-то графы могут становится доступными или недоступными в зависимости от текущей фазы работы типовой операции. Логика переходов между фазами работы может быть довольно сложной: с циклами, ветвлениями и возвратами. В информатике подобные системы описываются как конечный автомат с набором состояний.
Пример
Следующий пример демонстрирует многофазную работу с типовой операцией. В данном случае конечный автомат имеет три состояния. На первом шаге вводится код счета (фаза "выбор счета"). После нажатия ОК отображается наименование счета и происходит переход ко второму шагу (фаза "ввод наименования"). После изменения наименования происходит сохранение счета с новым наименованием в плане счетов и устанавливается условие прекращения работы с типовой операцией (фаза "выход").
ОПЕРАЦИЯ Изменение наименования счета Код счета : ^счет Наименование : *наим********************************************************************* ВЫЧИСЛИТЬ счет = "" наим = "" фаза = "выбор счета" список_граф = "" ЦИКЛ ПОКА (фаза <> "выход") ЕСЛИ фаза = "выбор счета" ТО список_граф = "счет" ИНАЧЕ список_граф = "наим" КОНЕЦ_ЕСЛИ ВВЕСТИ(список_граф, ДА) ЕСЛИ фаза = "выбор счета" ТО наим = НАЗВ(счет) фаза = "ввод наименования" ИНАЧЕ ЕСЛИ наим <> НАЗВ(счет) ТО сч = СЧЕТ_СЧИТАТЬ(счет) сч.название = наим сч.ЗАПИСАТЬ КОНЕЦ_ЕСЛИ фаза="выход" КОНЕЦ_ЕСЛИ КОНЕЦ_ЦИКЛА КОНЕЦ
Важную роль при реализации циклических типовых операций играют функции, вызываемые в процессе работы оператора ВВЕСТИ, т.е. во время работы пользователя с элементами управления диалогового окна типовой операции. Вызов функций осуществляется для граф с вызовом функции и при нажатии кнопок. Если в функции достигается условие прерывания текущего оператора ВВЕСТИ, то можно воспользоваться оператором СТОП_ВВЕСТИ.
При переключении опции не происходит вызова функции, но есть возможность завершить текущий оператор ВВЕСТИ. Опция с признаком "стоп" действует аналогично СТОП_ВВЕСТИ(ДА).