Posted by Рустем Мухаметшин on July 28, 1999 at 11:02:01:
In Reply to: Re: Есть решение posted by Александр,Киев. on July 28, 1999 at 05:55:30:
Ассоциативные индексы это мощный инструмент, который позволяет существенно упростить алгоритм. К тому же, до недавнего времени это была единственная реализация вообще всех массивов (в том числе числовой индексации). Среди проблем работы следует отметить основную - проблему перебора элементов (в нашем случае для очистки/инициализации, в некоторых случаях для других целей). После некоторго опыта написаня форм в ФБП и построения ассоциативных таблиц результатов поиска по ленте фактов, я пришел к необходимости унифицировать данный алгоритм и теперь применяю его в любом случае, вне зависимости от сложности самого алгоритма формы. Это позволяет облегчит написание форм и что немало важно их дальнейший разбор (после нескольких месяцев). Вот болванка-пример использующая последние новшества интерпретатора.
* Start of form
* Первичная инициализация и подготовка
...
* Переход к циклу генерации ассоциативного массива
NI=0 Общее кол-во индексов ассоциативного массива
:next
search Нужные данные по индексу ?A и индексу ?B сумма ?S
If [success]=0
GoTo end
EndIf
* Производим отбор и классификацию. Ненужные пропускаем переходом на next
ID=A+'|'+B
Call RegID (ID)
[plus ID,S]
GoTo next
:end
* Используем данные
...
* Производим чистку
For I=0 To NI
ID=[i I]
[set ID+'|F', 0];[set ID,0]
EndFor
Stop
***************************************
*
:RegID (ID) Подпрограмма используется потому, что, зачастую, регистрировать индексы приходится в нескольких местах алгоритма
*
***************************************
R =ID+'|F'
If [get R]=0
[set R, 1]
NI=NI+1;[i NI, ID]
EndIf
Return
* End of form
Безусловно Васеленко Сергей прав в части возможного аварийного останова формы. Тогда сброса индексов не произойдет. Но,
1) на то он и аварийный. Делайте P MC=MC
2) Сбрасывать индексы в начале зачастую нет возможности потомукак заранее неизвестен их количественный и качественный состав - на то они и ассоциативные.
3) Конечно было бы хорошо если бы сервер сам готовил входное состояние формы. Но э-п % хранятся в общем контексте и сбрасывать их проблематично.