RLS - дубли условий в запросах к СУБД

Публикация № 1130272

Разработка - Практика программирования

дубли RLS РЛС дублирование производительность снижение быстродействия тормоз

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

 

Для тех, кто не в курсе

RLS или Record Level Security или Доступ на уровне записи, механизм призванный сделать оптимальным процесс ограничения доступа к данным в зависимости от их наполнения, например, в документе один из реквизитов - филиал, при настройке ограничений RLS, можно ограничить просмотр документов с определенным составом филиалов для каждого пользователя индивидуально.

Как-то недавно на базе 1С:ЗУП, немного доработанной, я столкнулся с ошибкой, когда MSSQL Server отказался формировать запрос ввиду его большого размера. Анализ показал, что 1С действительно формирует огромный запрос, более 1000 строк (сейчас точнее уже не помню) и весомую часть запроса составляли добавленные ограничения RLS. Базу дорабатывало крупное франчайзи и специалисты у них неплохие, однако и они "наступили на грабли".

 

Тестовый пример

Для теста написана простая конфигурация, справочники:

  • "Филиалы"
  • "Пользователи" (Табличная часть "ФилиалыРазрешенные", в ней реквизит "Филиал" для установки пользователю разрешенных филиалов)

документ:

  • "Передача денег", реквизиты "Филиал", "Сумма"

роли:

  • "Полные права" - без ограничений RLS 
  • "Бухгалтер", "ИЗМ_Бухгалтер", "ИЗМ_БухгалтерПоФилиалам" имеют идентичное по смыслу ограничение RLS по филиалам на чтение документа "Передача денег", в каждой RLS-роли добавлено незначительное изменение (Условие 1 = 1, 2 = 2 и т.д.).

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

 
 Скрины тестовой конфигурации

 

SQL - запрос здорового человека админа - роль ПолныеПрава, органичений RLS нет

На скрине видно, что никаких ограничений про филиалам нет

 

SQL - запрос курильщика пользователя с одной ролью RLS, ограничение по списку филиалов для пользователя

В данном случае пользователю назначена одна роль "Бухгалтер", видим отсечение записей через EXISTS:

 

SQL - запрос заядлого курильщика пользователя с тремя дублирующими ролями RLS, ограничение как в предыдущей теме

Пользователю добавлены роли "ИЗМ_Бухгалтер", "ИЗМ_БухгалтерПоФилиалам", итого 3 роли с RLS, обратите внимание, что EXISTS-ы соединяются через OR, как и задумано платформой. Для реализации этого примера, ограничения RLS в ролях были дополнены пустыми условиями 1 = 1, 2 = 2 и т.д. , это для теста, а в жизни могут отредактировать существующее условие или дописать новое.

 

Ложка дегтя

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

Ситуация усугубляется тем, что условия разных RLS соединяется через OR, часто сервер СУБД отказывается искать оптимальный план для запроса и назначает наиболее тривиальный, который содержит FULL-сканы по таблицам или индексам и конечно, это может значительно снижать производительность.

 

Ложка меда

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

Ниже пример, когда у пользователя 3 роли с RLS с полностью совпадающим ограничением Read, как видим дублей ограничения нет, но мы понимаем, что роли чаще копируют, чтобы потом их модифицировать и говорил ранее, старую роль не снимают, а новую добавляют.

 

Как найти "задвоенный" RLS в конфигурации

Проблема становиться актуальной, когда:

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

В платформе 8.3, есть функция:

ПараметрыДоступа(НаименованиеПрава, ОбъектМетаданных, СписокПолей, Роль/пользователь)

она возвращает информацию о наличии права у роли (в нашем случае), а также о наличии ограничений RLS. Подробнее в документации.

Алгоритм анализа:

  1. Выбираем пользователя.
  2. Выбираем все роли установленные у пользователя.
  3. Для каждой роли проверяем права (Read, Insert, Update, Delete) для всех объектов, на которые можно наложить ограничения RLS через роли. Обратите внимание, для регистров и др.объектов используются не виды прав, если не знаете какие, проверяйте через конфигуратор.

На нашей тестовой БД получилась такая таблица:

Все три роли выделены "красным" и имеют ограничение RLS на чтение документа "ПередачаДенег". Не в нашем случае, но в каких-то случаях это может быть оправдано, поэтому всегда нужно перепроверять.

 

Далее, я сформировал на нашей рабочей БД 1С:ЗУП и картина оказалась весьма любопытной, покажу только часть таблицы (префиксы измененных ролей подтерты):

Видим что роль "ИЗМ_ЧтениеКадровойИнформации" по сути дублирует стандартную роль, имеет ограничения RLS типа "Read", а также вероятно имеет некоторые изменения, вполне возможна ситуация задвоения условий в запросе к СУБД, конечно это требует анализа и дальнейших действий по мере необходимости. Также наблюдается проблема с ролью "ЧтениеРабочегоВремени".

Обработка не сложная, работает на управляемых формах, конфигурация любая, разрабатывалась и тестировалась на платформе 8.3.14.1854. Вводится имя пользователя (как текст), которое используется для входа в 1С. Анализируемые объекты: справочники, документы, все виды регистров, бизнес-процессы, задачи, журнал документов.

Обработку выложу ниже, к материалам статьи прилагаю выгрузку тестовой конфигурации. Если скачаете - спасибо за поддержку!

 

Что еще можно посоветовать

Иногда плохо реализованный RLS необязательно является проблемой, если запрос к объекту выполняется раз в час/день и не потребляет много ресурсов, то он не стоит внимания. Надо искать часто выполняемые запросы, а они в купе с "плохим" RLS могут вызывать серьезные проблемы производительности. Определить наиболее затратный по ресурсам запрос Duration/CPU/Disk IO вам поможет Курс по подготовке к экзамену 1С:ЭКСПЕРТ и 1С:Профессионал по технологическим вопросам, его проводят несколько преподавателей, рекомендую попасть к Богачеву Виктору.

 

Другие ссылки:

Типичные ошибки при разработке прав доступа

Консоль запросов RLS

Использование RLS

Скачать файлы

Наименование Файл Версия Размер
RLS - дубли условий в запросах: тестовая конфигурация
.dt 48,78Kb
07.10.19
1
.dt 48,78Kb 1 Скачать
RLS - дубли условий в запросах к СУБД: обработка Анализ ролей RLS
.epf 8,72Kb
07.10.19
12
.epf 8,72Kb 12 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. acanta 73 07.10.19 10:54 Сейчас в теме
Спасибо большое.
Правильно ли я понимаю, что РЛС на журналах в управляемых формах не применяется, если в форме не указано РЛС ( обработка, ещё одна форма журнала) или если в ней в динамическом списке написан собственный запрос?
2. geron4 148 07.10.19 14:47 Сейчас в теме
(1) Журнал документов это физическая таблица, на него можно наложить RLS только на чтение (read), если у пользователя есть роль с наложенными ограничениями RLS для Журнала документов, то ограничения будут всегда применяться при любом запросе к объекту метаданных, т.к. это добавляется платформой к запросу к СУБД. На счет указания в форме RLS - не в курсе.
3. YurySigolaev 08.10.19 08:48 Сейчас в теме
(1) RLS в журналах (списках) к динамическому списку применяется .
Точно также как и к любому другому запросу.

А формы вообще к RLS отношения не имеют.
geron4; acanta; +2 Ответить
4. k.dm.v@mail.ru 11.10.19 16:37 Сейчас в теме
Полезная статья! Спасибо!
Оставьте свое сообщение

См. также

Краткое руководство по внесению изменений в конфигурацию

Статья Программист Нет файла v8 1cv8.cf Абонемент ($m) Практика программирования

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

1 стартмани

13.01.2020    7130    16    sapervodichka    34       

Подборка программ для взаимодействия с ЕГАИС Промо

ЕГАИС (Единая государственная автоматизированная информационная система) - автоматизированная система, предназначенная для государственного контроля за объёмом производства и оборота этилового спирта, алкогольной и спиртосодержащей продукции. Инфостарт рекомендует подборку проверенных решений для взаимодействия с системой.

Права на объект

Статья Программист Внешний отчет (ert,erf) v8 v8::Права 1cv8.cf Абонемент ($m) Роли и права

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

1 стартмани

07.01.2020    8618    63    sapervodichka    17       

Полезные процедуры и функции для программиста

Статья Программист Нет файла v8 1cv8.cf Россия Абонемент ($m) Практика программирования Универсальные функции

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

1 стартмани

07.10.2019    16901    8    HostHost    25       

Программы для исполнения 54-ФЗ Промо

С 01.02.2017 контрольно-кассовая техника должна отправлять электронные версии чеков оператору фискальных данных - правила установлены в 54-ФЗ ст.2 п.2. Инфостарт предлагает подборку программ, связанных с применением 54-ФЗ, ККТ и электронных чеков.

Типичные ошибки при разработке прав доступа

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Роли и права

Рассмотрим самые распространенные ошибки в разработке прав доступа.

02.10.2019    10649    YPermitin    45       

Описание формата внутреннего представления данных 1С в контексте обмена данными

Статья Программист Внешняя обработка (ert,epf) v8 v8::УФ 1cv8.cf Абонемент ($m) Практика программирования Внешние источники данных Разработка

Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на "внутреннюю кухню" платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм "быстрого массива", который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно "на лету" программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.

1 стартмани

06.09.2019    9213    7    Dementor    27       

Базовый курс по обмену данными в системе 1С:Предприятие. Онлайн-интенсив с 12 по 28 мая 2020 г. Промо

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

5500 рублей

Конвейер проверки качества кода

Инструменты и обработки Программист Архив с данными v8 1cv8.cf Windows Абонемент ($m) Инструментарий разработчика Практика программирования Математика и алгоритмы

Jenkinsfile для выполнения проверки качества кода. Собирает информацию с АПК, EDT и BSL-LS. Сопоставляет ошибки с гит-репозиторием, выгруженным ГитКонвертором. Отправляет в Сонар.

3 стартмани

04.09.2019    11965    18    Stepa86    44       

INFOSTART MEETUP Kazan. 13 марта 2020 г. Промо

Инфостарт продолжает путешествие по России. Следующая остановка - Казань. Тема мероприятия - управление и технологии автоматизации учета на платформе "1С: Предприятие". Ждем всех: докладчиков и участников! Стоимость участия - 5 500 рублей. Цена действительна до 30.01.2020

5 500

Вам нравятся запросы в 1С?

Инструменты и обработки Программист Конфигурация (md, cf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования Разработка

Речь не только о том, что простейший запрос с "легальным" оформлением растянется на пол-экрана, речь еще обо всем, что нужно написать "в нагрузку" к тексту запроса. Все эти "Новый Запрос", "УстановитьПараметр" и последующие пляски с обработкой результата... Пора с этим заканчивать!

1 стартмани

03.07.2019    13483    4    m-rv    86       

1С:Ассемблер. Немного летнего веселья!

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования Разработка

Все вы, наверное, слышали, что 1С-ники жалуются на свою систему, считая язык 1С недостаточно низкоуровневым, скучным и т.п. Все они с тоской поглядывают в сторону "настоящих" языков программирования. Так вот, господа, они неправы. В системе 1С есть места, где можно размять программерский мозг и получить удовольствие от низкоуровневой техники. Предлагаю вам погрузиться в недра виртуальной машины 1С и понять, как она работает. Там есть свой "ассемблер" и мы попробуем его в действии!

1 стартмани

21.06.2019    19539    61    Evil Beaver    116       

Новый раздел на Инфостарте - Electronic Software Distribution Промо

Инфостарт напоминает: на нашем сайте можно купить не только ПО, связанное с 1С. В нашем арсенале – ESD-лицензии на ПО от ведущих вендоров: Microsoft, Kaspersky, ESET, Dr.Web, Аскон и другие.

  • Низкие цены, без скрытых платежей и наценок
  • Оперативная отгрузка
  • Возможность оплаты с личного счета (кешбек, обмен стартмани на рубли и т.п.)
  • Покупки идут в накопления для получения скидочных карт лояльности Silver (5%) и Gold (10%)

Простые примеры сложных отчетов на СКД

Статья Программист Архив с данными v8 v8::СКД 1cv8.cf Абонемент ($m) Практика программирования

Подписи в отчете. Особенности соединения наборов: как соединить несоединяемое. Остатки на дату и обороты по месяцам в одном отчете. Курс валюты на каждую дату без группировок и соединений в запросе. Отчет с произвольными колонками и с произвольной последовательностью. "Неадекватный отчет".

1 стартмани

12.06.2019    19453    17    Hatson    22       

Безопасная работа с транзакциями во встроенном языке

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Разбираемся с опасностями использования транзакций во встроенном языке 1С. Познаем ошибку "В данной транзакции уже происходили ошибки". Учимся защищаться от них.

1 стартмани

25.03.2019    21033    9    tormozit    44       

Программы для исполнения 488-ФЗ: Маркировка товаров Промо

1 января 2019 года вступил в силу ФЗ от 25.12.2018 № 488-ФЗ о единой информационной системе маркировки товаров с использованием контрольных (идентификационных) знаков, который позволяет проследить движение товара от производителя до конечного потребителя. Инфостарт предлагает подборку программ, связанных с применением 488-ФЗ и маркировкой товаров.

HTML в новой версии 8.3.14 на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Универсальные обработки Практика программирования Разработка

Тестируем возможности HTML в новой версии 8.3.14 платформы на примере 3-х JavaScript библиотек: AmCharts, HighCharts, DHTMLX.

1 стартмани

29.01.2019    19014    77    Synoecium    40       

Управление ИТ-проектами. Модуль 2: продвинутый онлайн-курс по классическим методам управления проектами. Вебинары проходят с 12 марта по 11 июня 2020 года. Промо

Продвинутый онлайн-курс по классическому управлению ИТ-проектами позволит слушателям освоить инструменты из PMBoK® и 1С:Технологии корпоративного внедрения и научиться их применять для проектов любого масштаба. Курс включает в себя 12 вебинаров и 12 видеолекции, разбор кейсов и рекомендации экспертов по проектам слушателей. Ведущая курса - Мария Темчина.

от 13000 рублей

Отладка сложных отчетов на СКД

Отчеты и формы Программист Расширение (cfe) v8 v8::СКД 1cv8.cf Россия Абонемент ($m) Практика программирования

Расширение для отладки сложных отчетов на СКД (в т.ч. для собираемых программно "на лету") и быстрого перехода к отладке таких отчетов в консоли запросов и отчетов на СКД.

1 стартмани

28.12.2018    18600    69    maxx    58       

Реализация простого http-сервиса "Просмотр карточки номенклатуры(товара) в браузере"

Статья Программист Конфигурация (md, cf) v8 1cv8.cf Абонемент ($m) Практика программирования

Практический пример реализации простого http-сервиса средствами 1С Предприятие 8.3. Обеспечивает просмотр списка товаров и просмотр данных товара в браузере.

1 стартмани

07.12.2018    16762    12    dmitry1975    31       

Готовые переносы данных из различных конфигураций 1C Промо

Рекомендуем готовые решения для переноса данных из различных конфигураций 1C. C техподдержкой от разработчиков и гарантией от Инфостарт.

Работа с публикациями "Инфостарт"

Инструменты и обработки Программист Архив с данными v8 УУ Абонемент ($m) Практика программирования О сообществе WEB

Работа с рублевыми публикациями на сайте "Инфостарт": ведение клиентов, заказов, обновление файлов публикации, рассылка обновлений.

1 стартмани

13.09.2018    12401    12    RocKeR_13    16       

Позиционирование в помещении с помощью нейросети по сигналу Wi-Fi. Интерактивная карта склада в 1С с показом позиции

Инструменты и обработки Программист Бизнес-аналитик Приложение (apk) v8 Windows Абонемент ($m) Инструментарий разработчика Практика программирования

Данная публикация содержит в себе редактор и интерактивную карту склада или иного помещения, на которой в реальном времени отображается позиция устройства, координаты которого вычисляются по уровням сигнала нескольких роутеров Wi-Fi. В статье и приложенным к ней разработкам предлагаются инструменты и методика для реализации вычисления точной геопозиции внутри помещений с помощью нейронной сети. Конфигурация написана на релизе 1С:Предприятие 8.3.12.1412, клиентское приложение имеет минимальный уровень совместимости SDK -16.

5 стартмани

09.08.2018    19376    25    informa1555    26       

​​​​​​​CorelDRAW Graphics Suite 2019 Промо

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

Анализ ролей и прав по профилю или пользователю и отбору метаданных

Отчеты и формы Системный администратор Программист Внешний отчет (ert,erf) v8::УФ v8::Права v8::СКД 1cv8.cf Россия Абонемент ($m) Роли и права

Отчет анализа ролей и прав с фильтром по профилю ИЛИ пользователю и отбору по метаданным (документы, справочники, регистры сведений и накоплений, обработок, планов обмена, констант, отчетов), ролям и правам. Тестировано на платформах: 8.3.11.2899,8.3.12.1440. Конфигурация: ERP 2.4.6.154

1 стартмани

02.08.2018    9158    73    strelec13    5       

Работа с данными выбора

Инструменты и обработки Программист Архив с данными v8 Россия Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

17.07.2018    29307    17    kalyaka    16       

Сдача регламентированной отчетности из программ 1С Промо

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

от 1500 руб.

HTTP Сервисы: Путь к своему сервису. Часть 1

Статья Системный администратор Программист Расширение (cfe) v8 1cv8.cf Абонемент ($m) Практика программирования WEB

Уже много было написано про http-сервисы, но то и дело всплывают «Новые» статьи по обмену между базами V8 по COM, что «Немножко» удивляет. Решил внести свои 5 копеек, поработаем с http-сервисом.

1 стартмани

15.07.2018    52963    24    dsdred    24       

ВСТАВИТЬ В Справочник.Номенклатура (Код, Наименование) ЗНАЧЕНИЯ ("001", "Новый товар")

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 v8::Запросы 1cv8.cf Абонемент ($m) Практика программирования

Вас не обманывают ваши глаза, это запрос на изменение данных! И это работает без прямого доступа к БД, регистрации и смс.

1 стартмани

01.06.2018    22505    86    m-rv    57       

1C:Предприятие для программистов: Расчетные задачи (зарплата). Онлайн-интенсив с 01 по 17 июня 2020 г. Промо

Данный онлайн-курс предусматривает изучение механизмов платформы “1С:Предприятие”, которые предназначены для автоматизации периодических расчетов, а именно - для расчета зарплаты. Курс предназначен для тех, кто уже имеет определенные навыки конфигурирования и программирования в системе “1С:Предприятие”, а также для опытных пользователей прикладного решения “1С:Зарплата и управление персоналом” и прочих прикладных решений, в которых реализован функционал расчета зарплаты.

4900 рублей

БСП: Дополнительная обработка (Регламенты), примеры от простого к сложному

Статья Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Практика программирования БСП (Библиотека стандартных подсистем)

Очень много попадается странных решений, которые можно решить через БСП:Дополнительные отчеты и обработки. Я бы вообще БСП из-за этой подсистемы переименовал в «Большое Спасибо Программистам». Поработаем с подсистемой в части написания регламентных заданий.

1 стартмани

10.05.2018    33458    31    dsdred    36       

1C:Предприятие для программистов: Запросы и отчеты. Второй поток. Онлайн-интенсив с 17 марта по 16 апреля 2020 г. Промо

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

6500 рублей

Как выполнить отчет на СКД через COM и получить данные отчета?

Статья Программист Архив с данными v8 УПП1 Россия Windows Абонемент ($m) Практика программирования

Для чего это нужно. Например, нужно в одной базе получить какой-либо показатель из другой базы. Этот показатель вычисляется в каком-либо сложном отчете, который написан на СКД. Можно, конечно, "скопипастить" текст запроса из другой базы, немного подправить его и выполнять в том же COM подключении. Но с этим теряется гибкость: если отчет изменился, то нужно помнить о том, что где-то есть его "немного модифицированная" копия. В статье будет рассмотрен пример получения данных из базы ЗУП.

2 стартмани

08.05.2018    20756    11    wowik    3       

Работа со схемой запроса

Статья Программист Конфигурация (md, cf) v8 v8::Запросы Абонемент ($m) Инструментарий разработчика Практика программирования

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

1 стартмани

24.04.2018    33641    77    kalyaka    34