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

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

Как задать 0 в 1С: все способы работы с нулевыми значениями

Как задать 0 в 1С: нулевое количество, цена и сумма в документах, ноль в запросах и отчётах, обход ошибок при делении на ноль. Практические примеры.

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

Главная сложность в том, что 1С по-разному трактует пустое значение, NULL и число 0. Пустое поле в документе — это не всегда ноль, а NULL в запросе — вообще отсутствие значения, которое нельзя сравнивать и складывать. Из-за этой путаницы пользователи получают незаполненные отчёты, ошибки проведения и неверные остатки.

Ниже разобраны практические сценарии: ввод нуля в документах, обработка деления на ноль, замена NULL нулём в запросах, вывод нулевых остатков в отчётах и типичные ошибки. Инструкции применимы к типовым конфигурациям на управляемых формах (1С:Бухгалтерия, 1С:Управление торговлей, 1С:ERP), если не оговорено иное.

Как ввести ноль в документе 1С

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

Типичная ситуация — нужно оформить строку с нулевой ценой (бонусный товар, образец, бесплатная доставка). В 1С:Управление торговлей и 1С:ERP для этого есть «вид цены» со значением 0 или ручное редактирование цены: снимите автоматический пересчёт, введите 0 в колонку «Цена», затем проверьте, что сумма строки тоже стала нулевой. Если включён автоматический расчёт скидок, программа может перезаписать цену — отключите пересчёт для этой строки.

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

Как ввести нулевую цену в документе
  1. 1
    Откройте документ и добавьте строку с нужной номенклатурой
  2. 2
    Установите вид цены «Нулевая» или вручную введите 0 в колонку «Цена»
  3. 3
    Проверьте, что сумма строки пересчиталась в 0 и НДС равен 0
  4. 4
    Проведите документ и убедитесь в отсутствии ошибок проверки заполнения

Ноль в запросах: замена NULL через ЕСТЬNULL

Самая частая причина «пропавших» нулей в отчётах — значение NULL. Оно появляется при левом соединении таблиц, когда для строки не нашлось пары: например, товар есть в справочнике, но продаж по нему не было. NULL нельзя сравнить с числом и нельзя сложить — любая операция с NULL даёт NULL, поэтому итоги «молча» искажаются.

Стандартное решение — функция ЕСТЬNULL(Выражение, ЗначениеЕслиNULL). Она возвращает первый аргумент, если он не NULL, иначе — подставленное значение. Для числовых полей остатков и оборотов всегда оборачивайте их в ЕСТЬNULL с нулём.

bsl
ВЫБРАТЬ
	Товары.Ссылка КАК Номенклатура,
	ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
	Справочник.Номенклатура КАК Товары
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
		ПО Товары.Ссылка = Остатки.Номенклатура

Важный нюанс: ЕСТЬNULL не меняет тип данных, и подставляемый ноль должен соответствовать типу поля. Для строковых полей подставляйте пустую строку "", для ссылочных — ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка). Подстановка числа 0 в строковое поле вызовет ошибку типов при выполнении запроса.

Защита от деления на ноль

Ошибка «Деление на значение 0» возникает в формулах запросов, вычисляемых полях СКД и коде модулей, когда знаменатель оказывается нулевым: например, при расчёте средней цены по товару без продаж. В запросе прямой проверки «если» нет, поэтому используют конструкцию ВЫБОР.

bsl
ВЫБОР
	КОГДА ЕСТЬNULL(Продажи.Количество, 0) = 0
		ТОГДА 0
	ИНАЧЕ Продажи.Сумма / Продажи.Количество
КОНЕЦ КАК СредняяЦена

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

В СКД (системе компоновки данных) для вычисляемых полей доступен тот же синтаксис ВЫБОР КОГДА. Альтернатива — вычислять поле в выражении ресурса, где деление выполняется уже на сгруппированных итогах и вероятность нулевого знаменателя ниже, но проверку всё равно стоит оставить.

Типичные ошибки
01
Деление без проверки знаменателя — отчёт падает с ошибкой при нулевом количестве
02
Сравнение поля с NULL через «= 0» — условие никогда не выполнится, строки теряются
03
Подстановка числа 0 в строковое поле ЕСТЬNULL — ошибка несоответствия типов
04
Ввод нулевого количества в товарный документ вместо инвентаризации — искажение учёта

Нулевые остатки в отчётах: показать или скрыть

В стандартных отчётах (оборотно-сальдовая ведомость, остатки товаров) строки с нулевыми итогами по умолчанию часто скрываются. Чтобы показать их, откройте настройки отчёта и найдите параметр вида «Показывать нулевые остатки» или снимите отбор по ненулевым значениям. В ОСВ 1С:Бухгалтерии переключатель находится в разделе «Показатели» и «Группировка» расширенных настроек.

Если строите собственный отчёт на СКД, поведение определяется запросом: внутреннее соединение с регистром покажет только строки с движениями, левое соединение от справочника с ЕСТЬNULL — все позиции, включая нулевые. Выбирайте в зависимости от задачи: для анализа «что лежит мёртвым грузом» нужны именно нулевые строки, для сверки оборотов — нет.

Дополнительно в СКД можно отфильтровать нули уже после расчёта: добавьте в настройки отбор «Остаток Не равно 0». Это удобно, когда один и тот же отчёт используется в обоих режимах — пользователь сам переключает отбор без изменения запроса.

Способы получить ноль в отчёте

Левое соединение + ЕСТЬNULL

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

Внутреннее соединение

Только строки с реальными движениями, нулей нет. Быстрее, но не подходит для поиска отсутствующих остатков

Отбор в настройках СКД

Гибкое включение и скрытие нулей без правки запроса. Требует, чтобы запрос изначально возвращал нулевые строки

Ноль в коде: присвоение и проверка реквизитов

Во встроенном языке 1С ноль присваивается напрямую: Объект.Сумма = 0;. Тип реквизита определён метаданными, поэтому числовой реквизит примет 0 без преобразований. Если реквизит составного типа (число, строка, ссылка), присвоение 0 установит именно числовое значение, что может повлиять на последующие проверки типа.

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

Для проверки «пустое или ноль» используйте функцию ЗначениеЗаполнено(): она возвращает Ложь и для 0, и для пустой строки, и для пустой ссылки. Если нужно отличить именно ноль от незаполненности, сравнивайте напрямую: Если Реквизит = 0 Тогда ....

Когда ноль вводить нельзя: ограничения и риски

Не все нулевые значения безопасны для учёта. Нулевое количество в реализации или поступлении искажает статистику и может вызвать вопросы при выгрузке в ЭДО или при обмене с другими системами — контрагент получит документ со странной строкой. Нулевая цена в первичных документах допустима, но должна быть экономически обоснована (акция, образцы), иначе возможны вопросы при налоговой проверке.

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

Проверка результата

После ввода нуля в документ проверьте три вещи: документ проводится без ошибок, сумма строки и итог документа пересчитались корректно, движения по регистрам соответствуют ожиданиям (меню «Ещё — Движения документа»). Для нулевой цены в движениях по регистру продаж сумма должна быть равна 0 при ненулевом количестве — это норма для бонусной строки.

После доработки запроса или отчёта сравните итоги: сумма по колонке с ЕСТЬNULL не должна отличаться от контрольного значения, а количество строк при левом соединении должно совпадать с числом позиций в справочнике-источнике. Если строк стало больше — проверьте дубли в соединяемой таблице.

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

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

Документ с нулевой ценой
Норма

Проводится, сумма строки 0, движения корректны

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

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

Запрос с ЕСТЬNULL
Норма

Все позиции справочника в выборке, в колонке остатка 0 вместо пустоты

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

Строки пропадают или в поле пусто — соединение или функция применены неверно

Формула с делением
Норма

При нулевом знаменателе выводится 0

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

Ошибка «Деление на 0» при определённых данных

Часто задаваемые вопросы

Почему 1С стирает введённый ноль из поля?

Число 0 считается в 1С незаполненным значением, поэтому поле с нулём визуально выглядит пустым, а некоторые проверки очищают его. Если конфигурация требует обязательного заполнения, введите небольшое ненулевое значение или используйте другой документ, где ноль допустим по смыслу, например инвентаризацию.

Чем NULL отличается от нуля в запросе 1С?

NULL — это отсутствие значения, возникающее при соединении таблиц без совпадений. Ноль — конкретное число. NULL нельзя сравнивать и использовать в арифметике: любое сравнение с NULL даёт ложь. Заменяйте NULL нулём через ЕСТЬNULL(Поле, 0).

Как в отчёте показать товары, по которым не было продаж?

Постройте запрос с левым соединением от справочника номенклатуры к регистру продаж и оберните поля оборотов в ЕСТЬNULL с нулём. Тогда позиции без движений попадут в отчёт с нулевыми показателями, и их легко отфильтровать отбором «Продажи = 0».

Можно ли провести реализацию с нулевой суммой?

Да, если цена в строке равна нулю и это не запрещено настройками конфигурации. Такие строки используют для бонусного товара или образцов. Убедитесь, что операция экономически обоснована и корректно отражена в первичных документах для налогового учёта.

Как избежать ошибки деления на ноль в формуле СКД?

Используйте конструкцию ВЫБОР КОГДА знаменатель = 0 ТОГДА 0 ИНАЧЕ деление КОНЕЦ в выражении вычисляемого поля или ресурса. Проверка обязательна, даже если на текущих данных знаменатель никогда не равен нулю.

Как программно проверить, что реквизит равен именно нулю?

Используйте строгое сравнение: Если Реквизит = 0 Тогда. Функция ЗначениеЗаполнено() не подходит — она возвращает Ложь и для нуля, и для пустой строки, и для пустой ссылки, не различая эти состояния.

Итог

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

Ноль в документе вводится прямым вводом цифры 0, но 1С считает его незаполненным значением. В запросах и отчётах ноль получают через ЕСТЬNULL(Поле, 0), от деления на ноль защищает ВЫБОР КОГДА. Остатки регистров вручную не зануляют — только штатными документами и после резервной копии.