1с как работает выборка

Обновлено: 02.07.2024

разрешенные в запросе 1с 8.3 и 8.2

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

Условия возникновения проблемы

Проблема возможной зависимости результата ограничений доступа к данным от плана запроса СУБД может возникнуть при выполнении запроса к базе данных без ключевого слова РАЗРЕШЕННЫЕ, если для текущего пользователя имеются ограничения доступа к данным и при этом запрос содержит одно или несколько сравнений вида:

Причина различий

Возможная разница в поведении объясняется реализацией ограничений доступа к данным без ключевого слова РАЗРЕШЕННЫЕ в 1С Предприятии 8.3.

Запрос без ключевого слова РАЗРЕШЕННЫЕ будет выполнен успешно только в том случае, если в процессе его выполнения не происходит обращений к запрещенным данным. Для этого в выборке данных добавляется специальное сигнальное поле, которое принимает значение Истина для тех записей, в формировании которых участвовали только разрешенные данные, и значение Ложь для всех остальных записей. Если хотя бы в одной записи выборки имеется значение Ложь в сигнальном поле, то выполнение запроса завершается аварийно.

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

Такое же сигнальное поле добавляется и к результатам запросов, вложенных в сравнение В/НЕ В. Причем проверка значения сигнальной колонки в этом случае выполняется средствами СУБД. Таким образом, если в процессе выполнения вложенного запроса происходило обращение к запрещенным данным, то выполнение запроса должно завершиться с ошибкой У пользователя недостаточно прав на исполнение операции над базой данных.

Однако при построении плана запроса СУБД может не получать полную выборку <Вложенным запросом>, а получать только те записи, которые фактически необходимы для проверки условия В/НЕ В. В этом случае выполнение запроса может оказаться успешным, даже если при выполнении <Вложенного запроса> как самостоятельного запроса могли произойти обращения к запрещенным данным.

Пример и рекомендации

Рассмотрим простой пример. Пусть на таблицу Справочник.ФизическиеЛица наложены ограничения доступа к данным. В этом случае запрос:

ВЫБРАТЬ

Таблица.ФизЛицо КАК ФизЛица

ИЗ

Справочник.ФизическиеЛица КАК Таблица

будет выполнен с ошибкой из-за попытки обращения к запрещенным данным. Если же этот запрос участвует в сравнении, например:

ВЫБРАТЬ

ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо

ИЗ

Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом

ГДЕ

ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо В (

ВЫБРАТЬ

Таблица.ФизЛицо КАК ФизЛица

ИЗ

Справочник.ФизическиеЛица КАК Таблица)

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

ВЫБРАТЬ

ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо

ИЗ

Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорНаВыполнениеРаботСФизЛицом

ГДЕ

ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо В (

ВЫБРАТЬ

Таблица.ФизЛицо КАК ФизЛица

ИЗ

Справочник.ФизическиеЛица КАК Таблица

ГДЕ

Таблица.ФизЛицо = ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо)

Данный запрос отличается от предыдущего тем, что вложенный запрос не выбирает записей, которые заведомо не требуются для выполнения сравнения В. Поэтому он завершится успешно, если ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо ссылается только на разрешенные записи таблицы Справочник.ФизическиеЛица, и аварийно, если среди ДоговорНаВыполнениеРаботСФизЛицом.Сотрудник.Физлицо имеются ссылки на запрещенные записи.

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

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

В своей учебной базе я запущу консоль запросов, открою конструктор запросов и выберу таблицу «Оказание Услуг».


Раскроем эту таблицу


И в ней мы видим табличную часть «Услуги».

Вот всю эту табличную часть и выберем.


Как видите, вся табличная часть услуги полностью выбралась в поля.

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


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


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


Посмотрим, как выполнится такой запрос.


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

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

Ниже приведу небольшой пример кода, в котором осуществляется работа с вложенной таблицей:

Разъясню вышеприведенный код.

Первым делом мы получили линейную выборку, и обходим эту выборку в цикле, в котором создаем верхнюю строку дерева значений (оно на форме), и в неё записываем ссылку на наш документ.

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

Вот какой результат будет возвращать этот код


Остались вопросы?

Вы ответите на них сами, когда изучите мой курс «Запросы в 1С для начинающих». Где эти и многие другие вопросы рассматриваются более подробно. Вся информация дается в простой и доступной форме и понятна даже тем, кто особо не знаком с программированием в 1С.

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

Связи параметров выбора в 1С

Начнем со связей параметров выбора.

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

Справочники в 1С

Причем справочник Контрагенты является владельцем справочника ДоговорыКонтрагентов.

Владельцы справочника 1с

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

Документ 1с

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

Форма выбора справочников 1С

Что, согласитесь может быть неудобно. И гораздо удобнее, чтобы выходили только договоры выбранного контрагента. Для того, чтобы пользователи могли видеть договоры контрагента, который указан в поле Контрагент, необходимо настроить связи параметров выбора. Для этого, нужно зайти в палитру свойств реквизита Договор, в которой интересует свойство Связи параметров выбора. Если нажать на кнопку «…» этого свойства, то откроется окно «Связи параметров выбора». В этом окне можно настраивать различные связи реквизита, палитру свойств которого мы открыли, с остальными реквизитами. Мы настроим связь с реквизитом Контрагент.

Связи параметров выбора

После выбора реквизита Контрагент таблица «Параметры» заполнится автоматически.

Связи параметров выбора

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

Связи параметров выбора

Всё! Теперь, когда мы будем выбирать договоры в документе Оплата, то будут выходить только договоры выбранного контрагента.

Связи параметров выбора

Параметры выбора в 1С

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

К примеру, у нас бывают договоры контрагентов, которые помечены на удаление.

Эти же элементы отображаются в форме выбора договоров в документе Оплата.

Пометка на удаление 1С

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

Настройка параметров выбора

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

Параметры выбора

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

Параметры выбора

О том, как работать с проверкой заполнения реквизитов объектов, читайте в этой статье:

Программировать в 1С за 11 шагов

  1. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  2. Научитесь понимать архитектуру 1С;
  3. Станете писать код на языке 1С;
  4. Освоите основные приемы программирования;
  5. Закрепите полученные знания при помощи задачника.

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

Основы разработки в 1С такси

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog


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

можно оплатить вручную:

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

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

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

2. Примеры создания выборок

Итак, как создавать выборку данных? Делается это при помощи объектного менеджера, который продемонстрирован на скриншоте ниже:



Рис. 1 Как создать выборку данных при помощи объектного менеджера?

Далее рассмотрим аналогичный пример, но с созданием выборки данных, как показано на программном коде далее:



Рис. 2 Создание выборки данных с помощью кода

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

3. Методы для выборок данных

Рассмотрим перечень того, какие существуют методы для выборок данных, которые являются актуальными для выборок в 1С 8.3:

· «Выбрать()» – данный метод помогает получить саму выборку, из одной выборки можно делать ещё выборки, подчинённые первой, если указать параметр «при помощи группировок»;

· «Владелец()» – этот метод для выборок данных является противоположным для метода «Выбрать()», при помощи него можно одержать первоначальную выборку в конкретном запросе;

· «Следующий()» – метод, который предназначен для перевода выделения на последующую строку с записью. В случае, когда запись есть, метод будет возвращать значение «Истина», в противном случае – значение «Ложь»;

· «НайтиСледующий()» – данный метод отбора выборок осуществляет перебор лишь по необходимым полям, согласно значению, по которому будет осуществлён отбор, который из себя представляет структуру полей;

· «СледующийПоЗначениюПоля()» – при помощи этого метода можно получать последующую запись, у которой значение разнится с предыдущей. (например, сделать перебор всех возможных записей, которые имеют единственное значение в поле «Контрагент», в скобках будет находится «Контрагент»);

· «Сбросить()» – этот метод служит для сброса текущего расположения выделения и установления выделения на первоначальную позицию;

· «Количество()» – помогает вернуть первоначальное число записей из выборки;

· «Получить()» – данный метод отбора выборок выбирает запись, согласно индексу, который ей присвоен;

· «Уровень()» – метод, который отображает иерархический уровень выбранной записи, – возвращает некоторое число;

· «ТипЗаписи()» – метод для вывода одного, из четырёх возможных, типов для записи: детальная, итоговая по группировкам, итоговая иерархически, общая итоговая;

· «Группировка()» – данный метод служит для возврата наименования последней группировки, для случая, когда запись не служит группировкой – будет возвращена пустая строка.

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

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