Найти в Дзене
CORS Academy

Табличная модель прикладного решения в 1С

Конструктор запроса – это инструмент разработчика,
включенный в систему 1С:Предприятие, позволяющий составлять и
редактировать текст запроса к базе данных на языке запросов.
Конструктором могут воспользоваться разработчики в конфигураторе и
квалифицированные пользователи, обладающие знаниями языка запросов, без
использования конфигуратора в режиме 1С:Предприятие. Возможности конструктора запроса рассматривали в мастер-классе «Конструкторы запроса и ограничений доступа». Таблицы и поля – выбираются таблицы и поля, которые будут отражаться в запросе. Для заполнения раздела «Поля» можно воспользоваться несколькими способами: В качестве источника данных могут выступать реальные таблицы (таблицы
объектов, таблицы регистрации изменений объектов и таблицы из внешних
источников данных), вложенные таблицы, временные таблицы и виртуальные
таблицы, также в качестве источника можно указать параметр, а в сам
параметр передать таблицу значения, табличную часть или результат
запроса. Для ка
Оглавление

Конструктор запроса

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

Конструктор запроса
Конструктор запроса

Возможности конструктора запроса рассматривали в мастер-классе «Конструкторы запроса и ограничений доступа».

Возможности конструктора запроса

Таблицы и поля

Таблицы и поля – выбираются таблицы и поля, которые будут отражаться в запросе.

Для заполнения раздела «Поля» можно воспользоваться несколькими способами:

  • Сначала заполнить раздел «Таблицы», а потом, выбирая нужные объекты из этого раздела, перенести их в раздел «Поля», используя двойной клик левой клавиши мыши
  • Не заполняя раздел «Таблицы», сразу выбирать нужные объекты из таблиц – источников данных раздела «База данных», перенося их в раздел «Поля», используя технологию Drag & Drop. Раздел «Таблицы» заполняется автоматически
  • Сначала
    заполнить раздел «Таблицы», а потом, выбирая нужные объекты из этого
    раздела, перенести их в раздел «Поля», используя кнопки на форме >,
    >>

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

Возможные источники
Возможные источники

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

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

Вложенный запрос может использоваться в качестве таблицы-источника, в качестве операнда операций сравнения «В» или «НЕ В» при задании условия в секции «ГДЕ»
или при задании параметров виртуальной таблицы. Нужно учитывать, что
поля из вложенных таблиц не попадают ни в группируемые и ни в агрегатные
разделы.

Вложенный запрос в качестве таблицы-источника
Вложенный запрос в качестве таблицы-источника
Вложенный запрос в качестве значения условия
Вложенный запрос в качестве значения условия
Отсутствие полей вложенного запроса в группировках
Отсутствие полей вложенного запроса в группировках
Использование агрегатной функции Количество(*)
Использование агрегатной функции Количество(*)
Вложенный запрос в качестве значения условия в параметрах виртуальной таблицы
Вложенный запрос в качестве значения условия в параметрах виртуальной таблицы

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

Параметры виртуальных таблиц
Параметры виртуальных таблиц

Параметры для разных видов виртуальных таблиц отличаются. Рассмотрим самые неочевидные параметры:

  • Периодичность – позволяет детализировать информацию в соответствии с выбранным периодом. Если выбрать значение Авто, то в конструкторе запроса становятся доступны все варианты периодичности для выбора в качестве поля.
ИЗ РегистрНакопления.Продажи.Обороты(, , Авто, )
ИЗ РегистрНакопления.Продажи.Обороты(, , Авто, )
  • МетодДополнения – включает или исключает движения на
    начало и конец периода, но работает если значение параметра
    Периодичность не равно Период. У параметра
    МетодДополнения два значения:
  • Движения – будут выведены только те периоды в которых были движения
ИЗ          РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&НачалоПериода, , Регистратор, Движения, )
ИЗ          РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&НачалоПериода, , Регистратор, Движения, )
  • ДвиженияИГраницыПериода – будут дополнительно добавлены
    движения, сделанные на начало и конец периода, если начальный остаток
    не пустой (в примере на 7 мая 2024 начальный остаток у ручки и
    холодильника пустой). Используется по умолчанию, даже если поле в
    параметре
    МетодДополнения пустое
ИЗ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&НачалоПериода, , Регистратор, ДвиженияИГраницыПериода, )
ИЗ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&НачалоПериода, , Регистратор, ДвиженияИГраницыПериода, )

Связи

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

Сложный связи таблиц-источников
Сложный связи таблиц-источников
Результат сложной связи таблиц-источников
Результат сложной связи таблиц-источников
  • [ВНУТРЕННЕЕ] СОЕДИНЕНИЕ означает, что из обеих
    исходных таблиц – источников данных в результат запроса необходимо
    включить только те комбинации записей, которые соответствуют указанному
    условию. Остальные записи в результат не попадают. Флаг «
    Все» отсутствует у таблиц-источников
-15
Внутреннее соединение
Внутреннее соединение
  • ЛЕВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в
    результат запроса надо включить все записи из левой таблицы, а из правой
    таблицы только соответствующие указанному условию. В случае отсутствия
    соответствующих условию записей в правой таблице будут выведены записи
    со значениями NULL. Флаг «
    Все» присутствует у левой у таблиц-источника
-17
Левое соединение
Левое соединение
  • ПРАВОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в
    результат запроса надо включить все записи из правой таблицы, а из левой
    таблицы только соответствующие указанному условию. В случае отсутствия
    соответствующих условию записей в левой таблице будут выведены записи со
    значениями NULL. Флаг «
    Все» присутствует у правой таблицы-источника
-19
Правое соединение
Правое соединение
  • ПОЛНОЕ [ВНЕШНЕЕ] СОЕДИНЕНИЕ означает, что в
    результат запроса надо включить все записи из обеих таблиц. В случае
    отсутствия соответствующих условию записей в левой и в правой таблице
    будут выведены записи со значениями NULL. Флаг «
    Все» установлен у таблиц-источников
-21
Полное соединение
Полное соединение

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

Отсутствие настройки связи
Отсутствие настройки связи
Результат отсутствия соединения
Результат отсутствия соединения

Условия

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

  • Параметры
-25
  • Значения примитивных типов
-26
  • Значения перечислений
-27
  • Предопределенные данные (справочников, планов видов характеристик, планов счетов, планов видов расчетов и т.д.)
-28
  • Пустые ссылки
-29
  • Значения точек маршрута бизнес-процесса
-30
  • Системные перечисления, но только те, которые могут быть
    присвоены в качестве значения полям в таблицах (ВидДвиженияНакопления,
    ВидСчета и ВидДвиженияБухгалтерии)
-31

Обращение к предопределенным данным осуществляется с помощью функции Значение().

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

Дополнительно – находятся разнообразные параметры настройки запроса такие как:

  • Первые – в результат запроса попадет N количество первых записей отобранных с учетом правил упорядочивания
Вывод первых 3-х записей
Вывод первых 3-х записей
  • Без повторяющихся – если в таблице-источнике
    есть записи, в которых значения во всех выбираемых полях совпадают, то в
    результат запроса попадет только одна из них (действует только на
    детальные записи).
Вывод без повторяющихся записей
Вывод без повторяющихся записей
  • Разрешенные – выводит только разрешенные
    записи, определенные ограничением на чтение в соответствующей роли. Если
    в такой ситуации данный флаг не устанавливать, то произойдет ошибка
    выполнения запроса.
Отсутствие прав на просмотр запрещенных записей
Отсутствие прав на просмотр запрещенных записей
Просмотр только разрешенных записей
Просмотр только разрешенных записей
  • Блокировать получаемые данные для последующего изменения (Для изменения)
    позволяет заблокировать на чтение данные указанных таблиц-источников в
    запросе (как вне, так и в рамках транзакции), при этом в файловом
    варианте блокировки устанавливаются на всю таблицу базы данных, а в
    клиент-серверном варианте устанавливаются на записи таблиц базы данных. В
    списке «
    Таблицы для изменения» можно конкретизировать список
    таблиц, которые нужно заблокировать. Если список пуст, то все таблицы,
    задействованные в запросе, будут заблокированы для изменения.
Блокировки записей на изменение
Блокировки записей на изменение
  • Создание временной таблицы – такие таблицы
    способны повысить производительность запроса, в некоторых случаях
    снизить количество блокировок, а также сделать текст запроса более
    легким для чтения и восприятия разработчиком. Результат запроса, в
    котором создается временная таблица будет содержать количество записей,
    помещенных во временную таблицу.
Результат запроса временной таблицы
Результат запроса временной таблицы

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

-38

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

Запрос.МенеджерВременныхТаблиц.Таблицы[0].ПолучитьДанные().Выгрузить()

  • Уничтожение временной таблицы – уничтожает временную таблицу, освобождает память

Объединения/Псевдонимы

Объединения/Псевдонимы – настраивается
список запросов для объединения, а также можно задать псевдонимы полей.
При задании псевдонимов полей, эти псевдонимы будут отображаться в ряде
других закладок конструктора запроса. Установленные псевдонимы нельзя
использовать в секции «ГДЕ», «ИМЕЮЩИЕСЯ» и «СГРУППИРОВАТЬ ПО» При
объединении запросов используется ключевое слово «
ОБЪЕДИНИТЬ», в
этом случае будут выведены записи без повторения из запросов. Если
необходимо вывести все записи из запросов, то дополнительно указывается
параметр «
ВСЕ». Никакие другие условия объединения установить
нельзя. Количество полей для объединения в запросах может отличаться,
просто в этом случае для непарного поля система установит значение NULL,
разработчик при необходимости эти сопоставления может настроить
самостоятельно. Нужно учитывать, что записи выводятся в порядке
объединения запросов, то есть сначала выведутся все записи из первого
запроса, а потом из второго.

Результат объединения
Результат объединения

Построитель (В СКД Компоновка данных)
используется для построения динамического текста запроса. Динамические
тексты запросов используются в СКД или в программных модулях. Расширения
языка запроса выделяются фигурными скобками { }

-40

Порядок

Порядок – используется для организации
сортировки значений в полях по возрастанию или по убыванию. Для
виртуальных таблиц не используется. Флаг «
АВТОУПОРЯДОЧЕВАНИЕ»
позволяет включить режим автоматического формирования полей
упорядочивания, в этом случае выбранные для упорядочивания ссылочные
поля будут упорядочены по основному представлению, а не по внутреннему
глобальному уникальному идентификатору (GUID). Например, справочник
может быть упорядочен по наименованию или коду, а документ по дате
(совокупность значений «
Дата» и «Ссылка» образует понятие МоментВремени,
который определяет хронологическую позицию текущего документа среди
других документов). Если список полей для упорядочивания будет пуст, то
режим автоупорядочивания будет упорядочивать записи по полям сортировки
(у справочника это код или наименование, у документа – совокупность
значений «
Дата» и «Ссылка»), либо упорядочивать ссылочные поля, указанные в секциях «СГРУППИРОВАТЬ ПО» или «ИТОГИ»

Автоупорядочивание справочника
Автоупорядочивание справочника
Автоупорядочивание документа, при пустом списке упорядочивания
Автоупорядочивание документа, при пустом списке упорядочивания

Итоги

Итоги – используется для получения итогов по выбранным полям. В колонке «Тип итогов» можно указать:

  • Элементы – итоги будут рассчитываться по контрольным точкам.
  • Элементы и иерархия (Иерархия) – итоги будут рассчитываться по контрольным точкам, а также будут рассчитываться итоги по иерархии для контрольных точек.
  • Только иерархия – итоги будут рассчитываться только по иерархии для контрольных точек.
Итоги только по иерархии
Итоги только по иерархии

Пакет запроса

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

Пакет запроса
Пакет запроса
Просмотр таблиц из пакета запроса
Просмотр таблиц из пакета запроса

Обход выборки из результата запроса

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

Существует несколько разных способов обхода выборки:

  • Линейный обход (Прямой)
  • Обход по группировкам (ПоГруппировкам)
  • Иерархический обход (ПоГруппировкамСИерархией)

Тип обхода выборки задается значением системного перечисления ОбходРезультатаЗапроса и передается в качестве параметра в метод Выбрать() объекта РезультатЗапроса.

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

ВЫБРАТЬПриходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,ПриходнаяНакладнаяСписокНоменклатуры.Ссылка КАК Ссылка,ПриходнаяНакладнаяСписокНоменклатуры.Количество КАК КоличествоИЗДокумент.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатурыИТОГИСУММА(Количество)ПОНоменклатура ИЕРАРХИЯАВТОУПОРЯДОЧИВАНИЕ
Исходный результат запроса
Исходный результат запроса

Линейный обход (Прямой)

Обход записей проходит по порядку.

-47
Результат прямого обхода
Результат прямого обхода

Обход по группировкам (ПоГруппировкам)

Обход записей запроса используется в случае получения в результате запроса итоговых данных (в запросе присутствует секция «ИТОГИ ПО»).

-49
Результат обхода по группировкам
Результат обхода по группировкам

Иерархический обход (ПоГруппировкамСИерархией)

Обход записей запроса проходит только по записям, находящимся на одном уровне иерархии итоговой группировки.

-51
Результат обхода по группировкам с иерархией
Результат обхода по группировкам с иерархией

Конструктор ограничений доступа к данным

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

Конструктор ограничений доступа к данным
Конструктор ограничений доступа к данным

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

  • Чтение (право «Чтение»)
  • Добавление (право «Добавление»)
  • Изменение (право «Изменение»)
  • Удаление (право «Удаление»)

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

Доступные поля для права Чтение
Доступные поля для права Чтение
Отсутствие полей на право Добавление
Отсутствие полей на право Добавление

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

Установка значения в параметр сеанса
Установка значения в параметр сеанса
Использование параметра сеанса
Использование параметра сеанса
Использование результатов запроса
Использование результатов запроса

Ваганов Сергей, эксперт в области разработки прикладных решений на платформе 1С:Предприятие, преподаватель-методист CORS Academy и автор курса «Разработчик 1С с нуля до профессионала».

-59
-60

Подписывайтесь:

CORS Клуб – сообщество и образовательная среда для специалистов из IT-сферы https://cors.su/klub/

АБП -Сообщество специалистов по автоматизации бизнес-процессов и по использованию ИТ технологий в бизнесе https://t.me/analitiki_1c

Канал руководителей IT компаний и подразделений, CIO, СDO, CDTO https://t.me/cio_channel

CIO. Сообщество IT руководителей https://vk.com/cio_club