В 1С не встроены разработчиками средства определения пустых ссылок, дат или строк. Рассмотрим, как проверить на пустую ссылку, дату или строку в запросе 1С.
Содержание
- 1 Язык заданий
- 2 Проверка на содержание NULL
- 3 Контроль даты
- 4 Ссылочная проверка
- 5 Проверка строки
- 6 Ещё о битых и обычных линках
Язык заданий
Информацию из базы данных 1С запрашивают (а потом получают) с помощью такого инструмента, как язык запросов (Query, англ.). Они составляются на латинице и кириллице. А одним из ключевых слов-команд (операторов) при получении информации является слово-команда ВЫБРАТЬ (SELECT, англ.) в сочетании с некоторыми конструкциями. Приведём примеры построения интересующих нас по теме запрашиваемых заданий:
Проверка на содержание NULL
Такое задание выполняется оператором ВЫБРАТЬ в сочетании с конструкцией «ЕСТЬ NULL»:
SELECTЗаказыОстатки.Заказчик,ЗаказыОстатки.КоличествоОстатокИЗРегистрНакопления.Заказы.Остатки КАК ЗаказыОстаткиГДЕЗаказыОстатки.КоличествоОстаток ЕСТЬ NULL
Контроль даты
Пустая дата в запросе 1С вносится построением «ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)»:
SELECTСчетВходящийПоставщика.Link,СчетВходящийПоставщика.ДатаПриходаИЗДокумент. СчетВходящийПоставщика КАК СчетВходящийПоставщикаГДЕСчетВходящийПоставщика.ДатаПрихода = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)
Ссылочная проверка
Проверка несуществующих внутриссылочных значений (на планы счетов, справочники и пр.) производится с использованием конструкции «VALUE(Справочник.Имя…ПустаяСсылка)»:
SELECTПланСчетов.СсылкаИЗСправочник.ПланСчетов КАК ПланСчетовГДЕПланСчетов = VALUE(Справочник.ПланСчетов.ПустаяСсылка)
Проверка строки
Пустота в строках обнаруживается с применением пробела в кавычках «»:
SELECTПокупатели.LinkИЗСправочник.Покупатели КАК ПокупателиГДЕПокупатели.Код = «»
Ещё о битых и обычных линках
«Битой» считается ссылка (Link, англ.), ведущая (указывающая) на несуществующий элемент. Под несуществующим понимают такой, которого нет в базе данных. Полезно о таких линках знать хотя бы для того, чтобы получать от системы уведомления в более понятной форме. Да и запись, удаление и открытие нереальных объектов не имеет смысла.
Платформы 1С не обладают внутренними средствами чтобы их отсечь. Ещё нужно понимать, что вне «битых» в системе живут специальные «пустые линки», которые следует различать одни от других.Это можно выяснить и без запросов к базе данных:
В системе 1С-7.7
Для «битой» — методом Link.Selected() и функцией ПустоеЗначение() возвращается ноль. Для «пустой» — в первом случае ноль, а во втором — единица. Для «нормальной» — единица и ноль. Получается, в 1С-7.7 «битая» — не является несуществующим значением, которое не считается выбранным.
В системе 1С-8.x
Всё по-другому — в обоих случаях (для «битых» и «обычных») метод возвращает Ложь, а функция — Истину. Решение такое: Для «битой» методом Ссылка.ПолучитьОбъект() возвращается функция «Неопределено». Для «пустой» — выбрасывается «Ошибка метода контекста». Для «нормальной» — возвращается значение согласно документации; Выходит, в 1С-8.х «битая» — не будет несуществующей функцией ссылочного типа, которая возвращает Неопределённое значение объекта.
Откуда они берутся
При переходе по несуществующему адресу битой линки пользователю в лучшем случае показано уведомление о том, что объект не найден, в худшем — изображение страницы сервера. Наихудшей их чертой является скрытость. Отсюда — сложность в проверке их корректности. Во время работы с конфигурацией она постоянно дорабатывается, обновляется. Какие-то объекты подлежат удалению, изменяется структура. А ссылка на удалённый элемент остаётся в конструкциях и алгоритмах. Таким образом, несуществующие адреса остаются в системе после удаления самого элемента (вместе с адресом).
В сегодняшней публикации было рассмотрено специальное построение запросов. Приведены примеры конструкций. Это пригодится вам в работе при поиске пустых значений.
Оставляйте свои комментарии.