Пустая ссылка, дата или строка в запросе 1С 8.3
Рассмотрим основные методы использования пустых значений в условиях запросов 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С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Если Вы начинаете изучать 1С программирование, рекомендуем наш курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Князева Мария:
Запрос1.Текст = «ВЫБРАТЬ
|РемонтныйЛист.Номер,
|РемонтныйЛистМатериалыЗамена.ДатаРемонта,
|РемонтныйЛист.Проведен,
|РемонтныйЛист.Водитель1,
|РемонтныйЛист.Водитель2,
|РемонтныйЛист.Водитель3,
|РемонтныйЛистМатериалыЗамена.КолвоЧасов
|ИЗ
|Документ.РемонтныйЛист.МатериалыЗамена КАК РемонтныйЛистМатериалыЗамена
|ЛЕВОЕ СОЕДИНЕНИЕ Документ.РемонтныйЛист КАК РемонтныйЛист
|ПО РемонтныйЛистМатериалыЗамена.Ссылка = РемонтныйЛист.Ссылка
|ГДЕ
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= Значение(«ДатаНач») И РемонтныйЛистМатериалыЗамена.ДатаРемонта <= Значение("ДатаКон")
|РемонтныйЛист.Проведен = Истина
//|РемонтныйЛист.Водитель3 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель3.ПустаяСсылка)
//|РемонтныйЛист.Водитель2 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель2.ПустаяСсылка)
//|РемонтныйЛист.Водитель1 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель1.ПустаяСсылка)";
Пишу запрос мне необходимо выбрать даты, ремонты и ФИО водителей при том что дата входит в указанный период, водитель не пустое значение и документ проведен. там где закомментировано там ошибки:( помогите пожалуйста
Программист 1С:
Здравствуйте!
Мария, откуда Вы взяли такой синтаксис?
Давайте посмотрим подробней устанавливать параметры и пустые значения:
НЕ ПРАВИЛЬНО
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= Значение(“ДатаНач”)
ПРАВИЛЬНО
//|РемонтныйЛистМатериалыЗамена.ДатаРемонта >= &ДатаНач
НЕ ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 НЕ ЗНАЧЕНИЕ (РемонтныйЛист.Водитель3.ПустаяСсылка)
ПРАВИЛЬНО
//|РемонтныйЛист.Водитель3 <> Значение(Справочник.Водители.ПустаяСсылка)
Где «Водители» имя справочника, тип которого имеет реквизит «Водитель3» (возможно сотрудники или физические лица)
Князева Мария:
Синтаксис не правильный так как я тока учусь:) спасибо большое. но водитель это реквизит не справочника а документа. имеет ли это значение?
а еще подскажите пожалуйста как вот на основании этого же запроса заполнить ячейки в отчете на пересечении водителя и даты необходимо поставить колво часов сколько он был в ремонте
Программист 1С:
РемонтныйЛист.Водитель3 <> Значение(Справочник.Водители.ПустаяСсылка)
РемонтныйЛист.Водитель3 — Это реквизит
Значение(Справочник.Водители.ПустаяСсылка) — это значение, которое вы передаете что бы наложить отбор, а Справочник.Водители — это ТИП реквизита РемонтныйЛист.Водитель3.
В конечном счете суть условия какая? Отобрать только те позиции, для которых выражение будет равняться ИСТИНА.
Князева Мария:
С этим я уже разобралась. вы правы были что это реквизит справочника Физические лица.у меня теперь проблема в том что он ругается на РемонтныйЛист.Проведен = Истина
Программист 1С:
Какая ошибка? Возможно «И» или «ИЛИ» забыли 🙂
Аноним:
За «ИЛИ» пора вводить смертную казнь
Аноним:
Почему?
Князева Мария:
{Форма.ФормаОтчета.Форма(23)}: Ошибка при вызове метода контекста (Выполнить)
Результат1 = Запрос1.Выполнить();
по причине:
{(15, 1)}: Синтаксическая ошибка «Документ.РемонтныйЛист.Проведен»
<>Документ.РемонтныйЛист.Проведен = Истина
Вот ошибка какая
Программист 1С:
Условия через «И» пишутся 🙂
Князева Мария:
Здесь мы еще до условий то не дошли вроде?!:) это ошибка в запросе ведь или там тоже и надо везде?
Программист 1С:
То, что идет после слова «ГДЕ» в языке запросов называется условием)))
Разные условия соединяются с помощью «И» или «ИЛИ» ))) В вашем случае скорее всего «И» 🙂
Князева Мария:
Не задано значение параметра «ДатаНач»
РемонтныйЛистМатериалыЗамена.ДатаРемонта >= <>&ДатаНач И Документ.РемонтныйЛистМатериалыЗамена.ДатаРемонта <= &ДатаКон И
Вот, когда я на форме отчета ввожу ДатаНач и ДатаКон
Программист 1С:
Вот) теперь передайте параметр в запрос.
Проще всего это сделать с помощью метода Запрос.УстановитьПараметр(«ИмяПараметра», ЗначениеПараметра)
Князева Мария:
С «И» тоже правильно подсказали:) спасибо большое:)
Князева Мария:
Значение не является значением объектного типа (Получить)
КолвоЧасов = Выборка1.КолвоЧасов.Получить();
Получить не могу:(
Князева Мария:
ПолучитьОбъект тоже не получается
Программист 1С:
Что то вы плохо думаете….)))
Зачем получать объект из числа?)))))))
Достаточно:
КолвоЧасов = Выборка1.КолвоЧасов;
Князева Мария:
Правильно будет после запроса сформировать таблицу датРемонта, но она ведь не одна а много? надо цикл вставлять какой то?
Программист 1С:
Я вас тут в комментариях обучить не смогу всёму)))) Посмотрит лучше курсы)
Князева Мария:
Метод объекта не обнаружен (Вывести)
ТабДок.Вывести(Макет.ПолучитьОбласть(«Шапка|ПервыйСтолбец»));
Князева Мария:
Спасибо вам и так за помощь. я как бы суть понимаю но плохо знаю синтаксис его все равно и по видео курсам не выучишь пока сама не попробуешь:( вот и учусь по маленьку. да еще и учить то особо некому:(
Программист 1С:
Тут только самостоятельно, пока сами не поймете — любые подсказки будут мимо. 🙂 Я по началу каждую ночь сидел, учился) Советую курсы гилёва/насипова, там 170 часов обучения, всё поймете
Князева Мария:
а ссылку можно если не затруднит?
Князева Мария:
вот весь текст отчета. мне необходимо на основании документа ремонтного листа выбрать те даты, водителей и колво часов которые они были в ремонте и по ним сформировать типа табель и проблема в том что не получается присвоить колво часов в ячейку
Программист 1С:
не стоит весь текст, дайте ошибку))
Князева Мария:
Сейчас сделаю:) спасибо
Программист 1С:
Обращайтесь, поможем))))
Программист 1С:
Проверяйте тип ТабДок, читайте в синтаксис помощнике, есть ли у него такой метод
Князева Мария:
ну я даже из сегодняшних ваших подсказок уже уяснила кое-что:)
Vovan:
А Вы не блондинка?
Наташа:
Здравствуйте!
Простите за глупый вопрос. Как написать запрос, чтобы, если значение пусто(значения в поле нет) подставлял 0?
Делаю в запросе вот так
ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) КАК Остаток,
не работает.
Кирилл:
Как вы поняли что не работает? Вы смотрите данные в отчете?
Наташа:
извините за беспокойство)
разобралась. спасибо)
Влад:
1. Сравнение для строковых реквизитов неограниченной длины приведет к ошибке
ПоступлениеТоваровУслуг.Комментарий = “”
2. не указано как проверять на заполненность значения реквизитов составного типа
Сергей:
Возьмите начало строки неограниченной длины:
ВЫРАЗИТЬ(ПоступлениеТоваровУслуг.Комментарий КАК СТРОКА(1)) = “”
Дуся:
Помогите!
нужно создать документ, в котором будет много-много полей для автоматического заполнения и выводилась печатная форма с кнопкой печать
Собдо:
А можно ли (и как?) проверить в запросе на пустую ссылку в поле, у которого тип характеристика?
Роман:
А пустая строка может быть с пробелами!
Например, » »
Это как обработать?