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