1с запрос получить предыдущую запись

Обновлено: 04.07.2024

Структура кода запроса в 1С легко изучить. Начнем от простого запроса к более сложным вариантам.

Выбрать

Любой запрос имеет команду ВЫБРАТЬ, после которой могут идти дополнительные параметры выборки, которые позднее рассмотрим отдельно:
ПЕРВЫЕ <ЧИСЛОЗАПИСЕЙ>
РАЗЛИЧНЫЕ
РАЗРЕШЕННЫЕ

Далее идет список полей выборки.

Простейший запрос в 1С может иметь такой вид:

Данный запрос вернет таблицу, состоящую из одной строки и одной колонки, в которой будет числовое значение равное 1.

Усложняем запрос: добавим еще поля, разделив их запятой
ВЫБРАТЬ 1, 2, "3"

Этот запрос также вернет 1 строку, но уже с 3 колонками, две из которых содержат числа, а 3 строковое.

Поэтому в языке запросов существует специальный оператор именования КАК <ИмяПоля>, который идет после поля,

Предыдущий запрос можно представить в таком виде:
ВЫБРАТЬ 1 КАК Один, 2 КАК Два, "3" КАК ЦифраТриСтрокой

Имена полей задаются по правилам именования переменных: не могут начинаться со строки, содержать пробелы, не должны повторятся в одной выборке, а также отсутствовать (они поставятся автоматически).
Возможно опускать слово КАК, но лучше такой вариант не использовать, так как конструктор запросов это исправит:
ВЫБРАТЬ ссылка ссылка ИЗ Справочник.ФизическиеЛица

Такие простые запросы конечно имеют место в реальных условиях, как вспомогательные таблицы, но обычно требуется выборка из какого-то источника.

Для этого существует оператор ИЗ <ТаблицаДанных>, в которой источник данных может быть реальной таблицей из базы данных, а также виртуальными таблицами, которые существуют к некоторым таким таблицами или же к временным таблицам.

Пример простого запроса к реальной таблице справочника:

ВЫБРАТЬ ссылка ИЗ Справочник.Контрагенты

В таких запросах мы можем указать конкретные поля, которые нам нужны или указать *.

ВЫБРАТЬ * ИЗ Справочник.Контрагенты

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

Вложенные таблицы

Также возможно обращение к вложенной таблице:

ВЫБРАТЬ * ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация

Как видите, здесь мы впервые использовали именование таблицы, которое также упрощает работу при написании запроса, это дает возможность обращения по этому имени к полям:

ВЫБРАТЬ КИ.Ссылка ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КИ //так иногда будет короче

Особенностью запросов к вложенным таблицам является то, что возможно обращение к родительской таблице через поле ссылка через точку.

ВЫБРАТЬ Ссылка.Наименование ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КонтактнаяИнформация

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

ВЫБРАТЬ Ссылка, ОсновнойДоговор.Наименование КАК НазваниеДоговора ИЗ Справочник.Контрагенты

В данном случае поле ОсновнойДоговор может быть пустым, тогда обращение к его наименованию не вызовет ошибку, но значение будет NULL, поэтому рекомендуется использовать ЕстьNULL.

Дополнительно

Вернемся к запросу

ВЫБРАТЬ КИ.Ссылка ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КИ

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

Чтобы избежать этого можно воспользоваться служебным словом РАЗЛИЧНЫЕ: система устранит все дубли автоматически.

ВЫБРАТЬ РАЗЛИЧНЫЕ КИ.Ссылка ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КИ

Если мы хотим ограничить результат выборки количеством записей (например сотней) используем ПЕРВЫЕ, но использовать ее необходимо с осторожностью (иногда эта команда срабатывает раньше, чем применяются условия запросов), следует тестировать запросы основательно.

ВЫБРАТЬ ПЕРВЫЕ 100 КИ.Ссылка ИЗ Справочник.Контрагенты.КонтактнаяИнформация КАК КИ

ВЫБРАТЬ * ИЗ (ВЫБРАТЬ * ИЗ Справочник.Контрагенты) КАК ВложеннаяТаблица

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

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

Регистр команд, имен и полей запроса не имеет значение: Выбрать и ВыБРатЬ равносильны.

Получить последнее значение параметра цикла
Всем привет, Новичок в программирование и питоне. Допустим есть код: for i in range(6): .


Получить первое и последнее значение с учетом DateTime
Здравствуйте! Необходимо обратиться с запросом к базе данных: SELECT A1, A1 FROM Runtime .


Получить последнее(текущее) значение из столбца таблицы MS SQL
Добрый вечер. Возник вопрос, подскажите, как получить последнее значение из столбца таблицы MS SQL.


Phpmyadmin - получить последнее значение поля автоинкремента таблицы
Заливаю ссылку на картинку, которая основывается на id записи. Например, картинка записи с >

Решение

Александр321321, Первый вариант. Упорядочить запрос, чтобы ваша последняя строка стала первой
ВЫБРАТЬ ПЕРВЫЕ 1
УПОРЯДОЧИТЬ ПО (здесь ваше поле) убыв
Или второй вариант
ну да, то что можно упорядочить логично, я почему-то по возрастанию сделал. Спасибо. Но всё же интересно, можно ли в самом запросе как-нибудь указать, чтобы не получать тысячи ненужных записей. Например, чтобы запрос начал искать с конца записей РегСв и остановился как нашел первую запись Александр321321, Для этого в РегСв есть СрезПоследних. Смысл изобретать велосипед Я делал. Мне нужно найти запись, где значение заданного ресурса не заполнено.
Вылазит ошибка "Недопустимое значение параметра", если в структуре убрать "Курс", то всё срабатывает, но мне нужно искать именно по нему(причём то что он заполнен и не равен 0, как передать это в структуре не знаю) Добрый. Нет, в измерениях валюта, а курс в ресурсах. По Валюте отбор идёт, а если начинаю по курсу, то выдаёт ошибку

Тогда сделать отбор по ресурсам не представляется возможным, только по измерениям. А значит валюта проходит, а вот по курсу уже невозможно сделать.

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

Здесь не указывается возможность установки отборов по ресурсам.

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


Как получить значение запроса?
Пономаю что вопрос очень тупой, но плиз откройте мне глаза. Как получить значение для.


Получить значение из post запроса
Вот есть сайт, вводятся данные есть одно поле, где можно ввести разные ответы ну допустим ввёл.

Получить в VBA значение из запроса
Здравствуйте! Подскажите пожалуйста, как получить значение из запроса в VB

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

  • Предназначен для предварительной обработке данных, либо для более удобного восприятия.
  • Может использоваться в качестве параметра условия В()

Синтаксис вложенного запроса:

ВЫБРАТЬ * из (ВЫБРАТЬ 1) КАК ВложенныйЗапрос

ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ Ссылка В (ВЫБРАТЬсколько с Ссылка ИЗ Справочник.Контрагенты)

ВЫБРАТЬ * ИЗ Справочник.Контрагенты ГДЕ (Ссылка,Наименование) В (ВЫБРАТЬ Ссылка,Наименование ИЗ Справочник.Контрагенты)


В конструкторе вложенный запрос создается на основной вкладке по специальной кнопке:


Иконка у таблицы вложенного запроса отличается от других таблиц:

Прочие сведения о вложенных запросах

Считается, что вложенные запросы менее оптимизированы на скорость, но с появлением платформы 8.3 данный фактор справедлив только для Postgres SQL (возможно особенность конкретной сборки).

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

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

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

Например:

ВЫБРАТЬ * ИЗ Справочник.Контрагенты КАК Основная ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ * ИЗ Справочник.Контрагенты ) КАК Вложенный ПО Основная.Ссылка = Вложенный.Ссылка

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

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

В случае использования результата агрегатной функции в качестве условия соединения таблиц:

  • Для простого отбора можно воспользоваться конструкцией ИМЕЮЩИЕ.
    Если же нам необходимо посчитать остаток в рознице + в опте (в торговле) и вывести только, те у которых общий остаток меньше 10, без вложенного запроса невозможно будет обойтись.
  • Условия в запросах виртуальных таблиц работают лучше и быстрее, если используется В(), вместо обращения через точку:

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта В(ВЫБРАТЬ ссылка из Справочник.Валюты. ГДЕ Наименование = "Рубль"))

ВЫБРАТЬ * ИЗ РегистрСведений.КурсыВалют.СрезПоследних(, Валюта.Наименование = "Рубль")

Читайте также: