Академический Документы
Профессиональный Документы
Культура Документы
Хрусталева
«1С:Предприятие.Элемент». Возможности
встроенного языка
Введение . ...........................................................................................................................................7
Термины, используемые в книге..........................................................................................................9
Глава 1. Синтаксические отличия...................................................................................................... 11
Ввод английских символов без переключения раскладки клавиатуры....................................... 12
Регистрозависимый синтаксис..................................................................................................................... 13
Особенности именования переменных в языке «Элемента»........................................................... 14
Ключевые слова................................................................................................................................................ 14
Многострочные комментарии...................................................................................................................... 16
Упрощенные инструкции................................................................................................................................ 17
Простые инструкции......................................................................................................................................17
Составные инструкции..................................................................................................................................17
«Лишние» слова в составных инструкциях............................................................................................18
Процедуры и функции называются методами....................................................................................... 19
Текучий интерфейс........................................................................................................................................... 20
Глава 2. Типизация данных, переменные, константы. Передача параметров............................. 23
Статическая типизация.................................................................................................................................... 24
Пример объявления переменной..............................................................................................................24
Пример объявления типов параметров..................................................................................................25
Пример объявления типов возвращаемых значений........................................................................25
Пример использования обобщенного типа...........................................................................................25
Пример использования функционального типа..................................................................................26
Динамическая типизация............................................................................................................................... 27
Иерархия типов................................................................................................................................................. 28
Составные типы................................................................................................................................................. 30
Особенности обращения к членам выражений составного типа..................................................32
Объявление переменных............................................................................................................................... 33
Модификаторы.................................................................................................................................................33
Имя переменной.............................................................................................................................................34
Тип........................................................................................................................................................................34
Начальное значение......................................................................................................................................34
Инициализатор.................................................................................................................................................35
Ограничения.....................................................................................................................................................35
Константы............................................................................................................................................................. 36
3
«1С:Предприятие.Элемент». Возможности встроенного языка
Методы.................................................................................................................................................................. 37
Типы параметров.............................................................................................................................................37
Значения по умолчанию...............................................................................................................................37
Передача параметров по значению.........................................................................................................39
Позиционные и именованные аргументы..............................................................................................41
Перегрузка методов.......................................................................................................................................43
Разрешение неоднозначности при использовании именованных аргументов.......................... 46
Глава 3. Операции, инструкции, типы............................................................................................... 49
Операции............................................................................................................................................................. 50
Арифметические операции.........................................................................................................................50
Логические операции....................................................................................................................................52
Тернарная операция «?»...............................................................................................................................53
Операция «это»................................................................................................................................................54
Операция «как»................................................................................................................................................55
Операции для работы со значением «Неопределено».....................................................................56
Настойчивая операция.................................................................................................................................... 56
Операция «Безопасный доступ»...................................................................................................................57
Операция «Умолчание»................................................................................................................................... 58
Инструкции.......................................................................................................................................................... 59
«если»..................................................................................................................................................................59
«выбор»..............................................................................................................................................................59
Стандартные типы............................................................................................................................................. 61
Строка..................................................................................................................................................................61
Экранирование символов.............................................................................................................................. 61
Интерполяция строк......................................................................................................................................... 62
Многострочные литералы............................................................................................................................... 63
Методы.................................................................................................................................................................. 63
Число...................................................................................................................................................................65
Литералы.............................................................................................................................................................. 65
Форматирование............................................................................................................................................... 65
Методы.................................................................................................................................................................. 70
ДатаВремя.........................................................................................................................................................70
Литералы.............................................................................................................................................................. 70
Конструкторы...................................................................................................................................................... 71
Форматирование............................................................................................................................................... 71
Методы.................................................................................................................................................................. 73
Длительность.....................................................................................................................................................74
Коллекции..........................................................................................................................................................75
Массив................................................................................................................................................................... 76
Соответствие........................................................................................................................................................ 79
Множество............................................................................................................................................................ 82
Собственные типы............................................................................................................................................ 84
Перечисление...................................................................................................................................................84
Структура............................................................................................................................................................86
Исключения.......................................................................................................................................................88
Инструкция «попытка»..................................................................................................................................... 90
4
Оглавление
Инструкция «выбросить»................................................................................................................................ 92
Стандартные типы исключений.................................................................................................................... 93
Обобщенные типы............................................................................................................................................ 94
Обобщенные системные методы................................................................................................................ 96
Статические системные методы................................................................................................................... 97
Типы-одиночки.................................................................................................................................................. 98
Функциональные типы.................................................................................................................................... 99
Лямбда-выражения.....................................................................................................................................101
Ссылки на методы........................................................................................................................................102
Примеры использования функциональных типов...........................................................................102
Хранение метода в переменной................................................................................................................102
Ссылка на системный метод........................................................................................................................103
Вызов системного метода с параметром функционального типа..................................................103
Передача метода в другой метод..............................................................................................................104
Рекомендации при написании кода.........................................................................................................105
Регулярные выражения................................................................................................................................106
Образец........................................................................................................................................................... 107
Совпадение....................................................................................................................................................110
Примеры использования регулярных выражений...........................................................................110
Пример 1............................................................................................................................................................110
Пример 2............................................................................................................................................................111
Пример 3............................................................................................................................................................112
Пример 4............................................................................................................................................................113
Пример 5............................................................................................................................................................113
Глава 4. Создание прикладных решений в «Элементе»............................................................... 115
Ключевое слово «этот».................................................................................................................................116
Аннотации..........................................................................................................................................................116
Аннотации видимости................................................................................................................................ 117
Аннотации окружения................................................................................................................................118
Аннотация «ИменованныеПараметры»...............................................................................................119
Аннотация «ВыполнятьПриЗагрузкеДанных»....................................................................................119
Модульная разработка..................................................................................................................................120
Видимость языковых конструкций.........................................................................................................121
Квалифицированное имя элемента......................................................................................................122
Импорт пространств имен.........................................................................................................................124
Исполнение модуля.......................................................................................................................................124
Статические методы элементов проекта.............................................................................................126
Передача исполнения с клиента на сервер........................................................................................ 127
Запросы..............................................................................................................................................................128
Использование литерала запроса..........................................................................................................128
Обход результата запроса........................................................................................................................129
Явное указание типа строки.....................................................................................................................129
Параметры запроса.....................................................................................................................................130
Загрузка данных..............................................................................................................................................131
5
6
Введение
Встроенный язык технологии «1С:Предприятие.Элемент» – это
новый язык разработки, который базируется на встроенном языке
платформы «1С:Предприятие 8», но имеет ряд существенных отличий
от него. Например:
■■ язык является статически типизированным;
■■ в языке присутствует иерархия типов;
■■ нет разделения на функции и процедуры – используется единое
ключевое слово «метод»;
■■ поддерживается перегрузка методов;
■■ поддерживаются пользовательские структуры, перечисления
и исключения и т. д.
Далеко не всегда у вас есть возможность спокойно и вдумчиво изучить
всю документацию. Чаще всего хочется сразу же попробовать те или
иные возможности нового языка, о которых вы уже где-то когда-то
слышали. Именно для этого и предназначена книга, которую вы
держите в руках.
С одной стороны, не вдаваясь в глубокие подробности, она рассказы-
вает о новых возможностях языка.
С другой стороны, в книге описаны важные и заметные изменения,
с которыми вам придется столкнуться буквально с первых шагов
в новом языке.
7
«1С:Предприятие.Элемент». Возможности встроенного языка
8
Термины,
используемые в книге
В книге будут использоваться следующие термины и понятия:
■■ Значение – этот термин используется в общепринятом смысле:
элемент данных, являющийся одним из возможных членов типа
данных, который может соответствовать некоторому состоянию
переменной или константе соответствующего типа.
■■ Тип – это множество допустимых значений и контракт.
■■ Экземпляр – это значение типа.
■■ Контракт – набор свойств и методов, присущих тому или иному
типу, а также поведение этих свойств и методов.
■■ Переменная – это ссылка на область памяти, которая хранит
значение какого-либо типа. Для идентификации переменной
служит ее имя.
■■ Метод – это фрагмент кода на встроенном языке, к которому
можно обратиться из другого места модуля или из другого модуля.
О том, что метод что-либо возвращает, можно судить по тому, что
у метода описан тип возвращаемого значения.
■■ Параметр – это имя переменной, через которую тело метода полу-
чает доступ к значению, которое предоставляется методу во время
его вызова (аргумент).
9
«1С:Предприятие.Элемент». Возможности встроенного языка
10
ГЛАВА 1
Синтаксические
отличия
11
«1С:Предприятие.Элемент». Возможности встроенного языка
12
Глава 1. Синтаксические отличия
Например:
■■ Для ввода вертикальной черты |, которая используется, например,
при перечислении типов, используйте Alt + \;
пер ПеременнаяСоставногоТипа: Число|Булево = 3
Регистрозависимый синтаксис
В языке «1С:Предприятия» можно было писать имя переменной
в разных регистрах. Компилятор воспринимал оба варианта напи-
сания как одну и ту же переменную. Например:
ИмяДокумента = "Доходы"
Имядокумента = "Расходы"
13
«1С:Предприятие.Элемент». Возможности встроенного языка
Ключевые слова
В языке «1С:Предприятия» в ключевых словах можно было исполь-
зовать как строчные, так и прописные буквы. Несмотря на то что
писать можно было как угодно, для повышения «читабельности»
ключевые слова обычно писали в стиле CamelCase. Это значит,
что если имя состоит из одного слова, то оно пишется с прописной
буквы, остальные буквы – строчные. Если имя состоит из нескольких
слов, – они пишутся слитно без пробелов, при этом каждое слово
внутри пишется с прописной буквы. Например, ключевые слова Если,
Возврат и КонецЕсли:
Если Счетчик < 7 Тогда
Возврат;
КонецЕсли;
14
Глава 1. Синтаксические отличия
15
«1С:Предприятие.Элемент». Возможности встроенного языка
Многострочные комментарии
В языке «1С:Предприятия», чтобы закомментировать несколько
строк, идущих подряд, нужно было установить символ комментария
в начале каждой строки. Например:
// Начало комментариев
// Вторая строка комментариев
// Конец комментариев
16
Глава 1. Синтаксические отличия
Упрощенные инструкции
Простые инструкции
В языке «1С:Предприятия» любая инструкция всегда заканчивалась
символом «;». Например:
Результат = Переменная1 + Переменная2;
Результат2 = Результат - Переменная3;
Составные инструкции
В языке «1С:Предприятия» составная инструкция всегда заканчива-
лась «собственным» ключевым словом и символом «;». Например:
КонецЕсли;, КонецЦикла;:
Если Счетчик < 7 Тогда
Возврат;
КонецЕсли;
17
«1С:Предприятие.Элемент». Возможности встроенного языка
метод МойМетод()
пер Переменная1 = 4
;
// Язык "Элемента"
если Счетчик < 7
возврат
;
// Язык "Элемента"
для Счетчик = 1 по 5
ЗагрузитьЭлемент(Счетчик)
;
18
Глава 1. Синтаксические отличия
// Язык "Элемента"
пока Счетчик = 1 по 5
ЗагрузитьЭлемент(Счетчик)
Счетчик = УвеличитьСчетчик(Счетчик)
;
// Язык "Элемента"
для Элемент из МассивЭлементов
ОбработатьЭлемент(Элемент)
;
Функция МояФункция()
Возврат 8;
КонецФункции
19
«1С:Предприятие.Элемент». Возможности встроенного языка
Текучий интерфейс
В языке «1С:Предприятия» практически нигде не было возможности
получить объект как результат выполнения его метода. Например, для
того чтобы создать XML с определенным содержимым, нужно было
сохранить в переменной объект записи, а затем снова и снова вызы-
вать методы от этой переменной.
В результате такой код выглядел довольно громоздким. Например:
Процедура ЗаписьXml()
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл("C:\test\test.xml");
Запись.ЗаписатьНачалоЭлемента("product");
Запись.ЗаписатьАтрибут("code", "138");
Запись.ЗаписатьНачалоЭлемента("description");
Запись.ЗаписатьТекст("Холодильник");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("price");
Запись.ЗаписатьТекст("30000");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьНачалоЭлемента("count");
Запись.ЗаписатьТекст("20");
Запись.ЗаписатьКонецЭлемента();
Запись.ЗаписатьКонецЭлемента();
КонецПроцедуры
20
Глава 1. Синтаксические отличия
21
«1С:Предприятие.Элемент». Возможности встроенного языка
22
ГЛАВА 2
Типизация данных,
переменные,
константы.
Передача
параметров
23
«1С:Предприятие.Элемент». Возможности встроенного языка
Статическая типизация
В языке «1С:Предприятия» использовалась динамическая типизация.
Типы переменных, параметров, значений, возвращаемых функциями,
и т. п. определялись динамически в момент исполнения программы.
Если в некоторую процедуру передавалось значение такого типа,
на работу с которым эта процедура не рассчитана, то обнаруживалось
это только во время выполнения программы. В процессе написания
и компиляции программы автоматически обнаружить это было
невозможно. Поэтому о наличии таких ошибок зачастую можно было
узнать только от недовольных пользователей, что не есть хорошо.
Теперь в языке «Элемента» используется статическая типизация.
Это значит, что при объявлении переменной, параметра или метода,
возвращающего значение, сразу должен быть указан тип.
В результате еще в момент компиляции проверяется соответствие
типов переменных, параметров и т. д. и присваиваемых им значений.
То есть вы не можете в переменную, описанную с типом Число, запи-
сать значение типа Строка.
Таким образом, статическая типизация языка «Элемента» позволяет
увидеть и исправить многие ошибки еще на стадии компиляции
программы, что является несомненным преимуществом языка
«Элемента».
Ниже приводятся примеры объявления переменных, параметров
методов, типов значений, возвращаемых методами, и коллекций
в языке «1С:Предприятия», где указывать тип не требуется, и в языке
«Элемента», где тип нужно указывать обязательно.
Эти примеры имеют ознакомительный характер. Ниже все эти объяв-
ления будут рассмотрены более подробно. Пока лишь поясним, что
типы элементов коллекций указываются в угловых скобках («<»
и «>»), в остальных случаях типы указываются с помощью символов
«: » (двоеточие без пробела справа от имени переменной, параметра
и т. п., затем пробел и имя типа).
24
Глава 2. Типизация данных, переменные, константы. Передача параметров
В языке «Элемента»:
пер ИмяСотрудника: Строка //объявление с указанием типа
пер ИмяСотрудника = "Сергей" //объявление с указанием значения
В языке «Элемента»:
метод УзнатьПлощадь(Длина: Число, Ширина: Число)
пер Площадь = Длина * Ширина
;
В языке «Элемента»:
метод УзнатьПлощадь(Длина: Число, Ширина: Число): Число
возврат Длина * Ширина
;
25
«1С:Предприятие.Элемент». Возможности встроенного языка
ПОДРОБНЕЕ
Подробнее про обобщенные типы будет рассказано в 3-й главе
в разделе «Обобщенные типы».
При этом в коллекцию нельзя записать элемент иного типа, чем тот, с
которым она объявлена.
При создании экземпляра коллекции с помощью литерала тип
элементов коллекции можно явно указать слева от списка элементов
без пробела, а можно и не указывать, если он вычисляется из списка
элементов. Причем этот тип может быть составным. Например:
пер Строки = ["один", "два", "три"] //тип элементов массива - Строка
пер Строки = <Строка>["один", "два", "три"] //тип элементов массива - Строка
пер ЧислаИСтроки = <Число|Строка>["один", 2, "три"] //тип элементов массива – Строка или Число
26
Глава 2. Типизация данных, переменные, константы. Передача параметров
Динамическая типизация
В языке «Элемента» помимо вышеописанной статической типизации
данных существует возможность динамической типизации в стиле
«1С:Предприятия». Для этого в описании типа нужно использо-
вать ключевое слово неизвестно. В этом случае все проверки кода
с момента написания переносятся на момент его выполнения.
В следующем примере переменная Значение принимает сначала
значение типа Строка, а затем – типа Число. Тип переменной опре-
деляется динамически на этапе исполнения программы, и на этапе
компиляции ошибок не возникнет:
пер Значение: неизвестно
Значение = "строка"
Значение = 32
27
«1С:Предприятие.Элемент». Возможности встроенного языка
Иерархия типов
В языке «1С:Предприятия» все типы были независимы друг от друга,
между ними не существовало никаких связей.
Теперь в языке «Элемента» все типы имеют строгую иерархию.
В основании иерархии типов лежит тип Объект. Этот тип является
базовым для всех типов, кроме типа Неопределено.
При этом потомок какого-либо типа наследует контракт своего
предка (набор операций, которые можно выполнять над данными,
принадлежащими этому типу), но каким-либо образом расширяет или
допустимые значения, или контракт, или оба этих параметра.
Таким образом, если какой-то тип является потомком типа Обхо-
димое, то значения такого типа можно обходить (например в цикле
для…из). Если тип является потомком типа Сравнимое, то значения
такого типа могут участвовать в операциях сравнения, и т. д.
Предка какого-либо типа также можно назвать его базовым типом,
а потомка от него – производным типом. У одного типа может быть
несколько базовых типов.
Для определения и сравнения типов, а также для получения инфор-
мации о иерархии типов в языке «Элемента» существует специальный
тип Тип. У каждого из производных типов существует метод Полу-
читьТип(), который возвращает значение типа Тип.
Чтобы получить список базовых типов конкретного типа, у экзем-
пляра типа Тип используется свойство БазовыеТипы. Например:
пер БазовыеТипы = СобратьПредков(Тип<Число>)
28
Глава 2. Типизация данных, переменные, константы. Передача параметров
У типа Число список базовых типов будет иметь вид (рис. 2.1):
У типа Булево список базовых типов будет иметь вид (рис. 2.2):
29
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
пер Переменная1: Сравнимое<Число> = 33
пер Переменная2: Число = 11
Переменная1 = Переменная2
ПОДРОБНЕЕ
Подробнее про обобщенные методы будет рассказано в 3-й главе
в разделе «Обобщенные системные методы».
Составные типы
В языке «1С:Предприятия» составной (как и любой другой) тип
данных указать было нельзя. Набор составных типов можно было
задать только на этапе конфигурирования свойств прикладных
объектов. Например, реквизиту справочника можно было указать
составной тип Строка, Число. Тогда в модуле объекта переменная,
соответствующая этому реквизиту, имела составной тип (рис. 2.4).
Теперь в языке «Элемента» можно указать, что переменная, пара-
метр и т. п. будут принимать значение одного из нескольких типов.
Для этого при объявлении им присваивается составной тип.
Для задания составного типа используется синтаксис перечисления
типов, разделенных символом «|» без пробелов с обеих сторон
от вертикальной черты.
Например, чтобы указать, что переменная может принимать значения
типов Строка, Число или Булево, ее нужно объявить следующим
образом:
пер Переменная1: Строка|Число|Булево = 7
30
Глава 2. Типизация данных, переменные, константы. Передача параметров
31
«1С:Предприятие.Элемент». Возможности встроенного языка
Особенности обращения
к членам выражений составного типа
В языке «Элемента» существуют некоторые ограничения на обра-
щение к выражениям составного типа, которые нужно учитывать.
■■ У экземпляров составного типа нельзя вызывать методы и обра-
щаться к их свойствам, за исключением случаев, когда в наборе
типов содержится тип Неопределено.
Например, при компиляции следующего кода будет получена
ошибка – «Обращение к членам составных типов недопустимо»:
пер Переменная1: Строка|Число = 7
пер ПредставлениеЧисла = Переменная1.ВСтроку()
32
Глава 2. Типизация данных, переменные, константы. Передача параметров
Объявление переменных
В языке «1С:Предприятия» переменные можно было объявлять,
а можно было не объявлять. Обычно их не объявляли, а использо-
вали неявное объявление переменных в инструкции присваивания.
Например:
МояПеременная = "Сергей" ;
Модификаторы
При объявлении переменной используются три модификатора:
■■ пер – переменная, доступная для записи и для чтения. Например:
пер Переменная1: Строка
33
«1С:Предприятие.Элемент». Возможности встроенного языка
Имя переменной
После модификатора пишется имя переменной. Имя переменной
рекомендуется писать в стиле CamelCase. При этом если имя состоит
из одного слова, то оно пишется с прописной буквы, остальные
буквы – строчные. Если имя состоит из нескольких слов, то они
пишутся слитно без пробелов, при этом каждое слово внутри пишется
с прописной буквы.
Тип
После имени переменной может быть указано описание типа.
От имени переменной оно отделяется двоеточием и пробелом.
Если тип один, то просто указывается имя типа. Например:
пер Переменная1: Число
Начальное значение
Начальное значение переменной вычисляется из описания типа.
Если тип переменной имеет значение по умолчанию, то переменная
будет иметь это значение. Например:
пер Переменная1: Число //начальное значение переменной будет равно 0
34
Глава 2. Типизация данных, переменные, константы. Передача параметров
Инициализатор
Если тип переменной не имеет значения по умолчанию или если
в составном типе нет типа Неопределено, то в этом случае необхо-
димо указать инициализатор.
Инициализатор – это литерал или выражение, которые пишутся после
знака равенства. Это то значение, которое будет иметь переменная.
Например:
пер Переменная1: Строка|Число = "пример"
пер Переменная1: Строка|Число = 330 / 5 * 3
//Неправильно
пер Переменная1: Булево = Истина
пер МассивЧисел: Массив<Число> = новый Массив<Число>()
Ограничения
Объявление переменной может располагаться в любом месте метода.
При этом нужно учитывать следующие ограничения:
■■ Нельзя объявить сразу несколько переменных в одной инструкции.
■■ Переменная не может быть объявлена дважды в одной области
видимости.
■■ Имя переменной не может совпадать с именем параметра метода.
■■ Переменная не может быть использована в собственном инициа-
лизаторе.
■■ Не поддерживается объявление переменной без указания типа или
явного значения инициализации.
35
«1С:Предприятие.Элемент». Возможности встроенного языка
Константы
В языке «1С:Предприятия» константы создать было нельзя. Они
создавались на этапе конфигурирования с определенным именем
и типом и были доступны во всем прикладном решении. И затем
из встроенного языка можно было получить или изменить значение
конкретной константы. Например:
// Получить значение константы РасчетЗарплаты
РасчетЗП = Константы.РасчетЗарплаты.Получить();
Сообщить(РасчетЗП); //да
36
Глава 2. Типизация данных, переменные, константы. Передача параметров
Методы
Типы параметров
В языке «1С:Предприятия 8» в объявлениях процедур и функций
не нужно было указывать типы формальных параметров и возвраща-
емых значений. Например:
Процедура УзнатьПлощадь(Длина, Ширина)
Площадь = Длина * Ширина;
КонецПроцедуры
Значения по умолчанию
В языке «1С:Предприятия 8» для любого формального параметра
можно было указать значение по умолчанию. В следующем примере
начальные значения указаны для параметров Пар2 и Пар4:
Процедура Тест(Пар1, Пар2=5, Пар3, Пар4=8)
КонецПроцедуры
37
«1С:Предприятие.Элемент». Возможности встроенного языка
38
Глава 2. Типизация данных, переменные, константы. Передача параметров
// Теперь нет смысла параметр с значением по умолчанию ставить в середине, т. к. все равно
// нужно будет указать соответствующие им аргументы
Тест(1, 2, 3)
39
«1С:Предприятие.Элемент». Возможности встроенного языка
Процедура Метод1(Перем1)
Перем1 = 100;
КонецПроцедуры
40
Глава 2. Типизация данных, переменные, константы. Передача параметров
// Позиционная форма
Результат = Метод5(33, "!!!", Истина) //Результат: 33
//Опускание последнего параметра
Результат = Метод6(44, "+++") //Результат: 44
// Именованная форма
Результат = Метод5(Парам3 = Ложь, Парам1 = 77, Парам2 = "+++") //Результат: "+++"
//Опускание последнего параметра
Результат = Метод6(Парам2 = "+++", Парам1 = 111) //Результат: 111
;
41
«1С:Предприятие.Элемент». Возможности встроенного языка
;
метод Метод6(Парам1: Число, Парам2: Строка, Парам3 = Истина): Число|Строка
если Парам3
возврат Парам1
иначе
возврат Парам2
;
;
// Смешанная форма
Результат = Метод5(55, Парам3 = Истина, Парам2 = "+++") //Результат: 55
;
42
Глава 2. Типизация данных, переменные, константы. Передача параметров
// Смешанная форма
Результат = Метод7(77, Парам3 = "???") //Результат: "???"
;
@ИменованныеПараметры
метод Тест(Параметр: Число)
;
Перегрузка методов
В языке «1С:Предприятия» нельзя было объявить процедуру/функцию
с тем же именем, которое уже существовало у другой процедуры/
функции, даже если у них было разное количество параметров.
Теперь в языке «Элемента» можно повторно определить метод с тем
же именем, но с разным составом (типом и/или количеством) параме-
тров. Такие методы называются перегруженными.
43
«1С:Предприятие.Элемент». Возможности встроенного языка
// 1-й вариант
Результат = Метод1("Ок") //Результат: "Ок"
// 2-й вариант
Результат = Метод1(7, "Ок") //Результат: "Ок"
;
// 1-й вариант
метод Метод1(Парам1: Строка): Строка
возврат Парам1
;
// 2-й вариант
метод Метод1(Парам1: Число, Парам2: Строка): Строка
возврат Парам2
;
// 1-й вариант
Результат = Метод1("Ок") //Результат: "Ок"
// 3-й вариант
Результат = Метод1(7, "Ок") //Результат: 7
;
// 1-й вариант
метод Метод1(Парам1: Строка): Строка
возврат Парам1
;
// 3-й вариант
метод Метод1(Парам1: Число, Парам2: Строка): Число
возврат Парам1
;
44
Глава 2. Типизация данных, переменные, константы. Передача параметров
// 1-й вариант
Метод1("Ок")
// 2-й вариант
Метод1(7)
;
// 1-й вариант
метод Метод1(Парам1: Строка)
//Парам1 = "Ок"
;
// 2-й вариант
метод Метод1(Парам1: Число)
//Парам1 = 7
;
45
«1С:Предприятие.Элемент». Возможности встроенного языка
Разрешение неоднозначности
при использовании именованных аргументов
Все вышеописанные способы переопределения методов хорошо рабо-
тают для позиционных аргументов. Но с именованными аргументами
может произойти путаница, в результате будет получена ошибка неод-
нозначности.
Например, метод перегружен следующим образом:
// 1-й вариант
метод Метод1(Парам1: Строка, Парам2: Число)
// 2-й вариант
метод Метод1(Парам2: Число, Парам1: Строка)
46
Глава 2. Типизация данных, переменные, константы. Передача параметров
// 1-й вариант
метод Метод2(Парам1: Число, Парам2 = "тест", Парам3 = Истина)
// 2-й вариант
метод Метод2(Парам1: Число, Парам3: Булево)
47
«1С:Предприятие.Элемент». Возможности встроенного языка
48
ГЛАВА 3
Операции,
инструкции, типы
49
«1С:Предприятие.Элемент». Возможности встроенного языка
Операции
Арифметические операции
В языке «Элемента», так же как и в языке «1С:Предприятия», поддер-
живается стандартный набор арифметических операций: сложение
(+), вычитание (-), умножение (*), деление (/), возведение в степень
(**), смена знака (унарный минус) и получение остатка от деления (%).
В языке «Элемента» операция сложения (+) может выполняться над
следующими типами данных:
■■ Строка + Объект? = Строка;
■■ Число + Число = Число;
■■ Длительность + Длительность = Длительность;
■■ ДатаВремя + Длительность = ДатаВремя;
■■ Дата + Длительность = Дата;
■■ Время + Длительность = Время;
■■ Момент + Длительность = Момент.
Операция вычитания (-) может выполняться над следующими типами
данных:
■■ Число - Число = Число;
■■ Длительность - Длительность = Длительность;
■■ ДатаВремя - Длительность = ДатаВремя;
■■ ДатаВремя - ДатаВремя = Длительность;
■■ Дата - Длительность = Дата;
■■ Дата - Дата = Длительность;
■■ Время - Длительность = Время;
■■ Время - Время = Длительность;
■■ Момент - Длительность = Момент;
■■ Момент - Момент = Длительность.
Операция умножения (*) может выполняться над следующими типами
данных:
■■ Число * Число = Число;
■■ Длительность * Число = Длительность.
50
Глава 3. Операции, инструкции, типы
// Язык "Элемента"
пер Счетчик = 2
Счетчик += 1 //Счетчик = 3
51
«1С:Предприятие.Элемент». Возможности встроенного языка
// Язык "Элемента"
пер Счетчик = 5
Счетчик -= 2 //Счетчик = 3
// Язык "Элемента"
пер Счетчик = 5
Счетчик *= 3 //Счетчик = 15
// Язык "Элемента"
пер Счетчик = 20
Счетчик /= 4 //Счетчик = 5
Логические операции
В языке «1С:Предприятия» операция сравнения на равенство значений
обозначалась знаком одинарного равенства (=). Например:
Переменная1 = 8;
Если Переменная1 = 20 Тогда
…..
КонецЕсли;
52
Глава 3. Операции, инструкции, типы
53
«1С:Предприятие.Элемент». Возможности встроенного языка
Операция «это»
В языке «1С:Предприятия» для определения принадлежности типов
значения какому-то типу сначала с помощью функции ТипЗнч()
получался тип значения и проверялся на равенство/неравенство
с идентификатором типа, возвращаемым функцией Тип(). Например:
Значение = 56;
Если ТипЗнч(Значение) <> Тип("Строка") Тогда
Сообщить("Это не строка")
КонецЕсли;
Значение = "тест";
Если ТипЗнч(Значение) = Тип("Строка") Тогда
Сообщить("Это строка")
КонецЕсли;
54
Глава 3. Операции, инструкции, типы
Операция «как»
В языке «1С:Предприятия» составной тип значения одного рекви-
зита (который задавался на этапе конфигурирования) можно было
привести к одному или нескольким возможным типам с помощью
метода ПривестиЗначение() объекта ОписаниеТипов. Например:
ОписаниеТипа = Новый ОписаниеТипов("СправочникСсылка.Сотрудники");
Объект.Реквизит2 = ОписаниеТипа.ПривестиЗначение(Объект.Реквизит1);
55
«1С:Предприятие.Элемент». Возможности встроенного языка
Настойчивая операция
Если вы уверены, что выражение в момент выполнения программы
не может иметь значение Неопределено, то после этого выражения
можно поставить символ «!» (восклицательный знак).
Смысл этой операции заключается только в том, чтобы убрать
из описания типа тип Неопределено, если известно, что его там точно
быть не может.
Проиллюстрировать это можно на примере структур (подробнее
о структурах рассказывается в разделе «Собственные типы – Струк-
тура»).
Допустим, есть две структуры: Сотрудник и ПочтовыйАдрес.
структура Сотрудник
пер ФИО: Строка
пер Адрес: ПочтовыйАдрес?
пер Телефон: Строка?
конструктор (ФИО)
конструктор (ФИО, Адрес)
;
структура ПочтовыйАдрес
пер Страна: Строка?
пер Город: Строка
пер Улица: Строка?
пер Дом: Строка?
конструктор (Город)
;
56
Глава 3. Операции, инструкции, типы
57
«1С:Предприятие.Элемент». Возможности встроенного языка
Операция «Умолчание»
Эта операция возвращает значение правого выражения, если значение
левого выражения Неопределено.
Эту операцию можно проиллюстрировать на предыдущем примере.
Например, если адрес не задан, не нужно никого оповещать, а нужно
просто написать, что данных нет (рис. 3.5).
58
Глава 3. Операции, инструкции, типы
Инструкции
«если»
В языке «1С:Предприятия» для выполнения различных фраг-
ментов кода в зависимости от выполнения условия использовалась
инструкция Если … ИначеЕсли …Иначе … КонецЕсли.
В ветке условия Иначе располагался код, который выполнялся в том
случае, если условие ложно. В этой ветке могло проверяться другое
условие, при этом ключевое слово ИначеЕсли писалось слитно.
Например:
Если Перем1 > 5 Тогда
Перем2 = "пять";
ИначеЕсли Перем2 = "" Тогда
Перем1 = 0;
Иначе
Перем1 = 5;
Перем2 = "пять";
КонецЕсли;
«выбор»
В языке «1С:Предприятия» не было условной инструкции выбора,
какой фрагмент кода исполнять в зависимости от выполнения условия,
кроме вышеописанной инструкции Если.
59
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
Переменная1 = 8;
Если Переменная1 = 1 Тогда
Сообщить("1");
ИначеЕсли Переменная1 = 2 ИЛИ Переменная1 = 3 Тогда
Сообщить("2 или 3");
ИначеЕсли Переменная1 > 4 Тогда
Сообщить("больше 4");
Иначе
Сообщить("все остальное: " + Переменная1);
КонецЕсли;
метод МойМетод()
пер ИспользуемаяОС: ОперационныеСистемы
выбор ИспользуемаяОС
когда Windows
// делаем что-то в случае Windows
когда Linux, macOS
// делаем что-то, если macOS или Linux
;
;
60
Глава 3. Операции, инструкции, типы
Стандартные типы
В языке «1С:Предприятия» значения примитивных типов (Число,
Строка, Булево) были простыми значениями.
Теперь в языке «Элемента» это экземпляры со своими конструкто-
рами, свойствами и методами.
Строка
Экранирование символов
В языке «1С:Предприятия» для включения в строку символа "
(кавычка) необходимо было записать две кавычки подряд. Например:
Фраза = "Язык ""Элемента"""; // В переменной Фраза будет значение "Язык "Элемента""
61
«1С:Предприятие.Элемент». Возможности встроенного языка
Интерполяция строк
В языке «1С:Предприятия» интерполяция строк не поддерживалась.
Вместо этого использовалась конкатенация строк. Например:
Ответ1 = "Площадь";
Ответ2 = Строка(100*20);
сообщить(Ответ1 + " = " + Ответ2 + " кв.м."); //результат: "Площадь = 2000 кв.м."
ПОДРОБНЕЕ
Подробнее про форматирование значений типа Число и ДатаВремя
будет рассказано в разделах «Число – Форматирование»
и «ДатаВремя – Форматирование».
62
Глава 3. Операции, инструкции, типы
Многострочные литералы
В языке «1С:Предприятия» для написания многострочного литерала
использовался символ переноса строк (вертикальная черта «|»),
который писался в начале каждой подстроки. Например:
СтрокаXml =
"<note>
| <heading>Описание объектной модели</heading>
| <body>В основании всей иерархии типов лежит тип Объект.</body>
|</note>";
Методы
В языке «1С:Предприятия» значения типа Строка не имели методов,
для работы с ними использовались функции глобального контекста.
Например, чтобы заменить символы в переменной ПутьКФайлу типа
Строка, в языке «1С:Предприятия» вызывалась функция глобального
контекста СтрЗаменить():
ПутьКФайлу = СтрЗаменить(ПутьКФайлу, "\\", "/");
63
«1С:Предприятие.Элемент». Возможности встроенного языка
ПОДРОБНЕЕ
Документация:
https://1cmycloud.com/console/help/executor/2.0/docs/script/topics/script00014.html
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/String_ru.html
64
Глава 3. Операции, инструкции, типы
Число
Литералы
В языке «1С:Предприятия» значение типа Число могло быть задано
только десятичным литералом. В качестве разделителя целой
и дробной части использовалась точка. Например:
пер Объем = 100.27
пер Коэффициент = -3
Форматирование
В языке «1С:Предприятия» значение типа Число можно было отфор-
матировать с помощью функции Формат(). В форматной строке
в кавычках указывались имена параметров форматирования, знак
равенства и значение параметров форматирования, разделенные
символом двоеточия.
Например, чтобы вывести число 9.49 с длиной целой части – 2
знака (ЧЦ=2), длиной дробной части – 1 знак (ЧДЦ=1) и округлением
в большую сторону (т. е. получить 9,5), нужно написать следующую
форматную строку:
Сообщить(Формат(9.49,"ЧЦ=2 ; ЧДЦ=1")); //результат: 9,5
65
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
пер Переменная = 123.456
//1-й вариант
Сообщить(Переменная.Представление("’6.2")) //результат: "123,46"
//2-й вариант
Сообщить("${100/3|7.2}") //результат: " 33,33"
66
Глава 3. Операции, инструкции, типы
67
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
пер Переменная = 12.36
Сообщить(Переменная.Представление("4.1")) //результат: "12.4"
Сообщить(Переменная.Представление("4.4")) //результат: "12.3600"
68
Глава 3. Операции, инструкции, типы
Например:
пер Переменная = 123.57
Сообщить(Переменная.Представление("-10.1; РД =.; ОК =ВН;")) //результат: "123.5 "
Сообщить(Переменная.Представление("-10.1; РД =.; ОК =ВВ;")) //результат: "123.6 "
Сообщить(Переменная.Представление("-10.1; РД =.;")) //результат: "123.6 "
■■ "Процент"
Например:
пер Переменная = 0.52567
Сообщить(Переменная.Представление("Процент")) //результат: "52,57%"
■■ "ОснованиеХХ"
Например:
пер Переменная = 10
Сообщить(Переменная.Представление("Основание16")) //результат: "а"
69
«1С:Предприятие.Элемент». Возможности встроенного языка
Методы
В языке «1С:Предприятия» для работы со значениями типа Число
использовались функции глобального контекста. Например, чтобы
найти целую часть от числа, использовалась функция Цел():
Длина = 12345;
Километров = Цел(Длина / 1000);
Метров = Длина % 1000;
ПОДРОБНЕЕ
Документация:
https://1cmycloud.com/console/help/executor/2.0/docs/script/topics/script00012.html
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/Number_ru.html
ДатаВремя
В языке «1С:Предприятия» для работы с датой и временем использо-
валось значение типа Дата.
Теперь в языке «Элемента» существует тип ДатаВремя. Экземпляры
этого типа позволяют работать с локальными датой и временем
одновременно с помощью своих свойств и методов. В отличие
от языка «1С:Предприятия» объекты этого типа содержат время
с точностью до миллисекунд.
Литералы
В языке «1С:Предприятия» значение типа Дата можно было задать
с помощью литерала вида: 'ГГГГММДДччммсс' (строки цифр, заклю-
ченной в одинарные кавычки).
70
Глава 3. Операции, инструкции, типы
Например:
МояДата = ‘20220617201030’; //результат: 17.06.2022 20:10:30
Конструкторы
В языке «1С:Предприятия» конструкторов объектов типа Дата не было,
но можно было получить значение этого типа с помощью функции
Дата(), в которую передавались либо строка вида "ГГГГММД-
Дччммсс" (в двойных кавычках), либо отдельные составляющие даты
и времени в качестве параметров. Например:
МояДата = Дата("20220617201030"); //результат: 17.06.2022 20:10:30
МояДата = Дата(2022, 06, 17, 20, 10, 30); //результат: 17.06.2022 20:10:30
Форматирование
В языке «1С:Предприятия» значение типа Дата можно было отфор-
матировать с помощью функции Формат(). В форматной строке
в кавычках указывались имена параметров форматирования, знак
равенства и значение параметров форматирования, разделенные
символом двоеточия. Например, чтобы вывести локальную дату
71
«1С:Предприятие.Элемент». Возможности встроенного языка
72
Глава 3. Операции, инструкции, типы
Методы
В языке «1С:Предприятия» для работы со значениями типа ДатаВремя
использовались функции глобального контекста. Например, чтобы
найти начало второго дня месяца, использовались функции Нача-
лоМесяца() и КонецДня():
Дата1 = ‘202005291653’;
НачалоМесяца = НачалоМесяца(Дата1);
НачалоЗавтра = КонецДня(НачалоМесяца) + 1; //результат: 02.05.2020 0:00:00
ПОДРОБНЕЕ
Документация:
https://1cmycloud.com/console/help/executor/2.0/docs/script/topics/script00102.html
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/Time/DateTime_ru.html
73
«1С:Предприятие.Элемент». Возможности встроенного языка
Длительность
В языке «1С:Предприятия» отсутствовал тип Длительность.
Теперь в языке «Элемента» существует тип Длительность, который
предназначен для работы с интервалами времени. Этот тип хранит
количество миллисекунд, описывающих некоторый интервал времени.
Значение типа Длительность можно получить следующим способом:
■■ С помощью конструктора типа, в котором составляющие интервала
вводятся отдельными параметрами конструктора. Обязательность
указания параметров конструктора зависит от используемого
конструктора. Например:
пер Интервал = новый Длительность(5, 7, 25, 44, 111) //результат: 127:25:44.111 (в часах)
пер Интервал = новый Длительность(5, 45, 22) //результат: 05:45:22.000 (в часах)
74
Глава 3. Операции, инструкции, типы
// Результат: 7 ч. 25 м. 44 с.
// Результат: 5 д. 7 ч. 25 м. 44 с.
ПОДРОБНЕЕ
Документация:
https://1cmycloud.com/console/help/executor/2.0/docs/script/topics/script00099.html
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/Time/Duration_ru.html
Коллекции
В языке «1С:Предприятия» существовали коллекции значений:
Массив и Соответствие.
Теперь в языке «Элемента» также есть коллекции Массив и Соот-
ветствие, кроме этого, есть новая коллекция – Множество.
■■ Массив – изменяемая коллекция, представляющая собой список
элементов, без контроля уникальности. Коллекция поддерживает
доступ по индексу.
■■ Соответствие – изменяемая коллекция, представляющая собой
словарь, список пар «ключ-значение». В коллекции поддержива-
ется уникальность по ключу и доступ по индексу.
■■ Множество – изменяемая коллекция, представляющая собой список
уникальных элементов. Не поддерживается доступ по индексу.
В основе всей иерархии типов, предназначенных для работы с коллек-
циями, лежит тип Обходимое. Это значит, что элементы коллекций
можно обходить в цикле. Коллекцию Множество можно обходить
только в цикле для…из.
Ниже об этих коллекциях будет рассказано подробнее и будут пока-
заны их отличия от языка «1С:Предприятия».
75
«1С:Предприятие.Элемент». Возможности встроенного языка
Массив
Типизация
В языке «1С:Предприятия» можно было объявить массив без указания
его типа и затем добавить в массив значения разных типов. При этом
тип элементов массива никак не контролировался. Например:
Массив = Новый Массив();
Массив.Добавить(1);
Массив.Добавить(3);
Массив.Добавить("пять");
Массив.Добавить(7);
Массив.Добавить(Ложь);
76
Глава 3. Операции, инструкции, типы
Литерал
В языке «1С:Предприятия» наполнить массив элементами можно
было только с помощью методов Добавить() и Вставить(). Например:
ИменаПолей = новый Массив;
ИменаПолей.Добавить("Идентификатор");
ИменаПолей.Добавить("Размер");
ИменаПолей.Добавить("Цвет");
ИменаПолей.Вставить(3, "Вес");
Сравнение массивов
В языке «1С:Предприятия» нельзя было сравнить друг с другом
массивы целиком. Надо было обходить массивы в цикле и сравнивать
их поэлементно.
Теперь в языке «Элемента» можно сравнивать массивы на равенство
(или неравенство). Два массива являются равными, если равны их
77
«1С:Предприятие.Элемент». Возможности встроенного языка
Метод «СортироватьПо»
В языке «1С:Предприятия» нельзя было отсортировать элементы
массива.
В языке «Элемента» можно отсортировать содержимое массива
с помощью метода СортироватьПо(). Этот метод имеет первый
параметр функционального типа, в который вы должны передать
свое лямбда-выражение. Это выражение должно вернуть то свойство
элемента массива, по которому массив нужно отсортировать.
Например, можно просто отсортировать массив чисел по возрастанию
его элементов:
знч Числа =[5, 1, 7, 3]
Числа.СортироватьПо(Элемент->Элемент)
// Массив Числа содержит [1, 3, 5, 7]
78
Глава 3. Операции, инструкции, типы
метод Пример()
ПОДРОБНЕЕ
Подробнее про функциональные типы будет рассказано в 3-й главе
в разделе «Функциональные типы».
ПОДРОБНЕЕ
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/Collections/Array_ru.html
Соответствие
Литералы и конструктор
В языке «1С:Предприятия» у соответствия не было литерала. Теперь
в языке «Элемента» у соответствия есть три литерала (литерал
с указанием типов пар ключей и значений, литерал без указания типов
и литерал пустого соответствия).
Литералы в языке «Элемента» можно использовать при создании
экземпляра соответствия, в качестве аргумента при вызове метода,
а также при обходе соответствия в цикле.
Элементы соответствия заключаются в фигурные скобки («{}»). Сами
элементы являются парами «ключ-значение». Пары разделяются
запятой («,»). Значение ключа отделяется от собственно значения
двоеточием («:»). Например:
// Использование литерала при создании соответствия.
пер КурсыВалют = {"RUB": 1, "BYN": 31.01}
79
«1С:Предприятие.Элемент». Возможности встроенного языка
80
Глава 3. Операции, инструкции, типы
С1.ВставитьЕслиОтсутствует("4", 4)
Сообщить("%С1") //результат: {1-й этап: 120, 2-й этап: 3 часа, 3-й этап: 33, 4: 4}
Сравнение соответствий
В языке «1С:Предприятия» нельзя было сравнить друг с другом
соответствия целиком. Надо было обходить соответствия в цикле
и сравнивать попарно ключи и значения.
Теперь в языке «Элемента» можно сравнивать соответствия на равен-
ство (или неравенство). Два соответствия будут считаться равными,
если размеры этих соответствий совпадают, ключи одного соответ-
ствия являются ключами другого, а также попарно совпадают все
значения одинаковых ключей. При этом порядок следования пар
ключей и значений друг за другом не имеет значения. Например:
пер С1 = {"1-й этап": 120, "2-й этап": "3 часа", "3-й этап":310}
пер С2 = {"1-й этап": 120, "2-й этап": "3 часа", "3-й этап":310}
если С1 == С2
Сообщить("соответствия равны") //выводится сообщение о равенстве соответствий
иначе
Сообщить("соответствия не равны")
;
пер С1 = {"1-й этап": 120, "2-й этап": "3 часа", "3-й этап":310}
пер С2 = {"3-й этап":310, "1-й этап": 120, "2-й этап": "3 часа"}
если С1 == С2
Сообщить("соответствия равны") //выводится сообщение о равенстве соответствий
иначе
Сообщить("соответствия не равны")
;
пер С1 = {"1-й этап": 120, "2-й этап": "3 часа", "3-й этап":310}
пер С2 = {"1-й этап": 120, "2-й этап": "3 часа", "3-й этап":310, "4-й этап": 4}
если С1 == С2
Сообщить("соответствия равны")
иначе
Сообщить("соответствия не равны") //выводится сообщение о неравенстве соответствий
;
ПОДРОБНЕЕ
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/Collections/Map_ru.html
81
«1С:Предприятие.Элемент». Возможности встроенного языка
Множество
В языке «1С:Предприятия» множеств не было. Теперь в языке
«Элемента» есть коллекция, называемая Множество.
Это изменяемая коллекция, которая содержит только уникальные
элементы. Это обеспечивает быструю проверку вхождения элемента
в коллекцию. Множество позволяет хранить элементы произвольных
типов.
Литералы
Литерал в языке «Элемента» можно использовать при создании экзем-
пляра множества, в качестве аргумента при вызове метода, а также
при обходе множества в цикле. Элементы множества заключаются
в фигурные скобки («{}»). Например:
// Использование литерала при создании множества.
пер МножествоСДанными = {1, 2, 3}
82
Глава 3. Операции, инструкции, типы
83
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
пер Множество1 = {1, 2, 3, 4}
пер Множество2 = {3, 4, 5, 6}
ПОДРОБНЕЕ
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/Collections/Set_ru.html
Собственные типы
Перечисление
В языке «1С:Предприятия» можно было создать перечисление только
на этапе конфигурирования в дереве метаданных. Для этого использо-
вался объект конфигурации Перечисление. Например:
84
Глава 3. Операции, инструкции, типы
85
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
перечисление ОперационныеСистемы
Linux,
macOS,
Windows умолчание
;
метод МойМетод()
пер ИспользуемаяОС: ОперационныеСистемы
выбор ИспользуемаяОС
когда Windows
// делаем что-то в случае Windows
когда Linux, macOS
// делаем что-то, если macOS или Linux
;
;
Структура
В языке «1С:Предприятия» можно было создать экземпляр типа
Структура и тут же заполнить его ключами и значениями, в том месте,
где этот экземпляр создается. Например:
Товар = Новый Структура("Наименование, Артикул, Цена", "Холодильник", "М50", 5300);
Товар.Наименование = "Утюг";
Товар.Цена = "хорошая";
Товар = Новый Структура("Вес, Рост", 80, 180);
86
Глава 3. Операции, инструкции, типы
конструктор(Наименование)
конструктор(Наименование, Артикул, Цена)
;
метод МойМетод()
пер ПервыйТовар = новый Товар("Холодильник", "М50", 5300)
пер ВторойТовар = новый Товар("Пылесос")
ВторойТовар.Артикул = "VC20"
ВторойТовар.Цена = 5000
;
метод МойМетод()
пер Директор = новый Сотрудник("Иванов") //Директор = {ФИО=Иванов, Возраст = 33}
;
87
«1С:Предприятие.Элемент». Возможности встроенного языка
метод МойМетод()
пер Менеджер = новый Сотрудник(Возраст = 22, ФИО = "Мохов")
;
Исключения
В языке «1С:Предприятия» нельзя было создать и обработать собст-
венное исключение – событие, которое возникает во время ошибки
при исполнении кода программы.
Теперь в языке «Элемента» вы можете создать свой собственный тип
исключения на основе стандартного типа Исключение и затем исполь-
зовать его в коде приложения:
■■ создать экземпляр исключения;
■■ выбросить его;
88
Глава 3. Операции, инструкции, типы
@Сервер
статический метод МойМетод()
попытка
// безопасный код
ПрочитатьФайл("path\\file.txt")
поймать Искл1: ИсключениеНеверныйФорматФайла
// обработка исключения типа ИсключениеНеверныйФорматФайла
ОбработатьИсключение(Искл1)
;
;
@Сервер
статический метод ПрочитатьФайл(Путь: Строка)
...
// Здесь выясняется, что формат файла неправильный
// Создать экземпляр исключения и выбросить его
выбросить новый ИсключениеНеверныйФорматФайла("Неверный формат файла", "path\\file.txt")
;
@Сервер
статический метод ОбработатьИсключение(Искл: ИсключениеНеверныйФорматФайла)
//…
;
89
«1С:Предприятие.Элемент». Возможности встроенного языка
Инструкция «попытка»
В языке «1С:Предприятия» для обработки исключений использо-
валась конструкция Попытка – Исключение – КонецПопытки. Сама
обработка ошибок времени выполнения выполнялась в блоке опера-
торов Исключение – КонецПопытки. При этом не предусматривалась
возможность обработки собственных исключений. Например:
Процедура МояПроцедура()
Попытка
Файл = новый ЧтениеТекста("C:\test\test.txt");
ТекстФайла = Файл.Прочитать();
Исключение
ОбработатьИсключение(ИнформацияОбОшибке());
КонецПопытки;
КонецПроцедуры
Процедура ОбработатьИсключение(Инфо)
//…
КонецПроцедуры
90
Глава 3. Операции, инструкции, типы
@Сервер
метод МойМетод()
попытка
// безопасный код
пер Файл = новый Файл("C:\\test\\test.txt")
исп Поток = Файл.ОткрытьПотокЧтения()
пер ТекстФайла = Поток.ПрочитатьКакСтроку()
вконце
// завершающая секция
;
;
@Сервер
метод ОбработатьИсключение(Искл: ИсключениеНеверныйФорматФайла)
//…
;
91
«1С:Предприятие.Элемент». Возможности встроенного языка
Инструкция «выбросить»
В языке «1С:Предприятия» можно было вызвать исключение в тех
случаях, когда, несмотря на отработку исключительной ситуации,
необходимо прервать выполнение модуля с ошибкой времени выпол-
нения. Для этого использовался оператор ВызватьИсключение,
который мог быть помещен только в блоке операторов Исключение –
КонецПопытки. Например:
Попытка
Файл = новый ЧтениеТекста("C:\test\test.txt");
ТекстФайла = Файл.Прочитать();
Исключение
ВызватьИсключение "Файл не существует";
КонецПопытки;
92
Глава 3. Операции, инструкции, типы
метод МойМетод()
пер Файл = новый Файл("C:\\test\\test.txt")
если не Файл.Существует()
выбросить новый ИсключениеЧтенияФайла("Файл не существует", "C:\\test\\test.txt")
;
исп Поток = Файл.ОткрытьПотокЧтения()
пер ТекстФайла = Поток.ПрочитатьКакСтроку()
;
93
«1С:Предприятие.Элемент». Возможности встроенного языка
Обобщенные типы
В языке «1С:Предприятия» не использовались обобщенные типы.
Теперь в языке «Элемента» применяются обобщенные типы, чтобы
типизировать элементы коллекций. То есть при объявлении коллекций
указывается тип содержащихся в них элементов.
Зачем нужно типизировать содержимое коллекций?
Например, в языке «1С:Предприятия» было известно, что в метод
придет массив чисел. Соответственно, алгоритм этого метода
рассчитан на то, что в массиве числа. Но вдруг пришел массив,
в котором есть строки, и на этом приложение выдаст ошибку во время
выполнения.
Теперь же в языке «Элемента» в тексте программы указано, что
массив должен состоять из чисел. И если компилятор обнаружит, что
в какой-то ветке алгоритма в этом массиве появляются строки, он
сразу же выдаст ошибку еще до начала выполнения приложения.
Причем информация о типах-параметрах обобщенного типа сохраня-
ется до времени выполнения приложения.
Например, объявляется массив, состоящий из чисел:
пер МассивЧисел: Массив<Число>
94
Глава 3. Операции, инструкции, типы
95
«1С:Предприятие.Элемент». Возможности встроенного языка
// Пустое соответствие
пер ЭтапыРаботы = <Строка, Число>{:}
// Пустое множество
пер МножествоЧисел = <Число>{}
96
Глава 3. Операции, инструкции, типы
97
«1С:Предприятие.Элемент». Возможности встроенного языка
Типы-одиночки
Тип-одиночка – это тип, у которого может быть только один экзем-
пляр (соответственно, нет конструкторов). Этот тип не может быть
обобщенным.
Такие типы помечаются в синтакс-помощнике как «Одиночка».
Экземпляр типа-одиночки можно получить через синтаксис: <ИмяТи-
паОдиночки>. Можно сказать, что тип-одиночка порождает неявное
свойство глобального контекста, называющееся как тип-одиночка,
с единственным экземпляром этого типа.
Например, типы ФоновыеЗадания, Файлы – это типы-одиночки. Чтобы
получить его экземпляр, достаточно написать:
пер МенеджерФоновыхЗаданий = ФоновыеЗадания
пер МенеджерФайлов = Файлы
98
Глава 3. Операции, инструкции, типы
Функциональные типы
В языке «1С:Предприятия» не использовались функциональные типы.
Теперь в языке «Элемента» существуют функциональные типы.
Функциональный тип – это тип, значениями которого являются
методы. Функциональные типы позволяют хранить методы в пере-
менных, передавать их в другие методы как аргументы и возвращать
как результат.
Зачем нужны функциональные типы? Их появление обусловлено тем,
что язык «Элемента» стремится максимальным образом типизировать
все элементы программы и прикладного решения.
Так, например, в языке «1С:Предприятия» обработчик события
являлся просто строкой, содержащей имя процедуры. Если параметры
этой процедуры не соответствовали тому, что ожидает платформа, то
обнаружить это можно было только в момент выполнения программы.
Теперь в языке «Элемента» обработчик события – это значение функ-
ционального типа, как правило, ссылка на существующий метод.
Компилятор знает, какие параметры должны быть переданы в этот
метод, и контролирует их правильность еще на этапе написания кода.
Другой случай – когда требуется типизация функциональным типом,
это передача одного метода в другой метод. Например, в языке
«1С:Предприятия» такая ситуация возникала с описаниями опове-
щения:
Оповещение = Новый ОписаниеОповещения("ПодборЗавершение", ЭтотОбъект);
ПоказатьВопрос(Оповещение, "Подобрать номенклатуру в документ?", РежимДиалогаВопрос.ДаНет);
99
«1С:Предприятие.Элемент». Возможности встроенного языка
ПОДРОБНЕЕ
Документация:
https://1cmycloud.com/console/help/executor/2.0/docs/script/topics/script100007.html
100
Глава 3. Операции, инструкции, типы
Лямбда-выражения
Лямбда-выражение состоит из параметров, лямбда-операции -> и тела
лямбда-выражения. Например:
Операнд -> Операнд + 1
(ПервыйПараметр, ВторойПараметр) -> ПервыйПараметр * ВторойПараметр
101
«1С:Предприятие.Элемент». Возможности встроенного языка
Например:
пер Результат = СравнитьСтроки(ПерваяСтрока,
ВтораяСтрока,
(Строка1, Строка2) -> Строка1.Длина() < Строка2.Длина())
Ссылки на методы
Значение функционального типа также можно записать в виде ссылки
на существующий метод. Такая ссылка состоит из символа & (ампер-
санд), названия метода и аргументов, например:
Скрипт(1, 5, &МойМетод)
102
Глава 3. Операции, инструкции, типы
103
«1С:Предприятие.Элемент». Возможности встроенного языка
метод Пример()
Использование лямбда-выражения
метод Пример(Делимое: Число, Делитель: Число)
104
Глава 3. Операции, инструкции, типы
105
«1С:Предприятие.Элемент». Возможности встроенного языка
Регулярные выражения
В языке «1С:Предприятия» не поддерживалась работа с регулярными
выражениями.
Теперь в языке «Элемента» можно использовать так называемые
образцы, созданные на основе регулярных выражений, и применять
их к различным строкам. Таким образом, для этих строк можно нахо-
дить совпадения с образцом, разделять их на части, заменять символы
в строке в соответствии с образцом и т. д.
Для решения различных задач, использующих регулярные выражения,
в языке «Элемента» используются типы Образец и Совпадение. Для
простых случаев у типа Строка существуют методы Содержит(),
Разделить() и т. д. Ниже они будут рассмотрены на конкретных
примерах.
106
Глава 3. Операции, инструкции, типы
ПОДРОБНЕЕ
Синтакс-помощник:
https://1cmycloud.com/console/help/executor/2.0/api/executor/ru/Std/RegularExpressions/
Образец
Тип Образец предназначен для описания собственно самих регу-
лярных выражений. Экземпляр этого типа можно создать с помощью
литерала или конструктора. Например:
// Создание регулярного выражения с помощью литерала
пер РегВыр1 = ‘(\ц{2}-){2}’
// Создание регулярного выражения с помощью конструктора
пер РегВыр2 = новый Образец("(\\ц{2}-){2}")
107
«1С:Предприятие.Элемент». Возможности встроенного языка
108
Глава 3. Операции, инструкции, типы
109
«1С:Предприятие.Элемент». Возможности встроенного языка
Флаги-настройки поиска:
■■ р – включает режим регистронезависимого поиска. То есть
при выполнении операций поиска, замены, разбиения регистр
символов игнорируется;
■■ м – многострочный режим. Изменяет значение символов “^” и “$”
так, что они совпадают, соответственно, с началом и концом любой
строки, а не только с началом и концом всего текста;
■■ о – указывает однострочный режим. Изменяет значение точки
(.) так, что она соответствует любому символу (вместо любого
символа, кроме терминаторов строк).
Совпадение
Экземпляр типа Совпадение предназначен для хранения результатов
поиска соответствий подстрок некоторому образцу. Он представляет
собой описание подстроки-совпадения, полученной в результате
применения некоторого образца к некоторой строке.
Пример 1
Допустим, вам нужно найти в некоторой строке все буквенные или
цифровые символы. Для этого используется метод Образец.Най-
тиСовпадения().
Этот метод позволяет найти указанное количество или все совпадения
с образцом в строке, указанной как аргумент метода. Метод возвра-
щает массив совпадений – Массив<Совпадение>.
110
Глава 3. Операции, инструкции, типы
Пример 2
Другая распространенная задача – проверка того, что заданный
строкой номер телефона соответствует некоторому образцу. Для этого
используется метод Строка.ПолноеСовпадение().
Этот метод проверяет, подходит ли исходная строка под регулярное
выражение (Образец), которое указывается в качестве аргумента
метода. В результате возвращается Истина или Ложь.
111
«1С:Предприятие.Элемент». Возможности встроенного языка
Пример 3
Чтобы разбить строку по разделителям, содержащимся в регулярном
выражении, используется метод Строка.Разделить().
Этот метод разделяет строку на части по подстрокам, удовлетворя-
ющим образцу (Образец), который указывается в качестве аргумента
метода. В результате возвращается массив полученных частей,
исключая разделители.
В следующем примере исходная строка разбивается на слова по разде-
лителям ' ', ',', '.', '!', '?', учитывая, что между словами может стоять
несколько разделителей сразу:
пер ИсхСтрока = "Быть или не быть, вот в чём вопрос..."
пер Разбиения = ИсхСтрока.Разделить(‘([ ,.!?]+)’)
112
Глава 3. Операции, инструкции, типы
Пример 4
Чтобы заменить в строке символы, соответствующие регулярному
выражению Образец, используется метод Строка.Заменить().
Первым аргументом в метод передается образец, а вторым – строка
замены.
В строке замены могут содержаться ссылки на группы захвата,
обозначенные в образце. Каждая ссылка вида $\<Имя\> (имя группы
захвата) или $g (номер группы захвата) будут заменены на последнее
совпадение (подстроку), найденное группой захвата с таким именем
или номером.
В следующем примере все вхождения подстроки «завтра» будут
заменены на «послезавтра». $1 вставляет в строку замены первую
и единственную группу захвата, содержащую подстроку «завтра»:
пер ИсхСтрока = "Если наступит завтра, то завтра будет лучше, чем вчера."
пер Результат = ИсхСтрока.Заменить(‘(завтра)’, "после$1")
Пример 5
Существует также перегрузка этого метода:
Заменить(Образец: Образец,
Заменитель: (Совпадение)->Строка,
КоличествоЗамен: Число = 0): Строка.
113
«1С:Предприятие.Элемент». Возможности встроенного языка
114
ГЛАВА 4
Создание
прикладных
решений
в «Элементе»
115
«1С:Предприятие.Элемент». Возможности встроенного языка
Аннотации
В языке «1С:Предприятия» существовали аннотации &Перед,
&Вместо, &После. Они определяли в расширении способ перехвата
методов типовой конфигурации.
Теперь в языке «Элемента» аннотации используются гораздо шире.
Аннотация – это способ добавить к языковой конструкции инфор-
116
Глава 4. Создание прикладных решений в «Элементе»
Аннотации видимости
Аннотации видимости в языке «Элемента» определяют, в какой
области видна переменная, константа, метод, перечисление, струк-
тура или исключение:
■■ @локально – конструкция видна только в своем модуле. Это
значение по умолчанию;
■■ @подсистема – конструкция видна только в подсистеме, которой
принадлежит модуль;
■■ @проект – конструкция видна только в проекте, которому принад-
лежит модуль;
■■ @глобально – конструкция видна в других проектах.
Например:
@глобально
статический метод ПолучитьОписание(): Строка
возврат "ОК"
;
@подсистема
конст ПЛОЩАДЬ = 123
@проект
перечисление Срочность
Высокая,
Обычная,
Низкая
;
117
«1С:Предприятие.Элемент». Возможности встроенного языка
@глобально
исключение ИсключениеПриЧтенииФайла
пер ИмяФайла: Строка
;
@проект
структура Товар
знч Наименование: Строка
пер Артикул: Строка
пер Цена: Число
;
ПОДРОБНЕЕ
Об аннотациях видимости рассказывается в разделе «Модульная
разработка».
Аннотации окружения
Аннотации окружения в языке «Элемента» определяют, в каком
программном окружении исполняются метод, структура, исключение,
перечисление или константа:
■■ @Клиент. Метод или тип с такой аннотацией доступен на клиенте.
При вызове с клиента метод исполняется на клиенте;
■■ @Сервер. Метод или тип с такой аннотацией доступен
на сервере. При вызове с сервера метод исполняется на сервере.
Эта аннотация может быть использована в паре с аннотацией
118
Глава 4. Создание прикладных решений в «Элементе»
ПОДРОБНЕЕ
Об аннотациях окружения рассказывается в разделе «Исполнение
модуля».
Аннотация «ИменованныеПараметры»
Перед описанием метода или конструктора вы можете использовать
аннотацию @ИменованныеПараметры. Это значит, что запрещается
вызывать метод с позиционными аргументами (допускаются только
именованные аргументы). Например:
метод МойМетод()
Тест(Параметр = 123)
;
@ИменованныеПараметры
метод Тест(Параметр: Число)
;
ПОДРОБНЕЕ
Об именованных параметрах рассказывается в разделе «Позици-
онные и именованные аргументы».
Аннотация «ВыполнятьПриЗагрузкеДанных»
Аннотация @ВыполнятьПриЗагрузкеДанных может быть назначена
методам-обработчикам событий. Если обработчик помечен такой
аннотацией, он выполняется в режиме загрузки. Непомеченные обра-
ботчики не выполняются в режиме загрузки при обмене данными.
119
«1С:Предприятие.Элемент». Возможности встроенного языка
если не ОбменДанными.Загрузка
ОтправитьУведомления();
;
;
метод ПередЗаписью()
// Обработчик не будет выполняться в режиме загрузки
// …
;
ПОДРОБНЕЕ
О режиме загрузки данных рассказывается в разделе «Загрузка
данных».
Модульная разработка
В языке «1С:Предприятия» не было понятия «пространство имен», все
типы, порождаемые конфигурацией, находились в одном «простран-
стве имен».
Теперь в технологии «1С:Предприятие.Элемент» понятию конфи-
гурации соответствует проект. Проект в функциональном смысле
разделен на подсистемы и пакеты.
Подсистемы создают верхний уровень функциональности, они
не могут быть вложены друг в друга. Внутри подсистемы могут нахо-
диться пакеты, которые могут быть вложены друг в друга.
Каждая подсистема или пакет создает собственное пространство
имен. Элементы проекта находятся уже внутри этого пространства.
Каждый элемент проекта имеет один или несколько модулей. Стан-
дартно элементам из одной подсистемы не видны элементы из другой
подсистемы.
Чтобы элементы (языковые конструкции) одной подсистемы
использовать в другой подсистеме, нужно настроить их видимость
120
Глава 4. Создание прикладных решений в «Элементе»
@подсистема
перечисление ВидКнопки
Круглая,
Квадратная
;
@проект
метод ПолучитьОписание(): Строка
возврат новый МодульОбъекта.ОписаниеТовара()
;
121
«1С:Предприятие.Элемент». Возможности встроенного языка
122
Глава 4. Создание прикладных решений в «Элементе»
@проект
метод Пример2()
пер Валюта1 = новый КонтрольДанных::Пакет::СправочникВалюты.Объект()
123
«1С:Предприятие.Элемент». Возможности встроенного языка
метод ПередЗаписью()
...
;
Исполнение модуля
В языке «1С:Предприятия» использовались директивы компиляции
&НаКлиенте, &НаСервере, &НаКлиентеНаСервереБезКонтекста,
&НаКлиентеНаСервере, чтобы указать, в каком окружении будет
исполняться тот или иной модуль.
Теперь в языке «Элемента» аннотации окружения выполняют те же
функции, но состав аннотаций отличается.
Модуль существует в том же окружении, что и тип, к которому отно-
сится модуль: на клиенте, на сервере или и на клиенте, и на сервере.
Однако методы и типы, объявленные в модуле, могут существовать
и исполняться в разных окружениях.
124
Глава 4. Создание прикладных решений в «Элементе»
125
«1С:Предприятие.Элемент». Возможности встроенного языка
126
Глава 4. Создание прикладных решений в «Элементе»
@Сервер @ДоступноСКлиента
статический метод ДанныеДляСписка(): ПолнаяИнформация
...
возврат ПолнаяИнформация
;
127
«1С:Предприятие.Элемент». Возможности встроенного языка
Запросы
В языке «1С:Предприятия» существовал язык запросов, однако текст
запроса задавался в виде строки, поэтому узнать, какие поля каких
типов будут в результате, было нельзя. Из-за этого могли возникнуть
ошибки во время выполнения запроса.
Теперь в языке «Элемента» запрос можно задать с помощью лите-
рала, который позволяет на этапе компиляции знать, какие колонки
каких типов будут в результате, а значит, сокращает количество потен-
циальных ошибок. Параметры передаются в литерал запроса в виде
выражения, написанного прямо в литерале.
128
Глава 4. Создание прикладных решений в «Элементе»
Чтобы выйти из этой ситуации, можно явно задать имя типа строки
результата запроса. Для этого используется синтаксис В СТРУКТУРУ,
в котором указывается нужное имя. Например:
@Сервер @ДоступноСКлиента
статический метод СписокСотрудников()
129
«1С:Предприятие.Элемент». Возможности встроенного языка
@Сервер
статический метод ДругойМетод(РезультатЗапроса: РезультатЗапроса<Приложение.Сотрудник>)
//…
;
Параметры запроса
Параметры в литерал запроса передаются с помощью символа %.
После него идет либо имя переменной, либо {выражение} (вычисля-
емое выражение встроенного языка).
Например, нужно передать параметр Возраст. Это делается следу-
ющим образом:
// Установить значения параметров запроса.
пер Возраст = 40
130
Глава 4. Создание прикладных решений в «Элементе»
Загрузка данных
В языке «1С:Предприятия» использовалось свойство объекта
и набора записей ЗагрузкаДанных, в котором существовало свойство
Загрузка. Оно отключало выполнение обработчиков и проверок
при записи данных, что позволяло упростить и ускорить загрузку при
обмене данными.
Теперь в языке «Элемента» для этих же целей реализован режим
загрузки данных, в котором отключаются проверки логической
целостности и отключаются обработчики событий, выполняемые
при записи данных.
В большинстве случаев выполнение обработчиков при загрузке
данных не требуется, так как все проверки данных уже выполнены
на передающей стороне. Если все нужные элементу проекта данные
содержатся в пакете данных, то дополнительных проверок не требу-
ется. Поэтому по умолчанию все обработчики в режиме загрузки
данных отключаются.
Но есть ряд ситуаций, при которых обработчики элементов проекта
должны работать всегда. Например, когда нужно выполнить в той же
транзакции регистрацию изменений по элементу. Или когда нужно
положить элемент в исходящую очередь обмена данными, когда сам
факт записи элемента надо зарегистрировать для дальнейшей обра-
ботки.
В этих случаях обработчик, выполняющий то или иное действие,
должен выполняться и в режиме загрузки данных тоже. Для этого он
помечается аннотацией @ВыполнятьПриЗагрузкеДанных. Например:
@ВыполнятьПриЗагрузкеДанных
метод ПередЗаписью()
ОперацияВыполняемаяВсегда()
131
«1С:Предприятие.Элемент». Возможности встроенного языка
объектЗадача.Код = ОписаниеЗадачи.id
объектЗадача.Наименование = ОписаниеЗадачи.name
объектЗадача.Записать()
;
Загрузка.Закрыть() // завершает групповую операцию загрузки
если не ОбменДанными.Загрузка
ОтправитьУведомления(); // не будет выполнен в режиме загрузки
;
;
132
« ООО «1С-Паблишинг», OMOO, OMOP
« Оформление. ООО «1С-Паблишинг», OMOO, OMOP
Все права защищены.
Материалы предназначены для личного индивидуального использования приобретателем.
Запрещено тиражирование, распространение материалов, предоставление доступа по сети
к материалам без письменного разрешения правообладателей.
Разрешено копирование фрагментов программного кода для использования
в разрабатываемых прикладных решениях.
Фирма «1С»
1OPM56, Москва, а/я 64, Селезневская ул., O1.
Тел.: (495) TPT-9O-5T, факс: (495) 681-44-MT.
1c@1c.ru, http://www.1c.ru/
Издательство ООО «1С-Паблишинг»
1OT4P4, Москва, Дмитровское ш., д. 9.
Тел.: (495) 681-MO-O1, факс: (495) 681-44-MT.
publishing@1c.ru, http://books.1c.ru