Получить первый элемент выборки 1с
В статье будут описаны циклы 1с 8: их разновидности, назначение и применение. А также рассмотрены примеры их использования для конкретных задач. Цикл в 1с, как и в других языках программирования, предназначен для многократного повторения операторов, находящихся внутри него.
В 1с существует три вида циклов:
Вид цикла | Описание |
---|---|
Пока | Цикл осуществляющий повторения, пока выполняется условие. |
Для | Цикл осуществляющий заданное количество повторений. |
Для каждого | Цикл для обхода коллекций. Обходит каждую строку заданной коллекции. |
Цикл Пока
Данный цикл предназначен для осуществления повторений, пока выполняется условие. Синтаксис цикла выглядит так:
Для выполнения очередного повторения Логическое выражение должно возвращать значение Истина. Это работает следующим образом:
- Вычисляем значение Логического выражения. Если оно Ложь, цикл завершается. Если Истина:
- Выполняем операторы цикла;
- Возвращаемся на п. 1.
Таким образом в цикле Пока нам необходимо не только выполнить требуемое действие, но и изменить переменную участвующую в проверке его условия. Если забыть это сделать, можно получить бесконечный цикл, который приведет к зависанию системы.
Пример 2. А теперь только не четные, в интервале от 1 до 100, в обратном порядке.
В примере используется операция %. Она получает остаток от деления одного числа на другое.
При помощи цикла Пока можно обойти массив или любую другую коллекцию в обратном порядке. Это необходимо не часто, но реализовать такой механизм при помощи других циклов проблематично. Рассмотрим такой механизм в примере 3.
Также цикл Пока часто используется для обхода выборки из результата запроса. У выборки для этого есть специальный метод Следующий(). Он осуществляет переход на следующую строку и возвращает Истина, если такая строка есть. Если же следующая строка отсутствует в выборке, метод возвращает Ложь. Нельзя забывать, что работу с запросом можно осуществлять только в серверной процедуре (или функции).
Пример 4. При помощи запроса выбрать всех пользователей, кроме недействительных. Обойти выборку циклом Пока.
Цикл Для
Предназначен для осуществления заданного количества повторений, это так называемый цикл со счетчиком.
При каждом проходе цикл увеличивает значение в переменной Счетчик на 1. Начальное значение счетчика указывается в Выражение1, конечное в Выражение2.
Пример 5. Воспользуемся заданием из первого примера и выведем числа от 1 до 10.
Таким образом в начале выполнения, переменная счетчик будет содержать значение 1. При каждом следующем повторении значение счетчика будет увеличиваться также на единицу, пока не достигнет 10. Повторение со значением счетчика 10, будет последним.
То есть при помощи цикла Для мы обходим номера символов строки. А внутри цикла получаем символ по его номеру.
Цикл Для Каждого
Используется для обхода коллекций. Может обходить таблицы значений, массивы, структуры, списки значений (и любые другие коллекции).
В Переменная2 указывается коллекция, а в Переменная1 на каждом проходе цикла будет содержаться элемент коллекции. Контролировать количество элементов при этом не нужно, это делается автоматически. То есть цикл закончит выполняться, как только закончатся элементы коллекции.
Пример 7. Получить сумму элементов числового массива.
В переменной ЭлементМассива при каждом повторении цикла содержится число. Сложив их все, получаем: 101,4.
Цикл Для Каждого часто используется для обхода таблиц значений. В этом случае при каждом повторении цикла переменная элемента коллекции будет содержать не конкретное значение, а строку таблицы. В частности таблицу значений можно получить при выгрузке результата запроса (метод Выгрузить()).
Пример 8. При помощи запроса выбрать всех пользователей. Выгрузить результат в таблицу значений, обойти ее и вывести пользователей с заполненным физическим лицом.
Специальные операторы циклов
Циклы 1с могут использовать специальные операторы Продолжить и Прервать. Они предназначены для предварительного завершения итерации и всего цикла соответственно.
Оператор Продолжить завершает текущее повторение цикла, не дожидаясь выполнения следующих за ним операторов. То есть с его помощью мы можем пропускать не нужные действия внутри цикла.
Пример 9. Немного модифицируем код из предыдущего примера, и напишем его с использованием оператора Продолжить.
Завершаем проход цикла, если физическое лицо не заполнено. Метод Сообщить будет выполняться, только при условии наличия физлица.
С оператором Прервать все еще проще, он завершает выполнение цикла. Вне зависимости от того, сколько повторений еще должно было выполниться.
Пример 10. Рассмотрим задачу из самого первого примера. Выведем числа от 1 до 10 циклом Пока. Но при этом модифицируем программный код.
Если в таком цикле не использовать оператор Прервать, то он станет бесконечным, так как в выражении напрямую установлено значение Истина. Получается, что проверка выхода из шапки цикла, перенесена в его тело. Конечно, в таком виде циклы 1с вряд ли будут использоваться, для решения подобной задачи. Но существуют реальные случаи применения конструкции Пока Истина Цикл, когда условие цикла задать проблематично и проще его прервать в нужный момент.
В этой статье мы разберем такую тему, как вложенные таблицы в языке запросов 1С.
В полях выборки запроса можно использовать вложенную таблицу источника запроса. Например, у документа «Оказание услуг», есть табличная часть Услуги, так вот, эту табличную часть тоже можно вывести в поле выборки. Сейчас Вы увидите, как это можно реализовать.
В своей учебной базе я запущу консоль запросов, открою конструктор запросов и выберу таблицу «Оказание Услуг».
Раскроем эту таблицу
И в ней мы видим табличную часть «Услуги».
Вот всю эту табличную часть и выберем.
Как видите, вся табличная часть услуги полностью выбралась в поля.
Оставим три поля вложенной таблицы и добавим некоторые поля из шапки документа.
Нажмем кнопку ОК в конструкторе, и посмотрим как будет выглядеть наш запрос.
Ещё интересный момент, у вложенной таблицы можно вместо полей поставить звездочку, тогда выйдут все поля табличной части. Это нельзя сделать в конструкторе, только вручную в запросе. Запрос приобретет следующий вид:
Посмотрим, как выполнится такой запрос.
Единственно, что эта звездочка у нас не сохранится, если открыть конструктор запроса.
Мы научились делать запрос с вложенной таблицей в консоле, теперь научимся использовать вложенную таблицу в выборке
Ниже приведу небольшой пример кода, в котором осуществляется работа с вложенной таблицей:
Разъясню вышеприведенный код.
Первым делом мы получили линейную выборку, и обходим эту выборку в цикле, в котором создаем верхнюю строку дерева значений (оно на форме), и в неё записываем ссылку на наш документ.
А внутри этого цикла будем обращаться к полям выборки как к полям вложенной таблицы, и записывать их в дочерние строки дерева с формы.
Вот какой результат будет возвращать этот код
Остались вопросы?
Вы ответите на них сами, когда изучите мой курс «Запросы в 1С для начинающих». Где эти и многие другие вопросы рассматриваются более подробно. Вся информация дается в простой и доступной форме и понятна даже тем, кто особо не знаком с программированием в 1С.
Соответствие в языке программирования 1С чем-то похоже на Структуру, это тоже коллекция пар Ключ и значение. Но в отличие от Структуры, в Соответствие, чтобы получить значение по определенному ключу, нужно обращаться не как к свойству объекта, а через квадратные скобки, и в качестве ключа можно использовать значение любого типа.
Структура: Структура1.Ключ1
Соответствие можно создать на всех видах клиентов и в любом контексте. Сериализируется, т.е. можно передать переменную с типом соответствие с клиентского контекста на серверный.
Хоть и в ключ и значение соответствия можно записать переменные любого типа, использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском задать в ключ или значение, тип которого работает только в серверном контексте (например, ДокументОбъект.<>).
Новое соответствие создается при помощи конструктора Новый.
Соответствие1 = Новый Соответствие;
Для того, чтобы добавить новый элемент соответствия, необходимо использовать метод Вставить, который имеет следующий синтаксис:
Вставить(<Ключ>, <Значение>)
Параметр «Ключ» может иметь любой тип! Это очень важное свойство, таким образом, с помощью коллекции Соответствие можно в процессе работы устанавливать соответствие любых объектов с любыми объектами.
Простой пример работы с соответствием:
Для того чтобы поменять значение какого-нибудь элемента, который соответствует определенному ключу, достаточно для этого ключа присвоить новое значение.
Поменять имеющееся значение можно, также используя квадратные скобки.
Обход соответствия 1С
Обходить соответствие можно с помощью цикла Для каждого…Цикл.
Безошибочное получении значения соответствия 1С
Как Вы уже поняли, для того чтобы получить значение элемента соответствия, мы используем квадратные скобки. Но иногда возможны ситуации, когда применение квадратных скобок неосуществимо. В таких случаях мы можем использовать метод Получить, который возвращает любое значение, соответствующее ключу. Если такого ключа нет, то вернется значение Неопределено
Рассмотрим работу данного метода на соответствии с датами в качестве ключей.
Статьи о других универсальных коллекциях значений в 1С
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
можно оплатить вручную:
Вступайте в мои группы:
One thought on “ Учимся работать с соответствием в 1С 8.3 ”
Конструктор запросов представляет из себя набор вкладок, каждая из которых отвечает за свою часть запроса. Так заполняя вкладку Таблицы и поля мы выбираем таблицы из которых запрос 1с будет получать данные и поля этих таблиц необходимые для решения конкретной задачи. Заполняя в кладку Условия мы накладываем условия на выбранные таблицы, для того чтобы выбрать из них только нужные нам данные и так далее.
Для того чтобы вызвать конструктор запросов 1с 8 в программном коде необходимо:
- Создать новый запрос
- Задать пустую строку текста запроса
- Поставить курсор мышки между кавычками, нажать правую кнопку мыши. В открывшемся контекстном меню выбрать пункт Конструктор запроса и ответить Да на вопрос о создании нового запроса. Если текст запроса уже записан, то необходимо щелкнуть на любом месте внутри него и вызвать конструктор;
Рассмотрим на небольших примерах с возрастающей сложностью все основные вкладки конструктора запросов. Такой подход позволит начинающему программисту 1с более эффективно изучить конструктор и все его возможности. Для примеров будем использовать конфигурацию Бухгалтерия 3.0.
Задача: написать запрос к справочнику номенклатура, выбрать всю номенклатуру справочника.
Новые вкладки: Таблицы и поля.
Для начала создания запроса создадим новый запрос и вызовем конструктор (как это делается написано несколькими абзацами выше). После этого откроется окно конструктора на вкладке Таблицы и поля.
Теоретическая часть урока №1
Вкладка Таблицы и поля состоит из трех разделов:
База данных. В данном разделе представлены все таблицы базы данных, которые можно использовать для построения запроса;
Таблицы. В данный раздел выбираются таблицы необходимые для данного запроса. Для тогда чтобы переместить их из раздела база данных нужно:
Над разделом Таблицы присутствует ряд кнопок. Про большинство из них будет подробнее рассказано в следующих уроках. А пока дам только краткие пояснения.
- Создать вложенный запрос (красная линия). Предназначена для создания нового вложенного запроса;
- Создать описание временной таблицы (желтая линия). Позволяет задать имя временной таблицы, которая расположена вне данного запроса, также можно использовать для передачи в запрос таблицы значений;
- Изменить текущий элемент (зеленая линия). Позволяет перейти в выделенный вложенный запрос, временную таблицу или описание временной таблицы;
- Удалить текущий элемент (голубая линия). Удаляет выделенную таблицу из выбранных таблиц;
- Заменить таблицу (синяя линия). Открывает диалог замены выделенной таблицы. Полезно, если вы неверно выбрали виртуальную таблицу регистра, так как происходит позиционирование на текущей выбранной таблице в списке.
- Параметры виртуальной таблицы (фиолетовая линия). Открывает параметры виртуальной таблицы регистра.
Поля. В данный раздел выбираются поля таблиц из предыдущего раздела. Эти поля будут колонками таблицы или выборки полученной в результате выполнения запроса. Нужны они прежде всего, для того чтобы получить из выбранных таблиц только нужную в конкретном случае информацию. Для того чтобы переместить их из раздела Таблицы необходимо:
Над разделом Поля присутствует ряд кнопок. Про создание полей при помощи произвольных выражений будет подробнее рассказано в следующих уроках. А пока дам только краткие пояснения.
- Добавить (зеленая линия). Предназначена для добавления нового поля при помощи редактора произвольных выражений;
- Изменить текущий элемент (красная линия). Позволяет изменить выделенное поле при помощи редактора;
- Удалить текущий (синяя линия). Удаляет выделенное поле из списка.
Практическая часть урока №1
Мы разобрались с теорией необходимой для выполнения задания, предусмотренного в данном уроке. Напомню как оно звучит: написать запрос к справочнику номенклатура, выбрать всю номенклатуру справочника.
Приступим к созданию запроса по номенклатуре:
В итоге у нас получится запрос со следующим текстом:
В конструкторе также можно посмотреть текст запроса, который готов у вас на данном этапе написания. Для этого в нижней части окна есть специальная кнопка Запрос. После ее нажатия откроется окно просмотра / редактирования текста запроса. Для того чтобы вручную изменить запрос необходимо:
Читайте также: