Некоторые методы объектов не всегда могут успешно выполняться успешно. Пример этого уже можно увидеть в массиве. Если в синтакс-помощнике изучили описание метода Найти(), то увидели, что он возвращает Число или Неопределено. Число возвращается в массиве тогда, когда все выполняется успешно и в массиве есть то, что искалось. Но может быть ситуация, что в массиве не окажется того, что ищем, тогда массив возвращает значение Неопределено. Начинающие программисты часто забывают об этой особенности. И это естественно, т.к. когда пишем программу, то совершенно точно знаем, что будет в массиве, а чего не будет. Но дело в том, что когда пользователи начинают работать с программой, то могут выполнить такую последовательность действий, которая не была предусматрена в программе. И в результате в массиве не окажется того значения, которое, сейчас кажется, что там обязательно должно быть.
Правилом хорошего тона в программировании является обработка не
только успешных действий, но и ошибочных ситуаций, которые могут возникнуть.
В данном случае в том месте, где вы бы написали просто Найти():
ВторойДеньНедели = ДниНедели.Найти("Вторник");
ПоказатьОповещениеПользователя("Сегодня: " + Строка(ВторойДеньНедели + 1) +
"-й день недели.");
лучше обработать неудачную ситуацию, которая может возникнуть:
ВторойДеньНедели = ДниНедели.Найти("Вторник");
// Обработать ошибку.
Если ВторойДеньНедели = Неопределено Тогда
ПоказатьПредупреждение( , "Вторник не найден. Расчёт не выполнен!");
Возврат;
КонецЕсли;
ПоказатьОповещениеПользователя("Сегодня: " + Строка(ВторойДеньНедели + 1) +
"-й день недели.");
То есть для того случая, когда метод возвращает значение Неопределено, написать условие Если, а в нём обработать ошибочную ситуацию. Например, вывести какое-то информационное сообщение. А если в этой ситуации дальнейшая работа алгоритма невозможна, то и завершить её с помощью инструкции Возврат.
Можно посмотреть в синтакс-помощнике, что делает процедура
ПоказатьПредупреждение(). У неё несколько параметров.
Обязательным параметром является только один — <ТекстПредупреждения>, который и был указан. Необязательные параметры, которые находятся после него, можно не указывать и не ставить запятые. «Место» необязательного параметра, находящегося перед ним, нужно обозначить запятой. Чтобы платформа понимала, что строку "Вторник не найден. . . " нужно передать именно во второй параметр, а не в первый. Тогда получится, что если «всё хорошо», исполнение пройдёт мимо условия Если. Если «всё плохо», выполнится тело условия и программа выйдет из процедуры, не выполняя
остальные инструкции.
Чтобы посмотреть, как это работает, можно смоделировать ошибочную ситуацию. После заполнения массива значениями установим элементу с индексом 1 (Вторник) значение 2:
ДниНедели = Новый Массив();
ДниНедели.Добавить("Понедельник");
ДниНедели.Добавить("Вторник");
ДниНедели.Добавить("Среда");
ДниНедели.Добавить("Четверг");
ДниНедели.Добавить("Пятница");
ДниНедели.Добавить("Суббота");
ДниНедели.Добавить("Воскресенье");
ДниНедели.Установить(1, 2);
Если теперь запустим 1С:Предприятие, то увидим сообщение "Вторник не найден". . . Чтобы посмотреть, как этот пример будет работать без условия Если, можно временно закомментировать это условие и тем самым исключить из исполнения. Это легко сделать с помощью команды Добавить комментарий, которая находится в верхней командной панели:
Выделим все строки, которые временно не нужны, и закомментируем их.
Если после этого снова запустить 1С:Предприятие, то увидим, что было бы, если бы не обрабатывали ошибочную ситуацию:
Смысл этого сообщения в том, что платформа не может выполнить операцию ВторойДеньНедели + 1, так как в переменной ВторойДеньНедели оказалось значение Неопределено, а для него не существует операции сложения с числом.
Самое неприятное в этом сообщении то, что платформа не может продолжить дальнейшую работу, и есть единственный выход — нажать кнопку Завершить работу.
Поэтому основательно и трудолюбиво обращаем внимание на то, какие значения возвращают методы. Если возможна ситуация, когда выполнение метода заканчится «неудачей», обработаем такие ситуации. Во-первых, ваше собственное сообщение поможет быстро понять, в чём проблема. А во-вторых, даже если ваш небольшой алгоритм закончился неудачей, пользователь сможет продолжить работу с программой и воспользоваться её другими возможностями.
Задание 3.37
Требуется вести список туристов, которые поедут на экскурсию. Список постоянно меняется, кто-то добавляется, кто-то вычёркивается. Текущий состав списка не известен. Пришло сообщение, что турист Захаров заболел, и его нужно вычеркнуть из списка.
Создайте массив и заполните его фамилиями Сергеев, Дмитриев, Захаров, Максимов. Напишите программу, которая удаляет из списка туриста по фамилии Захаров.
Теперь в инструкциях, которые заполняют массив фамилиями, замените фамилию Захаров на фамилию Александров. Продемонстрируйте, что программа по-прежнему работает без ошибок.