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