1С 8.3 Проверка структуры на пустоту
Данные > Примеры кода 1С > 1С 8.3 Cтруктура
Перейти в раздел примеры кода 1С 8.3:

Назначение: Рекурсивно проверяет, является ли структура (или вложенные структуры) полностью пустой.
Принцип работы:
- Перебирает все элементы переданной структуры (СтрДанные)
- Если элемент сам является структурой - вызывает себя рекурсивно для проверки вложенной структуры
- Для обычных элементов проверяет заполненность значения через ЗначениеЗаполнено()
- Возвращает Истина, только если:
- Все поля структуры пустые (или содержат Неопределено)
- Все вложенные структуры также пустые
- Возвращает Ложь, если найден хотя бы один заполненный элемент
Особенности:
- Работает рекурсивно с любым уровнем вложенности структур
- Использует стандартную функцию ЗначениеЗаполнено() для проверки значений
- Подходит для сложных иерархических структур данных
Проверка структуры на заполненность в 1С 8.3:
// Возвращает:
// Истина - если структура не содержит заполненных значений или вложенных непустых структур
// Ложь - если найдено хотя бы одно заполненное значение или непустая вложенная структура
Функция ПустаяСтруктура(СтрДанные)
// Перебираем все элементы структуры (ключ-значение)
Для Каждого Стр Из СтрДанные Цикл
// Если текущий элемент является вложенной структурой
Если ТипЗнч(Стр) = Тип("Структура") Тогда
// Рекурсивно проверяем вложенную структуру
// Если она НЕ пустая - возвращаем Ложь
Если НЕ ПустаяСтруктура(Стр) Тогда
Возврат Ложь;
КонецЕсли;
Иначе
// Для обычных значений проверяем заполненность
// Если значение заполнено - возвращаем Ложь
Если ЗначениеЗаполнено(Стр.Значение) Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Если все проверки пройдены - структура пустая
Возврат Истина;
КонецФункции
// Истина - если структура не содержит заполненных значений или вложенных непустых структур
// Ложь - если найдено хотя бы одно заполненное значение или непустая вложенная структура
Функция ПустаяСтруктура(СтрДанные)
// Перебираем все элементы структуры (ключ-значение)
Для Каждого Стр Из СтрДанные Цикл
// Если текущий элемент является вложенной структурой
Если ТипЗнч(Стр) = Тип("Структура") Тогда
// Рекурсивно проверяем вложенную структуру
// Если она НЕ пустая - возвращаем Ложь
Если НЕ ПустаяСтруктура(Стр) Тогда
Возврат Ложь;
КонецЕсли;
Иначе
// Для обычных значений проверяем заполненность
// Если значение заполнено - возвращаем Ложь
Если ЗначениеЗаполнено(Стр.Значение) Тогда
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Если все проверки пройдены - структура пустая
Возврат Истина;
КонецФункции
Функция ПолучитьМассу(НовСтрока)
пМасса = 0;
СтрДанныеПартии = ПартионныйУчет.ПолучитьДанныеПартииСемян(НовСтрока.ПартияСправочник, НовСтрока.СЗР);
Если НЕ ПустаяСтруктура(СтрДанныеПартии) Тогда // Вызов проверки
Если Число(СтрДанныеПартии.ВесПЕ)<>0 Тогда
пМасса = Число(СтрДанныеПартии.ВесПЕ)*пКоличество;
КонецЕсли;
Иначе
Сообщить("Структура пустая!");
КонецЕсли;
Возврат пМасса;
КонецФункции
Ещё три способа проверки структуры в 1С 8.3:
Проверка наличия ключа
Структура.Свойство("Ключ") — проверяет существование ключа.
Структура["Ключ"] <> Неопределено — проверяет, что ключ существует и заполнен.
Проверка всех элементов структуры на заполненность
Функция ПроверитьСтруктуруНаЗаполненность() проходит по всем полям и возвращает:
Истина — если все значения заполнены (не Неопределено).
Ложь — если хотя бы одно поле пустое.
Проверка конкретных обязательных полей
Функция ПроверитьОбязательныеПоля() проверяет только указанные поля (из массива).
Удобно для валидации данных, когда не все поля обязательные.
Проверка наличия ключей в структуре в 1С 8.3:
// Создаем структуру
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Поле1", "Значение1");
СтруктураДанных.Вставить("Поле2", Неопределено);
// Проверка наличия ключа
Если СтруктураДанных.Свойство("Поле1") Тогда
// Ключ существует
КонецЕсли;
// Или так
Если СтруктураДанных["Поле1"] <> Неопределено Тогда
// Поле существует и заполнено
КонецЕсли;
СтруктураДанных = Новый Структура;
СтруктураДанных.Вставить("Поле1", "Значение1");
СтруктураДанных.Вставить("Поле2", Неопределено);
// Проверка наличия ключа
Если СтруктураДанных.Свойство("Поле1") Тогда
// Ключ существует
КонецЕсли;
// Или так
Если СтруктураДанных["Поле1"] <> Неопределено Тогда
// Поле существует и заполнено
КонецЕсли;
Проверка всех элементов структуры на заполненность в 1С 8.3:
Функция ПроверитьСтруктуруНаЗаполненность(Структура)
Для Каждого КлючИЗначение Из Структура Цикл
Если КлючИЗначение.Значение = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Для Каждого КлючИЗначение Из Структура Цикл
Если КлючИЗначение.Значение = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
Проверка конкретных обязательных полей в 1С 8.3:
Функция ПроверитьОбязательныеПоля(Структура, МассивОбязательныхПолей)
Для Каждого Поле Из МассивОбязательныхПолей Цикл
Если Не Структура.Свойство(Поле) Или Структура[Поле] = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
// Использование:
ОбязательныеПоля = Новый Массив;
ОбязательныеПоля.Добавить("Наименование");
ОбязательныеПоля.Добавить("Код");
Если Не ПроверитьОбязательныеПоля(СтруктураДанных, ОбязательныеПоля) Тогда
Сообщить("Не все обязательные поля заполнены!");
КонецЕсли;
Для Каждого Поле Из МассивОбязательныхПолей Цикл
Если Не Структура.Свойство(Поле) Или Структура[Поле] = Неопределено Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
// Использование:
ОбязательныеПоля = Новый Массив;
ОбязательныеПоля.Добавить("Наименование");
ОбязательныеПоля.Добавить("Код");
Если Не ПроверитьОбязательныеПоля(СтруктураДанных, ОбязательныеПоля) Тогда
Сообщить("Не все обязательные поля заполнены!");
КонецЕсли;
Код покрывает основные сценарии работы со структурами: Проверка существования ключа. Проверка заполненности всех полей. Валидация обязательных полей.
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник