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

Задача осложнялась тем, что справочник иерархический, а модифицировать данные требовалось только в одной группе справочника. Получился вот такой код.

&НаКлиенте
Процедура Взаимозамена(Команда)

ЗаменитьНаСервере();

КонецПроцедуры



&НаСервере
Процедура ЗаменитьНаСервере()

Запрос = Новый Запрос;
Запрос.Текст = 
"ВЫБРАТЬ
| Компьютеры.Ссылка,
| Компьютеры.Наименование,
| Компьютеры.Имя
|ИЗ
| Справочник.Компьютеры КАК Компьютеры
|ГДЕ
| Компьютеры.Родитель = &Родитель";

ПолеВводаРодитель = Справочники.Компьютеры.НайтиПоНаименованию("СистемныеБлоки");

Запрос.УстановитьПараметр("Родитель", ПолеВводаРодитель);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); 

Пока ВыборкаДетальныеЗаписи.Следующий() Цикл

КомпССылка = ВыборкаДетальныеЗаписи.Ссылка;
КомпОбъект = КомпСсылка.ПолучитьОбъект();
РеквизитНаим = КомпОбъект.Наименование;
РеквизитИнв = КомпОбъект.Имя;
КомпОбъект.Наименование = РеквизитИнв;
КомпОбъект.Имя = РеквизитНаим;
КомпОбъект.Записать();

КонецЦикла;

КонецПроцедуры