1.4.4.6 Иерархия объектов
Разберемся с иерархией объектов, позволяющих из языка работать с наполнением справочников.
В схеме, представленной на рис. 1.15, приведены далеко не все объекты. Их полный перечень, состав свойств, методов, событий, взаимосвязь объектов можно просмотреть в документации и в Синтакс – помощнике.
Для того, чтобы «добраться» и прочитать наименования всех элементов справочника «Номенклатура» потребуется прописать следующий код:
Рис. 1.15 Взаимосвязь объектов, обслуживающих справочники
Выборка=Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл
Для выборки и переноса всех элементов в предопределенную группу //На запись
Выборка=Справочники.Номенклатура.Выбрать(); Пока Выборка.Следующий() Цикл
Если Выборка.Ссылка=ПредопределеннаяГруппа Тогда
ПолученныйОбъект.Родитель= ПредопределеннаяГруппа; ПолученныйОбъект.Записать();
1.4.5 Работа с коллекциями значений
Универсальные коллекции значений предназначены для хранения временных наборов данных в течение сеанса работы пользователя. Они нe являются объектами информационной базы и служат для вспомогательного сбора, группировки, анализа и обработки информации.
Большинство коллекций имеют набор схожих методов и свойств, таких как «Количество()», «Индекс()», «Добавить()», «Удалить()» и т.д. В качестве свойств коллекции, как правило, выступают ее элементы. Для коллекций доступен обход элементов коллекции посредством конструкции «Для каждого … Из …Цикл». Для большинства коллекций доступно обращение к элементам коллекции с помощью оператора [<Аргумент>] (квадратные скобки). Как правило, в качестве аргумента передается индекс элемента коллекции. Индексирование элементов коллекции начинается с 0. Это означает, что индекс последнего элемента равен количеству элементов в коллекции минус 1.
1.4.5.1 Использование номеров и индексов
В языке системы 1С:Предприятие есть ряд объектов, отдельные части которых имеют нумерацию. К таким объектам, например, относится строка, символы которой имеют номер в строке, или табличный документ, строки и колонки которого имеют номер и т.п. При обращении к частям объектов обычно используется понятие «Номер». Номера начинаются с 1.
При обращении к элементам коллекций используется понятие «Индекс». Индексирование элементов коллекций начинается с 0.
1.4.5.2 Массив
Массив является универсальной коллекцией, то есть объектом, предназначенным для работы с временными наборами данных в течение сеанса работы пользователя.
Необходимость в его использовании возникает, когда требуется работать с временным набором данных. Чаще всего это промежуточные операции обработки информации: подготовка отборов, реализация поиска, подготовка группирования, передача параметров и т.д.
Массивы могут создаваться конструктором «Новый» или получаться в результате применения методов некоторых объектов.
Объекты этого типа представляют собой упорядоченную совокупность значений любого типа, в том числе и типа массив, что, в частности, позволяет организовывать многомерные массивы.
Данный объект является коллекцией значений. Для объекта доступен обход коллекции посредством оператора «Для каждого . из . Цикл». При обходе выбираются значения элементов массива. Возможно обращение к значению элемента посредством оператора [. ]. В качестве аргумента передается индекс значения.
Создание массивов чаще всего происходит посредством оператора «Новый»:
Новый Массив(<КоличествоЭлементов1>. <КоличествоЭлементовN>)
<КоличествоЭлементов1>. <КоличествоЭлементовN> — необязательный числовой параметр. Каждый параметр определяет количество элементов массива в соответствующем измерении. Может задаваться неограниченное количество параметров. Если ни один параметр не указан, создается одномерный массив с нулевым количеством элементов.
Конструктор позволяет создать массив из указанного количества элементов. Если задано несколько параметров, то будет создан массив, элементами которого являются массивы (и т.д. в зависимости от количества параметров). Фактически, конструктор позволяет создать массивы массивов, которые могут являться аналогом многомерного массива.
М = Новый Массив(4);
где «М» — имя переменной, которая будет содержать созданный объект типа «Массив». После создания, к массиву можно добавлять произвольное количество элементов. Если же мы хотим создать массив с заранее определенной размерностью, то это можно сделать так:
В результате в переменной «СозданныйМассив» будет создан массив с десятью значениями. Для такого массива можно потом сразу обращаться к любому из десяти значений (начиная с нулевого по девятое) для записи или для чтения. А при необходимости к такому массиву можно так же еще добавлять новые элементы. Первый же добавленный элемент получит индекс «10».
Массив является линейной динамической коллекцией с произвольным типом значений. Поэтому значениями массива могут выступать другие массивы, т.е. создание массива массивов и решает задачу создания многомерного массива.
Это можно делать при использовании конструктора массива:
или в процессе добавления очередных элементов к массиву:
И в том, и в другом случае мы решим задачу создания двумерного массива размерностью 2×8.
Чтение и запись значений такого массива можно производить посредством директивного указания индексов:
или при помощи метода «Получить()»:
Хотелось бы еще раз отметить, что создание массива определенной размерности конструктором ограничивает только количество возможных к заполнению значений массива, но не препятствует добавлению новых значений (в качестве которых могут выступать массивы произвольной размерности).
Рассмотрим, как выполняется добавление элементов к массиву. Допустим, массив, к которому нужно добавить значение из переменной «НовоеЗначение», называется «НашМассив».
Если нужно просто добавить очередной элемент (с индексом на единицу больше самого старшего) – действуем следующим образом:
Если нужно, чтобы новые значения добавлялись с определенным индексом, то можно использовать метод «Вставить()»:
Массив.Вставить(5, «ООО Искра»);
Чтобы определить количество элементов массива «НашМассив» можно вызвать метод «Количество()»:
Однако имейте в виду, поскольку индексация элементов массива начинается с нуля – значение переменной «Размер» будет на единицу больше значения самого старшего индекса.
Удаление отдельных элементов массива происходит с обязательным указанием индекса удаляемого элемента. Так, например, будет удален первый элемент массива:
Естественно, если указанный индекс будет выходить за границы массива – получим сообщение об ошибке.
Кроме того, необходимо учитывать, что удаление элемента «из середины» массива приведет к уменьшению на единицу индексов элементов, стоявших «после» удаленного. Массив как бы «сомкнет ряды».
Поэтому, например, один из наиболее простых вариантов удаления всех числовых элементов массива может выглядеть так:
Пока Индекс>=0 Цикл
Если ТИПЗНЧ(МассивЭлементов[Индекс])=Тип(«Число») Тогда
Сначала определяем самый старший индекс элементов массива. Цикл проверок и удалений чисел будет выполняться, пока очередное значение индекса не окажется меньше нуля. В цикле определяем тип значения элемента с текущим индексом. Если это число – удаляем данный элемент. Кроме того, в любом случае уменьшаем на единицу значение переменной «Индекс». В результате, поскольку перебор элементов массива проводится с конца, эффект «смыкания рядов» будет производиться только для уже проверенных элементов.
Если требуется полное удаление элементов из массива, операция выполняется гораздо проще:
При обращении как для записи, так и для чтения элементов массива лучше пользоваться оператором [ ], указывая индекс элемента. Помните, что индексация начинается с нуля.
Пусть в переменную «ПервоеЗначение» нужно считать значение самого первого элемента массива, а в элемент массива с индексом «9» записать значение из переменной «ДесятоеЗначение»:
Аналогичных результатов можно добиться при помощи методов «Получить()» и «Установить()»:
Замечание: в любом случае, чтобы иметь возможность обратиться к элементу массива, он должен уже существовать. Иначе получим ошибку с сообщением о том, что индекс находится за границами массива.
Если перебор элементов массива нужен для чтения данных из массива – проще всего организовывать посредством цикла перебора коллекции.
Например, чтобы вывести сообщения о каждом числе, найденном в массиве «МассивЭлементов», достаточно сделать следующее:
Для Каждого ЭлементМассива Из МассивЭлементов Цикл
Если ТипЗнч(ЭлементМассива)=Тип(«Число») Тогда
Обратите внимание, «ЭлементМассива» – это произвольное имя переменной, принимающей в себя очередное значение элемента коллекции при выполнении цикла.
Если же при переборе элементов массива нужно их редактировать, то для этого нужно работать еще и с индексами элементов. Лучше тогда использовать так называемый «цикл-счетчик».
Например, чтобы обнулить все числовые элементы массива, достаточно сделать следующее:
Для Сч=0 по МассивЭлементов.ВГраница() Цикл
Если ТипЗнч(МассивЭлементов[Сч])=Тип(«Число») Тогда
«Сч» – это переменная, принимающее очередное значение счетчика на каждом выполнении цикла. Именно из нее и будем считывать значение индекса очередного элемента массива. Значение самого большого индекса массива определяется посредством метода «ВГраница()».
Для получения копии массива в другом объекте (массиве) необходимо создать новый массив (массив–копию) конструктором. Далее в цикле перебора элементов исходного массива добавлять эти элементы в массив–копию.
Для Каждого Элемент Из ИсходныйМассив Цикл
Пример работы с массивом:
М = Новый Массив(4); Сообщить(«Количество: » +М.Количество()); Сообщить(«Наибольший индекс массива: » +М.ВГраница()); М.Удалить(2); Сообщить(«Количество после удаления: «+М.Количество()); // Этот элемент массива имеет тип Строка: М.Добавить(«Добавили строку»); // Этот элемент массива имеет тип Число: М.Добавить(123.45); Сообщить(«Количество после добавления: » +М.Количество()); // Добавим элемент по индексу, большему, чем: ВГраница(): М.Вставить(8,»Метод добавил 4 новых элемента»); Сообщить(«Количество после добавления: «+М.Количество))); // Массив может хранить разные типы данных: Сообщить(«Типы элементов: «+Символы.ПС+ » Для 3-го элемента: «+ТипЗнч(М[3])+Символы.ПС+ » Для 4-го элемента: «+ТипЗнч(М[4])+Символы.ПС+ » Для 5-го элемента: «+ТипЗнч(М[5]));
Количество: 4 Наибольший индекс массива: 3 Количество после удаления: 3 Количество после добавления: 5 Количество после добавления: 9 Типы элементов: Для 3-го элемента: Строка Для 4-го элемента: Число Для 5-го элемента: Неопределено
Универсальные коллекции значений 1С
Универсальные коллекции значений 1С — это динамические структуры с данными, которые не хранятся в системе, а формируются на время работы какого-либо алгоритма. Как правило, они служат для вспомогательного сбора, группировки, анализа и обработки информации.

Для просмотра элементов массива при отладке в конфигураторе:
- поставить точку останова;
- нажать Shift+F9 (вызвать окно «Выражение»);
- ввести наименование массива;
- выделить его и нажать F2 .
Типы универсальных коллекций 1С:
- Массив (и ФиксированныйМассив);
- Структура (и ФиксированнаяСтруктура);
- Соответствие (и ФиксированноеСоответствие);
- Список значений;
- Таблица значений;
- Дерево значений;
- COMSafeArray;
- КлючИЗначение;
- ФиксированнаяКоллекция.
Массив

Соответствие

Структура

Список значений

Таблица значений

| Коллекция | Тип ключа |
| Массив | Число (индекс, начиная с 0) |
| Структура | Строка |
| Соответствие | Любой тип |
| Список значений | Число (индекс, начиная с 0) |
Коллекции могут:
- возвращаться в виде результата какой-либо функции (функция возвращает в качестве значения универсальную коллекцию) ;
- задаваться разработчиком непосредственно в коде (обратившись к конструктору Новый и создав экземпляр класса).
Почти любую универсальную коллекцию можно создать с помощью конструктора (исключением являются табличные части, которые выступают в качестве объектов конфигурации). Конструкторы для многих универсальных коллекций являются параметризованными. Используя параметры конструктора, можно сразу задать желаемое поведение данного объекта. При этом параметры являются необязательными, разработчик может их не задавать и в дальнейшем определить поведение объекта так, как считает нужным.
Для универсальных коллекций существуют такие общие понятия, как индекс и номер:
- Каждый элемент коллекции имеет индекс. При этом индекс начинается с нуля .
- Для некоторых коллекций (преимущественно у тех, которые могут отображаться в интерфейсе пользователя) существует понятие номера строки. Номер строки начинается с единицы (например, для табличной части).
Таким образом, если мы знаем номер строки и хотим обратиться по индексу, то в качестве индекса следует использовать значение на единицу меньше номера строки.
Для всех коллекций используется обход элементов коллекции двумя способами:
-
Для ;
- циклом Для каждого . Из .
Методы большинства универсальных коллекций:
- Количество – метод, который возвращает количество элементов коллекции.
- Индекс — метод, который позволяет определить, какой индекс соответствует данной строке (т.е. текущую позицию строки в таблице). Значения индекса начинаются с нуля. Существует не у всех коллекций, а только у тех, на элементы которой можно сослаться.
В качестве примера можно привести ТаблицуЗначений . ТаблицаЗначений – это определенная коллекция строк, в строках могут содержаться разные колонки с разными типами значений. Каждая строка представляет собой самостоятельную сущность. На нее можно получить ссылку, через эту строку можно обращаться к значениям колонок в данной строке. Метод Индекс() позволяет определить, какой индекс соответствует данной строке (т.е. текущую позицию строки в таблице).
Массив
Массив — пронумерованная коллекция значений произвольного типа.
К элементу массива можно обращаться по его индексу, нумерация начинается с 0 (т.е. индекс первого элемента массива равен 0).
В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.
Для того чтобы обратиться к элементу массива МойМассив , можно использовать обращение по индексу, который указывается в квадратных скобках, или с помощью специального метода Получить() , например:
Объектная модель прикладного решения 1c. Список вопросов 1c :Профессионал Платформа 8.3
Пройдите тест, чтобы проверить Ваши знания по теме “Объектная модель прикладного решения 1c”.
Список вопросов 1c :Профессионал Платформа 8.3 Глава 6
Навигация (только номера заданий)
0 из 84 заданий окончено
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
Информация
06. Объектная модель прикладного решения
Вы уже проходили тест ранее. Вы не можете запустить его снова.
Вы должны войти или зарегистрироваться для того, чтобы начать тест.
Вы должны закончить следующие тесты, чтобы начать этот:
Результаты
Правильных ответов: 0 из 84
Вы набрали 0 из 0 баллов ( 0 )
Рубрики
- Нет рубрики 0%
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- С ответом
- С отметкой о просмотре
Какие виды программных модулей существуют “1С:Предприятие 8”?
- Общие модули, модуль сеанса, модули форм
- Модуль обычного приложения, модуль управляемого приложения, общие модули, модуль сеанса, модули объектов, модули форм
- Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, общие модули и модули форм
- Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, общие модули, модули форм, модули макетов
- Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, модуль команды, общие модули, модули менеджера, модули форм, модули объектов и модули набора записей
- Модуль приложения, модуль внешнего соединения, модуль сеанса, общие модули, модули форм, модули макетов, модули объектов и модули набора записей
Какие разделы существуют в общем модуле?
- Раздел объявления переменных, раздел процедур и функций, раздел основной программы
- Только раздел процедур и функций
- Только раздел основной программы
- Только раздел объявления переменных и раздел описания процедур функций
Модуль приложения рекомендуется использовать…
- Для определения предопределенных процедур "ПриНачалеРаботыСистемы" и т.п.
- Как место определения процедур и функций, используемых во всей конфигурации
- Как место определения предопределенных процедур, которые инициализируются при старте и окончании работы системы в режиме внешнего единения
- верны ответы 1 и 2
В общих модулях…
- Нет ограничений на описание переменных, процедур, функций
- Нельзя описывать переменные
- Нельзя описывать переменные, процедуры и функции без ключевого слова "Экспорт"
Типизация переменных во встроенном языке “1С:Предприятие
- Не жесткая, т.к. тип переменной определяется ее значением
- Не жесткая, т.к. неявным определением переменной является ее первое упоминание в левой части оператора присваивания
- Жесткая, т.к. обязательным является объявление переменной в явном виде
- Жесткая, т.к. неявным определением переменной является ее первое упоминание в левой части оператора присваивания
- Верны утверждения 1 и 2
- верны утверждения 3 и 4
В модуле приложения…
- Нет ограничений на описание переменных, процедур, функций
- Нельзя описывать переменные
- Нельзя описывать процедуры и функции без ключевого слова "Экспорт"
Какой должен быть порядок определения процедур и функций в программном модуле?
- Описание функций должно идти выше описания процедур и раздела основной программы
- Описание вызываемых процедур и функций должно идти выше вызывающих
- Порядок следования процедур и функций не имеет значения
- Порядок следования процедур и функций зависит от типа модуля
Какое высказывание о модуле приложения верно?
- Модуль приложения используется для обработки событий, связанных с началом и завершением работы системы
- Модуль приложения используется для объявления глобальных переменных
- Модуль приложения используется для объявления глобальных процедур и функций, доступных в любых других модулях
- Верны все вышеперечисленные высказывания
- Верны ответы 1 и 2
Только определения процедур и функций может содержать только следующий вид модуля:
- Модуль приложения
- Общий модуль
- Модуль сеанса
- Модуль объекта
- Верны ответы 2,3
- Верны ответы 2,4
Модуль сеанса (выберите наиболее полный правильный ответ):
- Предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы
- Не содержит экспортируемых процедур и функций
- В кластере серверов 1С:Предприятия 8 исполняется в привилегированном режиме
- Исполнение происходит после начала исполнения модуля приложения (модуля внешнего соединения)
- Верны ответы 1,3
- Верны ответы 1,2,3,4
Имя общего модуля может совпадать с именем свойства глобального контекста (например “Отчеты”):
- Может в любом случае
- Может, но только если модуль глобальный
- Может, но только если модуль не глобальный
Какие функции отсутствуют во встроенном языке “1С:Предприятие 8”:
- Функции работы со значениями типа Дата
- Функции работы со значениями типа Время
- Функции работы со значениями типа Строка
- Функции работы со значениями типа Число
- Все вышеперечисленные функции имеются во встроенном языке
Ключ может быть произвольного типа…
- У структуры
- У соответствия
- У массива
- Ни у одного из вышеперечисленных
Что произойдет, если удалить запись регистра сведений и создать новую такими же полями (измерениями, ресурсами, реквизитами)?
- Ничего, на логику программы это никак не повлияет
- У этой записи будет другой внутренний идентификатор (ссылка) и это может повлиять на логику программы
- Возникнет исключительная ситуация
Как повлияет удаление элемента справочника, который уже используется других объектах, а потом создать новый с такими же реквизитами, на поведение программы?
- Ничего, на логику программы это никак не повлияет
- У элемента будет другой внутренний идентификатор (ссылка) и это может повлиять на логику программы
- Возникнет исключительная ситуация
С помощью объекта какого типа можно перебирать элементы справочника?
- СправочникиМенеджер
- СправочникМенеджер
- СправочникВыборка
- СправочникОбъект
- СправочникСписок
В каком свойстве хранится дата документа?
- Дата
- ДатаДок
- ДатаДокумента
- Нет правильного ответа
Где располагаются процедуры-обработчики событий прикладных объектов, например, ПриЗаписи, ПередУдалением?
- В модуле формы
- В модуле объекта
- В модуле приложения
- Таких событий у прикладных объектов нет
Что такое “системные перечисления”?
- Перечень значений, заданный на этапе разработки конфигурации (ветвь Перечисления в дереве конфигурации)
- Перечень значений, заданный в платформе "1С:Предприятие 8"
- Конструкция встроенного языка, используемая разработчиком для объявления перечислимых типов данных
- Системные перечисления отсутствуют в системе "1С:Предприятие 8"
Какая коллекция из нижеперечисленных не относится к универсальным?
- Массив
- СписокЗначений
- ДеревоЗначений
- Коллекция строк табличной части документа
- Верны ответы 3 и 4
Что необходимо для того, чтобы написанная программистом процедура дополнила контекст документа (объекта типа ДокументОбъект)?
- Она должна быть определена в модуле документа
- Она должна быть определена в общем модуле
- Она должна быть определена с ключевым словом Экспорт
- Одновременно должны выполняться условия 1 и 3
- Одновременно должны выполняться условия 2 и 3
В каком свойстве хранится время документа?
- Время
- ВремяДок
- Дата
- Нет правильного ответа
Для чего предназначен объект ДокументСписок?
- Для перебора (выборки) документов средствами встроенного языка
- Для управления списком документов, выводимых в табличное поле, т.е. для решения интерфейсных задач
- Для операций над документами как объектами базы данных, создания к удаления документов
- Верны ответы 1 и 2
С какого значения начинается индексирование элементов коллекций?
- 0 (с нуля)
- 1 (с единицы)
- С начального индекса, заданного программистом при создании коллекции
- Элементы коллекций не индексируются
Объект какого типа позволяет изменить элемент справочника в базе данных?
- СправочникМенеджер
- СправочникОбъект
- СправочникСсылка
- Все перечисленные объекты
- Верны ответы 1 и 2
Какие утверждения относительно NULL справедливы?
- NULL — это литерал
- NULL — относится к примитивным типам данных
- NULL — обозначает отсутствующее значение
- Верны все перечисленные ответы
- Верны ответы 2 и 3
Какого типа является свойство глобального контекста “Справочники”?
- СправочникиМенеджер
- СправочникМенеджер
- СправочникОбъект
- СправочникВыборка
- СправочникСсылка
Какой литерал представляет значение типа “дата” по умолчанию (пустая дата)?
- 01010001
- 01010001000000
- 00010101
- 00010101000000
- Верны ответы 1 и 2
- Верны ответы 3 и 4
Как можно обратиться к менеджеру справочника “Номенклатура”?
- Спр = СоздатьОбъект("Справочник.Номенклатура")
- Спр = Справочники.Номенклатура
- Спр = Новый Справочник.Номенклатура
- Верны ответы 2 и 3
Где может размещаться процедура-обработчик события “Нажатие” кнопки диалога?
- В модуле формы
- В модуле объекта
- В общем модуле
- В модуле приложения
- Возможно либо в модуле формы, либо в модуле объекта. Определяется разработчиком
Что необходимо выполнить в процедуре “ОбработкаПроведения” в модуле документа для отмены проведения?
- СтатусВозврата(0)
- Отказ = Истина
- Отказ = Ложь
- Режим = Ложь
- РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения
Пусть Переменная1 имеет тип Дата (состав даты – “Дата”) и значение, равное 1 марта 2005 года. Чему будет равно значение выражения “Переменная1+20”?
- 21 марта 2005 г 00 ч 00 мин 00 сек
- 1 марта 2005 г 00 ч 00 мин 20 сек
- 1 марта 2005 г 20 ч 00 мин 00 сек
- 21 марта 2005 г 00 ч 00 мин 20 сек
- Возникнет ошибка преобразования типов
В каком обработчике события модуля объекта можно отказаться от записи объекта, например, элемента справочника?
- ПередЗаписью
- ПриЗаписи
- ПослеЗаписи
- В любом из перечисленных
- Справедливо 1 и 2
Какое значение будет стоять в полях записей результата запроса, для которых не найдено соответствия в другой таблице-источнике при внешнем соединении?
- Не определено
- NULL
- 0
- Пустая ссылка
При определении обработчика события на СОМ объект количество параметров в процедуре-обработчике:
- Равно количеству параметров соответствующего события объекта
- На один параметр больше, чем у соответствующего события объекта (первый параметр содержит сам СОМ объект)
- На один параметр больше, чем у соответствующего события объекта (последний параметр содержит сам СОМ объект)
- У такой процедуры не будет параметров
- Всегда один параметр (сам СОМ объект)
При определении подписки на событие количество параметров в процедуре-обработчике:
- Равно количеству параметров соответствующего обработчика события, располагаемого в модуле объекта
- На один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект)
- На один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (последний параметр содержит сам объект)
- У такой процедуры не будет параметров
- всегда один параметр (сам объект, для которого определялась подписка)
При определении обработчика события на экземпляр объекта 1С:Предприятие количество параметров в процедуре-обработчике:
- Равно количеству параметров соответствующего обработчика события. располагаемого в модуле объекта
- На один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект)
- На один параметр больше, чем у соответствующего обработчика события. располагаемого в модуле объекта (последний параметр содержит сам объект)
- У такой процедуры не будет параметров
- Всегда один параметр (сам объект, для которого определялась подписка)
При определении подписки на событие процедура – обработчик должна располагаться:
- В глобальном общем модуле
- В не глобальном общем модуле
- В модуле приложения
- В модуле объекта
При назначении обработчика события на объект (экземпляр объекта 1С:Предприятие, СОМ объект) процедура, отвечающая за отработку данного события должна быть расположена:
- Обязательно в глобальном общем модуле
- Обязательно в не глобальном общем модуле
- Обязательно в модуле приложения
- Выбор модуля не важен, в "пределах видимости"
С помощью команды “ДобавитьОбработчик” можно назначить обработчик события на:
- СОМ объект
- Экземпляр объекта 1С:Предприятие (назначать на события модуля объекта)
- Экземпляр объекта "Форма"
- Верны 1,2 ответы
- Верны 1,2,3 ответы
Какая процедура выполняет обработку события ввода документа “на основании”?
- "ОбработкаЗаполнения" с формальным параметром "Основание" произвольного типа
- "ВводНаОсновании" с формальным параметром "Основание" типа "Документ"
- "ОбработкаЗаполнения" с формальным параметром "Основание" типа "Документ"
- Ввод документа "на основании" не требует дополнительных методов обработки, т.к. это процесс полностью автоматический
Какой метод документа обеспечивает вызов события проведения документа?
- Записать(РежимЗаписиДокумента.Проведение), где Записать — метод объекта документа
- Провести(), где Провести — метод объекта документа
- Записать(РежимЗаписиДокумента.Проведение), где Записать — метод формы документа
- Провести(), где Провести — метод формы документа
Какой метод документа обеспечивает вызов события отмены проведения документа?
- Записать(РежимЗаписиДокумента.ОтменаПроведения), где Записать — метод объекта документа
- ОтменитьПроведение(), где ОтменитьПроведение — метод объекта документа
- ОтменитьПроведение(), где ОтменитьПроведение — метод формы документа
- Записать(РежимЗаписиДокумента.ОтменаПроведения), где Записать — метод формы документа
При определении подписки на событие количество таких подписок:
- Только одна
- Любое количество, процедуры обработчики должны обязательно располагаться в разных общих неглобальных модулях
- Любое количество, процедуры обработчики могут располагаться как в одном, так и в разных общих неглобальных модулях
При определении на одно событие объекта 1С:Предприятие нескольких подписок на событие, порядок вызова обработчиков следующий:
- Вызывается процедура подписки на событие, определенная последней. остальные не вызываются
- Вызывается процедура подписки на событие, определенная первой, остальные не вызываются
- Процедуры вызываются в соответствии с порядком создания подписок на событие
- Процедуры вызываются в произвольном порядке
При определении подписки на событие, в случае если в модуле объекта определен соответствующий обработчик этого же события:
- Процедура подписки на событие вызываться не будет (событие отрабатывается в модуле объекта)
- Процедура модуля объекта вызываться не будет (событие отрабатывается по подписке)
- В начале отработает процедура, расположенная в модуле объекта, затем процедура, определенная по подписке
- В начале отработает процедура, определенная по подписке, затем процедура, расположенная в модуле объекта
Подписка на событие может быть определена:
- Только для одного объекта
- Для разных объектов, но только одного вида (например, для нескольких справочников или для нескольких документов)
- Для разных объектов
При определении подписки на событие для разных объектов перечень показываемых событий формируется по принципу:
- Должно совпадать количество параметров события
- Должно совпадать имя события
- Должны выполняться оба вышеприведенных требования
Процедура, используемая подпиской на событие, должна располагаться в модуле с установленными (взведенными) флажками:
- Клиент
- Сервер
- Внешнее соединение
- Обязательно Клиент и Сервер
- Обязательно Клиент, Сервер и Внешнее соединение
- Определяется разработчиком исходя из практической задачи
Пессимистическая блокировка объекта (метод Заблокировать()):
- Не позволяет программно менять данные объекта
- Позволяет программно менять данные объекта, но только если он заблокирован через ту же переменную, через которую и будет производиться изменение данных объекта
- Блокировка объекта не мешает программно менять данные объекта
Пессимистическая блокировка объекта (метод Заблокировать()):
- Не позволяет интерактивно (в основной форме объекта) менять данные объекта
- Позволяет интерактивно (в основной форме объекта) менять данные объекта, но только если он заблокирован через какую-либо другую форму
- Блокировка объекта не мешает интерактивно (в основной форме объекта) менять данные объекта
Тип анализа “Кластерный анализ” подразумевает:
- Поиск часто встречаемых вместе групп объектов или значений характеристик
- Поиск цепочек событий
- Построение иерархической структуры классифицирующих правил
- Разделение исходного набора на группы объектов
- Получение общестатистических показателей в виде дерева
Тип анализа “Дерево решений” подразумевает:
- Поиск часто встречаемых вместе групп объектов или значений характеристик
- Поиск цепочек событий
- Построение иерархической структуры классифицирующих правил
- Разделение исходного набора на группы объектов
- Получение общестатистических показателей в виде дерева
Тип анализа “Поиск ассоциаций” подразумевает:
- Поиск часто встречаемых вместе групп объектов или значений характеристик
- Поиск цепочек событий
- Построение иерархической структуры классифицирующих правил
- Разделение исходного набора на группы объектов
- Получение общестатистических показателей в виде дерева
Тип анализа “Поиск последовательностей” подразумевает:
- Поиск часто встречаемых вместе групп объектов или значений характеристик
- Поиск цепочек событий
- Построение иерархической структуры классифицирующих правил
- Разделение исходного набора на группы объектов
- Выявления последовательно расположенных объектов
Объект МодельПрогноза создается:
- С использованием конструктора "Новый"
- При обращении к одноименному свойству глобального контекста
- Из результата анализа данных
Алгоритмы в модуле управляемой формы могут исполняться?
- Только на клиентском компьютере
- Только на сервере
- Место исполнения определяется настройками модуля
- Место определяется для каждой процедуры и функции модуля
- Возможность зависит от объектов встроенного языка
Алгоритмы в модуле обычной формы могут исполняться?
- Только на клиентском компьютере
- Только на сервере
- Возможность определяется настройками модуля
- Возможность определяется для каждой процедуры и функции модуля
- Обычный параметр существует только при открытии формы, ключевой — только при закрытии формы
Существует ли в 1С:Предприятии 8 возможность настроить конкретное прикладное решение на использование региональных настроек чисел, дат и времени?
- Да, в региональных установках информационной базы можно настроить эти параметры
- В региональных установках информационной базы можно настроить только формат даты и времени
- В региональных установках информационной базы можно настроить только формат даты и чисел
- В 1С предприятие 8 такой возможности не существует
К чему приведет изменение кода языка в свойстве “Код языка”, если уже введены тексты в свойствах “Синоним” или “Заголовок” на этом языке?
- К "потере" введенных текстов без возможности "восстановления"
- К "потере" введенных текстов с возможностью "восстановления" при указании прежнего значения кода языка
- К потере данных это действие не приведет, введенные тексты будут соответствовать языку с новым кодом
Какой режим используется для выполнения задач локализации (создания интерфейса на другом языке)?
- "Редактирование текстов интерфейса"
- Никакой специальный режим не требуется
- "Редактирование интерфейса"
- Нет правильного ответа
При необходимости использования англоязычной транскрипции встроенного языка 1С:Предприятие 8 в уже существующей конфигурации можно:
- Использовать англоязычные варианты только для конструкций встроенного языка
- Использовать англоязычные варианты встроенных процедур/функций. операторных скобок и языковых конструкций
- Использовать англоязычные варианты встроенных функций, операторных скобок и языковых конструкций, а также переводные имена вызываемых процедур и функций существующей конфигурации
- Использовать англоязычные варианты встроенных процедур и функций, операторных скобок, языковых конструкций и англоязычных синонимов идентификаторов объектов и их реквизитов
Если в региональных установках информационной базы ни одно из свойств установлено не будет, тогда…
- Язык и форматы отображения чисел, даты и времени будут определяться настройками операционной системы
- Язык и форматы отображения чисел, даты и времени будут определяться настройками технологической платформы 1С
- Нет правильного ответа
Что такое локализация?
- Адаптация программы под конкретные национальные требования
- Перевод программы на другой язык
- Ограничение на доступ к базам для различных категорий пользователей
Для чего применяется код локализации?
- Для указания региональных установок информационной базы
- В форматных строках во встроенном языке для упрощения адаптации решений к конкретным региональным установка
- Для идентификации программного продукта
- Верны ответы 1 и 2
- Верны ответы 1 и 3
На что влияют региональные установки информационной базы?
- На формат отображения чисел и дат
- На интерфейс 1С:Предприятие
- На порядок сортировки строк в базе данных
- Верно все вышеперечисленное
- Верны варианты 1 и 3
Создание многоязыковых прикладных решений…
- Возможно только в специальной версии программы 1С:Предприятие 8
- В 1С:Предприятие 8 невозможно, так как программный продукт уже локализован
- Возможно благодаря тому, что существует возможность создания нескольких языков в конфигурации и локализованных интерфейсов платформы
В каком формате хранятся тексты конфигурации и базы данных в системе 1С:Предприятие?
- Тексты конфигурации и базы данных хранятся в формате UNICODE
- В зависимости от настроек, заданных при создании информационной базы
- Нет правильного ответа
С какой целью тексты конфигурации и базы данных хранятся в формате UNICODE?
- Формат UNICODE обеспечивает неизменность (независимость от программной платформы операционной системы) представления информации
- Формат UNICODE позволяет поддерживать различные языки в системе 1С:Предприятие
- Нет правильного ответа
Механизмы интернационализации, заложены в…
- Технологическую платформу 1С:Предприятия
- Прикладные решения
- Верны ответы 1 и 2
- Нет правильного ответа
Что такое код локализации?
- Строка, состоящая из кода языка и кода страны и идентифицирующая некоторый регион мира
- Код программного продукта (указывается на регистрационной анкете, документации из комплекта поставки)
- Параметр форматирования строки для преобразования
- Нет правильного ответа
Верно ли что в 1С:Предприятие 8 любая текстовая информация может включать одновременно символы различных языков?
- Да, так как все тексты конфигурации и базы данных хранятся в формате UNICODE
- В зависимости от настроек, заданных при создании информационной базы
- Только если это предусмотрено конфигурацией
- Нет
Для чего предназначен объект конфигурации “Язык”?
- Для создания интерфейса программы на разных языках
- Для создания текстовых документов на разных языках
- Такого объекта в 1С Предприятие 8 не существует
Каким образом можно сменить язык просмотра (редактирования) конфигурации?
- С помощью кнопки выбора языка, расположенной в строке состояния справа от кнопки "NUM"
- Через пункт меню "Конфигурация — Язык редактирования конфигурации"
- В 1С:Предприятие такой возможности не существует
- Верны ответы 1 и 2
Какое написание имеют операторы встроенного языка?
- Только русское написание
- Только английское написание
- Русское и английское написание
- В зависимости от настроек конфигуратора
Возможно ли использование в одном исходном тексте операторов встроенного языка в русском и английском написании?
- Только при специальных настройках конфигуратора
- Да, для этого не требуется изменения каких-либо настроек конфигуратора
- Нет, так как вариант встроенного языка задается в свойствах конфигурации
С какой целью используется встроенный язык?
- Для определения интерфейса программы по умолчанию
- Для описания (на стадии разработки конфигурации) алгоритмов функционирования прикладной задачи
- Нет правильного ответа
Какое написание имеют функции встроенного языка?
- Только русское написание
- Только английское написание
- Русское и английское написание
- В зависимости от настроек конфигуратора
Что обозначает параметр Л(L) в форматной строке функции форматирования ЧислоПрописью()?
- Признак "дробную часть выводить числом/прописью"
- Количество знаков после запятой
- Код локализации
У регистра сведений установлен режим записи “Независимый”. Редактирование осуществляется в диалоге, ни одна из форм регистра не определена. При попытке интерактивного добавления в него “Записи” со значениями измерений, комбинация которых уже прописана в регистре:
- На экран выводится предупреждение, но запись все равно записывается в базу данных
- Возникает ошибочная ситуация
- Происходит замещение записи
- Интерактивная запись в такой регистр невозможна
При проведении документа по какому-либо регистру в случае, если у документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант “Автоматический и управляемый”), то такое проведение приведет:
- К возникновению ошибочной ситуации
- Вся транзакция будет выполнена в автоматическом режиме
- Вся транзакция будет выполнена в управляемом режиме
При проведении документа по какому-либо регистру в случае, если у документа установлен управляемый режим управления транзакционными блокировками, а у регистра автоматический (в свойствах конфигурации используется вариант “Автоматический и управляемый”), то такое проведение приведет:
- К возникновению ошибочной ситуации
- Вся транзакция будет выполнена в автоматическом режиме
- Вся транзакция будет выполнена в управляемом режиме
При проведении документа по какому-либо регистру в случае, если у документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант “Управляемый”), то такое проведение приведет:
Python: коллекции, часть 2/4: индексирование, срезы, сортировка
В данной статье мы продолжим изучать общие принципы работы со стандартными коллекциями (модуль collections в ней не рассматривается) Python.
Для кого: для изучающих Python и уже имеющих начальное представление о коллекциях и работе с ними, желающих систематизировать и углубить свои знания, сложить их в целостную картину.
ОГЛАВЛЕНИЕ:
- Индексирование
1. Индексирование
1.1 Индексированные коллекции
Рассмотрим индексированные коллекции (их еще называют последовательности — sequences) — список (list), кортеж (tuple), строку (string).
Под индексированностью имеется ввиду, что элементы коллекции располагаются в определённом порядке, каждый элемент имеет свой индекс от 0 (то есть первый по счёту элемент имеет индекс не 1, а 0) до индекса на единицу меньшего длины коллекции (т.е. len(mycollection)-1).
1.2 Получение значения по индексу
Для всех индексированных коллекций можно получить значение элемента по его индексу в квадратных скобках. Причем, можно задавать отрицательный индекс, это значит, что будем находить элемент с конца считая обратном порядке.
При задании отрицательного индекса, последний элемент имеет индекс -1, предпоследний -2 и так далее до первого элемента индекс которого равен значению длины коллекции с отрицательным знаком, то есть (-len(mycollection).
| элементы | a | b | c | d | e |
|---|---|---|---|---|---|
| индексы | 0 (-5) | 1 (-4) | 2 (-3) | 3 (-2) | 4 (-1) |
Наши коллекции могут иметь несколько уровней вложенности, как список списков в примере ниже. Для перехода на уровень глубже ставится вторая пара квадратных скобок и так далее.
1.3 Изменение элемента списка по индексу
Поскольку кортежи и строки у нас неизменяемые коллекции, то по индексу мы можем только брать элементы, но не менять их:
А вот для списка, если взятие элемента по индексу располагается в левой части выражения, а далее идёт оператор присваивания =, то мы задаём новое значение элементу с этим индексом.
UPD: Примечание: Для такого присвоения, элемент уже должен существовать в списке, нельзя таким образом добавить элемент на несуществующий индекс.
2 Срезы
2.1 Синтаксис среза
Очень часто, надо получить не один какой-то элемент, а некоторый их набор ограниченный определенными простыми правилами — например первые 5 или последние три, или каждый второй элемент — в таких задачах, вместо перебора в цикле намного удобнее использовать так называемый срез (slice, slicing).
Следует помнить, что взяв элемент по индексу или срезом (slice) мы не как не меняем исходную коллекцию, мы просто скопировали ее часть для дальнейшего использования (например добавления в другую коллекцию, вывода на печать, каких-то вычислений). Поскольку сама коллекция не меняется — это применимо как к изменяемым (список) так и к неизменяемым (строка, кортеж) последовательностям.
Синтаксис среза похож на таковой для индексации, но в квадратных скобках вместо одного значения указывается 2-3 через двоеточие:
Особенности среза:
- Отрицательные значения старта и стопа означают, что считать надо не с начала, а с конца коллекции.
- Отрицательное значение шага — перебор ведём в обратном порядке справа налево.
- Если не указан старт [:stop:step]— начинаем с самого края коллекции, то есть с первого элемента (включая его), если шаг положительный или с последнего (включая его), если шаг отрицательный (и соответственно перебор идет от конца к началу).
- Если не указан стоп [start:: step] — идем до самого края коллекции, то есть до последнего элемента (включая его), если шаг положительный или до первого элемента (включая его), если шаг отрицательный (и соответственно перебор идет от конца к началу).
- step = 1, то есть последовательный перебор слева направо указывать не обязательно — это значение шага по умолчанию. В таком случае достаточно указать [start:stop]
- Можно сделать даже так [:] — это значит взять коллекцию целиком
- ВАЖНО: При срезе, первый индекс входит в выборку, а второй нет!
То есть от старта включительно, до стопа, где стоп не включается в результат. Математически это можно было бы записать как [start, stop) или пояснить вот таким правилом:
Примеры срезов в виде таблицы:

2.2. Именованные срезы
Чтобы избавится от «магических констант», особенно в случае, когда один и тот же срез надо применять многократно, можно задать константы с именованными срезами с пользованием специальной функции slice()()
Примечание: Nonе соответствует опущенному значению по-умолчанию. То есть [:2] становится slice(None, 2), а [1::2] становится slice(1, None, 2).
2.3 Изменение списка срезом
Важный момент, на котором не всегда заостряется внимание — с помощью среза можно не только получать копию коллекции, но в случае списка можно также менять значения элементов, удалять и добавлять новые.
Проиллюстрируем это на примерах ниже:
-
Даже если хотим добавить один элемент, необходимо передавать итерируемый объект, иначе будет ошибка TypeError: can only assign an iterable
2.4 Выход за границы индекса
Обращение по индексу по сути является частным случаем среза, когда мы обращаемся только к одному элементу, а не диапазону. Но есть очень важное отличие в обработке ситуации с отсутствующим элементом с искомым индексом.
Обращение к несуществующему индексу коллекции вызывает ошибку:
А в случае выхода границ среза за границы коллекции никакой ошибки не происходит:
Примечание: Для тех случаев, когда функционала срезов недостаточно и требуются более сложные выборки, можно воспользоваться синтаксисом выражений-генераторов, рассмотрению которых посвещена 4 статья цикла.
3 Сортировка элементов коллекции
Сортировка элементов коллекции важная и востребованная функция, постоянно встречающаяся в обычных задачах. Тут есть несколько особенностей, на которых не всегда заостряется внимание, но которые очень важны.
3.1 Функция sorted()
Мы может использовать функцию sorted() для вывода списка сортированных элементов любой коллекции для последующее обработки или вывода.
- функция не меняет исходную коллекцию, а возвращает новый список из ее элементов;
- не зависимо от типа исходной коллекции, вернётся список (list) ее элементов;
- поскольку она не меняет исходную коллекцию, ее можно применять к неизменяемым коллекциям;
- Поскольку при сортировке возвращаемых элементов нам не важно, был ли у элемента некий индекс в исходной коллекции, можно применять к неиндексированным коллекциям;
- Имеет дополнительные не обязательные аргументы:
reverse=True — сортировка в обратном порядке
key=funcname (начиная с Python 2.4) — сортировка с помощью специальной функции funcname, она может быть как стандартной функцией Python, так и специально написанной вами для данной задачи функцией и лямбдой.
Пример сортировки списка строк по длине len() каждого элемента:
3.2 Функция reversed()
Функция reversed() применяется для последовательностей и работает по другому:
- возвращает генератор списка, а не сам список;
- если нужно получить не генератор, а готовый список, результат можно обернуть в list() или же вместо reversed() воспользоваться срезом [: :-1];
- она не сортирует элементы, а возвращает их в обратном порядке, то есть читает с конца списка;
- из предыдущего пункта понятно, что если у нас коллекция неиндексированная — мы не можем вывести её элементы в обратном порядке и эта функция к таким коллекциям не применима — получим «TypeError: argument to reversed() must be a sequence»;
- не позволяет использовать дополнительные аргументы — будет ошибка «TypeError: reversed() does not take keyword arguments».
3.3 Методы списка .sort() и .reverse()
У списка (и только у него) есть особые методы .sort() и .reverse() которые делают тоже самое, что соответствующие функции sorted() и reversed(), но при этом:
- Меняют сам исходный список, а не генерируют новый;
- Возвращают None, а не новый список;
- поддерживают те же дополнительные аргументы;
- в них не надо передавать сам список первым параметром, более того, если это сделать — будет ошибка — не верное количество аргументов.
Обратите внимание: Частая ошибка начинающих, которая не является ошибкой для интерпретатора, но приводит не к тому результату, который хотят получить.
3.4 Особенности сортировки словаря
В сортировке словаря есть свои особенности, вызванные тем, что элемент словаря — это пара ключ: значение.
UPD: Так же, не забываем, что говоря о сортировке словаря, мы имеем ввиду сортировку полученных из словаря данных для вывода или сохранения в индексированную коллекцию. Сохранить данные сортированными в самом стандартном словаре не получится, они в нем, как и других неиндексированных коллекциях находятся в произвольном порядке.
- sorted(my_dict) — когда мы передаем в функцию сортировки словарь без вызова его дополнительных методов — идёт перебор только ключей, сортированный список ключей нам и возвращается;
- sorted(my_dict.keys()) — тот же результат, что в предыдущем примере, но прописанный более явно;
- sorted(my_dict.items()) — возвращается сортированный список кортежей (ключ, значение), сортированных по ключу;
- sorted(my_dict.values()) — возвращается сортированный список значений
Отдельные сложности может вызвать сортировка словаря не по ключам, а по значениям, если нам не просто нужен список значений, и именно выводить пары в порядке сортировки по значению.
Для решения этой задачи можно в качестве специальной функции сортировки передавать lambda-функцию lambda x: x[1] которая из получаемых на каждом этапе кортежей (ключ, значение) будет брать для сортировки второй элемент кортежа.
UPD от ShashkovS: 3.5 Дополнительная информация по использованию параметра key при сортировке
Допустим, у нас есть список кортежей названий деталей и их стоимостей.
Нам нужно отсортировать его сначала по названию деталей, а одинаковые детали по убыванию цены.
Перед тем, как сравнивать два элемента списка к ним применялась функция prepare_item, которая меняла знак у стоимости (функция применяется ровно по одному разу к каждому элементу. В результате при одинаковом первом значении сортировка по второму происходила в обратном порядке.
Чтобы не плодить утилитарные функции, вместо использования сторонней функции, того же эффекта можно добиться с использованием лямбда-функции.
-
(на английском). — еще один комментарий с детальным примером ShashkovS к данной статье
UPD от ShashkovS: 3.6 Устойчивость сортировки
Допустим данные нужно отсортировать сначала по столбцу А по возрастанию, затем по столбцу B по убыванию, и наконец по столбцу C снова по возрастанию.
Если данные в столбце B числовые, то при помощи подходящей функции в key можно поменять знак у элементов B, что приведёт к необходимому результату.
А если все данные текстовые? Тут есть такая возможность.
Дело в том, что сортировка sort в Python устойчивая (начиная с Python 2.2), то есть она не меняет порядок «одинаковых» элементов.