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,1,1)

Булево

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

Тип

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

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

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

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

м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

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

Разное

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

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