1С 8.3 Проверка структуры на пустоту - Программист 1С Минск. Автоматизация бизнеса.

Перейти к контенту

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С 8.3:
Функция ПроверитьСтруктуруНаЗаполненность(Структура)

   Для Каждого КлючИЗначение Из Структура Цикл
       Если КлючИЗначение.Значение = Неопределено Тогда
           Возврат Ложь;
       КонецЕсли;
   КонецЦикла;

   Возврат Истина;

КонецФункции
Проверка конкретных обязательных полей в 1С 8.3:
Функция ПроверитьОбязательныеПоля(Структура, МассивОбязательныхПолей)

   Для Каждого Поле Из МассивОбязательныхПолей Цикл
       Если Не Структура.Свойство(Поле) Или Структура[Поле] = Неопределено Тогда
           Возврат Ложь;
       КонецЕсли;
   КонецЦикла;

   Возврат Истина;

КонецФункции

// Использование:
ОбязательныеПоля = Новый Массив;
ОбязательныеПоля.Добавить("Наименование");
ОбязательныеПоля.Добавить("Код");

Если Не ПроверитьОбязательныеПоля(СтруктураДанных, ОбязательныеПоля) Тогда
   Сообщить("Не все обязательные поля заполнены!");
КонецЕсли;
Код покрывает основные сценарии работы со структурами: Проверка существования ключа. Проверка заполненности всех полей. Валидация обязательных полей.
0
комментарии
____________________
Copyright©, «Программист 1С в г.Минске», 31.03.2025
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник
Яндекс.Метрика
Защищенное соединение ssl
visa
mastercard
Maestro
Яндекс деньги
Назад к содержимому
scroll to top