Разработка и Конфигурация · 10 мин
Как в 1С определить четность числа
Как определить четность числа в 1С: оператор остатка от деления, функция проверки четности, целочисленное деление, типичные ошибки и примеры кода на встроенном языке.
Проверка числа на четность — типовая задача во встроенном языке 1С. Она встречается при чередовании оформления строк в отчетах, разбиении данных на группы, обработке коллекций попарно, расчете средних позиций и во многих других сценариях. Специальной встроенной функции «Четное» в языке 1С нет, поэтому проверку реализуют через арифметические операции.
Основной инструмент — оператор остатка от деления %. Если число делится на 2 без остатка, оно четное; если остаток равен 1 — нечетное. Этот подход работает для целых чисел любого знака и не требует подключения общих модулей или внешних компонент.
Ниже разобраны рабочие способы проверки, готовая функция для общего модуля, нюансы при работе с дробными числами и типичные ошибки, которые приводят к неверным результатам.
Проверка четности через остаток от деления
Во встроенном языке 1С оператор % возвращает остаток от деления. Для четного числа остаток от деления на 2 всегда равен нулю. Минимальный пример проверки выглядит так:
Число = 10;
Если Число % 2 = 0 Тогда
Сообщить("Число четное");
Иначе
Сообщить("Число нечетное");
КонецЕсли;
Конструкцию можно сократить до одного логического выражения, если результат нужен как булево значение, а не как ветвление:
ЭтоЧетное = (Число % 2 = 0);
Переменная ЭтоЧетное примет значение Истина для четных чисел и Ложь для нечетных. Такой вариант удобен в условиях компоновки, при вычислении выражений в запросах-выражениях и при заполнении параметров.
Если Число % 2 = 0 Тогда
// число четное
Иначе
// число нечетное
КонецЕсли;Как работает оператор % и какие у него ограничения
Оператор % вычисляет остаток от целочисленного деления. Для положительных чисел поведение очевидно: 7 % 2 вернет 1, 8 % 2 вернет 0. Для отрицательных чисел результат тоже корректен для задачи четности: -7 % 2 даст -1, а -8 % 2 даст 0, поэтому сравнение именно с нулем остается надежным признаком четности.
Важное ограничение — деление на ноль. Если делитель равен нулю, платформа вызовет исключение. В задаче четности делитель всегда константа 2, поэтому риск отсутствует, но при переиспользовании приема с переменным делителем проверяйте его перед операцией.
Второй нюанс — тип значения. Если переменная содержит строку или значение Неопределено, попытка применить % приведет к ошибке выполнения. Перед проверкой убедитесь, что значение имеет тип «Число», например через ТипЗнч(Значение) = Тип("Число").
Универсальная функция для общего модуля
Если проверка четности нужна в нескольких местах конфигурации, вынесите ее в общий модуль. Это устраняет дублирование и упрощает сопровождение. Пример функции:
// Возвращает признак четности целого числа.
//
// Параметры:
// Значение - Число - проверяемое целое число.
//
// Возвращаемое значение:
// Булево - Истина, если число четное.
//
Функция ЭтоЧетноеЧисло(Значение) Экспорт
Если ТипЗнч(Значение) <> Тип("Число") Тогда
Возврат Ложь;
КонецЕсли;
Возврат Цел(Значение) % 2 = 0;
КонецФункции
Функция сначала проверяет тип входного значения, затем отсекает дробную часть через Цел() и только после этого вычисляет остаток. Такой порядок защищает от ошибок выполнения и делает поведение предсказуемым при передаче дробных данных.
Размещайте функцию в общем модуле с признаком «Сервер», если она используется в серверных процедурах. Если проверка нужна и на клиенте, включите флажки «Клиент (обычное приложение)» и «Клиент (управляемое приложение)», избегая при этом вызовов серверных методов внутри функции.
- 1Убедитесь, что проверяемое значение имеет тип «Число»
- 2При необходимости отсеките дробную часть функцией Цел()
- 3Вычислите остаток от деления на 2 оператором %
- 4Сравните остаток с нулем и используйте результат в условии
- 5Проверьте работу на положительных, отрицательных и нулевом значении
Четность при работе с дробными числами
Понятие четности определено только для целых чисел. Если в переменной может оказаться дробное значение (например, результат расчета цены или количества), решите заранее, как трактовать такие данные. Вариантов три: отклонять дробные значения, округлять их или отсекать дробную часть.
Функция Цел() отбрасывает дробную часть без округления: Цел(7.9) вернет 7. Если нужна проверка «является ли число целым», сравните значение с его целой частью:
Если Значение = Цел(Значение) Тогда
// число целое, можно проверять четность
Иначе
// дробное число, четность не определена
КонецЕсли;
Не применяйте проверку четности к дробным числам напрямую: 7.5 % 2 вернет 1.5, и сравнение с нулем формально отработает, но результат не будет иметь смысла для бизнес-логики.
Практические сценарии применения
Чередование оформления строк
Классический сценарий — зебра-подсветка строк при программном формировании табличного документа или динамической обработки. Номер строки проверяется на четность, и в зависимости от результата применяется цвет фона:
Для НомерСтроки = 1 По Коллекция.Количество() Цикл
Если НомерСтроки % 2 = 0 Тогда
// оформление четной строки
Иначе
// оформление нечетной строки
КонецЕсли;
КонецЦикла;
Разбиение данных на две группы
При распределении нагрузки или формировании пакетов записи делят по четности индекса или порядкового номера. Это простой способ равномерно разложить элементы без сложных алгоритмов балансировки.
Обработка пар значений
Если коллекция хранит данные попарно (ключ и значение, координаты X и Y), четность индекса позволяет понять роль текущего элемента. Здесь
Перед тем как использовать четность индекса для парной обработки, явно проверьте, с нуля или с единицы начинается нумерация в вашей коллекции. Смещение на единицу меняет результат на противоположный и часто становится источником трудноуловимых ошибок.
Альтернативные способы проверки
Помимо оператора %, четность можно определить через целочисленное деление: если Цел(Число / 2) * 2 = Число, число четное. Способ рабочий, но более громоздкий и менее читаемый, поэтому в реальной разработке почти всегда используют остаток от деления.
В запросах оператор остатка недоступен напрямую в некоторых конструкциях языка запросов 1С. Там четность вычисляют через выражение вида НомерСтроки - (ВЫРАЗИТЬ(НомерСтроки / 2 КАК ЧИСЛО(15, 0))) * 2 либо выносят расчет на уровень кода после выполнения запроса. Конкретный синтаксис зависит от версии платформы, поэтому проверяйте поведение на тестовых данных.
Сравнение вариантов
Основной способ: короткая запись, корректен для отрицательных чисел, читаем. Ограничение — требует числового типа
Работает везде, где есть деление, но запись длиннее и легче допустить ошибку в скобках
Подходит, когда результат нужен на стороне СУБД; синтаксис громоздкий и зависит от версии платформы
Типичные ошибки и проверка результата
Самая частая ошибка — сравнение остатка с единицей вместо нуля. Для положительных чисел это работает, но на отрицательных значениях логика ломается. Вторая распространенная проблема — передача строки или Неопределено в выражение с %, что вызывает исключение и останавливает выполнение процедуры.
Третья ошибка — применение проверки к дробным числам без предварительного приведения. Результат формально вычисляется, но не соответствует математическому смыслу четности. Наконец, путаница с началом нумерации (0 или 1) искажает логику при обработке коллекций.
Для проверки корректности достаточно прогнать функцию на контрольном наборе: 0 (четное), 1 (нечетное), 2 (четное), -3 (нечетное), -4 (четное) и дробном значении, например 2.5. Если результаты совпадают с ожиданиями, реализация верна.
Как проверить результат
Функция возвращает Истина (четное)
Возвращает Ложь или ошибку
Возвращает Истина
Возвращает Ложь — проверьте сравнение с нулем
Обработано по заданному правилу (отклонено или приведено к целому)
Результат вычислен напрямую без обработки дробной части
Итоговая рекомендация проста: используйте выражение Число % 2 = 0, при повторном применении оборачивайте его в функцию общего модуля, а на входе всегда контролируйте тип и целостность значения. Этого достаточно для всех практических задач, где требуется определить четность.
Что важно запомнить
Четность в 1С определяется остатком от деления на 2: Число % 2 = 0. Сравнивайте остаток именно с нулем, проверяйте тип значения перед операцией и приводите дробные числа к целым через Цел(). Для повторного использования оформите проверку функцией в общем модуле.
Часто задаваемые вопросы
Есть ли в 1С встроенная функция проверки четности?
Нет, штатной функции вида «Четное()» во встроенном языке нет. Проверку реализуют через оператор остатка от деления % и при необходимости выносят в собственную функцию общего модуля.
Как проверить четность отрицательного числа?
Тем же выражением Число % 2 = 0. Для отрицательных четных чисел остаток равен нулю, поэтому сравнение с нулем корректно. Не используйте сравнение с единицей — для отрицательных нечетных чисел остаток равен -1.
Что будет, если передать в оператор % строку или Неопределено?
Платформа вызовет исключение, и выполнение процедуры прервется. Перед проверкой убедитесь, что значение имеет тип «Число», например через ТипЗнч(Значение) = Тип("Число").
Можно ли определить четность дробного числа?
Четность определена только для целых чисел. Для дробных значений сначала решите, как их трактовать: отклонить, округлить или отсечь дробную часть функцией Цел(). Прямая проверка 7.5 % 2 даст 1.5 и не имеет смысла для бизнес-логики.
Как проверить четность номера строки в запросе?
Оператор остатка в языке запросов напрямую недоступен. Четность вычисляют через выражение с целочисленным приведением, например разность номера и удвоенной целой части его половины, либо переносят расчет в код после выполнения запроса. Точный синтаксис зависит от версии платформы.
Почему четность индекса дает противоположный результат в цикле?
Скорее всего, причина в начале нумерации: индексы массивов в 1С начинаются с нуля, а привычная нумерация строк — с единицы. Смещение на единицу инвертирует четность. Согласуйте логику проверки с фактическим началом отсчета в вашей коллекции.