1с увеличить число на 1
Рассмотрим один из примитивных типов, с которым приходится сталкиваться разработчикам на платформе 1С 8.3, – Число. В этой статье мы научимся задавать числа в коде, создавать реквизиты с типом число , получать случайное число, округлять числа и получать из числа с дробью целое число.
Тип число в 1С
Задать число в коде просто: нужно какой-то переменной просто присвоить определенное число.
Так задаётся целое число:
А так задаются дробные числа:
Над числами в коде можно выполнять простые арифметические операции: сложение, вычитание, умножение и деление.
Причем, как непосредственно над числами:
Так и над переменными с типом число:
Если нужно инвертировать число, т.е. поставить какому-то уже заданному числу обратный знак (например, было 5, стало -5), то его нужно умножить на -1.
Сделать это можно несколькими способами:
Если нам нужно создать реквизит какого-то объекта, с типом число, то в свойстве Тип реквизита нужно выбрать тип Число. На картинке ниже у справочника создан реквизит с типом Число.
А также задать его точность и длину.
Остановимся на точности и длине подробнее.
Точность – это максимальное количество знаков после запятой.
Длина – это максимальное количество разрядов в числе (включая знаки после запятой).
Например, если длина 5, а точность 3, то максимальное число будет 99,999.
Если длина 5, а точность 0, то – 99999.
А если длинна 3, а точность 3, то – 0,999. Т.е когда длинна равна точности мы не сможем задать число равное 1.
Когда мы в коде задаем переменную с типом Число, то мы не ограничиваем эту переменную по длине и точности, в тоже время для реквизита объекта с типом Число нужно это делать заранее. При разработке вы должны заранее предусмотреть, какие у реквизита числового типа будет длинна и точность.
Точно также, реквизит с типом число нужной длинны и точности можно создать на управляемой форме.
Случайное число в 1С
В платформе 1С 8.3 имеется возможность сгенерировать случайное целое число при помощи генератора случайных чисел, который так и называется ГенераторСлучайныхЧисел. Для генерации случайного числа нужно воспользоваться методом этого объекта СлучайноеЧисло.
Рассмотрим, простой пример генерации случайного числа.
В этом случае Число1 будет сгенерировано от 0 до 4294967295 (2^32 -1).
В примере выше метод СлучайноеЧисло без параметров, но у этого метода есть два параметра:
Оба параметра являются необязательных и с их помощью можно задать верхнюю и нижнюю границу генерации случайных чисел. Причем параметр НижняяГраница не может быть меньше нуля, а параметр ВерхняяГраница не может быть больше 4294967295.
Например, в этом случае будет сгенерировано случайное число от 1 до 100.
Округлить число в 1С
В платформе 1С имеется возможность округления чисел по определенному правилу. Для этих целей существует метод Окр. Этот метод является функцией, которая принимает число, нужное для округления, и возвращает округленное число. Данный метод имеет следующий синтаксис:
Число – число, которое будет округляться;
Разрядность – до какого количества знаков после запятой нужно округлить число (если разрядность равна 0, то число будет округлено до целого числа).
РежимОкругления – системное перечисление, которое имеет два значения: РежимОкругления.Окр15как10 – в этом случае 1.5 округляется до 1, РежимОкругления.Окр15как20 – 1.5 округляется до 2. Если этот параметр не задан, то по умолчанию 1.5 округляется до 2
В этом случае будет следующий результат:
Целое число в 1С
Если предыдущий метод округляет число, то также имеется возможность получать целое число, т.е. просто отбросить дробную часть числа. Делает это метод Цел. Данный метод является функцией, принимающей единственный параметр – число, у которого нужно отбросить дробную часть, и возвращающей полученное целое число.
Рассмотрим работу этого метод в сравнении с методом округления числа.
Должен получиться следующий результат:
Из результата вы видите, что нельзя использовать метод Окр для получения целого числа, он именно округляет и не всегда может дать требуемый результат. Для получения целого числа используйте метод Цел.
Степень числа в 1С
В платформе 1С имеется возможность возвести нужное число в степень. Делается это при помощи метода Pow, который является функцией со следующим синтаксисом.
Рассмотрим ряд примеров:
Из примеров видно, что мы можем возводить в положительную и отрицательную степень, а также степень может быть дробной.
Функции чисел в 1С
В платформе 1С 8.3 имеется другие функции пот работе с числами , познакомится с ними можно в синтаксис-помощнике. В подразделе Функции работы со значениями типа Число.
Другие статьи о примитивных типах:
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Допустим нужно увеличить номер документа на 1.
Номер следующего вида - У00000000011.
Значение номера строковое, соответственно если отсечь префикс функцией
Прав(), далее преобразовать получившееся в число, прибавить 1 и обратно преобразовать в строку,
получим - 12, без нулей перед префиксом.
Как получить результат У00000000012, а не У12?
Это как вариант.
Конфигурация не типовая?
(1) niko11s,
а вообще вот это не проходит:
Тип: Строка.
Префикс устанавливаемого номера.
Значение по умолчанию: Пустая строка
Описание:
Устанавливает новый номер документа для заданного префикса номера.
(1) niko11s, у меня встречный вопрос - ЗАЧЕМ?
1с сама великолепно нумерует, пока кто-то кривыми ручками не попортит нумерацию. в этом случае я говорю - либо исправляйте по-хорошему, либо ждите год. как правило после такого владелец шаловливых ручек получает достаточное воздействие, чтобы не делать в будущем таких необдуманных операций
(9) GPL, согласен - 1С действительно очень хорошо сама нумерует. но иногда бывают пользователи которым по каким-либо причинам приходится (или хочется - когда как) редактировать и они это делают.
ладно хоть счас право редактирования номеров во многих типовых есть.
вобщем иногда всёже приходится нумерацию делать самому.
(1)Я вот так привожу номер к нужной строке
Номер собственно сам номер
КолРазрядов - сколько цифр в номере
НовыйНомер = Прав("0000000000000000000"+СтрЗаменить(СокрЛП(Номер)," ",""),КолРазрядов);
(21)Если номер 4 и больше значный туда может затесаться неразрывный пробел. а так можете смеяться, но работает.
Если эту строчку оформить функцией и передать номер, то очень хорошо, номер может быть и очень большой. ;)
(22)А потом - внезапно - в какой-нибудь базе вместо неразрывного пробела разделителем групп используют апостроф. Круто, правда? Для этих манипуляций существует Формат().
(23) а причем здесь разделители групп? в числах, особенно при нумерации объектов, бывает неразрывный пробел, апострофов я не встречал. :)
ЗЫ я просто поделился одним из способов как формирую номер для нумерации объектов, не более того.
(24)То, что вы с этим никогда не встречались, не значит, что этого нет. Существуют региональные настройки и их можно устанавливать по желанию пользователя. Поэтому, чтобы не пришлось в следующий раз шерстить форумы и для общего самообразования: неразрывный пробел "бывает" разделителем групп числа. А бывает и не бывает. Для форматирования числа независимо от региональных установок существует функция Формат() и даже реализован конструктор форматной строки. Это хорошо, что вы знаете о существовании неразрывного пробела, знания никогда не бывают лишними. С праздником :)
(11) GPL, иногда в модуле самого документа ещё прописывается нумерация. поэтому работает - невсегда.
но в синтакс-помошнике описание есть. как и что.
Вот как то так получилось:
в переменной Номер у тебя будет самый маленький номер
У клиента есть в одном журнале реализация с префиксом и без префикса, причем нумероваться они должны независимо, соответственно делаю флажок в реализации, и если нужно с префиксом то использую код, который выше,
а если без - то все как обычно.
Обычной операцией, которую вы будете выполнять при программировании, является прибавление 1 к значению целой переменной. Например, предположим, что ваша программа использует переменную с именем count, чтобы сохранить данные о количестве напечатанных файлов. Каждый раз, когда программа печатает файл, 1 будет добавляться к текущему значению count. Используя оператор присваивания C++, ваша программа может увеличивать значение count,как показано ниже:
count = count + 1;
В данном случае программа сначала выбирает значение count, а затем добавляет к нему единицу. Далее программа записывает результат сложения обратно в переменную count. Следующая программа INTCOUNT.CPP использует оператор присваивания для увеличения переменной count (которая первоначально содержит значение 1000) на единицу (присваивая переменной результат 1001):
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
С:\> INCCOUNT
Начальное значение count равно 1000
Конечное значение count равно 1001
Так как увеличение значения переменной представляет собой обычную операцию в программах, в C++ есть операция увеличения — двойной знак плюс (++). Операция увеличения обеспечивает быстрый способ прибавления единицы к значению переменной. Следующие операторы, например, увеличивают значение переменной count на 1:
count = count + 1; count++;
Следующая программа INC_OP.CPP использует операцию увеличения для наращивания значения переменной count на 1:
Эта программа работает так же, как INCCOUNT.CPP, которая использовала оператор присваивания для увеличения значения переменной. Когда C++ встречает операцию увеличения, он сначала выбирает значение переменной, добавляет к этому значению единицу, а затем записывает результат обратно в переменную.
Представление о префиксной (до) и постфиксной (после) операциях увеличения
При использовании операций увеличения ваши программы могут размещать оператор увеличения до или после переменной, как показано ниже:
Так как первый оператор появляется до переменной, он называетсяпрефиксным оператором увеличения. Аналогично этому, второй оператор появляется после переменной и называется постфиксным оператором увеличения. Вам необходимо знать, что C++ трактует эти два оператора по-разному. Например, рассмотрим следующий оператор присваивания:
Этот оператор присваивания указывает C++ присвоить текущее значениеcount переменной current_count. В дополнение к этому постфиксный оператор увеличения заставляет C++ увеличить текущее значение count.Использование постфиксного оператора в этом случае делает показанный выше оператор эквивалентным следующим двум операторам:
count = count + 1;
Теперь рассмотрим следующий оператор присваивания, который использует префиксный оператор увеличения:
В этом случае оператор присваивания указывает C++ сначала увеличить значение count, а затем присвоить результат переменной current_count.Использование префиксного оператора увеличения делает показанный выше оператор эквивалентным следующим двум операторам:
count = count + 1;
Важно освоить префиксную и постфиксную операции увеличения, так, как они будут встречаться вам в большинстве программ на C++. Следующая программа PRE_POST.CPP иллюстрирует использование префиксной и постфиксной операций увеличения:
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
С:\> PRE_POST
small_count равно 0
small_count++ производит 0
конечное значение small_count равно 1
big_count равно 1000
++big_count производит 1001
конечное значение big_count равно 1001
С переменной small_count программа использует постфиксную операцию увеличения. В результате программа выводит текущее значение переменной (0), а затем увеличивает его на 1. С переменной big_countпрограмма использует префиксную операцию увеличения. В результате программа сначала увеличивает значение переменной (1000 + 1), а затем выводит результат (1001). Найдите время, чтобы отредактировать эту программу, и сначала измените постфиксную операцию на префиксную, а затем префиксную на постфиксную. Откомпилируйте и запустите программу, обращая внимание на то, как изменение операции изменяет вывод.
С++ обеспечивает также операции уменьшения
Как вы уже знаете, двойной знак плюс (++) представляет собой оператор увеличения C++. Подобным образом двойной знак минус (--) соответствует оператору уменьшения C++, который уменьшает значение переменной на 1. Как и в случае с операцией увеличения, C++ поддерживает префиксный и постфиксный операторы уменьшения. Следующая программа DECCOUNT.CPP иллюстрирует использование оператора уменьшения C++:
Когда вы откомпилируете и запустите эту программу, на вашем экране появится следующий вывод:
small_count равно 0
small_count-- производит 0
конечное значение small_count равно -1
big_count равно 1000
—big_count производит 999
конечное значение big_count равно 999
Как видите, префиксный и постфиксный операторы уменьшения C++ работают так же, как и соответствующие операторы увеличения, с той лишь разницей, что они уменьшают значение переменной на 1.
ДРУГИЕ ОПЕРАТОРЫ С++
В этом уроке описаны обычные арифметические операции C++, а также операции увеличения и уменьшения. В программах на C++ вы можете встретить одну или несколько операций, перечисленных в табл. 5.2:
Таблица 5.2. Операции C++, которые вы можете встретить в программах.
Операция | Функция |
% | Взятие по модулю или остаток; возвращает остаток целочисленного деления |
~ | Дополнение; инвертирует биты значений |
& | Побитовое И |
| | Побитовое включающее ИЛИ |
^ | Побитовое исключающее ИЛИ |
Сдвиг влево; сдвигает биты значения влево на указанное количество разрядов | |
>> | Сдвиг вправо; сдвигает биты значения вправо на указанное количество разрядов |
СТАРШИНСТВО ОПЕРАЦИЙ
При выполнении арифметических операций в C++ необходимо знать, что C++ выполняет операции в определенном порядке, основанном на старшинстве операций. Например, операция умножения выполняется до сложения. Чтобы лучше понять старшинство операций, рассмотрите следующие выражения:
В зависимости от порядка, в котором C++ выполняет умножение и сложение, результат будет разным:
Чтобы избежать путаницы, C++ присваивает каждой операции приоритет, который определяет порядок выполнения операций. Так как C++ выполняет операции в определенном порядке, то и ваши программы будут проводить арифметические вычисления соответствующим образом.
Таблица 5.3 перечисляет старшинство операций C++. Операции, находящиеся в верхней части, имеют более высокий приоритет. Операции внутри каждой части имеют одинаковый приоритет. Если вы рассмотрите таблицу, то увидите, что в C++ умножение имеет более высокий приоритет, чем сложение. Вы не знакомы со многими операциями, представленными в таблице. В настоящее время не думайте об этих операциях. К концу изучения этой книги вы сможете использовать (и понять) каждую из них!
Таблица 5.3. Старшинство операций в C++.
Операция | Имя | Пример |
:: Разрешение области видимости classname::classmember_name | ||
:: | Глобальное разрешение | ::variable_name |
. | Выбор элемента | object.member_name |
-> | Выбор элемента | pointer->membername |
[] | Индексация | pointer[element] |
() | Вызов функции | expression(parameters) |
() | Построение значения | type(parameters) |
sizeof | Размер объекта | sizeof expression |
sizeof | Размер типа | sizeof(type) |
++ | Приращение после | variable++ |
++ | Приращение до | ++variable |
-- | Уменьшение после | variable-- |
-- | Уменьшение до | -- variable |
& | Адрес объекта | &variable |
* | Разыменование | *pointer |
new | Создание (размещение) | new type |
delete | Уничтожение (освобождение) delete pointer | |
delete[] | Уничтожение массива | delete pointer |
~ | Дополнение | ~expression |
! | Логическое НЕ | ! expression |
+ | Унарный плюс | +1 |
- | Унарный минус | -1 |
() | Приведение | (type) expression |
.* | Выбор элемента | object.*pointer |
-> | Выбор элемента | object->*pointer |
* | Умножение | expression * expression |
/ | Деление | expression / expression |
% | Взятие по модулю | expression % expression |
+ | Сложение (плюс) | expression + expression |
- | Вычитание (минус) | expression expression |
Управление порядком, в котором C++ выполняет операции
Как вы уже знаете, C++ назначает операциям различный приоритет, который и управляет порядком выполнения операций. К сожалению, иногда порядок, в котором C++ выполняет арифметические операции, не соответствует порядку, в котором вам необходимо их выполнить. Например, предположим, что вашей программе необходимо сложить две стоимости и затем умножить результат на налоговую ставку:
cost = price_a + price_b * 1.06;
К сожалению, в этом случае C++ сначала выполнит умножение (price_b * 1.06), а затем прибавит значение price_a.
Если ваши программы должны выполнять арифметические операции в определенном порядке, вы можете заключить выражение в круглые скобки. Когда C++ оценивает выражение, он сначала всегда выполняет операции, сгруппированные в круглых скобках. Например, рассмотрим следующее выражение:
C++ вычисляет данное выражение в следующем порядке:
result = (2 + 3) * (3 + 4);
= (5) * (3 + 4);
= 5 * (7);
=5*7;
= 35;
Подобным образом группируя выражения внутри круглых скобок, вы можете управлять порядком, в котором C++ выполняет арифметические операции. Аналогично предыдущему примеру, ваша программа может сложить две стоимости внутри круглых скобок, как показано ниже:
Число в 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.
Разумеется, самый очевидный способ - это получить текущее значение поля (1 запрос), увеличить это значение на 1, а после обновить на полученный результат старое значение (ещё 1 запрос). Данный способ очевиден, и он является рабочим, но плохим.
А в SQL есть отличная возможность увеличения значения поля сразу в SQL-запросе:
UPDATE `table_name` SET `field` = `field` + 1
Само собой, можно добавить ещё и WHERE, чтобы увеличивать на 1 не у всех записей. Также вместо +1, можно написать +5, +9, -20, *5 и так далее.
Вот такой простой и быстрый способ изменения текущего значения поля есть в SQL. Поэтому если кто-то вдруг из Вас ещё изменяет значение поля относительно текущего по "старинке", то поменяйте. Пусть и немного, но улучшите свой код.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
Она выглядит вот так:
Комментарии ( 7 ):
Статья супер. Как раз мне в будущем пригодится
а возможно в этом же запросе узнать значение увеличенной на 1, к примеру, ячейки?
Нет, так не получится. Этот запрос на обновление, а Вам же нужна выборка.
это я понимаю, но надеялся на то, что есть "секретный" запрос))))))))
Здравствуйте, а как обновить сразу несколько строк? К примеру есть таблица в которой 300 строк с полями id, name, value и нужно обновить поле value в 100 строках из них (или больше, или меньше) через цикл - не самая лучшая идея.
`field` - зачем тут кавычки?
Ни для table_name, ни для field кавычки не нужны. С ними SQL выдаёт ошибку.
Читайте также: