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