Skip to main content

Типы данных и операторы

Переменные

Динамическая типизация.

а = -1;
а = "Один";
Сообщить(а);
//"Один"

ТипЗнч(элмас) - вывести тип переменной.

Можно явно определить имя переменной, ключевое слово Экспорт позволяет обращаться к переменной через контекст модуля. Без экспорта только для эстетики кода.

Перем <Имя переменной 1> [Экспорт]

Типы данных и преобразования типов

Примитивные типы данных

Тип Описание
Null

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

Неопределено (Undefined)

Пустое значение, не принадлежащее ни к одному другому типу.

а = Неопределено;
б = ?(а = Неопределено, 0, 1);//б = 0

Прямое преобразование в булево: нельзя

При сравнении любой тип не равен Неопределено

а = 0;
б = ?(а = Неопределено, 0, 1);//б = 1
Число

Определены основные арифметические операции. Максимальная разрядность 38 знаков. Разделитель точка. 32 знака.

Прямое преобразование в булево: любое ненулевое Истина, 0 Ложь

Преобразование в строку: Строка()

Строка

Формат Unicode произвольной длины. В двойных кавычках. Многостроковый режим через |

Прямое преобразование в булево: нельзя

а = "";
б = ?(а, 0, 1); //вызовет ошибку

Преобразование в число:

Ч1 = Число(СтрокаЧ1);//вызовет исключение при невозможности

 Преобразование в дату: 

Дата("20211231123456"); //YYYYMMDDHHMMSS
Дата("2021", "12", "24", "12", "34", "56");
Дата

Строка цифр, заключенная в одинарные кавычки вида: 'ГГГГММДДччммсс'

Прямое преобразование в булево: нельзя

Булево

Значения данного типа имеют два значения Истина и Ложь

Тип

Используются для идентификации типов значений. Это необходимо для определения и сравнения типов.

Универсальные коллекции значений

Тип Описание
Массив

Аналог списка. Конструктор: 

м1 = Новый Массив; //массив нулевой длины
м2 = Новый Массив(<ФиксированныйМассив>); //создание массива из фиксированного массива
м3 = Новый Массив(10, 3); //мас. из 10 эл-тов, каждый из которых - мас. из 3 эл-тов

Методы:
ВГраница  - индекс верхней границы
Вставить(Индекс, Значение) - Добавляет Значение в указанный индекс со смещением. Если указать больше границы, то будут созданы несуществующие значения с типом Неопределено и последним - Значение.
Добавить - Добавляет элемент в конец массива. 

Количество
Найти - Если найден - индекс, иначе неопределено.
Очистить - Удаляет все значения из массива.
Удалить - удаляет указанный индекс
Структура

Аналог словаря. Ключи только строковые. Конструктор: 

ст1 = Новый Структура; //пустая
ст1 = Новый Структура("к1, к2", 1, 2) //структура с ключами к1, к2 и знач. 1 и 2

Доступ к элементу: 

а["к1"];
а.к1;

Перебор значений: 

а = Новый Структура("к1, к2", 1, 2);
Для каждого элмас из а Цикл
    Сообщить(элмас.Ключ + " " + элмас.Значение);
КонецЦикла;

Вставить(ключ, значение)
Количество()
Очистить() - удаляет все элементы
Свойство(Ключ, [НайденноеЗначение]) - безопасный поиск по ключу
Удалить(Ключ)

 

 

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








Фиксированный (массив, соответствие, структура) Аналогичный объект только для чтения.

Объекты


Респект и уважуха автору AlexO за разъяснение сущности взаимодействия в 1С ссылка на форум


В 1С нет настоящих "объектов" ООП. Эти товарищи обозвали словом "объект" ссылку на словарь значений. В 1С введено внутреннее понятие КоллекцияЗначений - и это не аналог контейнера объектов из ООП (который и сам определяет поведение входящих объектов, и дает доступ напрямую к ним - к их свойствам, методам, данным, событиям и т.д.), а набор ссылок на другие объекты, и из коллекции, если не получен "вложенный" элемент-объект (например, через метод НабораЗаписей НаборЗаписей.Прочитать()" ), нельзя напрямую получить свойства и методы элементов коллекции, а только - получить "объекты" коллекции, и уже обходом или обращением к элементу коллекции - работать со свойствами и методами "вложенных" объектов. Объект РегистрСведений не содержит объект РегистрСведенийНаборЗаписей, а НаборЗаписей не содержит объекты РегистрСведенийЗапись. Для работы с каждым вложенным уровнем нужно заново получать объекты этого нового уровня вложенности. Собственно, вся канитель "не могу получить данные объекта там-то", "не могу получить доступ к процедуре тут-то", "не видна переменная экспортная такая-то" и прочие невообразимые и множественные ограничения платформы - именно из-за наборов не связанных напрямую друг с другом "объектов", которых нужно каждый раз "получать", извлекать данные, и которым нужно каждый раз указывать - что мы от них хотим.

Тип конфигурации ...Объект (например СправочникОбъект) - 

Поскольку переписывать лень, далее используется слово Объект в понимании 1С.

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

Обращение к свойствам через точку или <Объект>["имя свойства"]

Менеджер = Справочники["Менеджеры"];
Менеджер = Справочники.Менеджеры;

Обращение к методам - через точку.

Категорический запрет на использование в запросах "двойного разъименования" (Объект.Свойство<содержащее СсылкуНаДругойОбъект>.СвойствоДругогоОбъекта) - только явное соединение таблиц через СОЕДИНЕНИЕ...

Условные операторы

?(<Логическое выражение>, <Выражение 1>, <Выражение 2>)   

а = Истина;
б = ?(а = Ложь, 0, 1);//б = 1

Если <Логическое выражение> Тогда
// Операторы
[ИначеЕсли <Логическое выражение> Тогда]
// Операторы
[Иначе]
// Операторы
КонецЕсли;

Разное

Выполнить(<Строка>);
Выполнить("Сообщить(а)");

Исполняет строковое представление команды.