Общее

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

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

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

// Этот вариант не работает.
Если РабочийКаталог == ""
    Возврат
;
// Работают оба варианта.
Если РабочийКаталог = "" Тогда
    Возврат;
КонецЕсли;

если РабочийКаталог = "" тогда
    возврат;
конецесли;
// Этот вариант работает.
пер Версии = новый Массив<Версия>()

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

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

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

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

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

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

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

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

Табл. 5. После если не пишется тогда
«1С:Шина» «1С:Предприятие 8»
если Результат == 0
;
Если Результат = 0 Тогда
КонецЕсли;

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

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

Табл. 6. После для не пишется цикл
«1С:Шина» «1С:Предприятие 8»
для Счетчик = 1 по 5
;
Для Счетчик = 1 по 5 Цикл
КонецЦикла;

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

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

Табл. 7. После пока не пишется цикл
«1С:Шина» «1С:Предприятие 8»
пер Счетчик = 1
пока Счетчик < 5
    Счетчик += 1
;
Счетчик = 1;
Пока Счетчик < 5 Цикл
    Счетчик = Счетчик + 1;
КонецЦикла;
Совет: Для ввода угловых скобок < и > используйте сочетание клавиш Alt + б и Alt + ю (подробнее).

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

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

Табл. 8. В цикле для из не пишется каждого
«1С:Шина» «1С:Предприятие 8»
для Элемент из [1, 3, 5, 7, 9]
    пер Результат = "Элемент - %Элемент"
;





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

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

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

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

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

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

// Объявление и инициализация.
пер РабочийКаталог = "C:\\test\\"
// Объявление не обязательно.
// Отсутствие объявления 
//   не вызовет ошибку
//   при использовании переменной.
Перем РабочийКаталог;


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

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

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

Табл. 12. Объявление переменной любого типа
«1С:Шина» «1С:Предприятие 8»
// Объявление обязательно.
пер РабочийКаталог: неизвестно
// Объявление не обязательно.
Перем РабочийКаталог;
Табл. 13. Объявление метода с параметрами любого типа
«1С:Шина» «1С:Предприятие 8»
// Объявление типов параметров обязательно.
метод КакПроцедура(Парам1: неизвестно, 
                   Парам2: неизвестно)
    пер Результат = Парам1 + Парам2
;
// Типы параметров не объявляются.
Процедура КакПроцедура(Парам1, 
                       Парам2)
    Результат = Парам1 + Парам2;
КонецПроцедуры
Табл. 14. Объявление любого типа возвращаемого значения
«1С:Шина» «1С:Предприятие 8»
// Объявление типа возвращаемого значения
// обязятельно.
метод КакФункция(Парам1: неизвестно, 
                 Парам2: неизвестно): неизвестно
    возврат Парам1 + Парам2
;
// Тип возвращаемого значения не объявляется.
//
Функция КакФункция(Парам1, 
                   Парам2)
    Возврат Парам1 + Парам2;
КонецФункции

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

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

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

// Переменная может принимать значения типов Строка или Неопределено.
пер Переменная2: Строка?
Совет: Для ввода вертикальной черты | используйте сочетание клавиш Alt + \ (подробнее).

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

Константа

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

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

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

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

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

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

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

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

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

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

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

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

Функция КакФункция(Парам1, 
                   Парам2)
    Возврат Парам1 + Парам2;
КонецФункции

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

Аргументы передаются в методы только по значению. Это значит, что изменение значения параметра, при выполнении метода, никак не повлияет на переданный аргумент.

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

Табл. 16. Изменение параметра в вызываемом методе не приводит к изменению аргумента
«1С:Шина» «1С:Предприятие 8»
метод Скрипт()
    пер Переменная1 = 30
    Метод1(Переменная1)
    // Переменная1 будет равна 30.
;

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

// Возможна передача по ссылке.
Процедура Метод1(пер1)
    пер1 = 100;
КонецПроцедуры 

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

Табл. 17. Изменение экземпляров с помощью их методов
«1С:Шина» «1С:Предприятие 8»
метод Скрипт()

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

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

Процедура Метод3(масс)
    масс.Добавить(2);
КонецПроцедуры 

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

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

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

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

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

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

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

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

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

  • слеш /Alt + ..

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

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

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

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

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

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


   Запись.ЗаписатьНачалоЭлемента("product");
   Запись.ЗаписатьАтрибут("code", "138");
   Запись.ЗаписатьНачалоЭлемента("description");
   Запись.ЗаписатьТекст("Холодильник");
   Запись.ЗаписатьКонецЭлемента();
   Запись.ЗаписатьНачалоЭлемента("price");
   Запись.ЗаписатьТекст("30000");
   Запись.ЗаписатьКонецЭлемента();
   Запись.ЗаписатьНачалоЭлемента("count");
   Запись.ЗаписатьТекст("20");
   Запись.ЗаписатьКонецЭлемента();
   Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры 

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

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

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