Разработка и Конфигурация · 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Откройте документ и добавьте строку с нужной номенклатурой
- 2Установите вид цены «Нулевая» или вручную введите 0 в колонку «Цена»
- 3Проверьте, что сумма строки пересчиталась в 0 и НДС равен 0
- 4Проведите документ и убедитесь в отсутствии ошибок проверки заполнения
Ноль в запросах: замена NULL через ЕСТЬNULL
Самая частая причина «пропавших» нулей в отчётах — значение NULL. Оно появляется при левом соединении таблиц, когда для строки не нашлось пары: например, товар есть в справочнике, но продаж по нему не было. NULL нельзя сравнить с числом и нельзя сложить — любая операция с NULL даёт NULL, поэтому итоги «молча» искажаются.
Стандартное решение — функция ЕСТЬNULL(Выражение, ЗначениеЕслиNULL). Она возвращает первый аргумент, если он не NULL, иначе — подставленное значение. Для числовых полей остатков и оборотов всегда оборачивайте их в ЕСТЬNULL с нулём.
ВЫБРАТЬ
Товары.Ссылка КАК Номенклатура,
ЕСТЬNULL(Остатки.КоличествоОстаток, 0) КАК Остаток
ИЗ
Справочник.Номенклатура КАК Товары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК Остатки
ПО Товары.Ссылка = Остатки.НоменклатураВажный нюанс: ЕСТЬNULL не меняет тип данных, и подставляемый ноль должен соответствовать типу поля. Для строковых полей подставляйте пустую строку "", для ссылочных — ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка). Подстановка числа 0 в строковое поле вызовет ошибку типов при выполнении запроса.
Защита от деления на ноль
Ошибка «Деление на значение 0» возникает в формулах запросов, вычисляемых полях СКД и коде модулей, когда знаменатель оказывается нулевым: например, при расчёте средней цены по товару без продаж. В запросе прямой проверки «если» нет, поэтому используют конструкцию ВЫБОР.
ВЫБОР
КОГДА ЕСТЬNULL(Продажи.Количество, 0) = 0
ТОГДА 0
ИНАЧЕ Продажи.Сумма / Продажи.Количество
КОНЕЦ КАК СредняяЦенаВ модуле на встроенном языке логика та же: перед делением проверьте знаменатель на равенство нулю и при нуле присвойте результату 0 или другое осмысленное значение. Не оставляйте деление без проверки «на авось» — ошибка проявится в самый неподходящий момент, например при групповом перепроведении документов.
В СКД (системе компоновки данных) для вычисляемых полей доступен тот же синтаксис ВЫБОР КОГДА. Альтернатива — вычислять поле в выражении ресурса, где деление выполняется уже на сгруппированных итогах и вероятность нулевого знаменателя ниже, но проверку всё равно стоит оставить.
Нулевые остатки в отчётах: показать или скрыть
В стандартных отчётах (оборотно-сальдовая ведомость, остатки товаров) строки с нулевыми итогами по умолчанию часто скрываются. Чтобы показать их, откройте настройки отчёта и найдите параметр вида «Показывать нулевые остатки» или снимите отбор по ненулевым значениям. В ОСВ 1С:Бухгалтерии переключатель находится в разделе «Показатели» и «Группировка» расширенных настроек.
Если строите собственный отчёт на СКД, поведение определяется запросом: внутреннее соединение с регистром покажет только строки с движениями, левое соединение от справочника с ЕСТЬNULL — все позиции, включая нулевые. Выбирайте в зависимости от задачи: для анализа «что лежит мёртвым грузом» нужны именно нулевые строки, для сверки оборотов — нет.
Дополнительно в СКД можно отфильтровать нули уже после расчёта: добавьте в настройки отбор «Остаток Не равно 0». Это удобно, когда один и тот же отчёт используется в обоих режимах — пользователь сам переключает отбор без изменения запроса.
Способы получить ноль в отчёте
Показывает все позиции справочника, включая без движений. Подходит для анализа неликвидов, замедляет запрос на больших справочниках
Только строки с реальными движениями, нулей нет. Быстрее, но не подходит для поиска отсутствующих остатков
Гибкое включение и скрытие нулей без правки запроса. Требует, чтобы запрос изначально возвращал нулевые строки
Ноль в коде: присвоение и проверка реквизитов
Во встроенном языке 1С ноль присваивается напрямую: Объект.Сумма = 0;. Тип реквизита определён метаданными, поэтому числовой реквизит примет 0 без преобразований. Если реквизит составного типа (число, строка, ссылка), присвоение 0 установит именно числовое значение, что может повлиять на последующие проверки типа.
При программном заполнении документа помните: многие типовые процедуры (например, обработчики «ПриИзменении») пересчитывают суммы автоматически. Если вы присвоили нулевую цену, а затем вызвался пересчёт по виду цен — ноль будет перезаписан. Правильный порядок: сначала заполнить реквизиты, влияющие на цену, потом присвоить ноль, затем вручную пересчитать сумму строки.
Для проверки «пустое или ноль» используйте функцию ЗначениеЗаполнено(): она возвращает Ложь и для 0, и для пустой строки, и для пустой ссылки. Если нужно отличить именно ноль от незаполненности, сравнивайте напрямую: Если Реквизит = 0 Тогда ....
Когда ноль вводить нельзя: ограничения и риски
Не все нулевые значения безопасны для учёта. Нулевое количество в реализации или поступлении искажает статистику и может вызвать вопросы при выгрузке в ЭДО или при обмене с другими системами — контрагент получит документ со странной строкой. Нулевая цена в первичных документах допустима, но должна быть экономически обоснована (акция, образцы), иначе возможны вопросы при налоговой проверке.
В регламентированном учёте 1С:Бухгалтерии проводки с нулевой суммой не формируются или формируются с особенностями — не пытайтесь «занулить» операцию вручную через операцию, введённую вручную, без понимания последствий. Для сторнирования используйте штатные механизмы: документ «Сторно», корректировки, возвраты.
Проверка результата
После ввода нуля в документ проверьте три вещи: документ проводится без ошибок, сумма строки и итог документа пересчитались корректно, движения по регистрам соответствуют ожиданиям (меню «Ещё — Движения документа»). Для нулевой цены в движениях по регистру продаж сумма должна быть равна 0 при ненулевом количестве — это норма для бонусной строки.
После доработки запроса или отчёта сравните итоги: сумма по колонке с ЕСТЬNULL не должна отличаться от контрольного значения, а количество строк при левом соединении должно совпадать с числом позиций в справочнике-источнике. Если строк стало больше — проверьте дубли в соединяемой таблице.
Как проверить результат
Проводится, сумма строки 0, движения корректны
Ошибка проверки заполнения или сумма пересчиталась обратно
Все позиции справочника в выборке, в колонке остатка 0 вместо пустоты
Строки пропадают или в поле пусто — соединение или функция применены неверно
При нулевом знаменателе выводится 0
Ошибка «Деление на 0» при определённых данных
Часто задаваемые вопросы
Почему 1С стирает введённый ноль из поля?
Число 0 считается в 1С незаполненным значением, поэтому поле с нулём визуально выглядит пустым, а некоторые проверки очищают его. Если конфигурация требует обязательного заполнения, введите небольшое ненулевое значение или используйте другой документ, где ноль допустим по смыслу, например инвентаризацию.
Чем NULL отличается от нуля в запросе 1С?
NULL — это отсутствие значения, возникающее при соединении таблиц без совпадений. Ноль — конкретное число. NULL нельзя сравнивать и использовать в арифметике: любое сравнение с NULL даёт ложь. Заменяйте NULL нулём через ЕСТЬNULL(Поле, 0).
Как в отчёте показать товары, по которым не было продаж?
Постройте запрос с левым соединением от справочника номенклатуры к регистру продаж и оберните поля оборотов в ЕСТЬNULL с нулём. Тогда позиции без движений попадут в отчёт с нулевыми показателями, и их легко отфильтровать отбором «Продажи = 0».
Можно ли провести реализацию с нулевой суммой?
Да, если цена в строке равна нулю и это не запрещено настройками конфигурации. Такие строки используют для бонусного товара или образцов. Убедитесь, что операция экономически обоснована и корректно отражена в первичных документах для налогового учёта.
Как избежать ошибки деления на ноль в формуле СКД?
Используйте конструкцию ВЫБОР КОГДА знаменатель = 0 ТОГДА 0 ИНАЧЕ деление КОНЕЦ в выражении вычисляемого поля или ресурса. Проверка обязательна, даже если на текущих данных знаменатель никогда не равен нулю.
Как программно проверить, что реквизит равен именно нулю?
Используйте строгое сравнение: Если Реквизит = 0 Тогда. Функция ЗначениеЗаполнено() не подходит — она возвращает Ложь и для нуля, и для пустой строки, и для пустой ссылки, не различая эти состояния.
Что важно запомнить
Ноль в документе вводится прямым вводом цифры 0, но 1С считает его незаполненным значением. В запросах и отчётах ноль получают через ЕСТЬNULL(Поле, 0), от деления на ноль защищает ВЫБОР КОГДА. Остатки регистров вручную не зануляют — только штатными документами и после резервной копии.