#Область СлужебныйПрограммныйИнтерфейс
// Инициализация класса для работы с коллекцией
// Тип коллекции определяется переданными данными
//
// Параметры:
//
// пИсточник - Строка,Тип,Массив,Структура,Соответствие,СписокЗначений,ТаблицаЗначений,ФиксированныйМассив,ФиксированнаяСтруктура,ФиксированноеСоответствие - описание коллекции для последующей инициализации
// Если передана строка, то в ней ожидается наименование коллекции. В данном случае будет создана новая коллекция
// Передача типа коллекции, также приведёт к созданию новой коллекции
// Передача непосредственно универсальной коллекции просто инициализирует класс для дальнейшей работы с ней
// пПараметрыКонструктора - Массив,Структура,Соответствие,Неопределено - Если задано, то передаст параметры для конструктора
// Используется для инициализации фиксированных коллекций
// Для списка значений допустима передача массива. В этом случае список будет инициализирован со значениями из массива
//
// Возвращаемое значение:
// Булево - Истина, если инициализация выполнена успешно
//
Функция Инициализировать(пИсточник, пПараметрыКонструктора = Неопределено) Экспорт
КонецФункции
#КонецОбласти
#Область ПрограммныйИнтерфейс
#Область Итератор_1_0
// Сбрасывает позицию курсора в начальное положение
// Действие необходимо, чтобы начать перебор элементов после того как он был начат,
// но по какой-либо причине прекращён
//
// Параметры:
// нет передаваемых параметров
//
Процедура Сбросить() Экспорт
КонецПроцедуры
// Метод итератора коллекции
// Сдвигает позицию итератора на заданный шаг итератора
// При первом вызове позиционирование производится на первый элемент коллекции при положительном шаге итератора
// При первом вызове позиционирование производится на последний элемент коллекции при отрицательном шаге итератора
//
// Параметры:
//
// пШагИтератора - Число - Шаг итератора. Может быть отрицательным. По умолчанию = 1
//
// Возвращаемое значение:
// Булево - Истина - итератор спозиционировался на следующий элемент. Ложь - следующий элемент отсутствует
//
Функция Следующий(пШагИтератора = 1) Экспорт
КонецФункции
// Получение ключа текущего элемента колллекции
// Для массивов, таблиц итд это будет индекс элемента
// Для структур и соответствий это будет Ключ из пары КлючИЗначение
//
// Параметры:
// нет передаваемых параметров
//
// Возвращаемое значение:
// Число,Строка,Произвольный - ключ текущего элемента коллекции
//
Функция Ключ() Экспорт
КонецФункции
// Получение значение текущего элемента колллекции
// Для массивов это будет сам элемент, для таблиц строка таблицы,
// для структур, соответствий и списка значений содержимое поля Значение элемента коллекции
// Для структур и соответствий это будет Значение из пары КлючИЗначение
//
// Параметры:
// нет передаваемых параметров
//
// Возвращаемое значение:
// Произвольный - значение текущего элемента коллекции
//
Функция Значение() Экспорт
КонецФункции
#КонецОбласти
#Область Изменение_1_0
// Добавляет элемент в коллекцию
//
// Параметры:
//
// пЗначение - Произвольный - Добавляемое значение
// Для таблицы либо не обязательно, либо данные заполнения для новой строки
// Если данные заполнения будут переданы, то добавляемая строка таблицы будет заполнена из них
// пКлюч - Число,Строка,Произвольный - Ключ элемента коллекции
// Массив,СписокЗначений,ТаблицаЗначений - не обязательно. Если ключ указан, то производится вставка в позицию ключа
// Структура,Соответствие - обязательно, должен быть уникальным.
//
// Возвращаемое значение:
// Число,Строка,Произвольный - ключ добавленного элемента
//
Функция Добавить(пЗначение = "UFL_ШифрПараметрНеПередан", пКлюч = "UFL_ШифрПараметрНеПередан") Экспорт
КонецФункции
// Производит вставку значения в указанную позицию коллекции
// Реализовано как синтаксический сахар и для совместимости с
// существующим кодом, так как метод Добавить() реализует обе команды и Добавить() и Вставить()
//
// Параметры:
//
// пЗначение - Произвольный - вставляемое значение
// Для таблицы либо не обязательно, либо данные заполнения для новой строки
// Если данные заполнения будут переданы, то вставляемая строка таблицы будет заполнена из них
// пКлюч - Число,Строка,Произвольный - Ключ позиции коллекции, куда прпоизводится вставка
//
// Возвращаемое значение:
// Число,Строка,Произвольный - ключ вставленного элемента
//
Функция Вставить(пКлюч, пЗначение) Экспорт
КонецФункции
// Удалить элемент(ы) с указанным ключом(ами)
//
// Параметры:
//
// пКлюч - Массив,Произвольный - ключ(и) удаляемого элемента
// Число - числовой ключ(индекс) элемента
// Массив - массив ключей
// Произвольный - ключ для соответствия
// Если будет передан хотя бы один несуществующий ключ, то будет вызвано исключение
// Наличие неуникальных ключей допускается
//
Процедура Удалить(пКлюч) Экспорт
КонецПроцедуры
// Удалить элемент(ы) с указанным значением(ями)
//
// Параметры:
//
// пЗначение - Произвольный,Массив - значение или массив значений подлежащих удалению
// пВсеНайденные - Булево - Истина - удалить все найденные элементы, иначе, только первое найденное
//
Процедура УдалитьЗначение(пЗначение, пВсеНайденные = Истина) Экспорт
КонецПроцедуры
Процедура Очистить() Экспорт
КонецПроцедуры
#КонецОбласти
#Область Индексирование_1_0
// Включение индексации содержимого коллекции для ускорения поиска
// Рекомендации по использованию:
// - Выполнять после того как завершена модификация коллекции, так как процедура индесирования довольно тяжелая
// ВАЖНО! Вызов метода приводит обнулению прогресса итератора
//
// Параметры:
//
// пПараметры - Произвольный - некоторые коллекции требуют передачи параметров для индексирования
// ТаблицаЗначений: ожидается Строка или Массив строк являющихся индексом
// ВАЖНО! Если необходимо добавить несколько индексов, то передавать массив строк.
//
Процедура Индексировать(пПараметры = Неопределено) Экспорт
КонецПроцедуры
// Отключение индексирования и удаление индекса поиска
//
// Параметры:
// нет передаваемых параметров
//
Процедура УдалитьИндекс() Экспорт
КонецПроцедуры
#КонецОбласти
#Область ПоискПолучениеДанных_0_85
// Значение элемента коллекции с указанным ключом
//
// Параметры:
//
// пКлюч - Число,Строка,Произвольный - Ключ элемента коллекции
//
// Возвращаемое значение:
// Произвольный - значение элемента коллекции
//
Функция ПолучитьЗначение(пКлюч) Экспорт
КонецФункции
// Ключ первого элемента содержащего значение
// При активированном индексаторе поиск будет производиться с использованием индекса
//
// Параметры:
//
// пЗначение - Произвольный - значение, которое необходимо найти
// пПараметрыПоиска - Произвольный - параметры поиска необходимые для некоторых коллекций
// ТаблицаЗначений может принимать имена колонок в которых надлежит производить поиск
// пВыбратьПервые - Число - количество позиций вхождения, которые необходимо вернуть
// Если 1 (по умолчанию), то вернётся первый ключ, по которому найдено значение
// Если 0 (по умолчанию), то вернутся все ключи, по которым найдено значение. Аналогично методу НайтиВсеПоЗначению()
//
// Возвращаемое значение:
// Число,Строка,Произвольный - описание возвращаемого значения
//
Функция НайтиПоЗначению(пЗначение, пПараметрыПоиска = Неопределено, пВыбратьПервые = 1) Экспорт
КонецФункции
// Массив ключей всех элементов содержащих переданное значение
// При активированном индексаторе поиск будет производиться с использованием индекса
//
// Параметры:
//
// пЗначение - Произвольный - значение, которое необходимо найти
// пПараметрыПоиска - Произвольный - параметры поиска необходимые для некоторых коллекций
// ТаблицаЗначений может принимать имена колонок в которых надлежит производить поиск
//
// Возвращаемое значение:
// Массив - массив ключей элементов, содержащих искомое значение
//
Функция НайтиВсеПоЗначению(пЗначение, пПараметрыПоиска = Неопределено) Экспорт
КонецФункции
// Все значения коллекции
//
// Параметры:
//
// пОтбор - Произвольный - В данной версии не поддерживается.
// Находится здесь, чтобы резервировать место в сигнатуре метода
// пТолькоУникальные - Булево - Если Истина, то будут выгружены только уникальные значения
//
// Возвращаемое значение:
// Массив - значения коллекции
//
Функция ВыгрузитьЗначения(пОтбор = Неопределено, пТолькоУникальные = Ложь) Экспорт
КонецФункции
// Список всех ключей коллекции
//
// Параметры:
// нет передаваемых параметров
//
// Возвращаемое значение:
// Массив - ключи коллекции
//
Функция ВыгрузитьКлючи() Экспорт
КонецФункции
#КонецОбласти
#Область КопированиеИКонвертация_0_85
// Копирование коллекцию в другую коллекцию аналогичного типа
//
// Параметры:
//
// пРекурсивно - Булево - Если истина, то все коллекции содержащиеся в исходной коллекции будут так-же скопированы
// Иначе, наличные коллекции попадут в копию родительской коллекции как указатели на исходные
//
// Возвращаемое значение:
// Массив,Структура,Соответствие,СписокЗначений,ТаблицаЗначений,ФиксированныйМассив,ФиксированнаяСтруктура,ФиксированноеСоответствие - копия коллекции
//
Функция Скопировать(пРекурсивно = Истина) Экспорт
КонецФункции
// Формирование фиксированной копии универсальной коллекции
//
// Параметры:
//
// пРекурсивно - Булево - данные коллекции по возможности будут скопированы и зафиксированы рекурсивно
//
// Возвращаемое значение:
// ФиксированныйМассив,ФиксированнаяСтруктура,ФиксированноеСоответствие - зафиксированные данные
//
Функция СкопироватьКакЗафиксированныеДанные(пРекурсивно = Истина) Экспорт
КонецФункции
// Формирование копии фиксированной коллекции без фиксации
//
// Параметры:
//
// пРекурсивно - Булево - данные коллекции будут скопированы и по необходимости зафиксированы рекурсивно
//
// Возвращаемое значение:
// Массив,Структура,Соответствие - не зафиксированные данные
//
Функция СкопироватьКакДанныеБезФиксации(пРекурсивно = Истина) Экспорт
КонецФункции
#КонецОбласти
#Область Свойства
Функция Указатель() Экспорт
КонецФункции
Функция ЭтоФиксированнаяКоллекция() Экспорт
КонецФункции
Функция ТипКоллекции() Экспорт
КонецФункции
Функция Количество() Экспорт
КонецФункции
#КонецОбласти
#КонецОбласти