При разработке отчетов или обработок на платформе 1С:Предприятие часто возникает задача программного выделения последней цифры числа. Эта задача решается по-разному в зависимости от того, где именно вы производите вычисления — в обычном программном модуле или внутри языка запросов. Давайте подробно разберем оба подхода, чтобы вы могли уверенно использовать их в своей работе.
Если вы работаете в обычном модуле (объекта, формы или команды), у вас есть доступ к функциям для работы со строками. Самый простой и наглядный способ — это преобразование числа в строковый формат с последующим извлечением крайнего правого символа.
Рассмотрим, как это реализовать на практике. Сначала мы приводим число к строке, а затем с помощью функции Прав извлекаем один символ. Важно помнить о форматировании, так как 1С автоматически добавляет разделители групп разрядов (пробелы) в числа, если не указать обратное.
Посмотрим на пример правильного кода:
// Извлекаем последнюю цифру с учетом форматирования
// Параметр ЧГ=0 отключает группировку разрядов, чтобы пробелы не мешали
ПоследняяЦифра = Прав(Формат(ВашеЧисло, "ЧГ=0"), 1);
Разберем, почему мы используем Формат вместо обычного Строка. Функция Строка при работе с большими числами может добавить пробелы (например, «1 000»), и тогда функция Прав вернет пробел, а не цифру. Использование ЧГ=0 гарантирует, что мы получим чистое числовое представление без лишних символов.
В языке запросов ситуация иная. Внутри конструкции ВЫБРАТЬ... ИЗ... у нас нет привычных функций Прав или Лев. Здесь необходимо использовать математические методы. Самый эффективный способ получить последнюю цифру целого числа — это использование оператора ОСТАТОК.
Математически последняя цифра числа — это остаток от деления этого числа на 10. В языке запросов 1С это записывается следующим образом:
Число ОСТАТОК 10
Этот подход является наиболее производительным, так как платформа не выполняет преобразование типов, а работает непосредственно с числовыми данными.
Часто в регистрах хранятся не целые числа, а значения с дробной частью (например, цена или количество). Чтобы получить последнюю цифру целой части, нам нужно сначала «отсечь» все, что находится после запятой. Для этого в запросах 1С используется конструкция ВЫРАЗИТЬ.
Давайте рассмотрим, как это сделать по шагам:
ВЫРАЗИТЬ(Число КАК ЧИСЛО(15, 0)). Это округлит или отбросит дробную часть в зависимости от настроек системы.ОСТАТОК к результату вычисления.Пример сложной конструкции для запроса:
ВЫБРАТЬ
ВТ.Цена,
ВЫРАЗИТЬ(ВТ.Цена КАК ЧИСЛО(15, 0)) ОСТАТОК 10 КАК ПоследняяЦифра
ИЗ
ВашаТаблица КАК ВТ
Иногда встречаются задачи, требующие более специфических вычислений, например, работа с десятичными разрядами. Рассмотрим более продвинутый способ, предложенный в рамках обсуждения коллегами:
// Конструкция для вычисления последней цифры перед запятой
ВЫРАЗИТЬ(Поле1 * 0.1 - 0.5 КАК ЧИСЛО(15, 0)) * 10
Этот метод математически сдвигает запятую и позволяет выполнять манипуляции с разрядами внутри запроса. Однако помните, что метод с использованием ОСТАТОК является более универсальным, читаемым и предпочтительным для большинства типовых задач.
Для успешного решения задачи всегда анализируйте, где именно выполняется ваш код:
Прав(Формат(Число, "ЧГ=0"), 1) — это надежно защищает от ошибок с пробелами.Число ОСТАТОК 10 для целых чисел или ВЫРАЗИТЬ(... КАК ЧИСЛО) ОСТАТОК 10 для дробных.Использование правильных инструментов позволяет писать лаконичный и производительный код, который легко поддерживать и развивать в будущем. Успехов в изучении платформы 1С!