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

Общее

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

Синтаксис языка «Шины» регистрозависимый, поэтому, например, нельзя объявить две переменные, которые отличаются только регистром.

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

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

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

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

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

// Этот вариант не работает.
Если РабочийКаталог == ""
Возврат
;
«1С:Предприятие 8»
// Работают оба варианта.
Версии = новый Массив();
Версии = Новый Массив();
«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С:Предприятие 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С:Предприятие 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: Строка|Число|Булево = 0

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

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

примечание

Константа

Константа — это именованное значение, которое синтаксически выглядит как переменная, но значение такой переменной нельзя изменить после объявления.

Константы объявляются в модуле с помощью ключевого слова конст и доступны во всех его методах.

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

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

Только методы

Нет деления на процедуры и функции. Для объявления переиспользуемого блока кода всегда применяется ключевое слово метод.

О том, что метод что-либо возвращает, можно судить по тому, что у метода описан тип возвращаемого значения.

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

«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 = 30;
Метод1(Переменная1);
// Переменная1 будет равна 100.
КонецПроцедуры

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

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

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

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

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

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

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

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

Ввод английских символов без переключения раскладки

Синтаксические конструкции языка «Шины» содержат символы, которые обычно расположены в английской раскладке клавиатуры. В среде разработки можно вводить эти символы, не переключаясь на английскую раскладку с помощью клавиши Alt.

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

пер СтрокаЧисло: Строка|Число = 5  // Alt + \

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

пер Числа = [0, 1, 2]  // Alt + х и Alt + ъ

Для ввода фигурных скобок { и }, которые используются, например, при включении в строковый литерал вычисляемых выражений, используйте Alt + 9 и Alt + 0.

пер ТекущееВремя = "Сейчас %{Время.Сейчас()|ЧЧ:мм}"  // Alt + 9 и Alt + 0

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

для Число из Числа
выбор Число
когда < 1 // Alt + б
Консоль.Записать("<1")
когда >= 1 // Alt + ю
Консоль.Записать(">=1")
;
;

Кроме перечисленных символов есть и другие, которые можно ввести аналогичным образом:

  • амперсанд &Alt + 7;

  • коммерческое at (собака) @Alt + 2;

  • апостроф 'Alt + э;

  • слеш /Alt + ..

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

Поддерживаются многострочные комментарии.

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

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

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

Некоторые типы языка «Шины» обладают текучим интерфейсом (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")

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