Как заполнить дерево значений (на сервере)?
&НаСервере
Процедура ЗаполнитьДеревоНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.Ссылка КАК Номенклатура
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ИТОГИ ПО
| Родитель";
ПромДерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЗначениеВРеквизитФормы(ПромДерево, "Дерево");
КонецПроцедуры
Как добавить строку (на клиенте)?
&НаКлиенте
Процедура ДобавитьСтрокуНаКлиенте(Команда)
ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
НоваяСтрокаДерева = ТекущаяСтрока.ПолучитьЭлементы().Добавить();
КонецПроцедуры
Как удалить текущую строку (на клиенте)?
&НаКлиенте
Процедура УдалитьТекущуюСтрокуНаКлиенте(Команда)
ИдентификаторСтроки = Элементы.Дерево.ТекущаяСтрока;
ТекущаяСтрока = Дерево.НайтиПоИдентификатору(ИдентификаторСтроки);
СтрокаРодитель = ТекущаяСтрока.ПолучитьРодителя();
Если СтрокаРодитель = Неопределено Тогда
Дерево.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
Иначе
СтрокаРодитель.ПолучитьЭлементы().Удалить(ТекущаяСтрока);
КонецЕсли;
КонецПроцедуры
Как очистить дерево (на клиенте)?
&НаКлиенте
Процедура ОчиститьДерево(Команда)
Дерево.ПолучитьЭлементы().Очистить();
КонецПроцедуры
Как очистить дерево (на сервере)?
&НаСервере
Процедура ОчиститьДерево(Команда)
ДЗ = РеквизитФормыВЗначение("Дерево");
ДЗ.Строки.Очистить();
ЗначениеВРеквизитФормы(ДЗ, "Дерево");
КонецПроцедуры
Как перебрать дерево рекурсивно (на клиенте)?
&НаКлиенте
Процедура ОбойтиДеревоРекурсивно(Команда)
ОбойтиРекурсивноСтрокиДереваНаКлиенте(Дерево.ПолучитьЭлементы());
КонецПроцедуры
&НаКлиенте
Процедура ОбойтиРекурсивноСтрокиДереваНаКлиенте(Строки)
Для Каждого СтрокаДерева Из Строки Цикл
Сообщить(СтрокаДерева.Номенклатура);
ПодчиненныеСтроки = СтрокаДерева.ПолучитьЭлементы();
Если ПодчиненныеСтроки.Количество() > 0 Тогда
ОбойтиРекурсивноСтрокиДереваНаКлиенте(ПодчиненныеСтроки);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Как перебрать дерево рекурсивно (на сервере)?
&НаСервере
Процедура ОбойтиДеревоРекурсивноНаСервере()
ДеревоЗначений = РеквизитФормыВЗначение("Дерево");
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений);
КонецПроцедуры
&НаСервере
Процедура ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(ДеревоЗначений)
Для Каждого СтрокаДерева Из ДеревоЗначений.Строки Цикл
Сообщить(СтрокаДерева.Номенклатура);
Если СтрокаДерева.Строки.Количество() > 0 Тогда
ОбойтиДеревоРекурсивноСтрокиДереваНаСервере(СтрокаДерева);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Месяц: Июнь 2026
Удалить дубликаты из регистра сведений
Все обработки можно загрузить из репозитория https://gitlab1c.buh-lnr.ru/gitpublic/inf_reg_dublicates
Инструкция по свертке неуникальных записей:
- Открыть обработку.
- Выбрать регистр сведений, в котором появились неуникальные записи.
- Отметить измерения которые будут удалены при обновлении.
- Нажать “Свернуть дубли”.
Обработка найдет дублирующиеся строки и свернет их в одну строку. После этого обновление конфигурации пройдет корректно.
Также можно просто проверить наличие дублей без изменения данных
При обновлении конфигурации периодически может возникать ошибка Записи регистра сведений стали неуникальными или Имеются записи с одинаковыми измерениями