Тип данных в 1С (9 из 100 дней)
Типы и значения
Начнем из далека - когда вы пишите на бумаге "31.12", вы не уточняете, что это, ведь человек всегда поймет смысл из контекста.
Тип - это характер данных, их смысл.
Зачем компьютеру знать тип?
1. Распределить память под хранение
2. Определить допустимые операции и их смысл
Например, во встроенном языке 1С операция "+" имеет разный смысл для строк и чисел.
Операция сложение "чисел" называется - Сложение.
Операция сложение "строк" называется - Конкатенация.
ВАЖНО:
Каждая переменная несет не просто значение, а значение конкретного типа данных: число; дата; строка; булево; сложная структура и так далее.
Примитивные (базовые) типы - это типы данных, которые можно задать в коде с помощью литерала. Пример базовых типов: число, дата, булево.
Значения примитивных типов хранят в себе всю информацию об этом значении.
Давайте подробнее пройдемся по примитивным типам данных.
Примитивные типы данных
Тип "Число"
Разрабатывая для 1С, мы освобождены от необходимости думать о деталях хранения чисел
Говоря про тип "Число" при определении нужно указать:
- Длина (Общее кол-во разрядов)
- Точность (Сколько разрядов должно идти после запятой)
- Неотрицательное (Запрет ввода ввода значение меньше 0)
ВАЖНО
В программном коде числа описываются последовательностью цифр. Допускается разделитель дробной части - точка.
Наиболее часто используется четыре основных арифметических операции и остаток от деления - "%".
И помимо этого есть ряд функций работы с числами:
Подробное описание функций можно изучить в синтакс-помощнике.
Давайте посмотрим на практике, как работать с типом "Число":
1. Создадим новую форму в обработке и создадим команду "РаботаСЧислом"
2. Создадим две переменные (Важно, числа с дробной частью разделяется ".", а не "," - не забывайте про это)
3. Откроем синтаксис-помощник и подробнее посмотрим информацию про "Число" и возможности присущих ему функций
4. Подробнее остановимся на функциях "Окр" и "Цел"
- Функция "Окр" - округляет число в большую или меньшую сторону (Например, число "10.5" преобразуется в "11" или в "10", зависит от условия) + важно указывать разрядность и округление при использовании функции.
- Функция "Цел" - оставляет целую часть числа (Например, число "10.5" преобразуется в "10").
Тип "Строка"
Строка - это произвольная последовательность символов для вывода на экран или печать.
- В коде на встроенном языке строки ограничиваются двойными кавычками:
- Чтобы вывести в строку сами кавычки, нужно их удвоить:
- Чтобы написать многострочный текст, нужно использовать символ "|":
- Чтобы вывести пустую строку, нужно указать двойные кавычки подряд:
- Общая функция ЗначениеЗаполнено() считает заполненной строку со значащими символами:
Для строк определена единственная операция - конкатенация:
Для строковых значений, хранящихся в информационной базе, требуется определить максимальную длину
- Допустимая длина "Переменная" - кладет в память лишь прописанные значений (Например, напишем "123", в памяти будет хранится только "123")
- Допустимая длина "Фиксированная" - кладет в память всю указанную длину (Например, напишем "123", в памяти будет хранится "123 + 7 "пробелов"", то есть все десять значений)
- Пункт "Неограниченная" - позволяет писать неограниченное количество символ, однако пользоваться им стоит лишь тогда, когда мы, например, создаем комментарии, ведь бездумное использование может привести к нагрузке системы.
Как складывать строки правильно (Конкатенация) - разберем в будущем.
Тип "Дата"
- Дата представляет собой точку на оси времени
Переменные с типом "дата" хранят информацию о времени какого-либо события:
- Дата документа
- Дата выплаты зарплаты
- Срок окончания действия банковской карты
1С предоставляет хранение "Даты" в ИБ в трех вариантах:
- Дата
- Время
- Дата и время
Разделение номинальное, ведь в системе всегда хранится "Дата и время", отличие лишь в том, в каком виде это будет выводиться пользователю.
Во встроенном языке предусмотрены литералы типа "Дата": " '_' "
Строки в одинарных кавычках формата "ггггММддччммсс"
Для дат определена операция вычитание. Результатом операции будет разница между датами в секундах:
Также для дат определенно сложение с числом. В этом случае результатом будет дата, увеличенная на количество секунд равное числу:
Тип "Булево"
- Логическое значение "Да" или "Нет" представляются типом "булево" и могут принимать всего два различных значение: "Истина" или "Ложь"
Булево широко распространены в программировании для хранения флажков, признаков, выключателей, а также применяются в условиях.
Для типа "булево" определены 3 логических операции: "И"; "ИЛИ"; "НЕ";
Результаты операций с булево
Пример операций с булево
Приведение типов
Иногда для различных операций требуется перевести переменную из одного типа данных в другой.
Например, строку "23" надо преобразовать в число - 23.
Для такого действия используется операция преобразования типа
Простейший вариант приведения типа выглядит так:
Такой подход может приводить к ошибкам, так как в преобразуемой переменной может быть нечто, что нельзя преобразовать.
Например:
Более корректный способ преобразования записывается несколько сложнее, но не приводит к ошибке:
Число прописью
Отдельная довольно частая задача - перевод числа в его текстовое представление. Например: "23" = "Двадцать три".
Функция Формат ()
Для вывода сообщений часто необходимо специфичное представление значения переменной.
Простой вариант программного кода:
Иногда надо выводить числа или тип булево в определенном виде. Для таких преобразований используется функция "Формат()".
Пример:
И на выходе получим:
В функцию "Формат ()" первым значением всегда передается преобразуемое значение: число, дата или булево.
Вторым значением передается форматная строка.
Не нужно бояться, что эти строки надо запоминать наизусть. В 1С есть специальный конструктор, который помогает сформировать необходимую строку.
Для вызова конструктора щелкните правой кнопкой мышки код и выберите соответствующий пункт:
В открывшемся редакторе можно настроить отображение типа. При этом можно ориентироваться на примеры представления:
ВАЖНО
- Использовать её результат следует для вывода сообщений, но не для хранения данных в базе или дальнейших вычислений
Проверка типа во время выполнения программного кода
Иногда требуется во время выполнения программы узнать, какого типа значение несет та или иная переменная
Для этого используются 2 специальные функции:
Они позволяют проверить тип того или иного значения и принять решение о способе обработки значения
Тип ()
Во встроенном языке есть специальный тип "тип()", описывающий, собственно тип
Функции "Тип()" можно передать строку, а она вернет соответствующий тип
ТипЗнч()
Функции "ТипЗнч()" можно передать значение, а она вернет его тип
Таким образом, комбинируя эти 2 функции, можно проверить, чему равен тип переменной:
Специальные и ссылочные типы значений
Уникальные идентификаторы
Особняком от примитивных типом стоят уникальные идентификаторы
Это длинные числа, традиционно представляемые в шестнадцатеричном виде:
Случайный и гарантированно уникальный идентификатор можно сгенерировать так:
Или создать из строки:
Главное их назначение - быть идентификатором ссылок
Хранилище значения
Тип данных "Хранилище значения" применяется для хранения данных, для которых нет специального типа. В нем можно сохранять файлы, картинки, таблицы, массивы данных и т.д.
Посмотрим на практике:
1. Создадим новую обработку, а также создадим новый реквизит "Сотрудник" с типом "СправочникСсылка.Сотрудники", а также новую команду "ПолучитьТабельныйНомер".
2. В обработчике пропишем следующий код, который позволит нам вытащить из всего значения сотрудника только его табельный номер
3. Теперь создадим новый реквизит "НовыйТабельныйНомер" и команду "УстановитьНовыйТабельныйНомер"
4. В обработчике пропишем следующий код (Важно учитывать, что мы не можем на прямую менять ссылку, поэтому используем функции "ПолучитьОбъект" и "ЗаписатьОбъект")
5. Запустим конфигурацию и изменим табельный номер (Изменения мы не увидим в обработке), зайдем в справочник "Сотрудники" и увидим, что у нас все поменялось
Ссылка - это указание на объект, данные которого лежат где-то ещё
Пример: в документе ЗаказПокупателя может быть реквизит Контрагент типа СправочникСсылка.Контрагенты, указывающий на объект - элемент справочник Контрагенты
В самом заказе данных контрагента нет, есть только ссылка на него.
При изменении наименования или адреса контрагента, вы меняете их только в справочнике Контрагенты, но не трогаете сами заказы.
Чтобы обратиться в коде к данным контрагента, можно написать:
По ссылке можно только читать данные.
И даже чтения это не лучший способ - запросы эффективнее.
Чтобы изменить данные по ссылке, нужно получить сам объект:
Значение ссылочного реквизита по молчанию - "пустая ссылка"
Обращение к ней на сервере:
На клиенте:
Внутри каждой ссылки спрятан уникальный идентификатор, получить который можно так:
Идентификатор назначается платформой автоматически, но может быть измене до создания.
После создания изменить его нельзя
Составные типы
В некоторых случаях требования предметной области заставляют хранить в одном реквизите значения разных типов.
Например, деньги из кассы можно выплатить и сотрудники, и контрагенту
В таких случаях не делают два отдельных реквизита Сотрудник и Контрагенты.
А создают один реквизит составного типа, например Получатель, включающий типы:
Для установки такого типа данных при выборе типа надо установить специальный флажок "Составной тип данных".
Рад был поделиться с вами материалом, встретимся с вами уже завтра!