<< Click to Display Table of Contents >> Navigation: Для опытных пользователей > Стандартные фрагменты > Метод стандартных фрагментов > Ограничения и сообщения транслятора |
При обработке обращений к стандартным фрагментам табличного типа, а также при обработке операторов :В и :Х, идентификаторы переменных параметров записываются в массив переменных, а их значения - в массив значений переменных. При обработке фрагментов не все переменные и их значения записываются в эти массивы, так как они могут не попадать "в поле зрения" транслятора ТСФ за счет выполнения операторов условного и безусловного переходов. Те переменные и их значения, которые обрабатываются (не обходятся) транслятором, называются активными переменными. Количество имен активных переменных параметров в каждый данный момент обработки фрагмента или вложенного фрагмента не должно превышать 4000. Суммарное количество символов в значениях активных переменных в любой момент обработки СФ не должно быть больше 400000. Если эти условия нарушаются, то на печать выдаются сообщения об ошибке и трансляция данного фрагмента прекращается.
При оценке суммарного количества символов в массиве значений переменных необходимо учитывать, что при повторных перевычислениях переменных старые их значения остаются в этом массиве и места в нем не освобождают.
В таблице 1 приведены тексты всех ошибок, которые обнаруживаются и выдаются на печать системой АВС при трансляции стандартных фрагментов. При печати исходных - данных после трансляции ТСФ в них печатаются только коды из графы 1 таблицы 1 в виде <код ошибки>., текст информации об ошибке распечатывается модулем АВС при печати информации об ошибках.
Реализован вывод дополнительной информации об ошибках, которая значительно облегчает поиск причин возникновения ошибок. Достигается это путем сохранения связи с исходным стандартным фрагментом, а также за счет явного указания на наличие ошибок в обращении к ТСФ.
Кроме вывода в тексте результата трансляции кодов обнаруженных ошибок в виде ?<код ошибки>., на печать выдается номер строки стандартного фрагмента, породившей эту ошибку и часть текста СФ где обнаружена ошибка. Номер строки указывается в виде (С ХХХХ), где ХХХХ - номер строки исходного ТСФ.
Если не найдена метка на которую осуществляется переход, то выдается сообщение в виде:
(М NNNN)(С ХХХХ), (3.1)
где NNNN - номер не найденной метки;
ХХХХ - номер строки СФ указывающей на отсутствующую метку, например:
25:П12*
26:М1'Е1-13'Ф1*
27:ПК*
28:М2'Е1-18'Ф1.0,1*
<Ф*
выдаст ошибку ?40.(М 12)(С 25)*
Аналогичную информацию об ошибке транслятор ТСФ выдает и для оператора :Е, указывающих на отсутствие метки.
Если не будет найден оператор :Ц* (конец цикла), то будет выдана информация об ошибке с указанием номера строки, то находится заголовок цикла.
Если в операторе :Т (таблица) количество строк таблицы окажется меньше п+1, то также выдается номер строки, содержащей этот оператор :Т.
Если ошибка будет обнаружена в обращении к ТСФ, то сообщение об ошибке будет выдано с дополнительной информацией (ОБРАЩЕН.), например:
?02.(ОБРАЩЕН.)*
Таблица 1
Список ошибок, обнаруженных трансляторами стандартных фрагментов
Код ошибки |
Текст информации об ошибке |
1 |
2 |
01 |
В ОПЕРАТОРЕ ПЕРЕХОДА ССЫЛКА = 0 |
02 |
ИДЕНТИФИКАТОР НАЧИНАЕТСЯ НЕ С БУКВЫ |
03 |
В ИДЕНТИФИКАТОРЕ МНОГО СИМВОЛОВ |
04 |
НЕТ ТРЕБУЕМОГО ТЕКСТОВОГО СФ |
05 |
НЕТ В ЗАГОЛОВКЕ СФ ЗВЕЗДОЧКИ |
06 |
ТИП СФ НЕ П И НЕ Т |
07 |
МНОГО ПАРАМЕТРОВ |
08 |
МАЛО ПАРАМЕТРОВ |
09 |
НЕСУЩЕСТВУЮЩИЙ ОПЕРАТОР |
10 |
НЕВЕРНО ОФОРМЛЕН КОНЕЦ СФ |
11 |
ОПЕРАТОР ЦИКЛА ВКЛЮЧАЕТ КОНЕЦ СФ |
12 |
ПОСЛЕ ИДЕНТИФИКАТОРА НЕТ ТОЧКИ |
13 |
В КОНЦЕ ОПЕРАТОРА НЕТ ЗВЕЗДОЧКИ |
14 |
В операторе вызова фрагмента ошибка в его записи или ПО |
15 |
Не найден вызываемый фрагмент в ОФ |
16 |
В ОПЕРАТОРЕ Е ПОСЛЕ ПЕРВОЙ МЕТКИ НЕТ' |
17 |
ПРИ ПРОПУСКЕ СТРОК ВЫХОД ЗА ПРЕДЕЛЫ СФ |
18 |
В ОПЕРАТОРЕ Е ПОСЛЕ КОНСТАНТ НЕТ' |
19 |
ПЕРЕМЕННАЯ В ОПЕРАТОРЕ Е НЕ ЧИСЛО |
20 |
НЕСУЩЕСТВУЮЩИЙ СИМВОЛ ОТНОШЕНИЯ |
21 |
ПЕРЕМЕННАЯ НАЧИНАЕТСЯ НЕ С БУКВЫ |
22 |
ПОСЛЕ ПЕРЕМЕННОЙ НЕТ = |
23 |
ПЕРЕПОЛНЕНИЕ МАССИВА НАИМЕНОВАНИЙ ПЕРЕМЕННЫХ |
24 |
ПЕРЕВЫЧИСЛЕНИЕ ПЕРЕМЕННОЙ ЦИКЛА |
25 |
ЦИКЛ В ЦИКЛЕ |
26 |
В ОПЕРАТОРЕ ЦИКЛ ПОСЛЕ ССЫЛКИ НЕТ ' |
27 |
В ОПЕРАТОРЕ ЦИКЛ ПОСЛЕ ИДЕНТИФИКАТОРА НЕТ РАЗДЕЛИТЕЛЯ |
28 |
СФ НЕТ В БИБЛИОТЕКЕ |
29 |
НЕТ КОНЦА В ОБРАЩЕНИИ К СФ |
30 |
Ошибка в арифметическом выражении, деление на 0 |
31 |
ЧУЖОЙ СИМВОЛ |
32 |
Вызов фрагмента внутри блока оператора диалога |
33 |
Превышен допустимый лимит вложенности друг в друга фрагментов |
34 |
НЕТ КОНЦА СФ |
35 |
ОШИБКА: (текст из оператора ОШИБКА) |
36 |
ОШИБКА В АРИФМЕТИЧЕСКОМ ВЫРАЖЕНИИ, ДЛИННОЕ ЧИСЛО |
37 |
Таблица вышла за пределы СФ |
38 |
ОШИБКА В МЕТКЕ |
39 |
В ОПЕРАТОРЕ П НЕВЕРНА МЕТКА |
40 |
НЕТ МЕТКИ |
41 |
Ошибка в арифметическом выражении |
42 |
НЕВЕРЕН ОПЕРАТОР АРИФМЕТИКИ |
43 |
В операторе :Х переменная не число |
44 |
ЛЕВОЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ НЕ ЧИСЛО |
45 |
ПРАВОЕ ЗНАЧЕНИЕ ПЕРЕМЕННОЙ НЕ ЧИСЛО |
46 |
НЕВЕРЕН ИДЕНТИФИКАТОР |
47 |
ПОСЛЕ ЧИСЛА НЕТ АПОСТРОФА |
48 |
В ОПЕРАТОРЕ ЕСЛИ ЕСТЬ ЗВЕЗДОЧКА |
49 |
НЕВЕРНА МЕТКА I В ОПЕРАТОРЕ ЕСЛИ |
50 |
НЕВЕРНА МЕТКА 2 В ОПЕРАТОРЕ ЕСЛИ |
51 |
В ОПЕРАТОРЕ ТАБЛИЦА НЕТ РАЗДЕЛИТЕЛЯ |
52 |
РЕЗУЛЬТАТ ПРЕВЫСИЛ 20 РАЗРЯДОВ |
53 |
ОШИБКА - НЕ НАЧАЛО БЛОКА |
54 |
ОШИБКА В ОПЕРАТОРЕ БЛОК |
55 |
В БЛОКЕ ТАБЛИЦА |
56 |
ПЕРЕПОЛНЕНИЕ МАССИВА ЗНАЧЕНИЙ ПЕРЕМЕННЫХ |
57 |
Ошибка в операторе инициализации :D |
58 |
Ошибка в операторе вывода :W |
59 |
Ошибка в операторе вывода рамки :G |
60 |
Ошибка в операторе "закраска" :Z |
61 |
Ошибка в операторе ввода :V |
62 |
Не была сделана инициализация экрана оператором :D |
63 |
Ошибка в имени переменной оператора :W |
64 |
Ошибка в имени переменной оператора :V |
65 |
Ошибка в операторе :R |
66 |
Ошибка в имени переменной оператора :R |
67 |
Ошибка. Повторная инициализация диалога |
68 |
Был открыт чужой диалог для операторов :F... |
69 |
Нет такого оператора :F... |
70 |
Мало параметров в операторе :F... |
71 |
Ошибка в операторе :F... |
72 |
Ошибка в имени переменной оператора :F... |