Проверка на пустой результат выполнения запроса
Область применения: управляемое приложение, мобильное приложение, обычное приложение.
1. Проверку того, что результат выполнения запроса не содержит строк следует выполнять с помощью метода Пустой . Поскольку на получение выборки из результата запроса (выгрузка его в таблицу значений) будет затрачиваться дополнительное время.
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Возврат НЕ Запрос.Выполнить().Пустой()
Методическая рекомендация (полезный совет)
2. В то же время если требуется выбрать (или выгрузить) результат запроса, то предварительный вызов метода Пустой не требуется.
Например, вместо:
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
.
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
.
1с запросы если параметр пустой выбор когда
Делаю через консоль отчетов в ЗУП. Есть запрос:
ВЫБРАТЬ
СотрудникиОрганизаций.Ссылка
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
ГДЕ
СотрудникиОрганизаций.Ссылка В ИЕРАРХИИ(&ГруппаСотрудников)
Если я параметр не выбираю, то ругается что не заполнен параметр. Как сделать так чтобы отображались все сотрудники при не заполнении параметра?
P.S. Надо именно через параметр, отбор не нужен.
ГДЕ &Группа=Значение(. ПустаяСсылка) ИЛИ далее по тексту
(0) никак, либо текст запроса модифицируй, либо как в (1) и параметр заполняй
Использую консоль отчетов, там нет возможности программно установить параметр равный пустой ссылке.
Используй обычный отбор в консоли отчета, а не параметр.
щас полетят миллионы камней ))
ВЫБРАТЬ
СотрудникиОрганизаций.Ссылка
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
ГДЕ
СотрудникиОрганизаций.Ссылка В ИЕРАРХИИ(&ГруппаСотрудников) ИЛИ &НеХочуВыбирать
Запрос.УстановитьПараметр(Справочники.СотрудникиОрганизаций.ПустаяСсылка);
То есть в консоли отчетов никак?
Используй правильную консоль отчетов.
(8) Не поделишься? я в типовой делаю
(7) чем в (1) вариант не устроил.
(10) он видимо список параметров не заполняет
Сделай большую желтую папку для всех :)))
http://ubuntuone.com/6iURUgZ5RyNmTLFlqiWMjW первое что нашел.
в ир вроде есть
(5) Ну ты в курсе сомнительности эстетичности такой реализации 😀
(7) чем (6) не устраивает.
(13) Спасибо за запросник, хорошая обработка, удобная. Но все таки это больше для программистов, аналог стандартной «консоль запросов». В данном случае типовая обработка «консоль отчетов» используется для конечных пользователей, там есть список отчетов, они ими пользуются, удобный механизм отключения группировок (можно на ненужных группировках галочки отметить), отборы и т.п.
(17) В консоли отчетов нет возможности программный код добавить.
P.S. Может кто посоветует, есть какие обработки, что-то типа универсальных отчетов по СКД, то есть задаешь СКД, обработка подстраивается, показывает группировки, отборы, параметры и плюс можно было бы программный код добавить. В типовой ЗУП для бюджета не нашел, хотя в БГУ есть такой отчет.
(18) На ИТС смотри консоль отчетов СКД
(19) Если не сложно выложи тут, а то я дома, нет под рукой дисков.
(18) значит ты не умеешь его готовить.
(0) Юзай ПостроительЗапроса.
(19) Посмотрел на ИТС, один в один который
(19) Посмотрел на ИТС, один в один который я использую
ВЫБРАТЬ
СотрудникиОрганизаций.Ссылка
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
ГДЕ
ВЫБОР
&ГруппаСотрудников = Значение(Справочник.СотрудникиОрганизаций.ПустаяСсылка)
ТОГДА
Истина
ИНАЧЕ
СотрудникиОрганизаций.Ссылка В ИЕРАРХИИ(&ГруппаСотрудников)
КОНЕЦ
(25) чем лучше (1)?
вообще-то, если параметр — пустая ссылка, то
СотрудникиОрганизаций.Ссылка В ИЕРАРХИИ(&ГруппаСотрудников)
не должно ругаться, а просто взять весь справочник.
Кому интересно пока придумал такой вариант.
Текст запроса оставляю прежний:
ВЫБРАТЬ
СотрудникиОрганизаций.Ссылка
ИЗ
Справочник.СотрудникиОрганизаций КАК СотрудникиОрганизаций
ГДЕ
СотрудникиОрганизаций.Ссылка В ИЕРАРХИИ(&ГруппаСотрудников)
Далее создаю еще один параметр «ОтборПоГруппе», тип Булево.
У параметра «ГруппаСотрудников» в поле Выражение пишу следующее:
ВЫБОР КОГДА &ОтборПоГруппе ТОГДА &ГруппаСотрудников ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СотрудникиОрганизаций.ПустаяСсылка) КОНЕЦ
Теперь по крайней мере можно сделать так, чтобы в отчет попадали все сотрудники.
Пустая ссылка в запросе 1С 8.3
В ходе работы с запросами любому программисту приходится так или иначе взаимодействовать с пустыми значениями. Что мы понимаем под пустым значением?
Пустое значение – это или отсутствие значения, или значение по умолчанию для типа данных. С примитивными типами все довольно просто: значением по умолчанию является некое начальное значение, служащее точкой отсчета.
Виды пустых значений
Рассмотрим типы пустых значений, которые могут встретиться или потребоваться в запросе.
- Для типа Число – пустым значением является ноль – 0.
- Для типа Строка – пустая строка – «».
- Для типа Дата – первое января первого года – 01.01.0001 00:00:00. Именно с этой даты ведется отсчет времени в 1С.*
- Для типа Булево – значением по умолчанию, технически, является Ложь, но логически оба значения типа являются заполненными. Поэтому принятие решения о том пустое значение Ложь или нет, основывается на логике конкретного алгоритма.
*Будьте внимательны, вне 1С существуют различные системы счисления дат с разными точками отсчета.
Отсутствующее значение в полном смысле соответствует только типу Null. Этот тип содержит лишь одно значение, которое обозначает отсутствие значения.
Похожий на него тип Неопределено тоже содержит лишь одно значение, но Неопределено означает не отсутствие данных, а лишь невозможность определить значение по умолчанию для типа. Неопределено является значением по умолчанию для составных, в том числе не определенных явно, типов. Например, значение в новой строке таблицы значений в колонке, для которой тип не определен явно.
Со ссылочными типами намного меньше неопределенности. Все ссылочные типы предусматривают пустое значение. Пустое значение — это та же самая ссылка с указанием типа данных, но без уникального идентификатора конкретного значения. Благодаря этому мы можем обращаться с пустой ссылкой как с обычной и применять к ней все предусмотренные платформой методы, работая с ней как с полноценным значением.
Работа с пустыми значениями в запросе
Независимо от того, необходимо ли вам явно ввести в результат запроса пустое значение или сравнить с ним существующие значения, необходимо знать, каким образом описывать пустые значения в запросе.
Типы Число, Строка, Булево описываются в запросе как во встроенном языке:
ВЫБРАТЬ 0 КАК ПримерТипаЧисло, "Привет мир" КАК ПримерТипаСтрока, Истина КАК ПримерТипаБулево
Неопределено, являясь по существу примитивным типом, описывается аналогично:
Выбрать Партии.Период Из РегистрНакопления.Партии Как Партии Где Остатки.ДокументПартии = Неопределено
Пустые ссылочные значения определяются немного сложнее. У всех ссылочных объектов предусмотрено предопределенное служебное значение ПустаяСсылка. Благодаря этому есть возможность единым способом выбрать пустую ссылку – через функцию Значение:
Выбрать Значение(Справочник.Номенклатура.ПустаяСсылка) Как Пустая Номенклатура
Возможности работы со значениями типа Null несколько богаче. Как и другие примитивные типы, Null описывается так же, как во встроенном языке. Помимо этого, предусмотрены специальный оператор Есть Null и функция ЕстьNull.
- Оператор Есть Null позволяет создать логическое выражение сравнивающее выбранное значение со значением Null.
- Функция ЕстьNull возвращает первый аргумент, если он не равен Null, и второй аргумент в обратном случае.
Выражения, определяющие пустые значения, можно использовать в любых разделах запроса поддерживающих выражения. Например, вы можете добавить пустую ссылку в секцию Выбрать или проверку на Null в Условие.
Практические примеры
Проверка на пустую ссылку
С использованием функции Значение
Выбрать Товары.Ссылка Как Номенклатура, Товары.Ссылка = Значение(Справочник.Номенклатура.ПустаяСсылка) Как ЭтаСсылкаПустая Из втТовары Как втТовары
С использованием оператора Есть Null
Выбрать Товары.Ссылка Как Номенклатура, Товары.Ссылка Есть Null Как ЭтаСсылкаПустая Из втТовары Как втТовары
Null при левом или полном соединении
Проверка на Null
Пример демонстрирует частую практическую ситуацию, когда при левом соединении, для первой таблицы не находится соответствия во второй. В этом случае все поля второй таблицы будут равны Null.
Выбрать втТовары.Ссылка Как Номенклатура, Остатки.КоличествоОстаток Как Количество, Остатки.КоличествоОстаток Есть Null Как НетОстатка Из втТовары как втТовары Левое Соединение РегистрНакопления.ТоварыНаСкладах.Остатки Как Остатки По втТовары.Ссылка = Остатки.Номенклатура
Обработка Null-значений
Модификация предыдущего запроса для демонстрации часто встречающейся методики по получению каких-либо значений по умолчанию, взамен отсутствующих. В данном примере с использованием функции ЕстьNull, производится замена отсутствующего значения остатка, на логически правильное 0.
Выбрать втТовары.Ссылка Как Номенклатура, ЕстьNull(Остатки.КоличествоОстаток, 0) Как Количество Из втТовары как втТовары Левое Соединение РегистрНакопления.ТоварыНаСкладах.Остатки Как Остатки По втТовары.Ссылка = Остатки.Номенклатура
В рамках этой статьи мы рассмотрели различные типы пустых значений и их свойства, изучили способы определения различных типов пустых значений в запросах, а в практической части убедились в простоте применения рассмотренного материала.
Пустая ссылка в запросе 1С
1. Обращение к пустой ссылке напрямую в запросе 2. Обращение к пустой ссылке через параметр запроса 1С 8.3
При выборке данных из базы данных 1С:Предприятие при помощи запросов мы сталкиваемся с моментами, когда не получаем никаких данных – в выборе необходимое значение приравнивается к “NULL”.
Почему мы получаем такое значение? Всего лишь потому, что при соединении нескольких таблиц базы данных 1С:Предприятие, в присоединяемой таблице не было данных по необходимой нам связи. Или при объединении нескольких запросов при помощи конструкций «Объединить» или «Объединить все» не найдено соответствие полей.
Чтобы не было таких ситуаций необходимо ввести в пользовательскую привычку исправлять такие моменты. Однако если уж случилось, ситуацию нужно исправлять post factum. В сегодняшнем случае рассмотрим, как работать с пустой ссылкой в запросе 1С.
В запросе 1С пустая ссылка может использоваться в любой части запроса: поле, условие.
Обратится к пустой ссылке, мы можем несколькими способами: 1. Напрямую в запросе программы; 2. Через параметр запроса 1С 8.3.
1. Обращение к пустой ссылке напрямую в запросе
В первом случае в нужном нам месте мы пишем процедуру «Значение(Справочник.Номенклатура.ПустаяСсылка)». Для примера я использовал справочник Номенклатура, но таким же образом можно использовать любой объект ссылочного типа. Прошу обратить внимание, что в запросе, когда мы обращаемся к справочнику Номенклатура или документу, мы пишем «Справочник» или «Документ» в единственном числе.
Большинство разработчиков (да и я сам) склоняются именно к такому способу обозначения пустой ссылки в запросе.
2. Обращение к пустой ссылке через параметр запроса 1С 8.3
Для обращения через параметр запроса необходимо добавить в условие или поле параметр «&ВашПараметрПустойСсылки», а в наименовании параметра – Ваше наименование. При выполнении запроса необходимо добавить установку этого параметра. Иначе запрос не сможет быть выполнен и будет выдаваться ошибка.
Например, мы связываем две таблицы, в одной из которых у нас есть поле ссылочного типа – получаем “NULL”. Есть 2 способа обхода этого.
Первый способ – при помощи конструкции ЕСТЬNULL(НашеЗначение,НовоеЗначение). В «НашеЗначение» записываем то поле, которое мы будем получать из второй таблицы, и, если будет выполняться условие функции, значение автоматически будет получено из второго элемента функции.
Второй способ несколько проще технически, однако кода потребуется больше. Это конструкция «ВЫБОР КОГДА ТОГДА ИНАЧЕ КОНЕЦ». Плюс этой процедуры заключается в том, что можно прописать строгие правила выполнения установки значения пустой ссылки.
Пустая ссылка в запросе 1С не так страшна, как может показаться с первого взгляда. Для того чтобы правильно использовать все конструкции в запросах, необходимо изучить язык запросов и, конечно же, практиковаться в его применении.
Специалист компании ООО «Кодерлайн» Мороз Олег Игоревич
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) —> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) —> Как сделать в 1С [1] => 1С: Конвертация данных [2] => Конвертация данных [3] => Обмен между базами [4] => Закрытие месяца [5] => Оценка задач [6] => Отчеты в 1С [7] => Моделирование [8] => HTTP [9] => Управление проектами [10] => БУ [11] => com-объекты [12] => 1С: WMS Управление складом [13] => РСБУ [14] => 1С: Сценарное тестирование [15] => Запросы 1С [16] => LINUX [17] => WEB [18] => Оптимизация [19] => 1С:Зарплата и Управление Персоналом [20] => Excel [21] => 1С: ERP [22] => ADO [23] => 1С:Управление производственным предприятием [24] => Внедрение [25] => Продажи [26] => Отчетность [27] => 1С: Розница [28] => 1С: CRM [29] => 1С:Бухгалтерия [30] => 1С:Комплексная автоматизация [31] => Производство [32] => Интеграция 1С [33] => Налоги [34] => Отпуск [35] => MS SQL Server [36] => Расширение конфигурации [37] => МСФО [38] => СКД [39] => Word [40] => WEB-сервисы 1С [41] => Внедрение ERP [42] => Перенос данных [43] => Торговое оборудование [44] => Лизинг [45] => 1С:Управление нашей фирмой [46] => Администрирование 1С [47] => 1С: Колледж [48] => Правила обмена [49] => 1С: Платформа ) —>