Получить последнюю цифру числа 1с

Обновлено: 25.11.2022

Строки в 1С 8.3 во встроенном языке 1с представляют собой значения примитивного типа Строка. Значения данного типа содержат строку в формате Unicode произвольной длины. Переменные строкового типа являются набором символов заключенных в кавычки.

Пример 1. Создадим строковую переменную с текстом.

Функции работы со строками в 1с 8.3

В данном разделе будут приведены основные функции, позволяющие изменять строки в 1с, либо анализировать информацию содержащуюся в них.

СтрДлина

СтрДлина(). Возвращает количество символов содержащихся в строке, переданной в параметре.

Пример 2. Посчитаем количество символов в строке «Привет мир!».

Итогом выполнения данного кода будет вывод на экран количества символов строки: 11.

СокрЛ

СокрЛ(). Отсекает незначащие символы, стоящие слева от первого значащего символа в строке.
Незначащие символы:

  • пробел;
  • неразрывный пробел;
  • табуляция;
  • возврат каретки;
  • перевод строки;
  • перевод формы (страницы).

Пример 3. Убрать все пробелы с левой стороны строки » мир!» и присоединить к ней строку «Привет «.

Итогом выполнения данного кода будет вывод на экран строки «Привет мир!».

СокрП

СокрП(). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке.

Пример 4. Сформировать из строк «Привет » и » мир!» фразу «Привет мир!»

СокрЛП

СокрЛП(). Отсекает незначащие символы, стоящие справа от первого значащего символа в строке, также отсекает незначащие символы, стоящие слева от первого значащего символа в строке. Данная функция используется чаще предыдущих двух, так как она более универсальна.

Пример 5. Убрать незначащие символы стоящие слева и справа в наименовании контрагента.

Лев(, ). Получает первые символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Пример 6. Пусть в структуре Сотрудник содержаться имя, фамилия и отчество сотрудника. Получить строку с фамилией и инициалами.

Прав(, ). Получает последние символы строки, число символов указывается в параметре ЧислоСимволов. Если указанное количество символов превышает длину строки, то возвращается вся строка.

Пример 7. Пусть в конце строковой переменной записана дата в формате «ггггммдд», получить строку с датой и преобразовать ее к типу Дата.

Сред(, , ). Получает подстроку из строки переданной в параметре Строка, начиная с символа номер которого указан в параметре НачальныйНомер и длиной переданной в параметр ЧислоСимволов. Нумерация символов в строке начинается с 1. Если в параметре НачальныйНомер указано значение, меньшее или равное нулю, то параметр принимает значение 1. Если параметр ЧислоСимволов не указан, то выбираются символы до конца строки.

Пример 8. Пусть в строковой переменной начиная с девятой позиции содержится код региона, следует получить его и записать в отдельную строку.

СтрНайти

СтрНайти(, , , , ). Осуществляет поиск указанной подстроки в строке, возвращает номер позиции первого символа найденной подстроки. Рассмотрим параметры данной функции:

  • Строка. Исходная строка;
  • ПодстрокаПоиска. Искомая подстрока;
  • НаправлениеПоиска. Указывает направление поиска подстроки в строке. Может принимать значения:
    • НаправлениеПоиска.СНачала;
    • НаправлениеПоиска.СКонца;

    Пример 9. В строке «Привет мир!» определить позицию последнего вхождения символа «и».

    Итогом выполнения данного кода будет вывод на экран номера последнего вхождения символа «и»: 9.

    ВРег(). Преобразует все символы указанной строки в 1с 8 к верхнему регистру.

    Пример 10. Преобразовать строку «привет мир!» к верхнему регистру.

    Итогом выполнения данного кода будет вывод на экран строки «ПРИВЕТ МИР!»

    НРег(). Преобразует все символы указанной строки в 1с 8 к нижнему регистру.

    Пример 11. Преобразовать строку «ПРИВЕТ МИР!» к нижнему регистру.

    Итогом выполнения данного кода будет вывод на экран строки «привет мир!»

    ТРег(). Преобразует строку следующим образом: первый символ каждого слова переводится в верхний регистр, остальные символы слова переводятся в нижний регистр.

    Пример 12. Сделать заглавными первые буквы слов в строке «привет мир!».

    Итогом выполнения данного кода будет вывод на экран строки «Привет Мир!»

    Символ

    Символ(). Получает символ по его коду в кодировке Unicod.

    Пример 13. Добавим слева и справа в строку «Привет Мир!» символ ★

    Итогом выполнения данного кода будет вывод на экран строки «★Привет Мир!★»

    КодСимвола

    КодСимвола(, ). Получает код символа в кодировке Unicode из строки указанной в первом параметре, расположенного в позиции указанной во втором параметре.

    Пример 14. Узнать код последнего символа в строке «Привет Мир!».

    Итогом выполнения данного кода будет вывод на экран кода символа «!» — 33.

    ПустаяСтрока

    ПустаяСтрока(). Проверяет состоит ли строка только из незначащих символов, то есть является ли она пустой.

    Пример 15. Проверить является ли пустой строка состоящая из трех пробелов.

    Итогом выполнения данного кода будет вывод на экран слова «Да» (строковое выражение логического значения Истина).

    СтрЗаменить

    СтрЗаменить(, , ). Находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

    Пример 16. В строке «Привет Мир!» заменить слово «Мир» на слово «Друзья».

    Итогом выполнения данного кода будет вывод на экран строки «Привет Друзья!»

    СтрЧислоСтрок

    СтрЧислоСтрок(). Позволяет посчитать количество строк в многострочной строке. Для перехода на новую строку в 1с 8 используется символ ПС (символ перевода строки).

    Пример 17. Определить число строк в тексте:
    «Первая строка
    Вторая строка
    Третья строка»

    Итогом выполнения данного кода будет вывод на экран количества строк в тексте: 3

    СтрПолучитьСтроку

    СтрПолучитьСтроку(, ). Получает строку в многострочной строке по ее номеру. Нумерация строк начинается с 1.

    Пример 18. Получить последнюю строку в тексте:
    «Первая строка
    Вторая строка
    Третья строка»

    Итогом выполнения данного кода будет вывод на экран строки «Третья строка».

    СтрЧислоВхождений

    СтрЧислоВхождений(, ). Возвращает число вхождений указанной подстроки в строку. Функция чувствительна к регистру.

    Пример 19. Определить сколько раз входит в строку «Строки в 1с 8.3 и 8.2» буква «с», вне зависимости от ее регистра.

    Итогом выполнения данного кода будет вывод на экран числа вхождений: 2.

    СтрНачинаетсяС

    СтрНачинаетсяС(, ). Проверяет начинается ли строка переданная в первом параметре, со строки во втором параметре.

    Пример 20. Определить начинается ли ИНН выбранного контрагента с цифры 1. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

    СтрЗаканчиваетсяНа

    СтрЗаканчиваетсяНа(, ). Проверяет заканчивается ли строка переданная в первом параметре, на строку во втором параметре.

    Пример 21. Определить заканчивается ли ИНН выбранного контрагента на цифру 2. Пусть в переменной Контрагент хранится ссылка на элемент справочника Контрагенты.

    СтрРазделить

    СтрРазделить(, , ). Разделяет строку на части по указанным символам-разделителям и записывает полученные строки в массив. В первом параметре хранится исходная строка, во втором строка содержащая разделитель, в третьем указывается, нужно ли записывать в массив пустые строки (по умолчанию Истина).

    Пример 22. Пусть у нас есть строка содержащая числа разделенные символом «;», получить из строки массив чисел.

    В результате выполнения будет получен массив с числами от 1 до 3-х.

    СтрСоединить

    СтрСоединить(, ). Преобразует массив строк из первого параметра в строку, содержащую все элементы массива через разделитель, указанный во втором параметре.

    Пример 23. Используя массив чисел из предыдущего примера, получить исходную строку.

    Прочитайте статью про работу с числами: Число в 1С 8.3 — функции работы с числами

    (1) Цикл по строке с проверкой кода символа, запись цифрового символа в отдельную переменную и преобразование её в число по завершении цикла.

    (1) Что-то вроде этого :

    Где СтрокаДанных - исходная строка например "as1122ddd3221fff"
    МасЧисел - конечный результат (в нашем случае 1122, 3221)

    (4) спасибо:) я просто думала, что может быть функция такая, т.к. ничего криминального она не делает

    (1) ponaroshku, все верно, потому что такой функции нет :)
    Но ее можно написать самому. Для этого нужно пройтись в цикле по каждому символу в строке и проверить, цифра ли это.
    Я бы предложил следующий вариант:

    user1619761; Apolonov-Erik; malikov_pro; Silver0030; Ujine1313; Nefilimus; Simonov_NPM; aleksdiez; imbaZeratul; zannv; Boulala; AlekSandra29; alexandrmishinn; soulnechnii; x_x; klinval; valafan; App0st0l; vladir; svilsa; Wersia; Chloroform; unknown181538; ponaroshku; + 24 – Ответить

    я столкнулся с проблемой когда нужно извлечь все цифры из строки "что-то;типа123 штук". (1) возвращает пустой массив. и код под постом тоже ничего не возвращает((

    Но столкнулась с проблемой, если строка вида
    12312 много текста 1221. текст "555"

    выдает 123121221555 одним числом

    в виде нескольких чисел не получить? По примеру - 12312 1221 555

    (8) ponaroshku, Вам же hulio в (4) привел как раз нужный вам код, разве что в нем небольшой недочет - нет очистки СтрокаЧисла в цикле, вот поправленный, проверил - работает

    (9) прошу прощения
    я по (3) делала

    (0) а результат "ыдлвапдлцоук234124ывпо341" такой строки какой? ничего против приведенных способов не имею, но я бы использовал регулярные выражения. Например паттерн: \d+

    Интересно было бы узнать, какой из методов (программный или метод регулярных выражений) отработает быстрее при больших объемах обработки информации.

    В упр. формах можно сделать так.

    Результат = 1 524

    Если нужно чтобы вывести разные числа из данной строки, то можно немного изменить код

    А если Строка типа "12345/15 Какая-то фраза" и нужно получить 12345/15? По всем функциям могу получить только 1234515, а как оставить "/"?

    Немного улучшенный вариант с регулярными выражениями - понимает десятичные дроби:

    Извините: нашел ошибочку в своей реплике - вот исправленный вариант

    Возврат Масс;
    КонецФункции // ()

    Доброе народ. все вышеуказанные куски кода на какой версии сделаны?? ибо на 8,3 УФ ни один из них не работает(((

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

    В начале скажем, что значение типа дата в 1С содержит точную (с точностью до 0,1 миллисекунды) дату григорианского календаря.

    Типовой порядок частей даты принятый в 1С — год, месяц, день, час, минута, секунда.

    Собственно простейший способ создания новой переменной типа дата является приравнивание к переменной строки цифр в одинарных кавычках (обязательно) вида ‘ГГГГММДДччммсс’ где:

    • ГГГГ — четыре цифры года (включая тысячелетие и век);
    • ММ — две цифры месяца;
    • ДД — две цифры даты;
    • чч — две цифры часа (в 24-х часовом формате);
    • мм — две цифры минут;
    • сс — две цифры секунд.

    Часы, минуты и секунды можно не указывать, при этом они приравниваются к нулю.

    Функции работы с датами

    Функция Дата() служит для создания значения типа “Дата”. Использовать ее можно двумя способами:

    • Дата(x) — где параметр “x” это строка вида “ГГГГММДДччммсс”, часы, минуты и секунды можно опустить, т.е. преобразуем строку в дату;
    • Дата(x, y, z, w, v, c) — в этом случае параметры “x”, “y”, “z”, “w”, “v” и “c” являются числами и означают год, месяц, день, час, минуту и секунду соответственно. Как и в предыдущем случае час, минуту и секунду можно опустить.

    ТекущаяДата

    Функция ТекущаяДата() просто возвращает текущую дату того компьютера на котором она исполняется. В клиент-серверных системах будет разумно инкапсулировать эту функцию в общем модуле (с исполнением на сервере) и использовать ее только таким образом.

    ТекущаяУниверсальнаяДатаВМиллисекундах

    Функция ТекущаяУниверсальнаяДатаВМиллисекундах() позволяет узнать дату в миллисекундах. Данная функция доступна начиная с версии платформы 8.2.17. Замечание о клиент-серверных системах из функции выше справедливо и для этой функции.

    Год, Месяц, День, Час, Минута, Секунда

    Функции Год(x), Месяц(x), День(x), Час(x), Минута(x) и Секунда(x) возвращают соответствующую часть переданной им даты “x” в виде числа.

    Начало…

    Функции вида “Начало…(x)” получают дату в параметре “x” и возвращают дату начала периода времени в соответствии с названием конкретной функции. Существуют следующие функции:

    • НачалоГода;
    • НачалоКвартала;
    • НачалоМесяца;
    • НачалоНедели;
    • НачалоДня;
    • НачалоЧаса;
    • НачалоМинуты.

    Конец…

    Функции вида “Конец…(x)” получают дату в параметре “x” и возвращают дату окончания периода времени в соответствии с названием конкретной функции. Существуют следующие функции:

    • КонецГода;
    • КонецКвартала;
    • КонецМесяца;
    • КонецНедели;
    • КонецДня;
    • КонецЧаса;
    • КонецМинуты.

    НеделяГода, ДеньГода

    Функции НеделяГода(x) И ДеньГода(x) возвращают соответственно номер недели и номер дня в году для указанной даты “x”.

    ДеньНедели

    Функция ДеньНедели(x) возвращает номер дня недели для указанной даты “x”.

    ДобавитьМесяц

    Функция ДобавитьМесяц(x, y) добавляет к дате “x” количество месяцев “y”, которое может быть отрицательным, в этом случае происходит вычитание месяцев из даты “x”.

    МоментВремени

    МоментВремени это объект который является совокупностью даты и ссылки на какой-либо объект информационной базы. МоментВремени используется в качестве значения свойств или параметров методов других объектов, имеющих тип МоментВремени. Нужен в первую очередь для того, чтобы иметь возможность различать моменты времени для объектов имеющих одинаковую дату создания.

    ВвестиДату

    Функция ВвестиДату(x, y, z) вызывает диалог для ввода даты, введенная дата записывается в переменную “x”, кроме этого можно указать подсказку “y”, а также какую часть даты нужно ввести “z” Функция возвращает Истина — если ввод был произведен, Ложь — если пользователь отказался от ввода.

    Выглядит это окно примерно так:

    Окно ввода даты

    Окно ввода даты

    Типовые задачи представления данных

    Разность даты в днях, количество дней между датами

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

    Кроме этого можно воспользоваться функцией «РАЗНОСТЬДАТ» из языка запросов:

    Таким образом можно узнать следующие типы разности дат:

    Разница между датами в месяцах, количество месяцев между датами

    Здесь все в точности также, как и в предыдущем пункте.

    Прибавить день к дате, вычесть день из даты, отнять от даты день

    Прибавить месяц к дате, вычесть месяц из даты, отнять месяц от даты

    Для прибавления/вычитания месяцев существует встроенная функция:

    День недели по дате

    Сравнение дат

    Так как дата в 1С это по сути количество секунд прошедшее с начала нашей эры (т.е. число) то и сравнение производится так же как и числами. У объекта «МоментВремени» существует специальный метод «Сравнить» который позволяет сравнить один объект «МоментВремени» с другим.

    Дата равна нулю (проверка на заполненность), проверка на пустую дату

    Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

    (оценок: 14, средняя оценка: 4,50 из 5)

    Какой самый оптимальный способ найти последнюю цифру выражения x1 ^ (x2 ^ (x3 ^ (x4 ^ ( . ^xn)))) при условии, что значения x могут быть очень большими (больше шести цифр)?

    В теории, нам достаточно знать только последнюю цифру x1 и две последние цифры внешней скобки, но какой алгоритм сведения остальных членов?

    Простой 8 комментариев

    WizardNG

    Я бы не стал зарываться глубоко в теорию, но посидел с ручкой и бумажкой.
    Определяющей является последняя цифра первого числа.
    1 всегда даст 1
    5 -> 5
    6 -> 6
    4 -> 6 ->4
    9 -> 1 -> 9
    2- 4 - 8 - 6 -2
    7 - 9 - 3 - 1 - 7
    8 - 4 - 2 - 6 - 8

    Следовательно, при 1,5,6 на конце остальные числа не важны.
    При 4,9 - важно только четная или нечетная степень, а следовательно, четное или нет второе число.
    С остальными сложнее, там надо поиграться с остатком от желания второго числа на 4, и, как следствие - со значением х3, возможно х4.
    Простите, дальше развивать идею не буду, попробуйте сами.

    YURIY KOZLOV, Забываете, что степень ноль может дать единицу. А так код нахождения последней цифры от известной степени есть, вопрос заключался немного в другом.

    WizardNG

    Snelsi, про нулевую степень действительно забыл, сорри.
    А в чем тогда заключался вопрос? Что я не так понял?

    YURIY KOZLOV, Числа xn могуть быть больше шести цифр, что делает невозможным простое возведение в степень. Вопрос был в самом оптимальном алгоритме упрощения этих значений для работы только со значущей частью, как например, урезание всей первой скобки до двух последних цифр (ведь всё что выше обнулится остачей на четыре), только в масштабе всех степеней.

    WizardNG

    Snelsi, прошу прощения, но кажется я нигде не предлагал ПРОСТО возводить в степень. Я предлагал посидеть с карандашом и проанализировать задачу, выявить закономерности , которые помогут максимально просто получить ответ на поставленный вопрос.

    WizardNG

    Snelsi, раз получилось непонятно, поясню свою мысль.
    При х2=0 - ответ единица.
    При х3=0 - ответ совпадает с последней цифрой х1.
    Если ноль встречается выше, это роли не не играет.
    Если эти два условия не выполняются :
    Последняя цифра
    х1= 0, 1, 5, 6 -> ответ совпадает с этой последней цифрой.
    При последней цифре
    х1 = 4 или 9 - значение имеет только четность х2, при нечетном - ответ совпадает с последней цифрой. При четном - 6 и 1, соответственно.
    Для цифр 2,3,7,8 - проверять нужно на самом деле только числа х2 и х3, числа выше (если я нигде не ошибся) значения не имеют. И возводить в степень вообще нет необходимости.

    YURIY KOZLOV, Действительно! Вы были правы, извините. Повозился с алгоритмом, всё работает. Просто не знал, что цифры после x3 ничего не значат (кроме нулей). Скину код ниже, тему можно закрывать.

    Число в 1С 8 — значение примитивного типа Число. Числовым типом может быть представлено любое десятичное число. С числовыми данными возможно совершать основные арифметические операции: сложение, вычитание, умножение и деление. Максимальное количество разрядов для числа в 1с 8: 38 знаков.

    Литералы числа: набор цифр вида: [+|-]<0|1|2|3|4|5|6|7|8|9>[.<0|1|2|3|4|5|6|7|8|9>] В качестве разделителя целой и дробной части используется «.» (точка).

    Пример 1. Создадим числовую переменную

    Преобразование значений другого типа в число

    Преобразовать в число можно значения строкового типа, либо логического типа (Булево). Значение типа Булево преобразуется в число по следующим правилам:

    • Ложь преобразуется в 0;
    • Истина преобразуется в 1.

    Значение типа Строка преобразуется в число в том случае, если оно является строковым представлением литерала численного типа.

    Пример 2. Преобразовать в 1с число строку «1.25»

    После выполнения данного кода в переменной ПолученноеЧисло будет содержаться числовое значение 1.25

    Пример 3. Преобразовать в число строку «Привет мир!»

    Функции работы со значениями типа Число в 1с 8.3

    В данном разделе будут рассмотрены основные функции работы с числами в 1с 8 и приведены примеры их использования.

    Цел(). Возвращает целую часть числа переданного в параметре.

    Пример 4. Определить делится ли число 121 на 11.

    Окр(, , ). Функция округляет число, переданное в первом параметре, до знака после запятой переданного во втором параметре. Значение разрядности может быть и нулевым (округление до целого) и отрицательным (округление до соответствующего разряда целой части). Параметр РежимОкругления может принимать значения:

    • 0 (или РежимОкругления.Окр15как10). Округляет в меньшую сторону, то есть при округлении 1.5 будет возвращено 1;
    • 1 (или РежимОкругления.Окр15как20). Округляет в большую сторону, то есть при округлении 1.5 будет возвращено 2;

    Пример 5. Для того чтобы лучше разобраться с принципами округления рассмотрим округление до целого в меньшую и большую стороны, на ряде чисел от 1.1 до 1.9

    Pow(, ). Возводит число переданное в первом параметре в степень переданную во втором параметре.

    Пример 6. Извлечь квадратный корень из числа 144, а затем возвести его в квадрат, в итоге снова должно получится число 144.

    Читайте также: