Как программно изменить значение дополнительного реквизита типа Булево в 1С:УТ?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При работе с типовыми конфигурациями на базе 1С:Библиотеки стандартных подсистем (БСП), такими как 1С:Управление торговлей, часто возникает необходимость программного изменения значений дополнительных реквизитов. В этой статье мы подробно разберем, как правильно работать с табличной частью ДополнительныеРеквизиты и какие нюансы стоит учитывать при работе с типом данных Булево.

Основные принципы работы с дополнительными реквизитами

Дополнительные реквизиты в 1С хранятся непосредственно в объекте справочника или документа в табличной части ДополнительныеРеквизиты. Чтобы изменить значение такого реквизита, нам необходимо выполнить следующие шаги:

  1. Получить объект (например, Номенклатура или Физическое лицо) с помощью метода ПолучитьОбъект().
  2. Найти нужную строку в табличной части по ссылке на свойство.
  3. Установить новое значение в найденной строке.
  4. Записать измененный объект в базу данных.

Реализация изменения реквизита

Давайте проанализируем процесс на конкретном примере. Предположим, нам нужно изменить значение реквизита «ХодитБезШтанов» для физического лица. Мы будем использовать поиск по наименованию свойства в плане видов характеристик ДополнительныеРеквизитыИСведения.


// Получаем ссылку на объект
ФизЛицоСсылка = Справочники.ФизическиеЛица.НайтиПоНаименованию("Иван Иваныч Иванов", Истина);

Если ФизЛицоСсылка <> Неопределено Тогда
    // Ищем само свойство в ПВХ
    Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", "ХодитБезШтанов");
    
    Если ЗначениеЗаполнено(Свойство) Тогда
        // Получаем объект для редактирования
        ФизЛицоОбъект = ФизЛицоСсылка.ПолучитьОбъект();
        
        // Пытаемся найти уже существующую строку в табличной части
        СтрокаДопРеквизитов = ФизЛицоОбъект.ДополнительныеРеквизиты.Найти(Свойство, "Свойство");
        
        // Если строки нет, добавляем её
        Если СтрокаДопРеквизитов = Неопределено Тогда
            СтрокаДопРеквизитов = ФизЛицоОбъект.ДополнительныеРеквизиты.Добавить();
            СтрокаДопРеквизитов.Свойство = Свойство;
        КонецЕсли;
        
        // Устанавливаем значение
        СтрокаДопРеквизитов.Значение = Истина;
        
        // Записываем объект
        ФизЛицоОбъект.Записать();
    КонецЕсли;
КонецЕсли;

Особенности работы с типом Булево

При работе с типом Булево возникают важные методологические вопросы:

Почему важно проверять наличие свойства?

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

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

Заключение

Подводя итог, можно сказать, что программная работа с дополнительными реквизитами — это стандартная задача, требующая внимательного отношения к структуре ТабличнаяЧасть. Помните, что для типа Булево поведение системы может быть специфичным: для отчетов отсутствие записи часто тождественно значению Ложь. Соблюдая описанный алгоритм — получение объекта, поиск свойства, корректировка и запись — вы сможете надежно управлять данными в любой конфигурации 1С.

← На главную