Меню

1с функция запроса счетчик



Циклы в программировании 1С 8.3

Цикл в программировании — это любая многократно исполняемая последовательность инструкций, организованная любым способом. Именно так описывается цикл во всех языках программирования. По сути циклы в 1С 8.3 не исключение. Но как всегда, каждый язык программирования имеет свою конструкцию, синтаксис, что выражаясь на обычном языке можно описать как правописание. Перейдем к изучении основных понятий и к примерам.

Цикл «Для…»

Оператор цикла Для предназначен для циклического повторения операторов, в конструкции Цикл – КонецЦикла. Условие выполнения цикла всегда проверяется в начале, перед выполнением цикла.

  • Переменная является счетчиком и при каждом повторении цикла автоматически увеличивается на 1. Иначе говоря, это счетчик цикла.
  • Знач1 число, которое задает начальное значение счетчику цикла.
  • Знач2 число, которое задает максимальное значение счетчику цикла. Если значение счетчика цикла становится больше чем Знач2 цикл прекращается.

Пример 1 — Простой обход циклом с счетчиком

На данном примере счетчик цикла Сч при каждом входе в цикл увеличится на единицу, и пока не достигнет значению 11, цикл будет продолжаться.

Пример 2 — Обход с увеличением

Но, при решении конкретных задач, автоматическое увеличение значения счетчика цикла на единицу не всегда уместно. Так что же делать, ведь это же автоматическая функция?! Но всегда есть выход.

Рассмотрим конкретный пример в котором попробуем счетчику цикла задать шаг ровной к 5-и:

Пример 3 — С выходом из цикла «Прервать» (проверка на вечный цикл)

Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>

Приведем пример, где Сч, Счетчик, Сдвиг, Шаг, КоличествоСообщений являются переменными. Во избежание вхождения программы в вечный цикл, проводиться проверка и при необходимости цикл прерывается:

*Данный пример мы привели во внешней обработке.

Цикл «Для Каждого…»

Оператор цикла Для Каждого предназначен для циклического обхода коллекций значений. При каждой итерации цикла возвращается новый элемент коллекции. Обход осуществляется до тех пор, пока не будут перебраны все элементы коллекции.

  • Переменная: при каждом входе в цикл переменной присваивается значение очередного элемента коллекции.
  • КоллекцияЗначений: коллекция значений, элементы которой будут присваиваются переменной Переменная.

Пример 1 — Простой обход таблицы значения

Создадим таблицу значений. Как мы помним, делается это на сервере.

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

Индекс Значение элемента Тип элемента Автомобиль Класс Вес
СтрокаТаблицыЗначений СтрокаТаблицыЗначений «KIA» «A Класс» 1 100
1 СтрокаТаблицыЗначений СтрокаТаблицыЗначений «Ford» «B Класс» 1 300
2 СтрокаТаблицыЗначений СтрокаТаблицыЗначений «BMW» «C Класс» 1 400

Теперь реализуем обход по коллекции с помощью цикла Для Каждого.

Как мы видим, в каждой строке сообщения оказались данные одной машины, то есть присвоились значение очередного элемента коллекции переменной Ст.

*Данный пример мы привели во внешней обработке.

Читайте также:  Счетчик циклов зарядки iphone

Пример 2 — Обход массива

Создадим еще одну коллекцию. Массив, в отличии от таблиц значений, можно создать на клиенте тоже.

Взглянем на коллекцию:

Индекс Значение элемента Тип элемента
«Арина» Строка
1 «Марина» Строка
2 «Карина» Строка

А теперь реализуем обход по коллекции, с помощью цикла Для Каждого:

Пример 3 — Оператор «Продолжить»

Еще один пример, где применим оператор Продолжить:

Индекс Значение элемента Тип элемента
3 Число
1 7 Число
2 8 Число
3 9 Число

Цикл «Пока…»

Оператор цикла Пока предназначен для циклического повторения операторов, находящиеся внутри конструкции Цикл – КонецЦикла. Цикл выполняется, пока логическое выражение равно Истина. Условие выполнения цикла всегда проверяется вначале, перед выполнением цикла. (Описание: синтакс-помощник)

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

Пример 1 — Обход массива с счетчиком

Взглянем на коллекцию.

Индекс Значение элемента Тип элемента
«Снегурочка N1» Строка
1 «Баядерка N2» Строка
2 «Синяя птица N3» Строка
3 «Красная Шапочка N4» Строка

Как мы знаем, индексы строк в коллекции начинаются с 0-я. Это прекрасно видно на развернутом виде коллекции.

  • МоиЛюбимыеКонфеты.Количество() определяет количество срок в коллекции, что в данном случае рано 4-ом.
  • МоиЛюбимыеКонфеты[Сч] определяет элемент коллекции по индексу, где Сч играет роль индекса, и при каждом входе в цикл прибавляется на единицу. Тем самим, мы с каждым разом обращаемся к следующей строке коллекции, начиная со строки с индексом 0. И цикл будет продолжаться, пока значение логического выражение Сч Пример 2 — Обратный цикл с счетчиком

Но можно получить тот же список, но в обратном порядке. Это называется обратный цикл, хотя на самом деле, этот тот же самый цикл Пока.

Обратимся к тому же массиву, но напишем код обратного цикла.

Поясню, что счет индекса начинается с цифры равному количества строк -1, поскольку индекс последней строки ровно 3-ом. После, в каждом цикле, индекс уменьшается на единицу и тем самим мы обходим коллекцию с обратной стороны.

*Данный пример мы привели во внешней обработке.

«Прервать» и «Продолжить» в циклах 1С 8.3

Вы думаю заметили, что в нескольких циклах, мы специально показали действие операторов Прервать и Продолжить. Хотя слова сами говорят о себе, да и в циклах вполне понятны их действия, тем не менее в заключении статьи, поясним и действие этих операторов.

  • Прервать: прерывает выполнение цикла в любой точке. После выполнение этого оператора цикл прекращается и управление передается следующему оператору, который находиться после ключевого слова КонецЦикла.
  • Продолжить: возвращает управление в начало цикла. Операторы, следующие в теле цикла за оператором Продолжить, не выполняются в текущей итерации обхода.

Видео Школы 1С по теме циклов

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Источник

Все функции и конструкции языка запросов 1С 8.2 и 1с 8.3

В этой статье мы хотим обсудить с Вами все функции языка запросов 1с, а также конструкции языка запросов. Чем же отличается функция от конструкции? Функция вызывается со скобками и возможными параметрами в них, а конструкция пишется без скобок. Безусловно все конструкции и функции языка запросов 1с делают процесс получения данных гибким и многофункциональным. Данные функции и конструкции применимы к полям запроса, а некоторые также применимы в условиях.

Функции языка запросов 1с

Поскольку понятное описание функций языка запросов 1с встречается намного реже, чем описание конструкций, мы решили начать рассматривать именно функции. Теперь давайте разберем каждую по отдельности, описав ее назначение, синтаксис и пример использования, итак:

1. Функция ДАТАВРЕМЯ — данная функция создает константное поле с типом «Дата».

2. Функция РАЗНОСТЬДАТ — возвращает разность двух дат в одном из измерений (год, месяц, день, час, минута, секунда). Измерение передается в параметре.

3. Функция ЗНАЧЕНИЕ — задает константное поле с предопределенной записью из базы данных, также можно получить пустую ссылку любого типа.

4. Функция ВЫБОР — перед нами аналог конструкции ЕСЛИ который используется в коде, только эта используется в запросах 1С.

Синтаксис: ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ

5. Функция ВЫРАЗИТЬ — позволяет выразить константное поле определенным типом.

Синтаксис: ВЫРАЗИТЬ(НазваниеПоля КАК НазваниеТипа)

Еще есть вариант использования функции ВЫРАЗИТЬ в полях смешанных типах, где такие встречаются? Самый простой пример это «Регистратор» у любого регистра. Так зачем нам может понадобиться уточнять тип в регистраторе? Давайте рассмотрим ситуацию когда мы из регистратора выбираем поле «Номер», из какой таблицы будет выбран номер? Правильный ответ из всех! Поэтому чтобы наш запрос работал быстро следует указывать явный тип с помощью функции ВЫРАЗИТЬ

6. Функция ISNULL (альтернативное написание ЕСТЬNULL) — если поле имеет тип NULL, то оно заменяется на второй параметр функции.

Также отметим что тип NULL желательно ВСЕГДА заменять на какое-то значение, т.к. сравнение с типом NULL всегда дает ЛОЖЬ даже если вы сравниваете NULL с NULL. Чаще всего значения NULL образуются в результате соединения таблиц (все виды соединений кроме внутреннего).

7. Функция ПРЕДСТАВЛЕНИЕ — позволяет получить представление поля запроса.

Конструкции в языке запросов 1с

Выше мы рассмотрели с Вами функции языка запросов 1с, теперь пришло время рассмотреть конструкции в языке запросов 1с, они не менее важны и полезны, приступаем.

1. Конструкция ССЫЛКА — представляет из себя логический оператор проверки ссылочного типа. Наиболее часто встречается при проверки поля составного типа на конкретный тип. Синтаксис: ССЫЛКА

2. Конструкция МЕЖДУ — данный оператор проверяет входит ли значение в указанный диапазон.

Синтаксис: МЕЖДУ И

3. Конструкция В и В ИЕРАРХИИ — проверяют находится ли значение в передаваемом списке (в качестве списка могут передаваться массивы, таблицы значений и т.д.). Оператор В ИЕРАРХИИ позволяет просматривать иерархию (пример использования ПланСчетов).

Синтаксис: В( ), В ИЕРАРХИИ( )

4. Конструкция ПОДОБНО — эта функция позволяет нам сравнивать строку с шаблоном строки.

Варианты шаблона строки:

% — последовательность, содержащая любое количество произвольных символов.

_ — один произвольный символ.

[. ] — любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок. В перечислении могут задаваться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона.

[^. ] — любой одиночный символ, либо последовательность символов из перечисленных внутри квадратных скобок кроме тех, которые перечислены следом за значком отрицания.

5. Конструкция РАЗРЕШЕННЫЕ — этот оператор позволяет выбрать только те записи из БД, на которые вызывающий имеет право чтения. Данные права настраиваются на уровне записей (RLS).

Синтаксис: РАЗРЕШЕННЫЕ пишется после ключевого слова ВЫБРАТЬ

6. Конструкция РАЗЛИЧНЫЕ — позволяет выбрать записи в которых отсутствуют повторные записи.

Синтаксис: РАЗЛИЧНЫЕ пишется после ключевого слова ВЫБРАТЬ

Также Конструкция РАЗЛИЧНЫЕ может использоваться с оператором РАЗРЕШЕННЫЕ и другими операторами.

7. Конструкция ПЕРВЫЕ — выбирает указанное в параметре число записей из результата запроса.

8. Конструкция ДЛЯ ИЗМЕНЕНИЯ — позволяет заблокировать таблицу, работает только в транзакциях (актуально только для автоматических блокировок).

Синтаксис: ДЛЯ ИЗМЕНЕНИЯ

9. Конструкция УПОРЯДОЧИТЬ ПО — упорядочивает данные по определенному полю. Если полем является ссылка то при установке флага АВТОУПОРЯДОЧИВАНИЕ будет происходить сортировка по представлению ссылки, если флаг выключен то ссылки сортируются по старшинству адреса ссылки в памяти.

Синтаксис: УПОРЯДОЧИТЬ ПО АВТОУПОРЯДОЧИВАНИЕ

10. Конструкция СГРУППИРОВАТЬ ПО — используется для группировки строк запроса по определенным полям. Числовые поля должны использоваться с любой агрегатной функцией.

Синтаксис: СГРУППИРОВАТЬ ПО , . ,

11. Конструкция ИМЕЮЩИЕ — позволяет применить агрегатную функцию к условию выборки данных, похожа на конструкцию ГДЕ.

12. Конструкция ИНДЕКСИРОВАТЬ ПО — используется для индексации поле запроса. Запрос с индексацией дольше выполняется, но ускоряет поиск по индексированным полям. Можно использовать только в виртуальных таблицах.

Синтаксис: ИНДЕКСИРОВАТЬ ПО

13. Конструкция ГДЕ — позволяет наложить условие на любые поля выборки. В результат попадут записи только удовлетворяющие условию.

14. Конструкция ИТОГИ . ПО ОБЩИЕ — применяется для подсчета итогов, в конструкции указываются поля по которым будут считаться итоги и агрегатные функции применяемые к итоговым полям. При использовании итогов на каждое поле следующее после конструкции ИТОГИ производится группировка данных. Есть необязательная конструкция ОБЩИЕ, ее использование также обеспечивает дополнительную группировку. Пример результата запроса вы увидите ниже.

Синтаксис: ИТОГИ ПО

На рисунке обведены группировки которые образовались в ходе выполнения запроса, самая верхняя относится к секции ОБЩИЕ, а вторая к полю ДоговорКонтрагентаВидДоговора.

Источник