Проверка пустой строки в запросе 1с. Функции преобразования регистра текста

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

Значение NULL возвращается в том случае, когда реквизита попросту нет. Тип в этом случае будет тоже NULL. Например, вы объединяете две таблицы через левое соединение. В том случае, когда для левой таблицы не будет найдено ни одного значения в правой, вернется NULL.

Проверку на данное значение можно осуществить при помощи конструкции «ЕСТЬ NULL» и « ». В первом случае возвращается Истина или Ложь. Во втором случае можно сразу задать другое значение в том случае, когда возвращается NULL.

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

ВЫБРАТЬ
КонтактныеЛицаПартнеров.Ссылка
ИЗ
Справочник.КонтактныеЛицаПартнеров КАК КонтактныеЛицаПартнеров
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.СегментыПартнеров КАК СегментыПартнеров
ПО КонтактныеЛицаПартнеров.Владелец = СегментыПартнеров.Родитель
ГДЕ
СегментыПартнеров.Ссылка ЕСТЬ NULL

Пустая дата

Проверка значения на пустую дату производится путем сравнения с конструкцией ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0). Пример использования приведен ниже:

Пустая ссылка в запросе 1С

В случае, когда возвращаемый реквизит имеет ссылочный тип, например, это элемент какого-либо справочника, документа и т. п., используется следующая конструкция: ЗНАЧЕНИЕ(Справочник.ИмяСправочника.ПустаяСсылка).

В приведенном ниже примере запрос выбирает всех партнеров, у которых не указан бизнес-регион.

Чтобы проверить на «ЗначениеЗаполнено» нужно сделать обратное условие:

Партнеры.БизнесРегион <> ЗНАЧЕНИЕ(Справочник.БизнесРегионы.ПустаяСсылка)

Пустая строка

Для проверки строковых типов производится сравнение с другим образцом. В данном случае – «».

Приведенный ниже запрос отберет всех партнеров с незаполненным наименованием.

Что понимается под строкой в 1с

Строки в 1с, как отличить строку от других типов ведь в модуле все символы – текст, а следовательно строка. Каждый непрерывный набор символов обрамленный двойными кавычками («») считается строкой, по умолчанию в конфигураторе он черного цвета.

Сообщить(«Хелло, ворлд! »);

Также следует помнить, что некоторые методы, как системные так и самописные, могут возвращать строковое значение.

Чтобы узнать является ли интересующее нас значение строкой можно сравнить его тип с типом "Строка ":

Если ТипЗнч("Какой-то текст") = Тип("Строка") Тогда Сообщить("Тип значения - Строка"); КонецЕсли;

Существуют несколько специальных функций для работы со строкой преобразующих другие типы в строку и наоборот. Вот несколько примеров:

Строка в Число

Число(«123,45»);

Число(«123.45»);

Если в параметре будут недопустимые знаки, например буквы, то это вызовет ошибку.

Строку в Дату

Дата("20101220235959");

Время указывать не обязательно(последние 6 символов).

Проверка на пустую строку

ПустаяСтрока() – это функция проверяет содержит ли переданная строка параметром значимые символы(незначимые символы - это в основном невидимые на экране: пробел, перенос строки и т.д.)

ПустаяСтрока(" ");
ПустаяСтрока(" а ");

Число в Строку

Строка(123.45); Формат(1253.25);

Для сравнение строк можно просто использовать знак равенства

Если "Четверг" = "Четверг" Тогда
КонецЕсли;

Для соединения строк используется знак плюс(+). Соединение строк в программировании называется конкатенацией.

Хитрость! Если складываются несколько разнотипных переменных то программа будет брать за основу тип первой переменной. Следовательно чтобы точно получить значение строкового типа можно использовать следующую запись:

КакаяТоСтрока = ""+ДеньГода(ТекущаяДата()) +ДеньНедели(ТекущаяДата());

Если Вы получите результат из предыдущего листинга, то вид будет примерно такой:

Как видно не хватает пробела разделяющего день года и день недели, для этого можно добавить пробел (« ») следующим образом:

КакаяТоСтрока = ""+ДеньГода(ТекущаяДата()) + " " + ДеньНедели(ТекущаяДата());

Перенос строки

Для переноса строки можно использовать либо символ переноса:

КакаяТоСтрока = ""+ДеньГода(ТекущаяДата()) + Символы.ПС + ДеньНедели(ТекущаяДата());

либо прямую черту

КакаяТоСтрока = ""+ДеньГода(ТекущаяДата()) + " |"+ ДеньНедели(ТекущаяДата());

В 1С проверка на пустое значение осуществляется специальной функцией. Что бы проверить заполнен ли имеющийся у вас реквизит или переменная следует использовать функцию из глобального контекста ЗначениеЗаполнено(<Значение>) .

В 1С 8 значение считается заполненным (не пустым) если оно отличается от значения по умолчанию для данного типа. Например для ссылочного типа значение по умолчанию — это Пустая ссылка (данного справочника, документа и т.п.). Также пустыми являются переменные и реквизиты содержащие значения Null и Неопределено .

1с проверка на пустое значение. Примеры

Переменная = Справочники.Номенклатура.ПустаяСсылка(); Проверка = ЗначениеЗаполнено(Переменная);

В данном случае переменная Проверка будет содержать значение Ложь . Также функцию ЗначениеЗаполнено(<Значение>) . можно использовать напрямую в условиях.

Пример 1.1

Если ЗначениеЗаполнено(Переменная) Тогда Сообщить("Значение в переменной не является пустым!"); КонецЕсли;

Переменная = Документы.АвансовыйОтчет.НайтиПоНомеру("000000001"); Проверка = ЗначениеЗаполнено(Переменная);

В данном примере, если документ Авансовый отчет с номером 000000001 существует, то в переменной Проверка будет содержаться значение Истина , иначе Ложь .

Использовать функцию ЗначениеЗаполнено нельзя для переменных мутабельных типов, таких как Таблица значений , Дерево значений и т.п. Функция работает для всех конфигураций.

Как же проверить, что в 1с таблица значений пустая? Для этого используется метод Количество() , с его помощью можно проверить сколько строк содержится в таблице значений.

Пример 3. Пусть МояТаблица — таблица значений определенная выше в коде.

Если МояТаблица.Количество() = 0 Тогда Возврат; КонецЕсли;

Этим же методом можно определить заполненность дерева значений и выборки результата запроса.

Пример 4. Пусть МоеДерево — дерево значений определенное выше в коде.

Если МоеДерево.Строки.Количество() = 0 Тогда Возврат; КонецЕсли;

Как видите, в дереве значений мы проверяем наличие строк первого уровня, если их нет, то дерево пустое.

Пример 5. Пусть Запрос — запрос к базе данных 1С 8, определенный выше.

Средства определения пустых ссылок, дат или строк. Рассмотрим, как проверить на пустую ссылку, дату или строку в запросе 1С.

Определить нулевые данные можно путем использования специальных операторов.

Информацию из базы данных 1С запрашивают (а потом получают) с помощью такого инструмента, как язык запросов (Query, англ.). Они составляются на латинице и кириллице. А одним из ключевых слов-команд (операторов) при получении информации является слово-команда ВЫБРАТЬ (SELECT, англ.) в сочетании с некоторыми конструкциями. Приведём примеры построения интересующих нас по теме запрашиваемых заданий:

Проверка на содержание NULL

Такое задание выполняется оператором ВЫБРАТЬ в сочетании с конструкцией «ЕСТЬ NULL»:

SELECT
ЗаказыОстатки.Заказчик,
ЗаказыОстатки.КоличествоОстаток
ИЗ
РегистрНакопления.Заказы.Остатки КАК ЗаказыОстатки
ГДЕ
ЗаказыОстатки.КоличествоОстаток ЕСТЬ NULL

Контроль даты

Пустая дата в запросе 1С вносится построением «ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)»:

SELECT
СчетВходящийПоставщика.Link,
СчетВходящийПоставщика.ДатаПрихода
ИЗ
Документ. СчетВходящийПоставщика КАК СчетВходящийПоставщика
ГДЕ
СчетВходящийПоставщика.ДатаПрихода = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)

Ссылочная проверка

Проверка несуществующих внутриссылочных значений (на планы счетов, справочники и пр.) производится с использованием конструкции «VALUE(Справочник.Имя…ПустаяСсылка)»:

Проверка строки

Пустота в строках обнаруживается с применением пробела в кавычках «»:

SELECT
Покупатели.Link
ИЗ
Справочник.Покупатели КАК Покупатели
ГДЕ
Покупатели.Код = «»

Ещё о битых и обычных линках

«Битой» считается ссылка (Link, англ.), ведущая (указывающая) на несуществующий элемент. Под несуществующим понимают такой, которого нет в базе данных. Полезно о таких линках знать хотя бы для того, чтобы получать от системы уведомления в более понятной форме. Да и запись, удаление и открытие нереальных объектов не имеет смысла.

Платформы 1С не обладают внутренними средствами чтобы их отсечь. Ещё нужно понимать, что вне «битых» в системе живут специальные «пустые линки», которые следует различать одни от других.
Это можно выяснить и без запросов к базе данных:

В системе 1С-7.7

Для «битой» - методом Link.Selected() и функцией ПустоеЗначение() возвращается ноль. Для «пустой» - в первом случае ноль, а во втором - единица. Для «нормальной» - единица и ноль. Получается, в 1С-7.7 «битая» - не является несуществующим значением, которое не считается выбранным.

В системе 1С-8.x

Всё по-другому - в обоих случаях (для «битых» и «обычных») метод возвращает Ложь, а функция - Истину. Решение такое: Для «битой» методом Ссылка.ПолучитьОбъект() возвращается функция «Неопределено». Для «пустой» - выбрасывается «Ошибка метода контекста». Для «нормальной» - возвращается значение согласно документации; Выходит, в 1С-8.х «битая» - не будет несуществующей функцией ссылочного типа, которая возвращает Неопределённое значение объекта.

Откуда они берутся

При переходе по несуществующему адресу битой линки пользователю в лучшем случае показано уведомление о том, что объект не найден, в худшем - изображение страницы сервера. Наихудшей их чертой является скрытость. Отсюда - сложность в проверке их корректности. Во время работы с конфигурацией она постоянно дорабатывается, обновляется. Какие-то объекты подлежат удалению, изменяется структура. А ссылка на удалённый элемент остаётся в конструкциях и алгоритмах. Таким образом, несуществующие адреса остаются в системе после удаления самого элемента (вместе с адресом).

В сегодняшней публикации было рассмотрено специальное построение запросов. Приведены примеры конструкций. Это пригодится вам в работе при поиске пустых значений.

Строка — один из примитивных типов данных в системах 1С:Предприятие 8. Переменные с типом строка содержат текст.

Значения переменных типа строка заключаются в двойные кавычки. Несколько переменных данного типа можно складывать.

Пер1 = "Слово 1" ;
Пер2 = "Слово 2" ;
Пер3 = Пер1 + " " + Пер2 ;

В итоге Пер3 будет иметь значение «Слово 1 Слово 2″.

Кроме того, в системах 1С:Предприятие 8 предусмотрены функции для работы со строками. Рассмотрим основные:

ВвестиСтроку(<Строка>, <Подсказка>, <Длина>, <Многострочность>) — функция предназначена для вывода диалогового окна, в котором пользователь может указать значение переменной типа Строка . Параметр <Строка> является обязательным и содержит имя переменной, в которую будет записана введенная строка. Параметр <Подсказка> необязательный — это заголовок диалогового окна. Параметр <Длина> необязательный, показывает максимальную длину вводимой строки. По умолчанию равен нулю, что означает неограниченную длину. Параметр <Многострочность> необязательный. Определяет режим ввода многострочного текста: Истина — ввод многострочного текста с разделителями строк; Ложь — ввод простой строки.

Строку можно ввести и, зная код символа в кодировке Unicode:

Символ(<КодСимвола>) — код вводится в виде числа.

Буква= Символ(1103 ) ; // Я

Существует и обратная функция, позволяющая узнать код какого-либо символа.

КодСимвола(<Строка>, <НомерСимвола>) — возвращает номер указанного символа в кодировке Unicode в виде числа.

Функции преобразования регистра текста:

ВРег(<Строка>) — преобразует все символы строки в верхний регистр.

НРег(<Строка>) — преобразует все символы строки в нижний регистр.

ТРег(<Строка>) — преобразует все символы строки в титульный регистр. То есть первые буквы во всех словах преобразуется в верхний регистр, а остальные буквы — в нижний.

Функции поиска и замены символов в строке:

Найти(<Строка>, <ПодстрокаПоиска>) — находит номер символа вхождения подстроки поиска. Например:

Найти ("Строка" , "ока" ) ; // 4

СтрНайти(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) — находит номер символа вхождения подстроки поиска, номер вхождения указывается в соответствующем параметре. При этом поиск начинается с символа, номер которого указан в параметре НачальнаяПозиция. Поиск возможен с начала или с конца строки. Например:

Номер4 Вхождения= СтрНайти ("Обороноспособность" , "о" , НаправлениеПоиска. СНачала, 1 , 4 ) ; // 7

СтрЗаменить(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) – находит в исходной строке все вхождения подстроки поиска и заменяет ее на подстроку замены.

СтрЗаменить ("Строка" , "ока" , "" ) ; // Стр

ПустаяСтрока(<Строка>) – проверяет строку на наличие значащих символов. Если значащих символов нет, или вообще никаких символов нет, то возвращается значение Истина . В противном случае — Ложь .

СтрЧислоВхождений(<Строка>, <ПодстрокаПоиска>) – вычисляет число вхождений подстроки поиска в исходной строке.

СтрЧислоВхождений ("учиться, учиться и еще раз учиться" , "учиться" , "" ) ; // 3

СтрШаблон(<Строка>, <ЗначениеПодстановки1>…<ЗначениеПодстановкиN> — подставляет параметры в строку по номеру. Строка должна содержать маркеры подстановки вида: «%1..%N». Нумерация маркеров начинается с 1. Если значение параметра Неопределено , подставляется пустая строка.

СтрШаблон ("Параметр 1 = %1, Параметр 2 = %2" , "1" , "2" ) ; // Параметр 1= 1, Параметр 2 = 2

Функции преобразования строк:

Лев(<Строка>, <ЧислоСимволов>) – возвращает первые сначала символы строки.

Прав(<Строка>, <ЧислоСимволов>) – возвращает последние символы строки.

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) – возвращает строку длиной в <ЧислоСимволов>, начиная с символа <НачальныйНомер>.

СокрЛ(<Строка>) отсекает незначащие символы, стоящие слева от первого значащего символа в строке.

СокрП(<Строка>) — отсекает незначащие символы, стоящие справа от последнего значащего символа в строке.

СокрЛП(<Строка>) – отсекает незначащие символы, стоящие слева от первого значащего символа в строке и справа от последнего значащего символа в строке.

СтрПолучитьСтроку(<Строка>, <НомерСтроки>) – получает строку многострочной строки по номеру.

Прочие функции:

СтрДлина(<Строка>) – возвращает количество символов в строке.

СтрЧислоСтрок(<Строка>) – возвращает число строк в многострочной строке. Строка считается новой, если она отделена от предыдущей символом перевода строки.

СтрСравнить(<Строка1>, <Строка2> ) – сравнивает две строки без учета регистра. Функция работает аналогично объекту СравнениеЗначений . Возвращает:

  • 1 — если первая строка больше второй
  • -1 — если вторая строка больше первой
  • 0 — если строки равны

СтрСравнить("Первая строка" , "Вторая строка" ) ; // 1