1с найти в массиве значение
« Как стать программистом 1С » Язык 1С » Список значений 1С Найти по значению, Найти по идентификатору — поиск, проверка наличия значения
Список значений 1С Найти по значению, Найти по идентификатору — поиск, проверка наличия значения
Методы 1С СписокЗначений.НайтиПоЗначению(Значение) и 1С СписокЗначений.НайтиПоИдентификатору(Значение) возвращает элемент («ячейку») списка значений, у которого значение (или идентификатор) с нужным значением.
Обратите внимание – идентификатор это не то же самое, что и индекс. Индекс – это порядковый номер (число), которым пронумерованы все ячейки с начала и до конца списка значений. Идентификатор — это уникальный номер (число), который имеет каждая ячейка.
Поиск по идентификатору используется в тонком клиенте, при работе со списком значений на сервере. Имея идентификатор элемента списка значений, который расположен на форме (Элементы.ИмяСпискаЗначенийНаФорме.ТекущаяСтрока), Вы можете найти элемент в списке значений, вне зависимости от его текущего индекса и значения.
Поиска по «представлению» значения – в списке значений нет.
В отличие от поиска в массиве, который возвращает индекс найденного элемента или -1, если не найдено, поиск в списке значений возвращает сам элемент списка или НЕОПРЕДЕЛЕНО, если не найдено.
Пример поиска по значению с помощью 1С СписокЗначений.НайтиПоЗначению:
спРазрешенныхСтатусов = Новый СписокЗначений();
//добавляем в пустой список значений – все значения перечисления
//добавляем их «строковые пользовательские наименования» – которые при добавлении значений в конфигураторе записываются в свойствах значения перечисления в свойство «Синоним»
//Перечисления.СтатусыДокументов – это путь к нашему перечислению
//.ПустаяСсылка() – позволяет вызывать методы этого перечисления
//.Метаданные() – метод, который возвращает метаданные в том виде, как они заданы в конфигураторе и позволяет считывать свойства, заданные в метаданных
//.ЗначенияПеречисления – список значений у перечисления, заданные в конфигураторе, каждое значение, полученное через .Метаданные() содержит кроме значения свойства значения, заданные в конфигураторе
Для каждого Знч из Перечисления.СтатусыДокументов.ПустаяСсылка().Метаданные().ЗначенияПеречисления Цикл
спРазрешенныхСтатусов.Добавить(Знч.Синоним);
КонецЦикла;
Если спРазрешенныхСтатусов.НайтиПоЗначению(СтатусДокументаСтрокой) = Неопределено Тогда //Если поиск вернул Неопределено, то элемент с таким значением не найден
Сообщить("Ошибка: статус документа '" + СтатусДокументаСтрокой + "' не найден");
Пример поиска по индексу с помощью 1С СписокЗначений.НайтиПоИдентификатору:
Массив — это программная коллекция (объект встроенного языка), содержащая пронумерованную последовательность значений произвольного типа. Каждому элементу присваивается последовательный целочисленный номер — индекс, начинающийся с нуля. По индексу можно получить или установить значение элемента массива.
В 1С:Предприятие 8 существует два типа массивов:
- фиксированный массив — такой массив имеет фиксированный размер, заданный при его создании. Для фиксированного массива недоступно программное изменение размера, количества и последовательности элементов;
- обычный массив — такой массив имеет динамический размер и его верхний предел практически неограничен. Таким массивом можно произвольно оперировать из встроенного языка;
Сейчас мы рассмотрим обычные массивы.
Создание и инициализация элементов массива
Создание пустого массива выполняется с помощью оператора Новый :
Для добавления элементов в массив используется одноименный метод Массив.Добавить():
Каждый новый элемент помещается в конец массива. Чтобы создать массив с заданным размером, можно воспользоваться конструктором массива. Например, так:
Для доступа к отдельным элементам массива применяется операция разыменования: указывается имя переменной, объявленной как массив, а затем, в квадратных скобках, указывается индекс элемента: ИмяМассива[Индекс] . Такие конструкции можно указывать как слева от оператора присваивания:
Так и справа: в выражениях и в качестве параметров процедур и функций:
Границы массивов
Как было сказано выше, левая граница массива постоянна и всегда равно нулю (0). Верхняя граница напрямую связана с количеством элементов в массиве. Получить ее можно двумя способами:
- С использованием метода Массив.Количество() с последующим вычитанием 1;
- С использованием одноименного метода Массив.ВГраница();
Давайте рассмотрим распространенные операции с массивами
Перебор элементов массива
Для перебора (обхода) всех элементов массива обычно используется оператор цикла Для :
Либо оператор цикла Для Каждого :
Первый способ лучше использовать, если Вам необходимо получить одновременно и индекс, и значение массива. Второй способ больше подходит для ситуации, когда нужно только последовательно перебрать все значения массива. Использование второго способа повышает «читабельность кода».
Поиск в массиве
Для поиска значений в массиве можно воспользоваться одноименным методом Массив.Найти(). Он возвращает индекс найденного элемента или Неопределено , если таковой не был найден:
Объекты типа массив в 1С 8.3 представляют собой совокупность упорядоченных значений любого типа, в том числе и типа «массив», что в свою очередь позволяет организовывать многомерные массивы. Идентификация значений осуществляется по индексам, нумерация которых начинается с «0».
Создание массива
Синтаксис:
Примеры:
Добавление элементов в массив
Примеры:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Получение значения элемента по индексу
Поиск в массиве 1С
Присвоение значений элементам массива
Примеры:
Как узнать количество элементов массива (размер массива)
Перебор массива 1С
Примеры:
Перебор всех элементов двумерного массива
Примеры:
Удаление элементов из массива
Примеры:
Как разложить строку в массив
Пример преобразования массива в список значений
Пример преобразования массива в таблицу значений
Сортировка массива 1С разными способами
Примеры:
Как свернуть массив в 1С
Пример:
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie в соответствии с настоящим уведомлением в отношении данного типа файлов. Если вы не согласны с тем, чтобы мы использовали данный тип файлов, то вы должны соответствующим образом установить настройки вашего браузера или не использовать сайт.
Отправляя любую форму на сайте, вы соглашаетесь с политикой конфиденциальности данного сайта.
Список значений в 1С 8.3 — это объект, позволяющий строить динамические наборы значений и манипулировать ими.
Визуально можно представить как таблицу из четырёх колонок:
- значение,
- картинка,
- пометка,
- представление.
Список значений может быть наполнен значениями любых типов. Значения характеризуются позицией в списке (индексом).
Рассмотрим работу с объектом на примерах:
Создание объекта СписокЗначений
Добавить элемент в список значений
Удалить элемент списка значений
Вставить элемент в список значений
Установить/снять пометки у всех элементов
Найти в списке значений
Узнать индекс элемента с известным значением
Отсортировать список значений
Сдвинуть элемент списка значений
Создать копию списка значений
Получить количество элементов списка значений
Перебор элементов списка значений
Загрузить/выгрузить в массив
Удалить все элементы из списка значений
Интерактивный выбор одного элемента из списка на форме
Модальный и немодальный режим. Универсальный способ:
Интерактивная отметка значений из списка на форме
Модальный и немодальный режим. Универсальный способ:
Преобразования таблицы значений в список значений
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie в соответствии с настоящим уведомлением в отношении данного типа файлов. Если вы не согласны с тем, чтобы мы использовали данный тип файлов, то вы должны соответствующим образом установить настройки вашего браузера или не использовать сайт.
Отправляя любую форму на сайте, вы соглашаетесь с политикой конфиденциальности данного сайта.
Здраствуйте, вопрос тупой, но как проветить что :
есть массив содержащий в себе некоторые счета(например 10.01__10.02__10.03). теперь нужно сравнить переменную, в которой храниться нпример счет 10.01 с этим массивом, чтобы понять есть там такой счет или нет. например если на встроенном языке запросов аналогичное можно сделать так: "СчетДт В (&Счета)".
Массив (Array)
Найти (Find)
Синтаксис:
Найти()
Параметры:
(необязательный)
Тип: Произвольный. Искомое значение.
Возвращаемое значение:
Тип: Число; Неопределено. Если элемент найден, возвращается его индекс. Если элемент не найден, возвращается Неопределено.
Описание:
Выполняет поиск элемента в массиве.
Если НЕ Счета.Найти(СчетДт)=Неопределено Тогда
Сообщить("Есть такой счет");
КонецЕсли;
Нихера он не ищет, ищу отрицательно число, которое заведомо там есть, в результате "неопределено". Че за подстава от 1С такая!
проверил . работает. win7 32 , 1С:Предприятие 8.3 (8.3.10.2505) , тк, модуль формы обработки.
Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
ааа = новый массив;
ааа.Добавить(45);
ааа.Добавить(-1);
ааа.Добавить("ыыы") ;
win7 64 , УТ 11.3.2.193 8.3 (8.3.9.2033)
НайденныеСтроки = ТаблицаЗначений(Отбор) - данные в т.з. есть и массив возвращается как НайденныеСтроки.Количество()>0
В нем возвращено отрицательное число -2550
Имеем:
Неопределено = НайденныеСтроки.Найти(-2550),
потом проверил и + число не ищет также.
Пришлось писать тупой перебор в цикле, хотя может Найти() тоже юзает перебор но уже на уровне платформы. Как еще в массиве искать, пузырьки, вставка, подстановка? Бред короче
НайденныеСтроки = ТаблицаЗначений(Отбор) - данные в т.з. есть и массив возвращается как НайденныеСтроки.Количество()>0
НайденныеСтроки - это массив строк таблицы значений.
Отрицательное число стоит в какой-то колонке таблицы значений.
Поиск отрицательного числа по массиву НайденныеСтроки бесполезен априори.
Вы можете сделать МассивЗначений = ТаблицаЗначений.ВыгрузитьКолонку("МояКолонкаГдеСтоитОтрицательноеЧисло")
В этом случае Ваш поиск по МассивЗначений вернет Вам индекс найденного элемента.
НайденныеСтроки - в отладчики показывается как тип данных массив, значит к нему применяются все свойства и методы этого типа данных, или 1С не отвечает за свой help
Текст hep от 1С:
ТаблицаЗначений (ValueTable)
НайтиСтроки (FindRows)
Синтаксис:
Тип: Структура.
Задает условия поиска: ключ структуры определяет имя колонки, по которой будет осуществляться поиск, а значение структуры - искомое значение.
Возвращаемое значение:
Что у 1С платформы есть два разных типа с именем Массив?
(11) массив чего? Чисел, или все же строк ТЧ? Как можно найти в массиве строкТЧ число? Вот если в нем искать строку ТЧ, тогда будет искать.
Чтобы предметно разговаривать, приводите код и значения переменных.
Может там массив индексов найденных строк ТЧ.
(13) Вы невнимательно читаете, разговор уже 2 дня, если что, идет о числовом типе, просыпайтесь. И потом, в методе Найти() не приводится тип искомого значения, внимательно читайте fucking manual от 1С
от 1С на заметку:
Массив (Array)
Найти (Find)
Синтаксис:
Тип: Произвольный.
Искомое значение.
НайденныеСтроки = ТаблицаЗначений(Отбор) - данные в т.з. есть и массив возвращается как НайденныеСтроки.Количество()>0
Вот это что? Приводите полный код, что там в НайденныеСтроки.
По всей видимости Вы не понимаете, что там не нужные числа.
Массив СТРОК ТАБЛИЦЫ ЗНАЧЕНИЙ.
Строка таблицы значений, в свою очередь, является СТРУКТУРОЙ ДАННЫХ.
Массив - есть набор типизированных данных.
Если это массив чисел - можно искать число. Если это массив ссылок на справочник "Номенклатура", то какой результат Вы планируете получить при поиске там значения "1010101"?
При поиске числа внутри структуры, которая является элементом массива, Вы какой результат функции "Найти" планируете получить? ID структуры? Номер элемента массива? Всю структуру целиком?
В массиве структур, число Вы не найдете.
Назовите мне язык программирования с универсальным поиском значения в многомерных массивах.
В данном случае при Вашей реализации есть два метода.
Первый - перебор элементов массива со сравнением необходимого значения с Вашим эталонным.
Второй - выгрузить КОЛОНКУ ТАБЛИЦЫ ЗНАЧЕНИЙ В МАССИВ. Далее в массиве получить индекс искомого элемента. Он будет соответствовать номеру строки таблицы.
Тут, батенька, проблема не в том, что 1С "чего-то там накосячила".
Учите матчасть)))
Читайте также: