V8_3_Коллекции.ppt
- Количество слайдов: 24
Глава 3. Универсальные коллекции значений предназначены для хранения временных наборов данных в течение сеанса работы пользователя. Они нe являются объектами информационной базы и служат для вспомогательного сбора, группировки, анализа и обработки информации. К ним относятся: • Массив • Список значений • Таблица значений • Структура и соответствие
1. Массив К элементу массива можно обращаться по индексу через оператор [. . . ], причем индекс первого элемента равен 0. Создание нового массива производится следующим образом: Мас = Новый Массив; //одномерный массив без элементов Мас2 = Новый Массив(10); //одномерный массив из 10 элементов Мас. З - Новый Массив(4, 5); //массив с двумя измерениями Для добавления и удаления элементов массива можно использовать методы объекта Массив: Маc = Новый Массив; //одномерный массив без элементов Маc. Добавить("Иванов"); //элемент будет иметь индекс 0 Маc. Добавить("Петров"); //индекс 1 Маc. Добавить("Сидоров"); //индекс 2 //после вставки нового элемента Иванов и Петров будут сдвинуты ниже Мас2. Вставить(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] = "Иванов"; Мас2[0][1] = "Петров"; //после вставки нового эл. Иванов и Петров будут сдвинуты ниже Мас2[0]. Вставить(0, "Сидоров"); Перебор элементов массива возможен с использованием оператора [. . . ] или цикла «Для Каждого» : //1 -й вариант Для Каждого эл Из Мас Цикл Сообщить(эл); Конец. Цикла; //2 -й вариант Для н = 0 По Мас. ВГраница() Цикл Сообщить(Мас[н]); Конец. Цикла;
Продолжение Замечание. В 1 C: Предприятии 8 в массив можно загружать данные или выгружать данные из него в другие коллекции значений. Это реализуется с помощью соответствующих методов других коллекций значений. Например, объект Список. Значений имеет методы Выгрузить. Значения и Загрузить. Значения, которые работают с массивом. Аналогично действуют методы Выгрузить. Колонку и Загрузить. Колонку объекта Таблица. Значений.
2. Список значений (СЗ) Список значений это аналог одномерного массива, который предназначен в основном для решения интерфейсных задач, например, при использовании элементов управления Поле списка и Поле Выбора
(продолжение) В СЗ могут храниться значения разных типов. СЗ можно представить себе как таблицу, содержащую следующие колонки: • Значение - собственно хранимое значение. • Представление - пользовательское представление значения, которое будет показано при выводе значения на экран, например, в диалоге выбора значения из списка. Если представление не указано, то оно формируется системой автоматически. • Пометка - пометка (флажок), связанная со значением. Может быть использована для отметки некоторых значений из списка. • Картинка - графическое изображение, связанное с данным значением. Создание новых списков значений производится с помощью ключевого слова Новый: сз. Сотр = Новый Список. Значений;
(продолжение) Примеры: //удалим все элементы сз. Сотр. Очистить (); //у следующего элемента индекс 0, представление "Иванов Иван" сз. Сотр Добавить ( "Иванов", "Иванов Иван") ; //у следующего элемента будет индекс 1, представление // "Петров Петр» и установлена пометка сз. Сотр Добавить("Петров", "Петров Петр", Истина); //удалить 2 -й элемент, т. е. Петрова сз. Сотр. Удалить(1); //Иванов сдвигается ниже сз. Сотр. Вставить(0, "Сидоров"); //сдвинем Иванова обратно к началу сз. Сотр. Сдвинуть(1, -1);
(продолжение) Обращение к элементу СЗ: по индексу или с помощью метода Получить, например: сз. Сотр[0]. Значение = "Кузнецов"; Перебор элементов списка значений - 1 -й вариант Для Каждого эл Из сз. Сотр Цикл Сообщить(Эл. Значение); Конец. Цикла; //2 -й вариант Для н = 0 По сз. Сотр. Количество()-1 Цикл Сообщить(сз. Сотр[н]. Значение) ; Конец. Цикла; Поиск в СЗ: Эл = сз. Сотр. Найти. По. Значению("Иванов"); Если Эл <> Неопределено Тогда Сообщить ("Элемент найден!"); Конец. Если;
Продолжение Разработчик может программно считывать и устанавливать пометки у элементов списка значений: сз. Сотр = Новый Список. Значений; сз. Сотр. Добавить("Иванов", , Истина); //пометка установлена сз. Сотр. Добавить("Петров"); //пометка не установлена сз. Сотр. Добавить("Сидоров"); //пометка не установлена Выбор. Произведен = сз. Сотр. Отметить. Элементы("Укажите сотрудников"); Если Выбор. Произведен Тогда Для Каждого эл Из сз. Сотр Цикл Если эл. Пометка Тогда Сообщить("Отмечен сотрудник" + эл. Значение); Конец. Если; Конец. Цикла; Конец. Если
Продолжение Методы Выбрать. Элемент и Отметить. Элементы открывают диалоговое окно для пользователя, в котором он может выбрать один элемент или расставить пометки, тем самым выбрав несколько элементов
(продолжение) При размещении в форме поля списка автоматически создается новый реквизит формы типа Список. Значений. Через этот реквизит можно управлять содержимым списка, добавлять или удалять элементы, расставлять пометки, задавать картинки. Заполнеие СЗ выполняется в модуле формы при ее открытии: сз. Сотр. Добавить("Иванов"); сз. Сотр. Добавить("Петров"); сз. Сотр. Добавить("Сидоров");
(продолжение) Заполнение значений элемента управления Поле. Выбора происходит разработчиком в Конфигураторе интерактивно с помощью свойства Строки. Спискавыбора. Откры ть
3. Таблица значений (ТЗ) ТЗ состоит из строк и колонок. В отличие от списка значений, ТЗ имеет структуру, которую определяет разработчик. При создании новой ТЗ в нее обычно добавляются колонки: тз. Товары = Новый Таблица. Значений; тз. Товары. Колонки. Добавить("Ссылка"); тз. Товары. Колонки. Добавить("Наименование"); тз. Товары. Колонки. Добавить("Цена"); тз. Товары. Колонки. Добавить("Количество"); При работе со строками таблицы значений необходимо понимать, что строка - это объект типа Строка. Таблицы. Значений. Поэтому добавление строк в таблицу значений производится следующим образом: //удаляем все строки из таблицы (колонки остаются) тз. Товары. Очистить();
(продолжение) Спр. Выборка = Справочники. Номенклатура. Выбрать(); Пока Спр. Выборка. Следующий() Цикл Нов. Строка = тз. Товары. Добавить(); Нов. Строка. Ссылка = Спр. Выборка. Ссылка; Нов. Строка. Наименование = Спр. Выборка. Наименование; Нов. Строка. Цена = Спр. Выборка. Цена; Конец. Цикла; По индексу можно удалить строку: тз. Товары. Удалить(0); //удалить 1 -ю строку с индексом 0 Перебор строк ТЗ: Для Каждого стр Из тз. Товары Цикл Сообщить(стр. Наименование); Сообщить(стр. Цена); Конец. Цикла;
(продолжение) Допускается также обращение к строке по индексу. Индексация строк ТЗ начинается с 0. Для н=0 По тз. Товары. Количество()-1 Цикл Сообщить(тз. Товары[н]. Наименование); Сообщить(тз. Товары[н]. Цена); Конец. Цикла ; Поиск: Найденная. Строка = тз. Товары. Найти(100, "Цена"); Если Найденная. Строка <> Неопределено Тогда Сообщить("Товар с такой ценой найден!" + Найденная. Строка. Наименование); Конец. Если;
(продолжение) Найти сразу несколько строк таблицы значений, удовлетворяющих заданному условию ( метод Найти. Строки возвращает массив, содержащий ссылки на найденные строки таблицы значений): Отбор = Новый Структура("Цена", 100); Массив. Строк = тз. Товары. Найти. Строки(Отбор); Сообщить("Найдено " + Массив. Строк. Количество () + " товаров с такой ценой"); Замечание. Массив, возвращаемый методом Найти. Строки, содержит строки таблицы значений (не их копии, а сами строки). При изменении какой-либо строки в таблице значений это отразится в массиве, и наоборот. ТЗ позволяет упорядочить содержащиеся в ней данные, для чего предназначен метод Сортировать: тз. Товары. Сортировать("Наименование Возр"); тз. Товары. Сортировать("Цена Убыв, Наименование Возр");
(продолжение) Группировка строк и подсчет итогов по группе реализуется методом Свернуть, Свернуть (<Колонки группировок>, <Колонки суммирования>) Строки, у которых совпадают значения в колонках, указанных в первом параметре, сворачиваются в одну строку. Значения по этим строкам, хранящиеся в колонках, указанных во втором параметре, суммируются. Замечание. Колонки, не вошедшие ни в один из списков колонок, после выполнения метода удаляются из таблицы значений. тз. Сотр. Свернуть("Сотрудник, Год", "Доход");
(продолжение) Если исходная ТЗ вам понадобится в дальнейшем, то лучше сделать копию таблицы значений и сворачивать уже ее: тз. Доходы. По. Годам = тз. Доходы. Сотр. Скопировать(); тз. Доходы. По. Годам. Свернуть{"Сотрудник, Год", "Доход"); ТЗ позволяет подсчитать итог по колонке числового типа, например: Всего. Доход = тз. Доходы. Сотр. Итог("Доход"); Всего. НДС = тз. Состав. Итог ("НДС"); Из ТЗ можно выгрузить целую колонку в массив и загрузить ее из массива: Массив. Цен = тз. Товары. Выгрузить. Колонку("Цена"); тз. Товары. Загрузить. Колонку("Количество", Массив. Ост атки. Товаров);
4. Структура и соответствие являются динамическими наборами данных коллекциями значений. Каждый элемент такой коллекции представляет собой пару «ключ» и «значение» . Ключи структуры и соответствия уникальны, поэтому они однозначно иден тифицируют элемент коллекции.
Структура В структуре ключи могут быть только строковые и должны подчиняться правилам именования переменных. В соответствиях ключи могут быть почти любого типа. Структуры часто применяются в методах объектов для указания отборов, например: Отбор = Новый Структура("Цена", 100); Выборка = Справочники. Номенклатура. Выбрать(, Отбор); Структуры можно использовать для передачи списка параметров Параметры = Новый Структура("Дата. Нач, Дата. Кон"); Параметры. Дата. Нач = Выб. Дата; Параметры. Дата. Кон = Добавить. Месяц(Выб. Дата, 1); Если Выб. Тип. Отчета <> 0 Тогда Параметры. Вставить("Тип. Отчета", Выб. Тип. Отчета); Конец. Если; гл. Сформировать. Обороты(Параметры);
(продолжение) Перебор элементов структуры: Для Каждого парам Из Параметры Цикл Имя. Параметра = парам. Ключ; Значение = парам. Значение; Конец. Цикла; Можно обращаться к элементам коллекции через точку, поскольку ключи являются свойствами структуры: Нач. Дата = парам. Дата. Нач; Кон. Дата - парам. Дата. Кон;
Соответствие Для соответствия обращение через точку невозможно, так ключи соответствия могут быть самого разнообразного типа. Создать соответствие Вид. Объекта = Новый Соответствие; Добавить элементы в соответствие Вид. Объекта. Вставить(Перечисления. Виды. Объектов. Контрагенты, Перечисления. Виды. Объектов. Контактной. Информации. Контрагенты ); Вид. Объекта. Вставить(Перечисления. Виды. Объектов. Контактные. Ли ца, Перечисления. Виды. Объектов. Контактной. Информации. Конт актные. Лица); Обратиться к элементу соответствия Возраст. Сотрудника = Возраст. Сотрудников. Получить(Сотрудник); Возраст. Сотрудника = Возраст. Сотрудников [Сотрудник];
(продолжение) Перебрать элементы соответствия Для Каждого Элемент из Замены Цикл Сообщить(Элемент. Ключ + " " + Элемент. Значение); Конец. Цикла; Удалить элемент соответствия Замены. Удалить(Удаляемый. Товар); Замены. Очистить(); Получить данные из соответствия Значение = Курсы. Валют. Документа. Получить(Управленческая. Валюта); Если Значение = Неопределено Тогда Сообщить("Данная валюта в соответствии отсутствует"); Иначе Курс = Значение["Курс"]; Кратность = Значение["Кратность"]; Конец. Если;