Скачать презентацию Глава 3 Универсальные коллекции значений предназначены для хранения Скачать презентацию Глава 3 Универсальные коллекции значений предназначены для хранения

V8_3_Коллекции.ppt

  • Количество слайдов: 24

Глава 3. Универсальные коллекции значений предназначены для хранения временных наборов данных в течение сеанса Глава 3. Универсальные коллекции значений предназначены для хранения временных наборов данных в течение сеанса работы пользователя. Они нe являются объектами информационной базы и служат для вспомогательного сбора, группировки, анализа и обработки информации. К ним относятся: • Массив • Список значений • Таблица значений • Структура и соответствие

1. Массив К элементу массива можно обращаться по индексу через оператор [. . . 1. Массив К элементу массива можно обращаться по индексу через оператор [. . . ], причем индекс первого элемента равен 0. Создание нового массива производится следующим образом: Мас = Новый Массив; //одномерный массив без элементов Мас2 = Новый Массив(10); //одномерный массив из 10 элементов Мас. З - Новый Массив(4, 5); //массив с двумя измерениями Для добавления и удаления элементов массива можно использовать методы объекта Массив: Маc = Новый Массив; //одномерный массив без элементов Маc. Добавить("Иванов"); //элемент будет иметь индекс 0 Маc. Добавить("Петров"); //индекс 1 Маc. Добавить("Сидоров"); //индекс 2 //после вставки нового элемента Иванов и Петров будут сдвинуты ниже Мас2. Вставить(0, "Сидоров"); //удаляем Сидорова (Иванов и Петров сдвигаются обратно)

(продолжение) Мас2 - Новый Массив(4, 5); //массив с двумя измерениями Мас2[0][0] = (продолжение) Мас2 - Новый Массив(4, 5); //массив с двумя измерениями Мас2[0][0] = "Иванов"; Мас2[0][1] = "Петров"; //после вставки нового элемента Иванов и Петров будут //сдвинуты ниже Мас2[0]. Вставить(0, "Сидоров"); //следующий элемент будет относиться ко 2 -му //измерению и будет являться 6 -м (индекс = 5) //при создании массива во 2 -м измерении //было создано 5 элементов, имеющих значение // Неопределено Мас2[1]. Добавить("Петров");

Продолжение Мас2= Новый Массив(4, 5); //массив с двумя измерениями Мас2[0][0] =

Продолжение Замечание. В 1 C: Предприятии 8 в массив можно загружать данные или выгружать Продолжение Замечание. В 1 C: Предприятии 8 в массив можно загружать данные или выгружать данные из него в другие коллекции значений. Это реализуется с помощью соответствующих методов других коллекций значений. Например, объект Список. Значений имеет методы Выгрузить. Значения и Загрузить. Значения, которые работают с массивом. Аналогично действуют методы Выгрузить. Колонку и Загрузить. Колонку объекта Таблица. Значений.

2. Список значений (СЗ) Список значений это аналог одномерного массива, который предназначен в основном 2. Список значений (СЗ) Список значений это аналог одномерного массива, который предназначен в основном для решения интерфейсных задач, например, при использовании элементов управления Поле списка и Поле Выбора

(продолжение) В СЗ могут храниться значения разных типов. СЗ можно представить себе как таблицу, (продолжение) В СЗ могут храниться значения разных типов. СЗ можно представить себе как таблицу, содержащую следующие колонки: • Значение - собственно хранимое значение. • Представление - пользовательское представление значения, которое будет показано при выводе значения на экран, например, в диалоге выбора значения из списка. Если представление не указано, то оно формируется системой автоматически. • Пометка - пометка (флажок), связанная со значением. Может быть использована для отметки некоторых значений из списка. • Картинка - графическое изображение, связанное с данным значением. Создание новых списков значений производится с помощью ключевого слова Новый: сз. Сотр = Новый Список. Значений;

(продолжение) Примеры: //удалим все элементы сз. Сотр. Очистить (); //у следующего элемента индекс 0, (продолжение) Примеры: //удалим все элементы сз. Сотр. Очистить (); //у следующего элемента индекс 0, представление "Иванов Иван" сз. Сотр Добавить ( "Иванов", "Иванов Иван") ; //у следующего элемента будет индекс 1, представление // "Петров Петр» и установлена пометка сз. Сотр Добавить("Петров", "Петров Петр", Истина); //удалить 2 -й элемент, т. е. Петрова сз. Сотр. Удалить(1); //Иванов сдвигается ниже сз. Сотр. Вставить(0, "Сидоров"); //сдвинем Иванова обратно к началу сз. Сотр. Сдвинуть(1, -1);

(продолжение) Обращение к элементу СЗ: по индексу или с помощью метода Получить, например: сз. (продолжение) Обращение к элементу СЗ: по индексу или с помощью метода Получить, например: сз. Сотр[0]. Значение = "Кузнецов"; Перебор элементов списка значений - 1 -й вариант Для Каждого эл Из сз. Сотр Цикл Сообщить(Эл. Значение); Конец. Цикла; //2 -й вариант Для н = 0 По сз. Сотр. Количество()-1 Цикл Сообщить(сз. Сотр[н]. Значение) ; Конец. Цикла; Поиск в СЗ: Эл = сз. Сотр. Найти. По. Значению("Иванов"); Если Эл <> Неопределено Тогда Сообщить ("Элемент найден!"); Конец. Если;

Продолжение Разработчик может программно считывать и устанавливать пометки у элементов списка значений: сз. Сотр Продолжение Разработчик может программно считывать и устанавливать пометки у элементов списка значений: сз. Сотр = Новый Список. Значений; сз. Сотр. Добавить("Иванов", , Истина); //пометка установлена сз. Сотр. Добавить("Петров"); //пометка не установлена сз. Сотр. Добавить("Сидоров"); //пометка не установлена Выбор. Произведен = сз. Сотр. Отметить. Элементы("Укажите сотрудников"); Если Выбор. Произведен Тогда Для Каждого эл Из сз. Сотр Цикл Если эл. Пометка Тогда Сообщить("Отмечен сотрудник" + эл. Значение); Конец. Если; Конец. Цикла; Конец. Если

Продолжение Методы Выбрать. Элемент и Отметить. Элементы открывают диалоговое окно для пользователя, в котором Продолжение Методы Выбрать. Элемент и Отметить. Элементы открывают диалоговое окно для пользователя, в котором он может выбрать один элемент или расставить пометки, тем самым выбрав несколько элементов

(продолжение) При размещении в форме поля списка автоматически создается новый реквизит формы типа Список. (продолжение) При размещении в форме поля списка автоматически создается новый реквизит формы типа Список. Значений. Через этот реквизит можно управлять содержимым списка, добавлять или удалять элементы, расставлять пометки, задавать картинки. Заполнеие СЗ выполняется в модуле формы при ее открытии: сз. Сотр. Добавить("Иванов"); сз. Сотр. Добавить("Петров"); сз. Сотр. Добавить("Сидоров");

(продолжение) Заполнение значений элемента управления Поле. Выбора происходит разработчиком в Конфигураторе интерактивно с помощью (продолжение) Заполнение значений элемента управления Поле. Выбора происходит разработчиком в Конфигураторе интерактивно с помощью свойства Строки. Спискавыбора. Откры ть

3. Таблица значений (ТЗ) ТЗ состоит из строк и колонок. В отличие от списка 3. Таблица значений (ТЗ) ТЗ состоит из строк и колонок. В отличие от списка значений, ТЗ имеет структуру, которую определяет разработчик. При создании новой ТЗ в нее обычно добавляются колонки: тз. Товары = Новый Таблица. Значений; тз. Товары. Колонки. Добавить("Ссылка"); тз. Товары. Колонки. Добавить("Наименование"); тз. Товары. Колонки. Добавить("Цена"); тз. Товары. Колонки. Добавить("Количество"); При работе со строками таблицы значений необходимо понимать, что строка - это объект типа Строка. Таблицы. Значений. Поэтому добавление строк в таблицу значений производится следующим образом: //удаляем все строки из таблицы (колонки остаются) тз. Товары. Очистить();

(продолжение) Спр. Выборка = Справочники. Номенклатура. Выбрать(); Пока Спр. Выборка. Следующий() Цикл Нов. Строка (продолжение) Спр. Выборка = Справочники. Номенклатура. Выбрать(); Пока Спр. Выборка. Следующий() Цикл Нов. Строка = тз. Товары. Добавить(); Нов. Строка. Ссылка = Спр. Выборка. Ссылка; Нов. Строка. Наименование = Спр. Выборка. Наименование; Нов. Строка. Цена = Спр. Выборка. Цена; Конец. Цикла; По индексу можно удалить строку: тз. Товары. Удалить(0); //удалить 1 -ю строку с индексом 0 Перебор строк ТЗ: Для Каждого стр Из тз. Товары Цикл Сообщить(стр. Наименование); Сообщить(стр. Цена); Конец. Цикла;

(продолжение) Допускается также обращение к строке по индексу. Индексация строк ТЗ начинается с 0. (продолжение) Допускается также обращение к строке по индексу. Индексация строк ТЗ начинается с 0. Для н=0 По тз. Товары. Количество()-1 Цикл Сообщить(тз. Товары[н]. Наименование); Сообщить(тз. Товары[н]. Цена); Конец. Цикла ; Поиск: Найденная. Строка = тз. Товары. Найти(100, "Цена"); Если Найденная. Строка <> Неопределено Тогда Сообщить("Товар с такой ценой найден!" + Найденная. Строка. Наименование); Конец. Если;

(продолжение) Найти сразу несколько строк таблицы значений, удовлетворяющих заданному условию ( метод Найти. Строки (продолжение) Найти сразу несколько строк таблицы значений, удовлетворяющих заданному условию ( метод Найти. Строки возвращает массив, содержащий ссылки на найденные строки таблицы значений): Отбор = Новый Структура("Цена", 100); Массив. Строк = тз. Товары. Найти. Строки(Отбор); Сообщить("Найдено " + Массив. Строк. Количество () + " товаров с такой ценой"); Замечание. Массив, возвращаемый методом Найти. Строки, содержит строки таблицы значений (не их копии, а сами строки). При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот. ТЗ позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать: тз. Товары. Сортировать("Наименование Возр"); тз. Товары. Сортировать("Цена Убыв, Наименование Возр");

(продолжение) Группировка строк и подсчет итогов по группе реализуется методом Свернуть, Свернуть (<Колонки группировок>, (продолжение) Группировка строк и подсчет итогов по группе реализуется методом Свернуть, Свернуть (<Колонки группировок>, <Колонки суммирования>) Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются. Замечание. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений. тз. Сотр. Свернуть("Сотрудник, Год", "Доход");

(продолжение) Если исходная ТЗ вам понадобится в дальнейшем, то лучше сделать копию таблицы значений (продолжение) Если исходная ТЗ вам понадобится в дальнейшем, то лучше сделать копию таблицы значений и сворачивать уже ее: тз. Доходы. По. Годам = тз. Доходы. Сотр. Скопировать(); тз. Доходы. По. Годам. Свернуть{"Сотрудник, Год", "Доход"); ТЗ позволяет подсчитать итог по колонке числового типа, например: Всего. Доход = тз. Доходы. Сотр. Итог("Доход"); Всего. НДС = тз. Состав. Итог ("НДС"); Из ТЗ можно выгрузить целую колонку в массив и загрузить ее из массива: Массив. Цен = тз. Товары. Выгрузить. Колонку("Цена"); тз. Товары. Загрузить. Колонку("Количество", Массив. Ост атки. Товаров);

4. Структура и соответствие являются динамическими наборами данных коллекциями значений. Каждый элемент такой коллекции 4. Структура и соответствие являются динамическими наборами данных коллекциями значений. Каждый элемент такой коллекции представляет собой пару «ключ» и «значение» . Ключи структуры и соответствия уникальны, поэтому они однозначно иден тифицируют элемент коллекции.

Структура В структуре ключи могут быть только строковые и должны подчиняться правилам именования переменных. Структура В структуре ключи могут быть только строковые и должны подчиняться правилам именования переменных. В соответствиях ключи могут быть почти любого типа. Структуры часто применяются в методах объектов для указания отборов, например: Отбор = Новый Структура("Цена", 100); Выборка = Справочники. Номенклатура. Выбрать(, Отбор); Структуры можно использовать для передачи списка параметров Параметры = Новый Структура("Дата. Нач, Дата. Кон"); Параметры. Дата. Нач = Выб. Дата; Параметры. Дата. Кон = Добавить. Месяц(Выб. Дата, 1); Если Выб. Тип. Отчета <> 0 Тогда Параметры. Вставить("Тип. Отчета", Выб. Тип. Отчета); Конец. Если; гл. Сформировать. Обороты(Параметры);

(продолжение) Перебор элементов структуры: Для Каждого парам Из Параметры Цикл Имя. Параметра = парам. (продолжение) Перебор элементов структуры: Для Каждого парам Из Параметры Цикл Имя. Параметра = парам. Ключ; Значение = парам. Значение; Конец. Цикла; Можно обращаться к элементам коллекции через точку, поскольку ключи являются свойствами структуры: Нач. Дата = парам. Дата. Нач; Кон. Дата - парам. Дата. Кон;

Соответствие Для соответствия обращение через точку невозможно, так ключи соответствия могут быть самого разнообразного Соответствие Для соответствия обращение через точку невозможно, так ключи соответствия могут быть самого разнообразного типа. Создать соответствие Вид. Объекта = Новый Соответствие; Добавить элементы в соответствие Вид. Объекта. Вставить(Перечисления. Виды. Объектов. Контрагенты, Перечисления. Виды. Объектов. Контактной. Информации. Контрагенты ); Вид. Объекта. Вставить(Перечисления. Виды. Объектов. Контактные. Ли ца, Перечисления. Виды. Объектов. Контактной. Информации. Конт актные. Лица); Обратиться к элементу соответствия Возраст. Сотрудника = Возраст. Сотрудников. Получить(Сотрудник); Возраст. Сотрудника = Возраст. Сотрудников [Сотрудник];

(продолжение) Перебрать элементы соответствия Для Каждого Элемент из Замены Цикл Сообщить(Элемент. Ключ + (продолжение) Перебрать элементы соответствия Для Каждого Элемент из Замены Цикл Сообщить(Элемент. Ключ + " " + Элемент. Значение); Конец. Цикла; Удалить элемент соответствия Замены. Удалить(Удаляемый. Товар); Замены. Очистить(); Получить данные из соответствия Значение = Курсы. Валют. Документа. Получить(Управленческая. Валюта); Если Значение = Неопределено Тогда Сообщить("Данная валюта в соответствии отсутствует"); Иначе Курс = Значение["Курс"]; Кратность = Значение["Кратность"]; Конец. Если;