-
Notifications
You must be signed in to change notification settings - Fork 7
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
added descriptions about query schema
- Loading branch information
1 parent
74eee97
commit 6249585
Showing
2 changed files
with
115 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,114 @@ | ||
# Подсистема "схемы запросов" | ||
|
||
## Описание подсистемы | ||
|
||
Встроенный язык 1С позволяет использовать текстовые запросы для извлечения данных из базы. Однако зачастую требуется динамически изменять текст запросов в зависимости от условий алгоритма. Это может включать добавление новых условий, полей выборки или модификацию существующих параметров. | ||
|
||
Подсистема ``Схемы запросов`` предоставляет удобный интерфейс для работы с текстами запросов через объектную модель, позволяя: | ||
|
||
- Избежать прямого редактирования текста запроса. | ||
- Улучшить читаемость и поддержку кода. | ||
- Минимизировать вероятность ошибок, связанных с изменением текстов запросов. | ||
|
||
## Требования для работы со схемой запросов | ||
|
||
- Сохранение родительских объектов | ||
Для корректного использования объектов схемы запроса их родительские объекты должны оставаться существующими. Например, нельзя получить объект **``ПоляСхемыЗапроса``** из **``ОператорВыбратьСхемыЗапроса``**, затем удалить этот оператор из **``ЗапросВыбораСхемыЗапроса``** и после этого пытаться добавить новые выражения в **``ПоляСхемыЗапроса``**. | ||
|
||
- Уникальность объектов схемы запроса | ||
Объекты, полученные из одной схемы запроса, не могут быть использованы в другой схеме. | ||
|
||
## Примеры использования | ||
|
||
**Пример 1: Добавление условия отбора** | ||
Неправильно: | ||
Вставка условия с использованием СтрЗаменить увеличивает объем кода и снижает читаемость. Возможна ситуация когда фрагмент кода ``НЕ пбп_ПредопределенныеЗначения.ПометкаУдаления`` используется не только в секции ``ГДЕ`` | ||
|
||
```BSL | ||
Если пбп_ОбщегоНазначенияПовтИсп.ПолучитьЗначениеКонстанты("пбп_ИспользоватьПользовательскиеФункции") Тогда | ||
Запрос.Текст = СтрЗаменить(Запрос.Текст, "НЕ пбп_ПредопределенныеЗначения.ПометкаУдаления", | ||
"НЕ пбп_ПредопределенныеЗначения.ПометкаУдаления | ||
|пбп_ПредопределенныеЗначения.ИдентификаторНастройки <> """""); | ||
КонецЕсли; | ||
``` | ||
|
||
Правильно: | ||
Используйте функцию ``ДобавитьОтборВЗапрос``, чтобы вставить условие в секцию ``ГДЕ``: | ||
```BSL | ||
Если пбп_ОбщегоНазначенияПовтИсп.ПолучитьЗначениеКонстанты("пбп_ИспользоватьПользовательскиеФункции") Тогда | ||
Запрос.Текст = пбп_СхемыЗапросов.ДобавитьОтборВЗапрос(Запрос.Текст, | ||
"пбп_ПредопределенныеЗначения.ИдентификаторНастройки <> """""); | ||
КонецЕсли; | ||
``` | ||
|
||
**Пример 2: Множественное добавление полей выборки** | ||
|
||
Для динамического формирования списка полей можно использовать функцию ``ДобавитьПоляВыборкиВЗапрос``. | ||
```BSL | ||
Запрос.Текст = | ||
"ВЫБРАТЬ | ||
| пбп_ПредопределенныеЗначения.Ссылка КАК Ссылка | ||
|ИЗ | ||
| %1 КАК пбп_ПредопределенныеЗначения | ||
|ГДЕ | ||
| пбп_ПредопределенныеЗначения.Ссылка В(&СписокПредопределенных)"; | ||
Поля = Новый СписокЗначений; | ||
Поля.Добавить("пбп_ПредопределенныеЗначения.СписокЗначений", Список значений); | ||
Поля.Добавить("пбп_ПредопределенныеЗначения.Пароль", Пароль"); | ||
Запрос = пбп_СхемыЗапросов.ДобавитьПоляВыборкиВЗапрос(Запрос, Поля); | ||
``` | ||
|
||
**Пример 3: Установить количество получаемых записей** | ||
|
||
Пример: | ||
```BSL | ||
Запрос.Текст = | ||
"ВЫБРАТЬ | ||
| пбп_ИсторияИнтеграции.Ссылка КАК Ссылка | ||
|ИЗ | ||
| Справочник.пбп_ИсторияИнтеграции КАК пбп_ИсторияИнтеграции | ||
|; | ||
| | ||
|//////////////////////////////////////////////////////////////////////////////// | ||
|ВЫБРАТЬ | ||
| пбп_СоответствияОбъектовИБ.Объект1 КАК Объект1 | ||
|ИЗ | ||
| РегистрСведений.пбп_СоответствияОбъектовИБ КАК пбп_СоответствияОбъектовИБ"; | ||
``` | ||
|
||
Необходимо наложить ограничение по количеству записей на первый пакет запроса. | ||
Неправильно: | ||
```BSL | ||
Запрос.Текст = СтрЗаменить(Запрос.Текст, "ВЫБРАТЬ | ||
| пбп_ИсторияИнтеграции.Ссылка", | ||
"ВЫБРАТЬ ПЕРВЫЕ 1 | ||
| пбп_ИсторияИнтеграции.Ссылка"); | ||
``` | ||
|
||
Правильно: | ||
Используйте функцию ``УстановитьКоличествоПолучаемыхЗаписей``, чтобы установить количество получаемых записей: | ||
```BSL | ||
Запрос = пбп_СхемыЗапросов.УстановитьКоличествоПолучаемыхЗаписей(Запрос, 1, 0); | ||
``` | ||
|
||
**Пример 4. Добавление условий в виртуальную таблицу | ||
```BSL | ||
Запрос.Текст = "ВЫБРАТЬ | ||
| ТестОстатки.Склад КАК Склад, | ||
| ТестОстатки.КоличествоОстаток КАК КоличествоОстаток | ||
|ИЗ | ||
| РегистрНакопления.Тест.Остатки(&Дата, ) КАК ТестОстатки | ||
``` | ||
|
||
Неправильно: | ||
```BSL | ||
Запрос.Текст = СтрЗаменить(Запрос.Текст, "(&Дата, )", "(&Дата, Склад = &Склад)"); | ||
``` | ||
|
||
Правильно: | ||
Используйте функцию ``ДобавитьУсловиеВЗапрос``: | ||
```BSL | ||
Запрос = пбп_СхемыЗапросов.ДобавитьУсловиеВЗапрос(Запрос, "Склад = &Склад"); | ||
``` |