Руководство разработчика

Разработка циклических типовых операций

В простых случаях достаточно показа окна типовой операции с однократным вызовом оператора ВВЕСТИ (см. пример здесь). Если требуется организовать более сложное взаимодействие с пользователем во время работы с окном типовой операции, то оператор ВВЕСТИ должен вызываться многократно. Обычно для этого организуется цикл. Значения переменных формульного раздела типовой операции определяют фазу работы окна и условие выхода из цикла.

Пример

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

ОПЕРАЦИЯ Демонстрация циклического ввода
                                        
 Введите текст : *текст***********************************
                                         
ВЫЧИСЛИТЬ                               
  текст=""                           
  ЦИКЛ ПОКА (текст<>"выход")
    ВВЕСТИ                                  
  КОНЕЦ_ЦИКЛА  
КОНЕЦ

Для циклических типовых операций важной является возможность передавать для оператора ВВЕСТИ список доступных или недоступных граф. Так некоторые графы могут быть всегда недоступными и использоваться для вывода информации. Какие-то графы могут становится доступными или недоступными в зависимости от текущей фазы работы типовой операции. Логика переходов между фазами работы может быть довольно сложной: с циклами, ветвлениями и возвратами. В информатике подобные системы описываются как конечный автомат с набором состояний.

Пример

Следующий пример демонстрирует многофазную работу с типовой операцией. В данном случае конечный автомат имеет три состояния. На первом шаге вводится код счета (фаза "выбор счета"). После нажатия ОК отображается наименование счета и происходит переход ко второму шагу (фаза "ввод наименования"). После изменения наименования происходит сохранение счета с новым наименованием в плане счетов и устанавливается условие прекращения работы с типовой операцией (фаза "выход").

ОПЕРАЦИЯ Изменение наименования счета
                
 Код счета    : ^счет
 
 Наименование : *наим*********************************************************************
                                         
ВЫЧИСЛИТЬ                               
  счет = ""                           
  наим = ""
  фаза = "выбор счета"
  список_граф = ""
  
  ЦИКЛ ПОКА (фаза <> "выход")
       
    ЕСЛИ фаза = "выбор счета" ТО
      список_граф = "счет"
    ИНАЧЕ  
      список_граф = "наим"
    КОНЕЦ_ЕСЛИ

    ВВЕСТИ(список_граф, ДА)

    ЕСЛИ фаза = "выбор счета" ТО
       наим = НАЗВ(счет)
       фаза = "ввод наименования"
    ИНАЧЕ
       ЕСЛИ наим <> НАЗВ(счет) ТО
         сч = СЧЕТ_СЧИТАТЬ(счет)
         сч.название = наим
         сч.ЗАПИСАТЬ
       КОНЕЦ_ЕСЛИ 
       фаза="выход"
    КОНЕЦ_ЕСЛИ
    
  КОНЕЦ_ЦИКЛА  
КОНЕЦ

Важную роль при реализации циклических типовых операций играют функции, вызываемые в процессе работы оператора ВВЕСТИ, т.е. во время работы пользователя с элементами управления диалогового окна типовой операции. Вызов функций осуществляется для граф с вызовом функции и при нажатии кнопок. Если в функции достигается условие прерывания текущего оператора ВВЕСТИ, то можно воспользоваться оператором СТОП_ВВЕСТИ.

При переключении опции не происходит вызова функции, но есть возможность завершить текущий оператор ВВЕСТИ. Опция с признаком "стоп" действует аналогично СТОП_ВВЕСТИ(ДА).


См. также: