Проверить результат запроса на пустоту 1с
NULL – отсутствующие значения.
Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено.
NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа.
NULL значения появляются в запросе в следующих ситуациях:
а) Внешнее соединение, при котором не было найдено соответствующей записи в другой таблице (при левом – во второй, при правом – в первой, при полном – в обоих)
б) Обращение к реквизитам элементов для группы и наоборот.
в) NULL в списке полей выборки (ВЫБРАТЬ)
г) Обращение к реквизитам для битой ссылки
ЕСТЬ NULL используется в операторе ВЫБРАТЬ (как бы проверя, что значение это есть пустое ( Значение ЕСТЬ NULL )):
Код 1C v 8.х
еще пример:
Код 1C v 8.х
Функция ЕСТЬNULL (значение, РезультатЕслиNULL) возвращает значение своего первого параметра, в случае если он не равен NULL, и значение второго параметра в противном случае
Является свернутым ВЫБОР…КОНЕЦ, но ЕСТЬNULL предпочтительнее.
Код 1C v 8.х
еще пример:
Код 1C v 8.х
В данном примере получаются все элементы справочника номенклатуры, после чего, для каждой номенклатуры из регистра накопления получаются текущие остатки. Т.к. для номенклатуры, по которой отсутствуют остатки, виртуальная таблица остатков не запись вернет, то в результате соединения в поле "УчетНоменклатурыОстатки.КоличествоОстаток" будут значения NULL для номенклатуры, по которой не было остатков. Для того чтобы вместо значения NULL в результате запроса присутствовало значение 0, мы использовали функцию ЕСТЬNULL(), которая осуществит желаемую замену.
ЕСТЬNULL отличается от ВЫБОР по следующим причинам:
а) При ЕСТЬNULL лучше читается запрос (проще)
б) При ЕСТЬNULL, если проверяется сложное выражение, то работает быстрее, поскольку вычисляется один раз
в) При ЕСТЬNULL выражение замены приводится к типу проверяемого выражения, если оно имеет тип Строка (длина) или Число (разрядность).
Нельзя проверять значения на NULL обычным равенством, потому что в SQL действует трехзначная логика – Истина, Ложь, NULL, и результатом такого сравнения будет UNKNOWN, что в 1С 8.0 аналогично ЛОЖЬ.
NULL <> 0, поэтому при левых внешних соединениях спр. Номенклатура с таблицами остатков, цен, Контрагентов со взаиморасчетами при отсутствии таких записей там будет NULL, который не равен 0. Лучшее решение – ЕСТЬNULL
Похожие FAQ
Еще в этой же категории
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Как в запросе получить Вид (тип) Документа? 15
Столкнулся с задачей, нужно было выбрать все документы по выплате и сгруппировать их по типу документа! Перелистав все ЖКК и интернет, понял что простого способа получить Вид документа в запросе нет :( Пришлось сделать так: Запрос = Новый Запрос; Посмотреть все в категории Запросы
Рассмотрим основные методы использования пустых значений в условиях запросов 1С 8.3.
Проверка на NULL
выполняется с помощью конструкции ЕСТЬ NULL, например:
ВЫБРАТЬ
ВнутренниеЗаказыОстатки.Заказчик,
ВнутренниеЗаказыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.ВнутренниеЗаказы.Остатки КАК ВнутренниеЗаказыОстатки
ГДЕ
ВнутренниеЗаказыОстатки.КоличествоОстаток ЕСТЬ NULL
Пустая дата в запросе 1С
Пустая дата в запросе устанавливается конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0), пример:
ВЫБРАТЬ
СчетНаОплатуПокупателю.Ссылка,
СчетНаОплатуПокупателю.ДатаОтгрузки
ИЗ
Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателю
ГДЕ
СчетНаОплатуПокупателю.ДатаОтгрузки = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
Пустая ссылка (значение) в запросе 1С 8.2 и 8.3
Для ссылочных значений (справочники, документы, перечисления, планы счетов и т.д) для проверки необходимо использовать конструкцию «ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка)». Например:
ВЫБРАТЬ
Номенклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Родитель = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)
Проверка на пустую строку в запросе 1С
В условиях для нахождения пустой строки необходимо использовать пустое значение строки — «», например:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
Поддержите нас, расскажите друзьям!
СПРОСИТЕ в комментариях!
Запрос1.Текст = «ВЫБРАТЬ
|РемонтныйЛист.Номер,
|РемонтныйЛистМатериалыЗамена.ДатаРемонта,
|РемонтныйЛист.Проведен,
|РемонтныйЛист.Водитель1,
|РемонтныйЛист.Водитель2,
|РемонтныйЛист.Водитель3,
|РемонтныйЛистМатериалыЗамена.КолвоЧасов
|ИЗ
|Документ.РемонтныйЛист.МатериалыЗамена КАК РемонтныйЛистМатериалыЗамена
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.РемонтныйЛист КАК РемонтныйЛист
|ПО РемонтныйЛистМатериалыЗамена.Ссылка = РемонтныйЛист.Ссылка
|ГДЕ
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= Значение(«ДатаНач») И РемонтныйЛистМатериалыЗамена.ДатаРемонта |РемонтныйЛист.Проведен = Истина
//|РемонтныйЛист.Водитель3 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель3.ПустаяСсылка)
//|РемонтныйЛист.Водитель2 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель2.ПустаяСсылка)
//|РемонтныйЛист.Водитель1 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель1.ПустаяСсылка)";
Пишу запрос мне необходимо выбрать даты, ремонты и ФИО водителей при том что дата входит в указанный период, водитель не пустое значение и документ проведен. там где закомментировано там ошибки:( помогите пожалуйста
Мария, откуда Вы взяли такой синтаксис?
Давайте посмотрим подробней устанавливать параметры и пустые значения:
НЕ ПРАВИЛЬНО
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= Значение(“ДатаНач”)
ПРАВИЛЬНО
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= &ДатаНач
НЕ ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель3.ПустаяСсылка)
ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 <> Значение(Справочник.Водители.ПустаяСсылка)
Где «Водители» имя справочника, тип которого имеет реквизит «Водитель3» (возможно сотрудники или физические лица)
Синтаксис не правильный так как я тока учусь:) спасибо большое. но водитель это реквизит не справочника а документа. имеет ли это значение?
а еще подскажите пожалуйста как вот на основании этого же запроса заполнить ячейки в отчете на пересечении водителя и даты необходимо поставить колво часов сколько он был в ремонте
РемонтныйЛист.Водитель3 — Это реквизит
Значение(Справочник.Водители.ПустаяСсылка) — это значение, которое вы передаете что бы наложить отбор, а Справочник.Водители — это ТИП реквизита РемонтныйЛист.Водитель3.
В конечном счете суть условия какая? Отобрать только те позиции, для которых выражение будет равняться ИСТИНА.
С этим я уже разобралась. вы правы были что это реквизит справочника Физические лица.у меня теперь проблема в том что он ругается на РемонтныйЛист.Проведен = Истина
Тип значения Null – это переменная или поле с отсутствующим значением. Если реквизит объекта имеет один определенный тип, например тип «Справочник.Договоры», то незаполненное значение будет равно пустой ссылке в запросе «Справочник.Договоры.ПустаяСсылка». Если реквизит имеет мультитип, то незаполненное значение данного реквизита будет равно значению «Неопределено», так как используемые в этом реквизите типы известны, но неизвестно, какой из пустых типов нужно использовать в данном случае. Для примера, в документе «ЗаказКлиента» реквизит «ДокументОснование» может быть и «ЗаданиеТорговомуПредставителю» и «КоммерческоеПредложениеКлиенту». В случаях же, когда вообще неизвестно, какие типы мы хотим получить, значением свойства является Null. В качестве примера, в котором в запросе есть Null, можно рассмотреть левое соединение таблиц, когда в присоединяемой таблице отсутствуют значения, удовлетворяющие условию соединения.
Пример кода: присоединение к таблице контрагентов таблицы договоров
Рис. 1 Левое соединение таблиц
Если у контрагента отсутствует договор, то при выполнении запроса получим следующие значения:
Как видим в запросе в 1С есть Null и это отображается пустой строкой.
В запросе сравнение любого значения с типом значения Null дает результат Ложь. Даже условие Null = Null является ложным.
2. Методы Есть Null и ЕстьNull
Для правильной обработки данных ситуаций созданы такие методы, как:
· Есть Null – это выражение условия, проверяющее, является ли выбранное значение типом значения Null. При проверке следует применять его. Сравнение вида (ДоговорКонтрагента.Ссылка = Null) не даст корректного результата.
Рис. 2 Пример кода для проверки типа значения Null
Для корректной работы запроса обязательно следует отслеживать места, где есть Null в запросе 1С, и заменять данное значение на какой-то определенный тип.
· ЕстьNull
Этот метод позволяет менять значение Null на нужное нам значение.
Пример кода для запроса в 1С с ЕстьNull
Рис. 3 Код для ЕстьNull в запросе
Отсутствующую строку с помощью метода ЕстьNull в 1С можно заменить на пустую строку, отсутствующую цифру на ноль, ссылку на пустую ссылку, дату на пустую дату. Например ЕстьNull(“ДоговорыКонтрагентов.Номер”, “”), ЕстьNull(“ДоговорыКонтрагентов.СуммаДоговора”, 0), ЕстьNull(“ДоговорыКонтрагентов.Партнер”, Значение(Справочник.Партнеры.ПустаяСсылка)), ЕстьNull(“ДоговорыКонтрагентов.Дата”, ДАТАВРЕМЯ(1,1,1,0,0,0)).
Тип значения Null также может уже содержаться в используемом в запросе реквизите, попав туда в результате некорректной записи программным кодом, смене типа реквизита в конфигураторе либо при неправильном обмене данными между базами. В этих случаях тоже можно воспользоваться выражением ЕстьNull в запросе, но лучше исправлять такие реквизиты.
Специалист компании «Кодерлайн»
Вас могут заинтересовать следующие статьи:
94 [PROP_CODE] => TAGS2 [TITLE] => Вас могут заинтересовать следующие семинары: ) --> 95 [PROP_CODE] => TAGS [TITLE] => Вас могут заинтересовать следующие вебинары: ) -->
Вас могут заинтересовать следующие вебинары:
Программирование в 1С [1] => 1С:Бухгалтерия [2] => 1С:Управление производственным предприятием [3] => 1С: Розница [4] => 1С: CRM [5] => 1С: Управление торговлей [6] => Бюджетирование [7] => СКД [8] => 1С: Конвертация данных [9] => Администрирование 1С [10] => Конвертация данных [11] => Лицензии 1С [12] => Оптимизация [13] => 1С: Документооборот [14] => 1С: ERP [15] => Транспортная логистика [16] => Техническое задание [17] => Продажи [18] => Ценообразование [19] => Планирование [20] => MS SQL Server [21] => Полезные обработки [22] => МСФО [23] => Отчеты в 1С [24] => XML [25] => Внедрение ERP [26] => Перенос данных [27] => Торговое оборудование [28] => РСБУ [29] => 1С:Управление корпоративными финансами [30] => 1С: Колледж [31] => 1С: Аренда и управление недвижимостью [32] => Финансовый учет ) -->
В этой статье будут рассмотрены способы проверки на пустое значение в зависимости от типа проверяемого реквизита в запросе 1С 8.3, в том числе пустой ссылки.
Проверка на NULL
Значение NULL возвращается в том случае, когда реквизита попросту нет. Тип в этом случае будет тоже NULL. Например, вы объединяете две таблицы через левое соединение. В том случае, когда для левой таблицы не будет найдено ни одного значения в правой, вернется NULL.
Проверку на данное значение можно осуществить при помощи конструкции «ЕСТЬ NULL» и «ЕСТЬNULL()». В первом случае возвращается Истина или Ложь. Во втором случае можно сразу задать другое значение в том случае, когда возвращается NULL.
В приведенном ниже запросе 1С 8.3 будут возвращен список контактных лиц тех партнеров, у кого не задан сегмент.
ВЫБРАТЬ
КонтактныеЛицаПартнеров.Ссылка
ИЗ
Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СегментыПартнеров КАК СегментыПартнеров
ПО КонтактныеЛицаПартнеров.Владелец = СегментыПартнеров.Родитель
ГДЕ
СегментыПартнеров.Ссылка ЕСТЬ NULL
Пустая дата
Проверка значения на пустую дату производится путем сравнения с конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0). Пример использования приведен ниже:
ВЫБРАТЬ
Встреча.Ссылка
ИЗ
Документ.Встреча КАК Встреча
ГДЕ
Встреча.Дата = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
Пустая ссылка в запросе 1С
В случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка).
В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион.
ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.БизнесРегион = ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)
Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:
Пустая строка
Для проверки строковых типов производится сравнение с другим образцом. В данном случае – «».
Получите понятные самоучители по 1С бесплатно:
Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием.
ВЫБРАТЬ
Партнеры.Ссылка
ИЗ
Справочник.Партнеры КАК Партнеры
ГДЕ
Партнеры.Наименование = «»
Здравствуйте гуру 1С, возник вопрос, как в запросе проверить строку, которой нет?
Делаю так, прописал запрос в консоли запросов, но ничего не получаю.
С таким кодом тоже пустота.
Далее практическим методом выяснил, когда показывает значение "Пустая строка", если в строке представления первым стоит пробел, а потом идёт текст.
А мне нужно вывести\узнать результат, когда строки вообще нет.
Кучу статей в инете и на данном форуме перекопал - безрезультатно.
Подскажите куда копать?
Что быстрее, проверка на null, или проверка на тип перечисления в запросе?
вопрос такой. если несколько таблиц. сходных по структуре в запросе. в первой таблице .
Проверка в запросе
Доброго времени суток! Подскажите, пож., как сделать! Использую Делфи + Аксес. Делаю запрос на.
Отклик сервера на отсутствующую страницу
Согласно рекомендации Яндекса, при отсутствии запрашиваемой страницы сервер должен выдавать.
Проверка переданного параметра в Get запросе
Есть сервлет, который слушает урл /test. Get запросом может передаваться параметр ?test=2. Как.
Phil, что-то как-то не совсем то получаю, что мне надо. По идее мне надо что-то аналогично этому запросу получать, если строки заполненной с адресом нет.
Но только нужно пройтись по всем контрагентам, а не по одному, желательно циклом. Но вроде как в запросе метод проверки Пустой() в цикле не работает?
Neophyte1C, масло какое-то масляное.
Добавлено через 11 секунд
Dethmontt, суть вопроса моего, мне нужно пройтись по всем контрагентам и проверить, есть ли в них заполненный Email 1 (Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("000000013 ")), если он не заполнен - сообщить мне об этом.
А у некоторых контрагентов эта строка вообще пустая, не заполнена - соответственно неактивная и вот тут у меня затык и возникает.
Поэтому ковырял консоль запросов со сложным запросом, где практическим методом выяснил, когда показывает значение "Пустая строка", если в строке представления первым стоит пробел, а потом идёт текст.
А мне нужно вывести\узнать результат, когда строки вообще нет.
Решение
Neophyte1C, Да чо тут думать то
1. Берем таблицу "Контактная информация" с отбором по нужному типу КИ, помещаем результат в ВТ
2. Берем таблицу контрагентов (без групп) к ней левым соединением ВТ полученную на прошлом шаге и ставим условие на NULL на поле из ВТ
Читайте также: