Найти в Дзене

Как сделать перебор в 1с

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

Рассмотрим основные способы перебора в 1С:

1. Перебор массива:

Цикл Для Индекс = … Цикл (классический перебор по индексу):

Массив = Новый Массив;

Массив. Добавить("Элемент 1");

Массив. Добавить("Элемент 2");

Массив. Добавить("Элемент 3");

Для Индекс = 0 По Массив. Количество() — 1 Цикл // Индексы массивов в 1С начинаются с 0

ТекущийЭлемент = Массив[Индекс];

Сообщить("Элемент массива[" + Индекс + "]: " + ТекущийЭлемент);

// Здесь можно выполнить другие действия с элементом массива

КонецЦикла;

Цикл Для Каждого Элемент Из… Цикл (перебор элементов коллекции):

Массив = Новый Массив;

Массив. Добавить("Элемент 1");

Массив. Добавить("Элемент 2");

Массив. Добавить("Элемент 3");

Для Каждого Элемент Из Массив Цикл

Сообщить("Элемент массива: " + Элемент);

// Здесь можно выполнить другие действия с элементом массива

КонецЦикла;

Метод Для Каждого() (использование процедуры-обработчика):

Массив = Новый Массив;

Массив. Добавить("Элемент 1");

Массив. Добавить("Элемент 2");

Массив. Добавить("Элемент 3");

Процедура ОбработкаЭлементаМассива(Элемент, Индекс, Массив) Экспорт

Сообщить("Элемент массива[" + Индекс + "]: " + Элемент);

КонецПроцедуры

Массив. ДляКаждого("ОбработкаЭлементаМассива");

Преимущества и недостатки:

Для Индекс = … Цикл: Позволяет получить индекс элемента.

Для Каждого Элемент Из… Цикл: Более простой и читаемый код, но нет доступа к индексу элемента.

Для Каждого(): Удобен для выполнения сложных действий с элементом массива в отдельной процедуре.

2. Перебор списка значений:

СписокЗначений = Новый СписокЗначений;

СписокЗначений. Добавить("Значение 1");

СписокЗначений. Добавить("Значение 2");

СписокЗначений. Добавить("Значение 3");

Для Каждого ЭлементСписка Из СписокЗначений Цикл

Сообщить("Значение списка: " + ЭлементСписка. Значение);

//Здесь можно выполнить другие действия с элементом списка

КонецЦикла;

Особенность: Перебор списка значений осуществляется через цикл Для Каждого ЭлементСписка Из… Цикл, где ЭлементСписка — это объект типа ЭлементСпискаЗначений, который имеет свойства Значение (само значение) и Пометка (логическое значение).

3. Перебор табличной части документа (или табличного поля формы):

Для Каждого СтрокаТЧ Из Объект. Товары Цикл // Объект — это текущий документ, Товары — имя табличной части

Сообщить("Номенклатура: " + СтрокаТЧ. Номенклатура + ", Количество: " + СтрокаТЧ. Количество);

//Здесь можно выполнить другие действия со строкой табличной части

КонецЦикла;

Особенность: Перебор табличной части осуществляется как перебор обычной коллекции.

4. Перебор результата запроса:

Запрос = Новый Запрос;

Запрос. Текст =

"ВЫБРАТЬ

| Номенклатура. Ссылка,

| Номенклатура. Наименование

|ИЗ

| Справочник. Номенклатура КАК Номенклатура";

Результат = Запрос. Выполнить();

Выборка = Результат. Выбрать();

Пока Выборка. Следующий() Цикл

Сообщить("Ссылка: " + Выборка. Ссылка + ", Наименование: " + Выборка. Наименование);

//Здесь можно выполнить другие действия с данными запроса

КонецЦикла;

Особенность: Перебор результата запроса осуществляется с помощью цикла Пока Выборка. Следующий() Цикл. Для доступа к данным используется объект Выборка, который имеет свойства, соответствующие полям запроса.

5. Перебор значений свойств объекта (например, перебор реквизитов справочника):

Для Каждого Свойство Из Метаданные. Справочники. Номенклатура. Реквизиты Цикл

Сообщить("Имя реквизита: " + Свойство. Имя + ", Тип реквизита: " + Свойство. Тип);

КонецЦикла;

Особенность: Перебор свойств объекта осуществляется как перебор обычной коллекции.

6. Использование генераторов (только в версиях 8.3.20 и выше):

Для Каждого Элемент Из Массив | ?(Элемент > 10) Цикл

Сообщить(Элемент);

КонецЦикла;

Основные моменты:

Тип коллекции: Выбор способа перебора зависит от типа коллекции (массив, список значений, табличная часть, результат запроса и т. д.).

Направление перебора: Перебор может осуществляться в прямом или обратном порядке (для массивов).

Условия выхода из цикла: В циклах перебора можно использовать операторы Прервать (для выхода из цикла) и Продолжить (для перехода к следующей итерации).

Изменение коллекции в процессе перебора: Не рекомендуется изменять коллекцию (добавлять или удалять элементы) в процессе перебора, так как это может привести к непредсказуемым результатам. Если необходимо изменить коллекцию, используйте копию коллекции или другие методы.

Производительность: Для больших коллекций рекомендуется использовать наиболее производительные способы перебора (например, запросы).

Рекомендации:

Используйте наиболее простой и читаемый способ перебора, который подходит для вашей задачи.

Учитывайте особенности типа коллекции при выборе способа перебора.

Не изменяйте коллекцию в процессе перебора.

Для больших коллекций используйте наиболее производительные способы перебора.

В зависимости от вашей конкретной задачи и типа коллекции, выберите наиболее подходящий способ перебора в 1С.

  📷
📷