Перейти к основному содержимому

Основные особенности

Исполнение кода на языке​

В «1С:Шине» код на языке «1С:Элемент» хранится в модулях — текстовых файлах с расширением XBSL.

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

Регистрозависимость​

Синтаксис языка «1С:Элемент» регистрозависимый. Однако в нем действует следующее ограничение на наименования переменных: нельзя объявить две переменные, которые отличаются только регистром.

Имена переменных​

«1С:Предприятие 8»
// Это одна и та же переменная
РабочийКаталог = "C:\test\";
рабочийКаталог = "D:\worker\";
«1С:Элемент»
// Во второй строке будет ошибка
пер РабочийКаталог = "C:\\test\\"
пер рабочийКаталог = "D:\\worker\\"

Ключевые слова​

«1С:Предприятие 8»
// Работают оба варианта
Если РабочийКаталог = "" Тогда
Возврат;
КонецЕсли;

если РабочийКаталог = "" тогда
возврат;
конецесли;
«1С:Элемент»
// Этот вариант работает
если РабочийКаталог == ""
возврат
;

// Этот вариант не работает
Если РабочийКаталог == ""
Возврат
;
«1С:Предприятие 8»
// Работают оба варианта
Версии = новый Массив();
Версии = Новый Массив();
«1С:Элемент»
// Этот вариант работает
пер Версии = новый Массив<Версия>()

// Этот вариант не работает
пер Версии = Новый Массив<Версия>()

Ключевые слова​

Все ключевые слова языка «1С:Элемент» пишутся строчными буквами. Прописные буквы в ключевых словах не используются. Это позволяет отличать ключевые слова от идентификаторов при просмотре кода без наличия подсветки, например в системах контроля версий.

Примеры ключевых слов​

«1С:Предприятие 8»
Процедура Скрипт()
КонецПроцедуры
«1С:Элемент»
метод Скрипт()
;
«1С:Предприятие 8»
Если Результат = 0 Тогда
КонецЕсли;
«1С:Элемент»
если Результат == 0
;
«1С:Предприятие 8»
Для Счетчик = 1 по 5 Цикл
КонецЦикла;
«1С:Элемент»
для Счетчик = 1 по 5
;
примечание

Подробнее про ключевые слова.

Упрощенные инструкции​

Простые и составные инструкции​

Многие привычные инструкции упрощены. Точка с запятой ; в конце простых инструкций не ставится. Этот символ используется в конце составных инструкций вместо ключевых слов КонецЕсли, КонецЦикла, КонецПроцедуры, КонецФункции и так далее.

«1С:Предприятие 8»
Процедура Скрипт()
Результат = 0;
Если Результат = 0 Тогда
Для Счетчик = 1 по 5 Цикл
Результат = Результат + 1;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
«1С:Элемент»
метод Скрипт()
пер Результат = 0
если Результат == 0
для Счетчик = 1 по 5
Результат += 1
;
;
;

После «если» не пишется «тогда»​

В инструкции если не используется ключевое слово Тогда.

«1С:Предприятие 8»
Если Результат = 0 Тогда
КонецЕсли;
«1С:Элемент»
если Результат == 0
;
примечание

Подробнее про инструкцию если.

После «для по» не пишется «цикл»​

В инструкции для по не используется ключевое слово Цикл.

«1С:Предприятие 8»
Для Счетчик = 1 по 5 Цикл
КонецЦикла;
«1С:Элемент»
для Счетчик = 1 по 5
;
примечание

Подробнее про инструкцию для по.

После «пока» не пишется «цикл»​

В инструкции пока не используется ключевое слово Цикл.

«1С:Предприятие 8»
Счетчик = 1;
Пока Счетчик < 5 Цикл
Счетчик = Счетчик + 1;
КонецЦикла;
«1С:Элемент»
пер Счетчик = 1
пока Счетчик < 5
Счетчик += 1
;
совет

Для ввода угловых скобок < и > используйте сочетание клавиш Alt + б и Alt + ю (подробнее).

примечание

Подробнее про инструкцию пока.

В цикле «для из» не пишется «каждого»​

В инструкции для из не используется ключевое слово Каждого.

«1С:Предприятие 8»
Массив = Новый Массив();
Массив.Добавить(1);
Массив.Добавить(3);
Массив.Добавить(5);
Массив.Добавить(7);
Массив.Добавить(9);
Для Каждого Элемент Из Массив Цикл
Сообщить("Элемент - " + Элемент)
КонецЦикла;
«1С:Элемент»
для Элемент из [1, 3, 5, 7, 9]
пер Результат = "Элемент - %Элемент"
;
совет

Для ввода квадратных скобок [ и ] используйте сочетание клавиш Alt + х и Alt + ъ (подробнее).

примечание

Подробнее про инструкцию для из.

Статическая типизация​

Язык «1С:Элемент» статически типизированный. Это значит, что у каждой переменной, параметра и метода, возвращающего значение, должны быть описаны типы.

Объявление переменной​

Переменные нужно объявлять явно. Тип переменной может быть указан явно. Если при объявлении переменной выполняется ее инициализация литералом, то тип переменной рекомендуется не указывать.

«1С:Предприятие 8»
// Объявление не обязательно.
// Отсутствие объявления не вызовет ошибку
// при использовании переменной
Перем РабочийКаталог;
«1С:Элемент»
// Объявление обязательно.
// Отсутствие объявления вызовет ошибку компиляции
// при использовании переменной
пер РабочийКаталог: Строка

// Объявление и инициализация
пер РабочийКаталог = "C:\\test\\"
примечание

Рекомендации по инициализации переменных.

Объявление метода​

«1С:Предприятие 8»
// Типы параметров не объявляются
Процедура КакПроцедура(Парам1,
Парам2)
Результат = Парам1 + Парам2;
КонецПроцедуры
«1С:Элемент»
// Объявление типов параметров обязательно
метод КакПроцедура(Парам1: Строка,
Парам2: Число)
пер Результат = Парам1 + Парам2
;

Объявление типа возвращаемого значения​

«1С:Предприятие 8»
// Тип возвращаемого значения не объявляется
Функция КакФункция(Парам1,
Парам2)
Возврат Парам1 + Парам2;
КонецФункции
«1С:Элемент»
// Объявление типа возвращаемого значения обязательно
метод КакФункция(Парам1: Строка,
Парам2: Число): Строка
возврат Парам1 + Парам2
;

Объявление переменной любого типа​

В языке «1С:Элемент» сохранена возможность динамической типизации в стиле «1С:Предприятия». Для этого в описании типа нужно использовать ключевое слово неизвестно. В этом случае все проверки кода с момента написания переносятся на момент его выполнения.

«1С:Предприятие 8»
// Объявление не обязательно
Перем РабочийКаталог;
«1С:Элемент»
// Объявление обязательно
пер РабочийКаталог: неизвестно
примечание

Подробнее про тип неизвестно.

Объявление метода с параметрами любого типа​

«1С:Предприятие 8»
// Типы параметров не объявляются
Процедура КакПроцедура(Парам1,
Парам2)
Результат = Парам1 + Парам2;
КонецПроцедуры
«1С:Элемент»
// Объявление типов параметров обязательно
метод КакПроцедура(Парам1: неизвестно,
Парам2: неизвестно)
пер Результат = Парам1 + Парам2
;

Объявление любого типа возвращаемого значения​

«1С:Предприятие 8»
// Тип возвращаемого значения не объявляется
Функция КакФункция(Парам1,
Парам2)
Возврат Парам1 + Парам2;
КонецФункции
«1С:Элемент»
// Объявление типа возвращаемого значения обязательно
метод КакФункция(Парам1: неизвестно,
Парам2: неизвестно): неизвестно
возврат Парам1 + Парам2
;

Составные типы​

В языке «1С:Элемент» поддерживаются составные типы. С их помощью вы можете указать, что переменная принимает значение одного из нескольких типов.

// Переменная может принимать значения типов Строка, Число или Булево
пер Переменная1: Строка|Число|Булево = 0

// Переменная может принимать значения типов Строка или Неопределено
пер Переменная2: Строка?
совет

Для ввода вертикальной черты | используйте сочетание клавиш Alt + \ (подробнее).

примечание

Рекомендации по описанию составных типов

Константа​

В языке «1С:Элемент» можно использовать константы, объявив их с помощью ключевого слова конст.

конст РАБОЧИЙ_КАТАЛОГ = "C:\\test\\"

метод Скрипт()
пер ФайлРезультата = новый Файл(РАБОЧИЙ_КАТАЛОГ + "test.txt")
;
примечание

Рекомендации по именованию констант.

Методы​

В языке «1С:Элемент» нет деления на процедуры и функции. Для объявления переиспользуемого блока кода всегда применяется ключевое слово метод.

Если метод возвращает значение, то его тип должен быть описан.

Пример описания и использования методов​

«1С:Предприятие 8»
Процедура Скрипт()
КакПроцедура("номер ", 5);
Результат = КакФункция("номер ",5);
КонецПроцедуры

Процедура КакПроцедура(Парам1,
Парам2)
Результат = Парам1 + Парам2;
КонецПроцедуры

Функция КакФункция(Парам1,
Парам2)
Возврат Парам1 + Парам2;
КонецФункции
«1С:Элемент»
метод Скрипт()
КакПроцедура("номер ", 5)
пер Результат = КакФункция("номер ",5)
;

метод КакПроцедура(Парам1: Строка,
Парам2: Число)
пер Результат = Парам1 + Парам2
;

метод КакФункция(Парам1: Строка,
Парам2: Число): Строка
возврат Парам1 + Парам2
;
примечание

Подробнее про методы.

Передача аргументов по значению​

Изменение параметра в вызываемом методе не приводит к изменению аргумента​

В языке «1С:Элемент» аргументы передаются в методы только по значению — то есть изменение значения параметра при выполнении метода никак не повлияет на переданный аргумент.

Во встроенном языке «1С:Предприятия 8» существует возможность передавать аргументы по ссылке так, что изменение значения параметра в вызываемом методе приведет к изменению аргумента.

«1С:Предприятие 8»
Процедура Скрипт()
Переменная1 = 30;
Метод1(Переменная1);
// Переменная1 будет равна 100
КонецПроцедуры

// Возможна передача по ссылке
Процедура Метод1(пер1)
пер1 = 100;
КонецПроцедуры
«1С:Элемент»
метод Скрипт()
пер Переменная1 = 30
Метод1(Переменная1)
// Переменная1 будет равна 30
;

// Невозможна передача по ссылке
метод Метод1(пер1: Число)
пер1 = 100
;

Изменение экземпляров с помощью их методов​

Как и во встроенном языке «1С:Предприятия 8», в языке «1С:Элемент» вы можете изменять экземпляры, переданные через параметры, с помощью методов этих экземпляров.

«1С:Предприятие 8»
Процедура Скрипт()
Массив1 = новый Массив();
Массив1.Добавить(1);
Метод3(Массив1);
// Массив1 будет иметь два элемента
КонецПроцедуры

Процедура Метод3(масс)
масс.Добавить(2);
КонецПроцедуры
«1С:Элемент»
метод Скрипт()

пер Массив1 = [1]
Метод3(Массив1)
// Массив1 будет иметь два элемента
;

метод Метод3(масс: Массив<Число>)
масс.Добавить(2)
;
примечание

Подробнее про передачу параметров.

Многострочные комментарии​

В языке «1С:Элемент» поддерживаются многострочные комментарии.

Пример многострочного комментария​

«1С:Предприятие 8»
// Алгоритм на основании анализа
// типа данных заменяет их
// на данные, удаляющие информацию
// из узла, в котором их
// не должно быть
«1С:Элемент»
/* Алгоритм на основании анализа
типа данных заменяет их
на данные, удаляющие информацию
из узла, в котором их
не должно быть */

Текучий интерфейс (Fluent API)​

Некоторые типы языка «1С:Элемент» обладают текучим интерфейсом (Fluent API). Его суть заключается в том, что методы возвращают контекст своего вызова, благодаря чему упрощается множественный вызов методов одного экземпляра. Внешне это выглядит как цепочка методов, вызываемых последовательно.

Примеры использования текучего интерфейса​

«1С:Предприятие 8»
Процедура ПриНачалеРаботыСистемы()

Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\test\test.xml");
Запись.ЗаписатьНачалоЭлемента("product");
Запись.ЗаписатьАтрибут("code", "138");
Запись.ЗаписатьНачалоЭлемента("description");
Запись.ЗаписатьТекст("Холодильник");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("price");
Запись.ЗаписатьТекст("30000");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("count");
Запись.ЗаписатьТекст("20");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();

КонецПроцедуры
«1С:Элемент»
метод Скрипт()
исп ПотокЗаписи =
новый Файл("C:\\test\\test.xml")
.ОткрытьПотокЗаписи()
пер Запись = новый ЗаписьXml(ПотокЗаписи)
Запись.ЗаписатьНачалоЭлемента("product")
.ЗаписатьАтрибут("code", "138")
.ЗаписатьНачалоЭлемента("description")
.ЗаписатьТекст("Холодильник")
.ЗаписатьКонецЭлемента()
.ЗаписатьНачалоЭлемента("price")
.ЗаписатьТекст("30000")
.ЗаписатьКонецЭлемента()
.ЗаписатьНачалоЭлемента("count")
.ЗаписатьТекст("20")
.ЗаписатьКонецЭлемента()
.ЗаписатьКонецЭлемента()
;

Другие примеры использования текучего интерфейса:

пер НастройкиПоиска = новый НастройкиПоискаФайлов()
.ИсключитьКаталоги()
.ИсключитьСсылки()
.ИмяСодержит(".html")

пер ЧистыйТекст = Чтение.Значение
.Заменить(Символы.НоваяСтрока, " ")
.Заменить(Символы.Таб, " ")
.Заменить(" ", " ")