База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как установить числовое значение доп. реквизита справочника в 1С? › RE: Как установить числовое значение доп. реквизита справочника в 1С?
 Odin — Одинэсник
Odin — ОдинэсникNelli, привет!
Для установки числового значения дополнительного реквизита справочника в обработке «Групповое изменение реквизитов» нужно работать с объектами справочника и использовать стандартные методы работы с дополнительными реквизитами.
Пример кода на 1С (в модуле обработки):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 1C Процедура ИзменитьДопРеквизит(СписокЭлементов, ИмяРеквизита, НовоеЗначение) 	Для Каждого Элемент Из СписокЭлементов Цикл 		// Получаем объект элемента справочника 		Объект = Элемент.ПолучитьОбъект(); 		// Устанавливаем значение дополнительного реквизита 		Объект.УстановитьЗначениеДополнительногоРеквизита(ИмяРеквизита, НовоеЗначение); 		// Записываем изменения 		Объект.Записать(); 	КонецЦикла; КонецПроцедуры | 
Если метод УстановитьЗначениеДополнительногоРеквизита отсутствует (зависит от версии и реализации), то можно работать через табличную часть дополнительных реквизитов:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 1C Процедура ИзменитьДопРеквизит(СписокЭлементов, ИмяРеквизита, НовоеЗначение) 	Для Каждого Элемент Из СписокЭлементов Цикл 		Объект = Элемент.ПолучитьОбъект(); 		// Ищем строку с нужным дополнительным реквизитом 		СтрокаДопРеквизита = Неопределено; 		Для Каждого Строка Из Объект.ДополнительныеРеквизиты Цикл 			Если Строка.Свойство.Имя = ИмяРеквизита Тогда 				СтрокаДопРеквизита = Строка; 				Прервать; 			КонецЕсли; 		КонецЦикла; 		Если СтрокаДопРеквизита = Неопределено Тогда 			// Добавляем новую строку, если не нашли 			СтрокаДопРеквизита = Объект.ДополнительныеРеквизиты.Добавить(); 			СтрокаДопРеквизита.Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита); 		КонецЕсли; 		// Устанавливаем значение 		СтрокаДопРеквизита.Значение = НовоеЗначение; 		// Записываем объект 		Объект.Записать(); 	КонецЦикла; КонецПроцедуры | 
Где:
— СписокЭлементов — список ссылок на элементы справочника, которые нужно изменить.
— ИмяРеквизита — строка с именем дополнительного реквизита.
— НовоеЗначение — числовое значение, которое нужно установить.
Обратите внимание, что при массовом изменении лучше делать запись объекта после всех изменений, если позволяет логика, чтобы снизить нагрузку.
Если вы используете стандартную подсистему «Управление свойствами» (БСП), то можно применять процедуру УправлениеСвойствами.ЗаписатьСвойстваУОбъекта, как в вашем примере из статьи:
| 1 2 3 4 5 6 7 8 9 10 11 | 1C Для Каждого ТекСтрока Из СписокЭлементов Цикл 	СсылкаНаЭлемент = ТекСтрока; 	Свойство = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя", ИмяРеквизита); 	МассивСтруктур = Новый Массив; 	МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", Свойство, НовоеЗначение)); 	УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(СсылкаНаЭлемент, МассивСтруктур); КонецЦикла; | 
Этот способ удобен тем, что не нужно явно получать объект и записывать его — процедура сама сделает это на сервере.
—
Рекомендую посмотреть здесь:
https://infostart.ru/1c/articles/1188249/ — там подробно описан пример работы с дополнительными реквизитами через БСП.
Если нужна помощь с конкретным кодом обработки — могу помочь написать точнее.
—
Оценка ответа: 9/10
