Как проверить таблицу значений на пустоту 1с
Перейти к содержимому

Как проверить таблицу значений на пустоту 1с

  • автор:

Проверка на пустой результат выполнения запроса

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;

Возврат НЕ Запрос.Выполнить().Пустой()

Методическая рекомендация (полезный совет)

2. В то же время если требуется выбрать (или выгрузить) результат запроса, то предварительный вызов метода Пустой не требуется.
Например, вместо:

РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда // избыточный вызов
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
.

Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
.

1с проверить таблицу значений на пустоту

Приветствую, коллеги! В данной статье поговорим о том, как сделать проверку на «пустое» значение в 1С. Ведь бывает, что программисту, когда он описывает алгоритм по обработке, нужно узнать есть ли что-то в переменной или эта переменная «пустая». Далее будет приведена классификация «пустых» значений и функции для проверки их наличия или отсутствия.

1. Значение «Неопределено» и значение типа “NULL”

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

Следует рассмотреть ещё значение типа «NULL» – его наличие означает, что значение отсутствует.

Подытожим: два данных значения – это специальные типы, предназначены для особых случаев.

В большем количестве типов есть стандартные значения, которые были установлены в системе по умолчанию, по сути это то значение, которое автоматически присваивается переменной даже в случае, когда её не заполнили. Как пример: для чисел – это будет значение «0», для даты – дата «00010101», для строк – строка без символов.

Замечание: для типа «ссылка» есть значение пустой ссылки.

2. Вариации проверок на пустое значение

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

В случае, когда разработчик знает тип переменной, которая подлежит проверке, проводится сравнение значения переменной с пустым значением для заданного типа. Чтобы узнать пустое значение у типа, используется функция «ПолучитьПустоеЗначение()». На скриншоте ниже приведён пример проверки с известным типом переменной:

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

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

Если разработчику не известен тип переменной, но проверить на пустое значение нужно, используется функция «ПустоеЗначение()», как показано на скриншоте ниже:

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

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

Функция «ЗначениеЗаполнено()» используется для проверки содержания значения, которое ей передали. Это можно увидеть по общей форме функции:

Функция ЗначениеЗаполнено

Рис. 3 Функция ЗначениеЗаполнено

Для типа «ссылка» проверка немного отличается от тех, которые были описаны выше. Чтобы узнать содержится ли в ссылке «пустое» значение нужно воспользоваться методом «ПустаяСсылка()». Работает он аналогично функции «ЗначениеЗаполнено()», только для ссылок.

В данной статье было рассмотрены общие понятия «пустое» значение в 1С и то, каким типам оно соответствует. Также были приведены 4 разных способа проверки на «пустое» значение, из которых можно легко избрать самый сподручный для конкретного типа и конкретного кода программы.

Понятие «пустых» значений

В 1С:Предприятии 8 отсутствует такое понятие как «пустое» значение.

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

Существует значение Null (типа Null ). Оно обозначает отсутствие значения в выборке полученной из базы данных. Например, при выполнении левого и правого соединения поля невыбранных записей будут иметь значения Null . Кроме того, значение типа Null будут иметь реквизиты иерархического справочника для элементов-групп, если в метаданных указано, что этот реквизит используется только для элементов не являющихся группами. Аналогично и для элементов, значения Null будут иметь реквизиты доступные только для групп.

Заметим, что и значение Неопределено и значение Null имеют соответствующие типы и используются в специальных (описанных выше) случаях, а не в качестве «пустых» значений каких-либо типов.

Для большинства типов существуют значения по умолчанию, то есть значения, устанавливаемые системой в реквизите (колонке таблицы значений и т.д.) если для него задан соответствующий тип. Например, для числа – пустым значением является 0, для строки – строка, не содержащая ни одного символа, для даты – дата начала отсчета (‘00010101’).
Для типов ссылок на объекты базы данных существуют значения пустых ссылок. Их можно получить у соответствующих менеджеров вызовом метода ПустаяСсылка() . Именно это значение является значением по умолчанию для соответствующих типов. Заметим, что если реквизит имеет составной тип, включающий тип ссылки на объект базы данных, то данному реквизиту можно присвоить как значение Неопределено , так и значение соответствующей пустой ссылки. Соответственно в этих двух случаях будут храниться два разных значения. Решения, какое значение присваивать зависит от прикладного смысла. Например, если реквизит может иметь значения двух ссылочных типов и, исходя из значений других реквизитов, очевидно, что в нем должно быть значение определенного (одного из этих двух) ссылочного типа, но конкретная ссылка еще не выбрана пользователем, то можно присвоить значение пустой ссылки соответствующего типа. Например, это необходимо для того, чтобы поле ввода позволило бы пользователю ввести значение необходимого типа. А если, исходя из значений других реквизитов, этот реквизит вообще не должен быть заполнен, то тогда ему нужно присвоить значение Неопределено .

В 1С:Предприятии 8 используется понятие «незаполненного значения». Оно применяется для различных сервисных возможностей. Например, у измерений регистров можно установить свойство Запрет незаполненных значений . Тогда система при записи будет автоматически проверять заполнено соответствующее измерение или нет. Так же существуют свойства АвтоОтметкаНезаполненного и свойство АвтоВыборНезаполненного . Они управляют соответственно автоматическим подчеркиванием незаполненного значения и автоматическим началом выбора незаполненного значения.
Во всех случаях для проверки того заполнено значение или нет, используется единый принцип. Значение считается незаполненным, если оно равно значению по умолчанию для своего типа. Соответственно незаполненными значениями будет число 0, строка, не содержащая символов, пустая ссылка на элемент справочника и т.д.

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

Для того чтобы найти строки таблицы значений, в 1с 8 используется два метода: Найти и НайтиСтроки. Первый предназначен для поиска одной строки, содержащей указанное значение. Второй для поиска всех строк, соответствующих указанному отбору. Разберем оба метода подробнее.

Метод Найти

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

Рассмотрим простой пример. У нас есть таблица значений с колонками: Номенклатура, Количество, Цена, Сумма. Найдем строку, содержащую значение 2 в колонке Количество или в колонке Цена.

После поиска, обязательно делаем проверку на Неопределено. Иначе, в случае не найденной строки, можно получить ошибку.

При изменении значений в найденной строке, изменяются и значения в самой таблице. Это логично, так как мы работаем непосредственно со строкой таблицы значений.

Метод НайтиСтроки

Метод НайтиСтроки предназначен для поиска всех строк таблицы значений, соответствующих указанному отбору. Синтаксис метода:

Пример 2. Пусть у нас есть Таблица значений содержащаяся в переменной Таблица, у которой есть колонки Наименование и Код.

Как и в предыдущем методе, изменение значений в найденных строках ведет к изменению значений в таблице. Это не так очевидно, и происходит из-за того, что массив найденных строк содержит ссылки на строки исходной таблицы. Это работает и в обратную сторону. То есть, если вы измените значения в таблице, они изменятся и в найденных строках.

Другие способы найти строки таблицы значений

У рассмотренных методов есть свои недостатки. Основной, поиск только на равенство. Если вам необходимо использовать более сложные конструкции отбора строк, то можно обойти таблицу значений циклом, или передать ее в запрос.

Пример 3. Воспользуемся таблицей из самого первого примера. Обработаем строки, цена в которых находится в интервале от 100 до 1000.

Пример 4. Сделаем тоже самое при помощи запроса.

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

Приветствую, коллеги! В данной статье поговорим о том, как сделать проверку на «пустое» значение в 1С. Ведь бывает, что программисту, когда он описывает алгоритм по обработке, нужно узнать есть ли что-то в переменной или эта переменная «пустая». Далее будет приведена классификация «пустых» значений и функции для проверки их наличия или отсутствия.

1. Значение «Неопределено» и значение типа “NULL”

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

Следует рассмотреть ещё значение типа «NULL» – его наличие означает, что значение отсутствует.

Подытожим: два данных значения – это специальные типы, предназначены для особых случаев.

В большем количестве типов есть стандартные значения, которые были установлены в системе по умолчанию, по сути это то значение, которое автоматически присваивается переменной даже в случае, когда её не заполнили. Как пример: для чисел – это будет значение «0», для даты – дата «00010101», для строк – строка без символов.

Замечание: для типа «ссылка» есть значение пустой ссылки.

2. Вариации проверок на пустое значение

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

В случае, когда разработчик знает тип переменной, которая подлежит проверке, проводится сравнение значения переменной с пустым значением для заданного типа. Чтобы узнать пустое значение у типа, используется функция «ПолучитьПустоеЗначение()». На скриншоте ниже приведён пример проверки с известным типом переменной:

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

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

Если разработчику не известен тип переменной, но проверить на пустое значение нужно, используется функция «ПустоеЗначение()», как показано на скриншоте ниже:

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

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

Функция «ЗначениеЗаполнено()» используется для проверки содержания значения, которое ей передали. Это можно увидеть по общей форме функции:

Функция ЗначениеЗаполнено

Рис. 3 Функция ЗначениеЗаполнено

Для типа «ссылка» проверка немного отличается от тех, которые были описаны выше. Чтобы узнать содержится ли в ссылке «пустое» значение нужно воспользоваться методом «ПустаяСсылка()». Работает он аналогично функции «ЗначениеЗаполнено()», только для ссылок.

В данной статье было рассмотрены общие понятия «пустое» значение в 1С и то, каким типам оно соответствует. Также были приведены 4 разных способа проверки на «пустое» значение, из которых можно легко избрать самый сподручный для конкретного типа и конкретного кода программы.

Читайте также:

  • Свечение краев в фотошопе
  • Как сделать свадебную открытку в фотошопе
  • Программа на телефон для настройки музыкального системы panasonic 630
  • Программа для ремонта виндовс 7
  • Как в 1с ввести дополнительный отпуск за ненормированный рабочий день

Функция ПустоеЗначение()

Функция ПустоеЗначение() определяет, является ли пустым переданное значение.

При этом применяются следующие правила:

  • значение неопределенного типа — всегда пустое;
  • значение типа «строка» проверяется как в функции ПустаяСтрока();
  • значение типа «число» проверяется на равенство нулю;
  • значение типа «дата» проверяется на пустое значение ‘ . . ‘ ;
  • значения следующих типов: «Справочник», «Перечисление», «Документ», «Счет», «Вид субконто», «План счетов», «Календарь» проверяются как в методах Выбран() для соответствующего типа объекта;
  • значение типа «СписокЗначений» считается пустым, если в нем нет значений;
  • значение типа «ТаблицаЗначений» считается пустым, если нет ни одной строки таблицы;

Пример использования

Пример кода с использованием функции ПустоеЗначение() :

ДатаНачала = ТекущаяДата(); ... Если ПустоеЗначение(ДатаНачала) = 1 Тогда Предупреждение("Вы не указали дату начала отчета!"); Возврат; КонецЕсли; 

Как проверить таблицу значений на пустоту 1с

Как проверить н пустату таблицу значений?

ТЗ.Количество()=0

(1) Большое спасибо

(1) Ему бы лучше научиться Ctrl+Shift+F1 нажимать. 😉

(3) Следует возрадоваться тому, что хоть здесь он что-то читает.

(3) Это слишком сложно. Лучше просто F1

(1) лучше даже так ТЗ_80.Количество()=0
это ведь по 8-ке вопрос, а не по какай-то там 7-ке 🙂

(7) Можно еще так (метод Рупора):

Попытка
а = тз[0];
Исключение
Сообщить(«Таблица значений пустая»);
КонецПопытки;

(8) Что-то мне кажется что попытку использовать нужно осторожно, предполагаю что тормоза там будут.

(10) Это же разовая операция, а не цикл. Да и нет операций с БД. Можно не обращать внимания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *