1с перебрать элементы формы в цикле
Список значений в 1С 8.3 — это объект, позволяющий строить динамические наборы значений и манипулировать ими.
Визуально можно представить как таблицу из четырёх колонок:
- значение,
- картинка,
- пометка,
- представление.
Список значений может быть наполнен значениями любых типов. Значения характеризуются позицией в списке (индексом).
Рассмотрим работу с объектом на примерах:
Создание объекта СписокЗначений
Добавить элемент в список значений
Удалить элемент списка значений
Вставить элемент в список значений
Установить/снять пометки у всех элементов
Найти в списке значений
Узнать индекс элемента с известным значением
Отсортировать список значений
Сдвинуть элемент списка значений
Создать копию списка значений
Получить количество элементов списка значений
Перебор элементов списка значений
Загрузить/выгрузить в массив
Удалить все элементы из списка значений
Интерактивный выбор одного элемента из списка на форме
Модальный и немодальный режим. Универсальный способ:
Интерактивная отметка значений из списка на форме
Модальный и немодальный режим. Универсальный способ:
Преобразования таблицы значений в список значений
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
При использовании данного сайта, вы подтверждаете свое согласие на использование файлов cookie в соответствии с настоящим уведомлением в отношении данного типа файлов. Если вы не согласны с тем, чтобы мы использовали данный тип файлов, то вы должны соответствующим образом установить настройки вашего браузера или не использовать сайт.
Отправляя любую форму на сайте, вы соглашаетесь с политикой конфиденциальности данного сайта.
(10) все просто.
Сообщить(Реквизит + " +" может быть использован как в сложении, так и в конкатенации строк.
Реквизит это не строка. Платформа пытается привести к числу. Тоже не получается. Вот и ошибка: "Преобразование значения к типу Число не может быть выполнено"
Когда ставим "" + Реквизит, то уже объект Реквизит платформой неявно приводится к строке. Вот и отрабатывает.
Или сразу указываем "Реквизит.Имя". Это уже строка и конкатенация строк отрабатывает штатно.
(10)
Следите за пальцами
Реквизит - тип ОбъектМетаданных
"" + Реквизит - тип Строка, т.к при сложении все преобразуется к типу первого слагаемого
Реквизит.Имя - тип Строка
А сложение Реквизит + " clear">
(1) А что есть ОбъектБД? Что значит, не работает, какую ошибку выдает?
Для ссылочных типов вместо НайтиПоТипу можно использовать ОбъектБД.Метаданные()
(2) Либо Документ.Ссылка либо Справочник Ссылка (составной тип на форме).
Сообщить("" + Реквизит.Имя + " clear">
листинг 3.17. Использование итератора «Для Каждого»
(5) Нет, к реквизиту можно обратиться или через точку, или через квадратные скобки. Так что вот такой код точно сработает для ссылочных типов:
Для Каждого Реквизит Из ОбъектБД.Метаданные().Реквизиты Цикл Сообщить(Реквизит.Имя + " clear">
(8) Потому что у вас переменная Реквизит. А это не строка, а ОбъектМетаданных. У меня Реквизит.Имя - а это уже строка
(10) все просто.
Сообщить(Реквизит + " +" может быть использован как в сложении, так и в конкатенации строк.
Реквизит это не строка. Платформа пытается привести к числу. Тоже не получается. Вот и ошибка: "Преобразование значения к типу Число не может быть выполнено"
Когда ставим "" + Реквизит, то уже объект Реквизит платформой неявно приводится к строке. Вот и отрабатывает.
Или сразу указываем "Реквизит.Имя". Это уже строка и конкатенация строк отрабатывает штатно.
(10)
Следите за пальцами
Реквизит - тип ОбъектМетаданных
"" + Реквизит - тип Строка, т.к при сложении все преобразуется к типу первого слагаемого
Реквизит.Имя - тип Строка
А сложение Реквизит + " clear">
(17) много чего есть, только не доступные через метаданные объекта.
Реквизиты, ТабличныеЧасти и СтандартныеРеквизиты доступны. Общие резквизиты - нет.
"вончо" написал. даже работает)
Процедура ТыкНаСервере(ОбъектБД) МетаданныеОбъектБД = Метаданные.НайтиПоТипу(ТипЗнч(ОбъектБД)); Для Каждого Реквизит Из МетаданныеОбъектБД.Реквизиты Цикл Сообщить(""+Реквизит + " = " + ОбъектБД[Реквизит.Имя]); КонецЦикла; Для Каждого ТЧ Из ОбъектБД.Метаданные().ТабличныеЧасти Цикл Сообщить(""+ТЧ); НомерСтроки = 1; Для Каждого Строка Из ОбъектБД[ТЧ.Имя] Цикл Для Каждого Реквизит Из ТЧ.Реквизиты Цикл Сообщить("Строка номер " + НомерСтроки + " " + Реквизит + " timeline-seperator text-center text-primary no-margin no-border"> Показать
Цикл в программировании — это любая многократно исполняемая последовательность инструкций, организованная любым способом. Именно так описывается цикл во всех языках программирования. По сути циклы в 1С 8.3 не исключение. Но как всегда, каждый язык программирования имеет свою конструкцию, синтаксис, что выражаясь на обычном языке можно описать как правописание. Перейдем к изучении основных понятий и к примерам.
Цикл «Для…»
Оператор цикла Для предназначен для циклического повторения операторов, в конструкции Цикл – КонецЦикла. Условие выполнения цикла всегда проверяется в начале, перед выполнением цикла.
- Переменная является счетчиком и при каждом повторении цикла автоматически увеличивается на 1. Иначе говоря, это счетчик цикла.
- Знач1 число, которое задает начальное значение счетчику цикла.
- Знач2 число, которое задает максимальное значение счетчику цикла. Если значение счетчика цикла становится больше чем Знач2 цикл прекращается.
Пример 1 — Простой обход циклом с счетчиком
На данном примере счетчик цикла Сч при каждом входе в цикл увеличится на единицу, и пока не достигнет значению 11, цикл будет продолжаться.
Пример 2 — Обход с увеличением
Но, при решении конкретных задач, автоматическое увеличение значения счетчика цикла на единицу не всегда уместно. Так что же делать, ведь это же автоматическая функция?! Но всегда есть выход.
Рассмотрим конкретный пример в котором попробуем счетчику цикла задать шаг ровной к 5-и:
Пример 3 — С выходом из цикла «Прервать» (проверка на вечный цикл)
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
*Данный пример мы привели во внешней обработке.
Цикл «Для Каждого…»
Оператор цикла Для Каждого предназначен для циклического обхода коллекций значений. При каждой итерации цикла возвращается новый элемент коллекции. Обход осуществляется до тех пор, пока не будут перебраны все элементы коллекции.
- Переменная: при каждом входе в цикл переменной присваивается значение очередного элемента коллекции.
- КоллекцияЗначений: коллекция значений, элементы которой будут присваиваются переменной Переменная.
Пример 1 — Простой обход таблицы значения
Создадим таблицу значений. Как мы помним, делается это на сервере.
И так, мы создали таблицу значений. Вскроем таблицу, для лучшего понимания.
Индекс | Значение элемента | Тип элемента | Автомобиль | Класс | Вес |
0 | СтрокаТаблицыЗначений | СтрокаТаблицыЗначений | «KIA» | «A Класс» | 1 100 |
1 | СтрокаТаблицыЗначений | СтрокаТаблицыЗначений | «Ford» | «B Класс» | 1 300 |
2 | СтрокаТаблицыЗначений | СтрокаТаблицыЗначений | «BMW» | «C Класс» | 1 400 |
Теперь реализуем обход по коллекции с помощью цикла Для Каждого.
*Данный пример мы привели во внешней обработке.
Пример 2 — Обход массива
Создадим еще одну коллекцию. Массив, в отличии от таблиц значений, можно создать на клиенте тоже.
Взглянем на коллекцию:
Индекс | Значение элемента | Тип элемента |
0 | «Арина» | Строка |
1 | «Марина» | Строка |
2 | «Карина» | Строка |
А теперь реализуем обход по коллекции, с помощью цикла Для Каждого:
Пример 3 — Оператор «Продолжить»
Еще один пример, где применим оператор Продолжить:
Индекс | Значение элемента | Тип элемента |
0 | 3 | Число |
1 | 7 | Число |
2 | 8 | Число |
3 | 9 | Число |
Цикл «Пока…»
Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл – КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла. (Описание: синтакс-помощник)
Выражение: логическое выражение, в зависимости значения которой будет выполнятся, или не выполнятся цикл.
Пример 1 — Обход массива с счетчиком
Взглянем на коллекцию.
Индекс | Значение элемента | Тип элемента |
0 | «Снегурочка N1» | Строка |
1 | «Баядерка N2» | Строка |
2 | «Синяя птица N3» | Строка |
3 | «Красная Шапочка N4» | Строка |
Как мы знаем, индексы строк в коллекции начинаются с 0-я. Это прекрасно видно на развернутом виде коллекции.
- МоиЛюбимыеКонфеты.Количество() определяет количество срок в коллекции, что в данном случае рано 4-ом.
- МоиЛюбимыеКонфеты[Сч] определяет элемент коллекции по индексу, где Сч играет роль индекса, и при каждом входе в цикл прибавляется на единицу. Тем самим, мы с каждым разом обращаемся к следующей строке коллекции, начиная со строки с индексом 0. И цикл будет продолжаться, пока значение логического выражение Сч < МоиЛюбимыеКонфеты.Количество() не станет ровному Ложь.
*Данный пример мы привели во внешней обработке.
Пример 2 — Обратный цикл с счетчиком
Но можно получить тот же список, но в обратном порядке. Это называется обратный цикл, хотя на самом деле, этот тот же самый цикл Пока.
Обратимся к тому же массиву, но напишем код обратного цикла.
Поясню, что счет индекса начинается с цифры равному количества строк -1, поскольку индекс последней строки ровно 3-ом. После, в каждом цикле, индекс уменьшается на единицу и тем самим мы обходим коллекцию с обратной стороны.
*Данный пример мы привели во внешней обработке.
«Прервать» и «Продолжить» в циклах 1С 8.3
Вы думаю заметили, что в нескольких циклах, мы специально показали действие операторов Прервать и Продолжить. Хотя слова сами говорят о себе, да и в циклах вполне понятны их действия, тем не менее в заключении статьи, поясним и действие этих операторов.
- Прервать: прерывает выполнение цикла в любой точке. После выполнение этого оператора цикл прекращается и управление передается следующему оператору, который находиться после ключевого слова КонецЦикла.
- Продолжить: возвращает управление в начало цикла. Операторы, следующие в теле цикла за оператором Продолжить, не выполняются в текущей итерации обхода.
Видео Школы 1С по теме циклов
Структура в языке программирования 1С 8.3 — набор пар «Ключ» и «Значение». Поле «Ключ» имеет строковый тип, «Значение» же может принимать любой тип данных. Обычно используется для хранения и передачи между процедурами набора каких-либо параметров.
Создание новой структуры
Структуру в языке программирования 1С можно создать двумя способами с помощью конструкции «Новый».
Структура = Новый Структура;
Структура.Вставить(«КлючПараметра1», «Значения параметра №1»);
Структура.Вставить(«КлючПараметра2», «Значения параметра №2»);
Структура = Новый Структура(«КлючПараметра1, КлючПараметра2», «Значения параметра №1», «Значения параметра №2»);
Оба способа создадут структуру, которую видно на скриншоте из отладки:
Изменение
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Добавить или изменить структуру можно, используя метод «Вставить()».
Если требуется изменить значение старого ключа, вписываем его имя. Если добавить новый ключ, добавить уникальное имя относительно всех ключей структуры.
Чтобы удалить элемент коллекции, нужно воспользоваться методом «Удалить», куда передать имя ключа:
Возможна также очистка всех объектов коллекции:
Обход структуры
Чтобы перебрать коллекцию структуры, нужно использовать конструкцию «Для Каждого КлючИЗначение Из Структура Цикл».
Для Каждого КлючИЗначение Из Структура Цикл
…… //обрабатываем, например, изменяем значения
КонецЦикла;
В каждом цикле будет видно, что нам доступны следующие поля:
Количество элементов в структуре можно подсчитать следующим образом:
Проверка наличия ключа
Часто бывает, что нужно проверить, есть ли в структуре нужное значение по ключу. В таком случае следует использовать метод «Свойство»:
Если в структуре есть элемент с ключом «Контрагент», тогда метод вернет «Истина», в противном случае — «Ложь».
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
Есть одна информация, которая не дает мне покоя. В синтаксис-помощнике написано:
Структура (Structure)
()
Использование:
Автор статьи предлагает при изменении существующего ключа структуры использовать метод Вставить. Все, вроде бы, логично и правильно, но тем не менее, если я сделаю так:
Структура.КлючПараметра1=»Другое значение параметра 1″, то 1С-ка проглотит это и не подавится, в то же время как в СП четко написано «ТОЛЬКО ЧТЕНИЕ». Или я чего-то не понимаю?
Структура.КлючПараметра1= «Другое значение параметра 1″
«КлючПараметра1» — это имя ключа (ТОЛЬКО ЧТЕНИЕ)
Значение параметра меняем как хотим 🙂
Ну… так-то если подойти, то да)). Однако, насколько я понял, структура СП в части свойств объекта, который она описывает выглядит так:
Если свойство четко определено — то пишется имя свойства. Например
СправочникСсылка
Наименование
Только чтение
СправочникОбъект
Наименование
Чтение и запись
Если же имя свойства неопределено, оно пишется в тегах «знак больше» и «знак меньше», как в этом случае со свойством «Имя ключа»
И в тех и в других случаях, когда говорится «Только чтение» или «Чтение и запись» — то имеют в виду ЗНАЧЕНИЕ СВОЙСТВА, А НЕ ЕГО ИМЯ.
Например
СправочникОбъект
ИмяОбщегоРеквизита
Чтение и запись (проверьте сами в СП)
здесь же не имеется в виду, что мы можем менять САМО ИМЯ ОБЩЕГО РЕКВИЗИТА. Его-то уж точно нельзя менять. Здесь написано «Чтение и запись» для ЗНАЧЕНИЯ ЭТОГО СВОЙСТВА
Проводя такой же аналог для структуры получаем что речь идет именно о значении свойства, которое указано в имени ключа. Вот в чем прикол-то))
Цикл – это конструкция, которая предназначена для многократного исполнения неких инструкций. Во встроенном языке 1С существует три вида циклов «Пока», «Для» и «Для Каждого». Рассмотрим на примерах работу с каждым из них.
Цикл «Пока»
Синтаксис:
Принцип работы такого цикла заключается в том, что операторы находящиеся после ключевого слова «Цикл», будут выполнятся пока логическое выражение будет равно ИСТИНА.
Пример:
Цикл «Для»
Синтаксис:
После начального присвоения значения для переменной после ключевого слова «Для», такой цикл прекратится, когда значение переменной будет меньше либо равно конечному значению после ключевого слова «По». В таком цикле приращение переменной происходит автоматически, и всегда равно «1».
Пример:
Результат:
Получите понятные самоучители по 1С бесплатно:
Цикл «Для Каждого»
Синтаксис:
Пример кода:
Визуальное представление созданного массива в 1С:
Результат работы цикла:
Вложенные циклы
Во встроенном языке программирования 1С доступна возможность использования вложенных циклов. К классическому примеру использования таких конструкций можно отнести один из способов последовательного перебора всех ячеек таблицы значений.
Пример:
С помощью внешнего цикла мы последовательно получаем строки из коллекции «ТаблицаЗначений». Затем во внутреннем цикле, имея строку, получаем значение каждой ячейки из коллекции «КоллекцияКолонок».
Как организовать обратный цикл
Пример:
Результат:
Как принудительно продолжить цикл
Принудительный переход к следующей итерации в циклах 1С осуществляется с помощью оператора «Продолжить» (Continue).
Пример:
В таком примере с помощью операторов «Если» и «Продолжить» пропускаем цифру «2».
Результат:
Как прервать цикл
Полный выход из цикла (прерывание) во встроенном языке программирования 1С осуществляется с помощью оператора «Прервать» (Break).
Пример:
Такой цикл перестанет выполняться, как только значение переменной «Счётчик» будет равно «2».
Читайте также: