Типы данных и операторы
Переменные
Динамическая типизация.
а = -1;
а = "Один";
Сообщить(а);
//"Один"
ТипЗнч(элмас) - вывести тип переменной.
Можно явно определить имя переменной, ключевое слово Экспорт позволяет обращаться к переменной через контекст модуля. Без экспорта только для эстетики кода.
Перем <Имя переменной 1> [Экспорт]
Типы данных и преобразования типов
Примитивные типы данных
Тип | Описание |
Null |
Исключительно для определения отсутствующего значения при работе с базой данных. |
Неопределено (Undefined) |
Пустое значение, не принадлежащее ни к одному другому типу.
Прямое преобразование в булево: нельзя При сравнении любой тип не равен Неопределено
|
Число |
Определены основные арифметические операции. Максимальная разрядность 38 знаков. Разделитель точка. 32 знака. Прямое преобразование в булево: любое ненулевое Истина, 0 Ложь Преобразование в строку: Строка() |
Строка |
Формат Unicode произвольной длины. В двойных кавычках. Многостроковый режим через | Прямое преобразование в булево: нельзя
Преобразование в число:
Преобразование в дату:
|
Дата |
Строка цифр, заключенная в одинарные кавычки вида: 'ГГГГММДДччммсс' Прямое преобразование в булево: нельзя |
Булево |
Значения данного типа имеют два значения Истина и Ложь |
Тип |
Используются для идентификации типов значений. Это необходимо для определения и сравнения типов. |
Универсальные коллекции значений
Тип | Описание |
Массив |
Аналог списка. Конструктор:
Методы: Количество
Найти - Если найден - индекс, иначе неопределено. Очистить - Удаляет все значения из массива. Удалить - удаляет указанный индекс |
Структура
|
Аналог словаря. Ключи только строковые. Конструктор:
Доступ к элементу:
Перебор значений:
Вставить(ключ, значение)
|
Соответствие | Как структура, только ключ может быть любого типа. |
Список значений | Как массив + строковое описание (Представление), Пометка и Картинка |
Фиксированный (массив, соответствие, структура) | Аналогичный объект только для чтения. |
Объекты
Респект и уважуха автору AlexO за разъяснение сущности взаимодействия в 1С ссылка на форум
В 1С нет настоящих "объектов" ООП. Эти товарищи обозвали словом "объект" ссылку на словарь значений. В 1С введено внутреннее понятие КоллекцияЗначений - и это не аналог контейнера объектов из ООП (который и сам определяет поведение входящих объектов, и дает доступ напрямую к ним - к их свойствам, методам, данным, событиям и т.д.), а набор ссылок на другие объекты, и из коллекции, если не получен "вложенный" элемент-объект (например, через метод НабораЗаписей НаборЗаписей.Прочитать()" ), нельзя напрямую получить свойства и методы элементов коллекции, а только - получить "объекты" коллекции, и уже обходом или обращением к элементу коллекции - работать со свойствами и методами "вложенных" объектов. Объект РегистрСведений не содержит объект РегистрСведенийНаборЗаписей, а НаборЗаписей не содержит объекты РегистрСведенийЗапись. Для работы с каждым вложенным уровнем нужно заново получать объекты этого нового уровня вложенности. Собственно, вся канитель "не могу получить данные объекта там-то", "не могу получить доступ к процедуре тут-то", "не видна переменная экспортная такая-то" и прочие невообразимые и множественные ограничения платформы - именно из-за наборов не связанных напрямую друг с другом "объектов", которых нужно каждый раз "получать", извлекать данные, и которым нужно каждый раз указывать - что мы от них хотим.
Тип конфигурации ...Объект (например СправочникОбъект) -
Поскольку переписывать лень, далее используется слово Объект в понимании 1С.
Внешних модулей нет. Использование процедур в разных проектах (или даже в разных модулях одной конфигурации) только копирование/вставка. Придется смириться.
Обращение к свойствам через точку или <Объект>["имя свойства"]
Менеджер = Справочники["Менеджеры"];
Менеджер = Справочники.Менеджеры;
Обращение к методам - через точку.
Категорический запрет на использование в запросах "двойного разъименования" (Объект.Свойство<содержащее СсылкуНаДругойОбъект>.СвойствоДругогоОбъекта) - только явное соединение таблиц через СОЕДИНЕНИЕ...
Условные операторы
?(<Логическое выражение>, <Выражение 1>, <Выражение 2>)
а = Истина;
б = ?(а = Ложь, 0, 1);//б = 1
Если <Логическое выражение> Тогда
// Операторы
[ИначеЕсли <Логическое выражение> Тогда]
// Операторы
[Иначе]
// Операторы
КонецЕсли;
Разное
Выполнить(<Строка>);
Выполнить("Сообщить(а)");
Исполняет строковое представление команды.