К статье
Практический материал

Разработка и Конфигурация · 9 мин

Функция «Возврат» в 1С: что это такое и как её использовать

Что означает «Возврат» в 1С: оператор языка, функции с возвратом значения и документы возврата товара. Примеры кода, типичные ошибки и проверка результата.

Слово «Возврат» в 1С встречается в двух разных контекстах, и их часто путают. Первый — оператор Возврат во встроенном языке 1С, который завершает выполнение процедуры или функции и передаёт результат обратно в место вызова. Второй — документы возврата товара: «Возврат товаров от покупателя» и «Возврат товаров поставщику», которые оформляют обратное движение товара в учёте.

Если вы открыли модуль и видите строку Возврат Результат; — речь идёт о языке программирования. Если бухгалтер или менеджер говорит «сделай возврат в 1С» — почти наверняка имеется в виду складской или торговый документ. Ниже разобраны оба смысла: как работает оператор, чем функция отличается от процедуры, как оформляются документы возврата и какие ошибки встречаются чаще всего.

Оператор «Возврат» во встроенном языке 1С

Оператор Возврат досрочно завершает выполнение процедуры или функции. Всё, что написано после него в том же блоке кода, выполняться не будет — управление передаётся туда, откуда процедура или функция была вызвана. Это удобно для выхода из кода при невыполненных условиях, не наращивая вложенность конструкций «Если».

В функции оператор имеет вид Возврат Значение; — после ключевого слова указывается выражение, результат которого получит вызывающий код. В процедуре оператор пишется без значения: просто Возврат;, потому что процедура по определению ничего не возвращает.

Пример простой функции с возвратом значения:

Функция СуммаСНДС(Сумма, СтавкаНДС)

Если СтавкаНДС = 0 Тогда

Возврат Сумма;

КонецЕсли;

Возврат Сумма + Сумма * СтавкаНДС / 100;

КонецФункции

Здесь оператор срабатывает дважды в разных ветках: при нулевой ставке функция сразу возвращает исходную сумму, иначе — сумму с налогом. Как только один из операторов Возврат выполнен, функция завершается.

Чем функция отличается от процедуры

Ключевое различие — именно в возврате значения. Функцию можно использовать в выражениях: присваивать её результат переменной, передавать в другие функции, сравнивать. Процедуру вызывают ради самого действия — записи данных, вывода сообщения, изменения реквизитов.

Функция или процедура

Функция

Нужен результат вычисления: сумма, признак, объект. Обязан содержать «Возврат Значение;». Используется в выражениях.

Процедура

Нужно действие без результата: запись, сообщение, заполнение формы. «Возврат;» без значения — только для досрочного выхода.

Частая ошибка новичков — объявить функцию и забыть оператор Возврат в одной из веток. В этом случае функция вернёт Неопределено, что приведёт к неочевидным ошибкам дальше по коду: сравнения дадут неожиданный результат, арифметика вызовет исключение. Проверяйте, что любой путь выполнения функции заканчивается возвратом значения.

Типичные приёмы использования оператора «Возврат»

Самый распространённый приём — «ранний выход» или защитное программирование. Вместо глубокой вложенности условий в начале функции проверяют входные данные и сразу выходят, если что-то не так:

Функция ПолучитьЦену(Номенклатура)

Если Не ЗначениеЗаполнено(Номенклатура) Тогда

Возврат 0;

КонецЕсли;

// основная логика получения цены

Возврат Цена;

КонецФункции

Второй приём — выход из цикла с результатом. Когда нужный элемент найден, нет смысла перебирать остальные: Возврат внутри цикла завершает и цикл, и функцию одновременно. Это отличается от оператора Прервать, который выходит только из цикла, а код после цикла продолжает выполняться.

Типичные ошибки с оператором «Возврат»
01
Забытый «Возврат» в одной из веток функции — возвращается Неопределено и ломает логику вызывающего кода.
02
Попытка вернуть значение из процедуры — синтаксическая ошибка, процедура значений не возвращает.
03
Код после «Возврат» в том же блоке — недостижимый код, который вводит в заблуждение при чтении.
04
Путаница «Возврат» и «Прервать» в цикле — первый завершает всю функцию, второй только цикл.

Документы возврата в прикладных решениях

Второй смысл слова — учётные документы. В конфигурациях вроде «1С:Управление торговлей», «1С:ERP» и «1С:Комплексная автоматизация» есть два зеркальных документа: «Возврат товаров от покупателя» и «Возврат товаров поставщику». Первый оформляет приём товара обратно от клиента, второй — отправку товара обратно поставщику.

Правильный способ оформления — создать документ возврата на основании исходного документа: реализации или поступления. Тогда программа автоматически подтянет номенклатуру, количество, цены и серии, а в учёте сохранится связь между операциями. Это важно для корректного закрытия взаиморасчётов и для отчётов по причинам возвратов.

Как оформить возврат от покупателя
  1. 1
    Откройте документ реализации, по которому покупатель возвращает товар.
  2. 2
    Нажмите «Создать на основании» и выберите «Возврат товаров от покупателя».
  3. 3
    Скорректируйте количество — возвращать можно часть позиции, а не документ целиком.
  4. 4
    Укажите склад приёмки и, если требуется, причину возврата и качество товара.
  5. 5
    Проведите документ и проверьте движения: товар должен прийти на склад, задолженность покупателя — уменьшиться.

Для возврата поставщику логика симметричная: документ создаётся на основании поступления, товар списывается со склада, а задолженность поставщика перед вами увеличивается (или уменьшается ваша задолженность, если поступление ещё не оплачено). Дальше оформляется возврат денежных средств или зачёт в счёт других поставок.

Как проверить, что возврат отработал правильно

Для кода проверка проста: запустите функцию в отладчике (точка останова на строке с Возврат) и посмотрите, какое значение передаётся. Если вместо ожидаемого числа или объекта там Неопределено — ищите ветку, в которой возврат пропущен. Также полезно проверить тип возвращаемого значения: он должен совпадать с тем, что ожидает вызывающий код.

Для документов возврата контролируйте три вещи: остатки на складе (товар должен физически «переехать» в правильном направлении), взаиморасчёты с контрагентом (задолженность должна измениться на сумму возврата) и регистры НДС, если операция облагается налогом. Удобно использовать отчёты «Остатки товаров на складах» и карточку расчётов с контрагентом.

Контрольные точки

Как проверить результат

Остатки по складу
Норма

Количество изменилось ровно на возвращённое, без минусов

Тревожный признак

Остатки не изменились или ушли в отрицательные значения

Взаиморасчёты
Норма

Задолженность скорректирована на сумму возврата

Тревожный признак

Висит «лишняя» задолженность или аванс без документа-основания

Связь документов
Норма

Возврат создан на основании реализации/поступления

Тревожный признак

Возврат введён вручную, связь с исходной операцией потеряна

Ограничения и риски

В типовых конфигурациях возврат часто нельзя оформить «задним числом» без последствий: документ двигает остатки, и при уже закрытом периоде или проведённых инвентаризациях это может разъехать учёт. Если период закрыт, согласуйте корректировку с бухгалтером — иногда правильнее оформить корректировочный документ, а не возврат.

В коде риск иной: доработка типовых модулей с изменением логики возврата значений усложняет обновление конфигурации. Если нужно изменить поведение типовой функции, предпочтительнее расширения конфигурации, а не прямое редактирование модулей. Перед любыми изменениями в рабочей базе сделайте резервную копию.

Частые вопросы

Что вернёт функция, если оператор «Возврат» не выполнился ни разу?

Функция вернёт значение «Неопределено». Это не вызовет ошибку в момент возврата, но почти наверняка приведёт к ошибке или неверному результату в коде, который использует это значение. Всегда проверяйте, что все ветки функции заканчиваются возвратом.

Можно ли вернуть несколько значений из функции?

Напрямую — нет, оператор «Возврат» принимает одно выражение. Но можно вернуть структуру, массив или соответствие с несколькими полями, например: «Возврат Новый Структура("Сумма, Количество", Сумма, Количество);».

Чем «Возврат» отличается от «Прервать» и «Продолжить»?

«Возврат» завершает всю процедуру или функцию целиком. «Прервать» выходит только из текущего цикла, а «Продолжить» переходит к следующей итерации цикла. После «Прервать» код за циклом продолжит выполняться, после «Возврат» — нет.

Как оформить частичный возврат товара?

Создайте документ возврата на основании реализации или поступления и вручную уменьшите количество по нужным позициям, лишние строки удалите. Программа скорректирует суммы автоматически, связь с исходным документом сохранится.

Почему возврат не уменьшил задолженность покупателя?

Чаще всего документ создан вручную, без связи с реализацией, либо не проведён. Проверьте, что возврат создан на основании продажи и проведён, затем посмотрите карточку расчётов с контрагентом. Если взаиморасчёты ведутся по заказам — проверьте также указание заказа в документе.

Итог

Что важно запомнить

«Возврат» в 1С — это оператор языка, завершающий функцию и передающий результат, либо документ возврата товара. В коде следите, чтобы все ветки функции возвращали значение; в учёте оформляйте возврат на основании исходного документа и проверяйте остатки и взаиморасчёты после проведения.