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

Проверяет наличие свойства по идентификатору и получает его значение

Синтаксис

Метод Свойство() имеет следующий синтаксис:

Булево Свойство(Ключ, [Значение = Неопределено])

А также альтернативный англоязычный синтаксис:

boolean Property(Key, [Value = Undefined])

Параметры

Описание параметров метода Свойство():

Имя параметра* Тип Описание
Ключ Строка Идентификатор свойства
Значение Произвольный В данный параметр возвращается найденное значение.

Значение по умолчанию: Неопределено.

*Жирным шрифтом выделены обязательные параметры

Возвращаемое значение

Булево

Истина — ключ найден
Ложь — ключ не найден

Описание

Метод Свойство() проверяет наличие свойства по его ключу (идентификатору) и помещает его значение в параметр Значение

Доступность

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер).

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

Пример кода с использованием метода Свойство():

Структура = Новый Структура;
//...
Если Структура.Свойство("Код") = Ложь Тогда
	Структура.Вставить("Код", 100);
КонецЕсли;
//...
Значение = Неопределено;
Если Структура.Свойство("Код", Значение) Тогда
	Сообщить("Значение = " + Значение);
КонецЕсли;
//Значение = 100

Поделиться страницей в соц.сетях

17 правил для составления оптимального ЗАПРОСа к данным базы 1С 47
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ


1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш


COM-подключение к базе 7.7 из .NET, .NET Core 1
Инсталяция: dotnet add package sabatex.V1C77 или добавить через NUGET пакет sabatex.V1C77. Добавить пространство имен: using sabatex.V1C77; пример использованя: —C# static void Main(string args) { // создаем строку соединен


COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине.
Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)):
НаКлиенте
Процедура Загрузки()
ПутьКБазе=» D:ВашаБаза1с77″ ;
Пользователь=


QR код в 1С 21
Столкнулся с интересной задачей реализации генерации QR-кода в 1С 8.2 ( QR-код — матричный код (двухмерный штрихкод) ) Для генерации было использовано api от google (http://chart.apis.google.com/chart). Вот сайт , который работает с ним. После тог


Посмотреть все результаты поиска похожих

Здравствуйте, задача тривиальная, порой бывает удобно воспользоваться структурой. И порой в связи с этим всплывают какие-нибудь неожиданные косяки, связанные с неудачным заполнением. Чтобы исключить неудачное заполнение можно пользоваться терпением при заполнении. Или можно при обращении к полям структуры устроить проверку на наличие этих полей. Сделать это можно с помощью метода структуры Свойство.

На самом деле и тут писать нечего особо. Метод возвращает истину или ложь, по имени  поля в зависимости есть оно в структуре или нет.

Свойство(<Ключ>, <НайденноеЗначение>)

Тип: Строка.
Ключ для поиска
свойства.

<НайденноеЗначение>
(необязательный)

Тип: Произвольный. 

Тип: Булево.
Истина
— ключ найден; Ложь
в противном случае. 

Еще метод заполняет <НайденноеЗначение>, если его предварительно определить.
Таким образом,  заполнять структуру можно черте как, а вот обращаться к полям уже с проверкой и будет все хорошо:

лВесБлока = Неопределено;

лОбъемБлока = Неопределено;  

Если мДанныеДляИзменения.Свойство(«ОбъемБлока»,лОбъемБлока) ИЛИ мДанныеДляИзменения.Свойство(«ВесБлока»,лВесБлока) Тогда

лОбъект = стр.Номенклатура.ЕдиницаДляОтчетов.ПолучитьОбъект();

Если лОбъемБлока<>Неопределено Тогда

лОбъект.Объем = лОбъемБлока;

КонецЕсли;

Если лВесБлока<>Неопределено Тогда

лОбъект.Вес = лВесБлока;

КонецЕсли;

лОбъект.Записать();

КонецЕсли;

В примере мы теоретически имеем в структуре мДанныеДляИзменения два свойства: ОбъемБлока и ВесБлока. Перед проверкой мы их определяем в Неопределено, и если этих свойств в структуре нет, то они так и останутся неопределенными. Если же есть то получим значения из структуры, которое можно обрабатывать или передавать как хочется, в данном случае заполнять объект.

Структура — это особый тип данных в 1С, который можно представить в виде таблицы из двух колонок. Первая колонка называется Ключ, вторая — Значение. Ключ всегда является строкой и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка, значение может быть разных типов.

КЛЮЧ ЗНАЧЕНИЕ
«Имя» «Иван»
«Фамилия» «Иванов»
«Возраст» 25

Как создать переменную с типом Структура

Создать переменную с типом Структура можно двумя способами. Рассмотрим создание структуры, описанной в таблице выше.

П1 = новый Структура («Имя, Фамилия, Возраст», «Иван», «Иванов», 25);

или

П1 = новый Структура;
П1.Вставить(«Имя», «Иван»);
П1.Вставить(«Фамилия», «Иванов»);
П1.Вставить(«Возраст», 25);

Как добавить новый элемент в структуру

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

Как получить значение элемента структуры по имени ключа

Фамилия = П1.Фамилия; //переменной Фамилия будет присвоено значение «Иванов»
Возраст = П1.Возраст; //переменной Возраст будет присвоено значение 25

Как изменить значение элемента структуры по имени ключа

Если известно имя ключа структуры, то изменить значение можно двумя способами.

П1.Возраст=26; // Значение изменено на 26

П1.Вставить(«Возраст»,26); // Значение изменено на 26

Как узнать количество элементов структуры

Колич = П1.Количество(); // 3

Как проверить, есть ли в структуре ключ с определенным именем

Для этого существует функция Свойство (Ключ, НайденноеЗначение). Первый параметр Ключ — обязательный. Сюда нужно передать имя искомого ключа структуры. Второй параметр — переменная, в которую нужно поместить значение, если ключ будет найден. Этот параметр не обязателен. А сама функция возвращает значение Истина, если ключ найден, или Ложь, если не найден.

Найдено = П1.Свойство(«Отчество»); // Найдено = Ложь

Перем Имя;
Найдено = П1.Свойство(«Имя», Имя);

//Имя = «Иван», Найдено = Истина

Как удалить элемент структуры

Как удалить все элементы, очистить структуру

Как обойти в цикле все элементы структуры

Для обхода структуры используется цикл Для каждого.

Для каждого Элемент из П1 Цикл
Сообщить(Элемент.Ключ + » — « + Элемент.Значение);
КонецЦикла;

//Результат:
//Имя — Иван
//Фамилия — Иванов
//Возраст — 25

Структура представляет собой некий контейнер, который хранит пары ключ и значение. Ключ в структуре может быть только строкового типа и должен удовлетворять требованиям названия переменных в 1С. Для значения структуры нет ограничений. Структуру можно создать как на клиенте, так и на сервере. А также структуру можно передавать с клиента на сервер и обратно.

Создание структуры

Для создания структуры используется конструктор:

СтруктураПараметров = Новый Структура;

Можно сразу в конструкторе указать ключи и значения:

СтруктураПараметров = Новый Структура(«КлючСтруктуры1, КлючСтруктуры2», 25, «значение»);

В этом случае будет создана структура с двумя ключами КлючСтруктуры1 и КлючСтруктуры2. При этом значение ключа КлючСтруктуры1 будет равно 25, а значение ключа КлючСтруктуры2 будет равно строке «значение». В дальнейшем можно изменять значения каждого ключа, можно добавлять новые ключи или удалять существующие. Если для какого-то ключа не указать значение, то оно будет равно Неопределено.

//оба значения будут равны Неопределено
СтруктураПараметров = Новый Структура(«КлючСтруктуры1, КлючСтруктуры2»);

Добавление нового ключа в структуру

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

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить(«НовыйКлюч», 2);

Если попытаться добавить в структуру ключ, который начинается с цифры, то будет вызвано исключение «Задано неправильное имя атрибута структуры»:

СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить(«1», 2);
//при компиляции модуля будет ошибка:
//Задано неправильное имя атрибута структуры

Обращение к свойствам структуры

К свойствам (ключам) структуры можно обращаться через точку «.» после имени структуры:

СтруктураПараметров = Новый Структура(«КлючСтруктуры1, КлючСтруктуры2», 25, «значение»);
СтруктураПараметров.КлючСтруктуры1 = «новое значение»;

Можно через оператор индексации []:

СтруктураПараметров = Новый Структура(«КлючСтруктуры1, КлючСтруктуры2», 25, «значение»);
СтруктураПараметров[«КлючСтруктуры1»] = «новое значение»;

Перебор структуры

Перебрать элементы структуры можно с помощью цикла Для Каждого. На каждой итерации цикла будет переменная типа КлючИЗначение. Через свойства Ключ и Значение данной переменной можно только читать значения, изменить нельзя:

Для Каждого КлючИЗначение Из СтруктураПараметров Цикл //метод Сообщить выводит значение на экран Сообщить(КлючИЗначение.Ключ); Сообщить(КлючИЗначение.Значение); КонецЦикла;

Как удалить ключ из структуры

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

СтруктураПараметров.Удалить(«НовыйКлюч»); //удалит только один ключ
СтруктураПараметров.Очистить(); //удалит все ключи из структуры

Как проверить есть ли в структуре ключ

Метод Свойство позволяет проверить наличие в структуре указанного ключа. Если ключ присутствует в структуре, то метод вернет Истина. Если такого ключа нет, то метод вернет Ложь.

ЕстьКлюч = СтруктураПараметров.Свойство("НовыйКлюч"); Если ЕстьКлюч Тогда Сообщить("Ключ найден!"); КонецЕсли;

Также с помощью данного метода можно получить значение по ключу:

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

Если в структуре нет такого ключа, то в переменной Значение будет Неопределено.

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

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

Перем НайденноеЗначение; Если СтруктураПараметров.Свойство("НовыйКлюч", НайденноеЗначение) Тогда Сообщить("Значение найдено: " + НайденноеЗначение); Иначе Сообщить("Значение не найдено"); КонецЕсли;

Но если поиск в структуре нужно выполнить по значению, то придется перебрать всю структуру:

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


Количество элементов структуры

Узнать количество элементов (ключей, свойств) структуры можно с помощью метода Количество:

Колво = СтруктураПараметров.Количество();

Как скопировать структуру

Стр = Новый Структура("Ключ1", 1); ВложеннаяСтр = Новый Структура("Ключ2", 2); Стр.Вставить("ВложеннаяСтр", ВложеннаяСтр); Копия = Новый Структура; Для Каждого КлючИЗначение Из Стр Цикл Копия.Вставить(КлючИЗначение.Ключ, КлючИЗначение.Значение); КонецЦикла; //в этом случае в структуре Копия в ключе ВложеннаяСтр //будет та же самая структура, что и в переменной //ВложеннаяСтр и в структуре Стр //для создания полной копии можно сделать так: ПолнаяКопия = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(Стр));

Фиксированная Структура

Фиксированная структура — это та же самая структура, но после создания нельзя изменить состав ключей и значения. Можно создать на основании обычной структуры (будет создана полная копия), по ключам и значениям или пустую структуру:

//пустая структура
ФиксСтр = Новый ФиксированнаяСтруктура;

//по ключам и значениям
ФиксСтр = Новый ФиксированнаяСтруктура(«Ключ1, Ключ2», 1, 2);

//на основании обычной структуры
ОбычнаяСтруктура = Новый Структура(«Ключ1, Ключ2», 1, 2);
ФиксСтр = Новый ФиксированнаяСтруктура(ОбычнаяСтруктура);

У фиксированной структуры есть только 2 метода:

— Количество()
— Свойство(<Ключ>, <НайденноеЗначение>)

К ключам структуры можно обращаться как к свойству: ФиксСтр.Ключ1, но нельзя менять значение свойства.

На основании фиксированной структуры можно создать обычную структуру:

ФиксСтр = Новый ФиксированнаяСтруктура(«Ключ1, Ключ2», 1, 2);

ОбычнаяСтруктура = Новый Структура(ФиксСтр);
ОбычнаяСтруктура.Ключ1 = 11; //теперь можно менять значения

Смотрите также:
Электронный учебник по по программированию в 1С
Рекомендации по изучению программирования 1С с нуля
Программное решение для сдачи и подготовки к экзаменам
Программирование в 1С 8.3 с нуля — краткий самоучитель
Комплексная подготовка программистов 1С:Предприятие 8.2
Сайты с уроками программирования и со справочниками
Youtube-каналы с уроками программирования
Сайты для обучения программированию
Лекции и уроки

Структура — это особый тип данных в 1С, который можно представить в виде таблицы из двух колонок. Первая колонка называется Ключ, вторая — Значение. Ключ всегда является строкой и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка, значение может быть разных типов.

КЛЮЧ ЗНАЧЕНИЕ
«Имя» «Иван»
«Фамилия» «Иванов»
«Возраст» 25

Как создать переменную с типом Структура

Создать переменную с типом Структура можно двумя способами. Рассмотрим создание структуры, описанной в таблице выше.

Как добавить новый элемент в структуру

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

Как получить значение элемента структуры по имени ключа

Как изменить значение элемента структуры по имени ключа

Если известно имя ключа структуры, то изменить значение можно двумя способами.

Как проверить пустая ли структура

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

  • Скопировать ссылку
  • Перейти

Ф-ция вернет Ложь если хотя бы одно значение в структуре заполнено.

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

Ф-ция вернет Ложь если хотя бы одно значение в структуре заполнено.

  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти
  • Скопировать ссылку
  • Перейти

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

Учимся работать с объектом Структура

Структура в языке программирования платформы 1С 8.3 (8.2) — это коллекция некоторых значений в связке с ключом. Эта связка ключа со значением называется «КлючИЗначение». Ключ структуры уникален в рамках данной структуры. Причем к значениям структуры можно обращаться как к свойствам объекта, используя название ключа.

Объект Структура создается с помощью конструктора Новый.

Структура1 = Новый Структура;

Со структурами можно работать и в серверном и клиентском контексте, причем в клиентском контексте с ними можно работать как под толстым клиентом, так и под тонким клиентом.
В значения структуры можно записать переменные любого типа, но использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском контексте задать значение, тип которого работает только в серверном контексте (например, ДокументОбъект.<>).

Как создать новую структуру, Вы знаете, теперь выясним, как создаются новые элементы данного объекта. Делается это с помощь метода Вставить.

Вот его синтаксис:

Вставить(<Ключ>,<Значение>);

Параметр Ключ имеет тип значения Строка. Он может иметь любое название, какое захочет разработчик (но помним про ограничения в названиях переменных). Параметр Значение может иметь любой тип.

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

Не всегда обязательно использовать метод Вставить, чтобы добавить пару КлючИЗначение в структуру, иногда это можно сделать в конструкторе. Тогда конструктор будет иметь следующий вид:

Структура1 = Новый Структура(Ключ, Значение);

Переделаем предыдущий пример:

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

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

Структура 1С в отладке

Если мы посмотрим в отладке конфигуратора на нашу структуру, то увидим, что она представляет собой некоторый список, где напротив каждого ключа есть то значение, которое мы привязали к данному ключу с помощью метода Вставить. Этот ключ является свойством структуры как объекта, и мы можем обращаться к нему.

Изменить значение ключа структуры 1С

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

Или напрямую обращаемся к ключу

Обход коллекции структуры 1С

Обход структуры осуществляется с помощью оператора цикла Для каждого…Цикл.

Обойдем уже созданную структуру.

Обход коллекции структуры

Безошибочное получение значения элемента

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

Этот метод – Свойство.

Данный метод является функцией и возвращает Истину, если указанный ключ есть, и Ложь, если указанного ключа нет.

Рассмотрим синтаксис метода:

Свойство(<ИмяКлюча>,<ЗаписываемоеЗначение>);

«ИмяКлюча» — название ключа для поиска свойства.

В параметр «ЗаписываемоеЗначение» будет возвращено найденное значение. В том случае, если ключа нет в структуре, то данному параметру присвоится значение Неопределено. Обращаю Ваше внимание, что параметр «ЗаписываемоеЗначение» где-то должен быть определен.

В переменную А запишется значение, которое связанно с Ключ1.

Но если мы напишем так.

То ни какой ошибки не возникнет, и в переменной А присвоится значение Неопределено.

Статьи о других универсальных коллекциях значений в 1С

Более подробно о работе со структурой и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Понравилась статья? Поделить с друзьями:
  • 1с как программно изменить тип реквизита формы
  • 1с как программно получить реквизит справочник
  • 1с как программно создать реквизит справочника
  • 1с как распечатать реквизиты своей организации
  • 1с как установить тип для составного реквизита