Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
13 Дек 2017, 18:20
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: Вывод элементов иерархического справочника  (Прочитано 2700 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн rogaz

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-10-17
  • Сайт: 
  • Профессия: Ученик 1С
Добрый день! У меня имеется иерархический справочник с иерархией элементов, и я хочу вывести элементы в из ДереваЗначений в ТабличноеПоле. Вручную всё работает, но с рекурсивной фугкцией проблемы. Подскажите, пожалуйста, в чем ошибка:

Процедура ЗаполнениеДерева(Знач СсылкаНаЭлемент = Неопределено, Знач пробел = "");
Выборка = Справочник.Выбрать(?(СсылкаНаЭлемент = Неопределено,
Справочник.ПустаяСсылка(), СсылкаНаЭлемент));

Пока Выборка.Следующий() Цикл   
Сообщить(пробел + Выборка.Наименование);
ИмяРодителяЭлемента = Выборка.Родитель.Наименование;
Если СсылкаНаЭлемент = Неопределено Тогда
НовыйЭлемент = ДеревоРеквизитов.Строки.Добавить();
НовыйЭлемент.Наименование = Выборка.Наименование;
ЗаполнениеДерева(Выборка.Ссылка);
Иначе
СтрокаРодителя = ДеревоРеквизитов.Строки.Найти(ИмяРодителяЭлемента);
НовыйЭлемент = СтрокаРодителя.Строки.Добавить();
НовыйЭлемент.Наименование = Выборка.Наименование;
Если Справочник.Выбрать(Выборка.Ссылка).Следующий() Тогда
ЗаполнениеДерева(Выборка.Ссылка);
КонецЕсли;

КонецЕсли;    

КонецЦикла;
КонецПроцедуры


Оффлайн дфтын

  • Могу решить ЛЮБУЮ задачу в 1С и не только.. С вопросами в личку:)
  • *****
  • Сообщений: 2720
  • РЕПУТАЦИЯ: 325
  • КПД: 12%
  • 1С наше все
  • Регистрация: 2014-04-29
    • Skype: Soprov1C
  • Компания: Корпорация зонтиков
  • Профессия: Разработчик 1С
Помог? Нажми - Спасибо :)
skype: Soprov1C

Оффлайн Sinsinmin

  • ***
  • Сообщений: 116
  • РЕПУТАЦИЯ: 9
  • КПД: 8%
  • Регистрация: 2010-08-11
  • Сайт: 
Не совсем понятен код...комментируйте чтоле для приличия...
Непонятно как у вас происходит выборка.следующий() когда СсылкаНаЭлемент = неопределено...
 

Оффлайн rogaz

  • *
  • Сообщений: 19
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2014-10-17
  • Сайт: 
  • Профессия: Ученик 1С
А в чем проблема?
Выдается ошибка - {Форма.Форма.Форма(94)}: Значение не является значением объектного типа (Строки)
         НовыйЭлемент = СтрокаРодителя.Строки.Добавить();

И это половина беды, когда я захожу в режим отладки, при выдаче ошибки с сообщениях выдается не тот же самый результат, что и без отладки. И хуже того, даже в режиме отладки с одной и той же точки останова результат может быть разным :dfbsdfbsdf:
Добавлено: 06 Дек 2014, 07:03

Не совсем понятен код...комментируйте чтоле для приличия...
Непонятно как у вас происходит выборка.следующий() когда СсылкаНаЭлемент = неопределено...
Когда неопределено, то Выборка в качестве параметра Родителя получает пустую ссылку на справочник, и выбирается верхний уровень элементов справочника.

Оффлайн Sinsinmin

  • ***
  • Сообщений: 116
  • РЕПУТАЦИЯ: 9
  • КПД: 8%
  • Регистрация: 2010-08-11
  • Сайт: 
В общем у вас проблема в том что вы ищете эээ Строку уровня выше и в итоге ничего не находит. Нужно искать на уровень ниже...туда куда добавляли строку.
Как это сделать пока не понял.
Добавлено: 06 Дек 2014, 10:47

В общем нужно написать СтрокаРодителя = ДеревоРеквизитов.Строки.Найти(ИмяРодителяЭлемента, , Истина);

Вот мой пример кода для записи Иерархического Справочника в ДеревоЗначений

Перем Дерево;


Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Наименование");
Если ЭлементыФормы.ПолеВвода1.Значение <> Справочники.ПодразделенияОрганизаций.ПустаяСсылка() тогда
НоваяСтрока = Дерево.Строки.Добавить();
НоваяСтрока.Наименование = ЭлементыФормы.ПолеВвода1.Значение.Наименование;
КонецЕсли;
Сообщить(ЭлементыФормы.ПолеВвода1.Значение);
    РекурсияК(ЭлементыФормы.ПолеВвода1.Значение);
к = 1;
КонецПроцедуры

Процедура ДобавитьВДерево(Выборка, Дерево);
//ОбработкаПрерыванияПользователя();
КонецПроцедуры

Процедура РекурсияК(К)
Выборка = Справочники.ПодразделенияОрганизаций.Выбрать(К);
Пока Выборка.Следующий() цикл
Пробел = "";
УровеньК = Выборка.Ссылка.Уровень();
Для ц = 1 по УровеньК цикл
Пробел = Пробел + "   ";
КонецЦикла;
Сообщить(Пробел + Выборка.Наименование);
СтрокаУровеньВерх = Дерево.Строки.Найти(К.Наименование, ,Истина);
НоваяСтрока = СтрокаУровеньВерх.Строки.Добавить();
НоваяСтрока.Наименование = Выборка.Наименование;
ВыборкаУровеньНиже = Справочники.ПодразделенияОрганизаций.Выбрать(Выборка.Ссылка);
РекурсияК(Выборка.Ссылка);
КонецЦикла;

КонецПроцедуры
Добавлено: 06 Дек 2014, 10:54

Вот улучшенный вариант для ПустойСсылки вернхего уровня...

Перем Дерево;


Процедура КнопкаВыполнитьНажатие(Кнопка)
// Вставить содержимое обработчика.
Дерево = Новый ДеревоЗначений;
Дерево.Колонки.Добавить("Наименование");
Если ЭлементыФормы.ПолеВвода1.Значение <> Справочники.ПодразделенияОрганизаций.ПустаяСсылка() тогда
НоваяСтрока = Дерево.Строки.Добавить();
НоваяСтрока.Наименование = ЭлементыФормы.ПолеВвода1.Значение.Наименование;
Сообщить(ЭлементыФормы.ПолеВвода1.Значение);
    РекурсияК(ЭлементыФормы.ПолеВвода1.Значение);
Иначе
РекурсияК(Справочники.ПодразделенияОрганизаций.ПустаяСсылка());
КонецЕсли;

к = 1;
КонецПроцедуры

Процедура ДобавитьВДерево(Выборка, Дерево);
//ОбработкаПрерыванияПользователя();
КонецПроцедуры

Процедура РекурсияК(К)
Выборка = Справочники.ПодразделенияОрганизаций.Выбрать(К);
Пока Выборка.Следующий() цикл
Пробел = "";
УровеньК = Выборка.Ссылка.Уровень();
Для ц = 1 по УровеньК цикл
Пробел = Пробел + "   ";
КонецЦикла;
Сообщить(Пробел + Выборка.Наименование);
Если УровеньК = 0 тогда
НоваяСтрока = Дерево.Строки.Добавить();
Иначе
СтрокаУровеньВерх = Дерево.Строки.Найти(К.Наименование, ,Истина);
НоваяСтрока = СтрокаУровеньВерх.Строки.Добавить();
КонецЕсли;
НоваяСтрока.Наименование = Выборка.Наименование;
ВыборкаУровеньНиже = Справочники.ПодразделенияОрганизаций.Выбрать(Выборка.Ссылка);
РекурсияК(Выборка.Ссылка);
КонецЦикла;

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

Последний раз редактировалось: Sinsinmin; 06 Дек 2014, 10:54. Причина: Объединение сообщений


Теги:
 

Как вызвать "Анализ субконто" из справочника "Контрагенты"

Автор EnigManРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 6492
Последний ответ 06 Фев 2012, 10:46
от cska-fanat-kz
Заполнение поля табличной части документа из табличной части справочника.

Автор Kurt_WagnerРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 4198
Последний ответ 06 Апр 2015, 20:08
от Kurt_Wagner
Заполнение табличной части документа реквизитами табличной части справочника

Автор kaf_infoРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 621
Последний ответ 10 Май 2017, 20:44
от ilnur75
Как сделать, чтобы поле в документе имело тип "ссылка на поле справочника"?

Автор друганРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 5
Просмотров: 2031
Последний ответ 05 Мар 2017, 14:36
от Igor100500
Изменение цвета при подборе сотрудника в форме списка справочника "Сотрудники организации" для документа "Зарплата к выплате организаций" ЗУП 2.5

Автор ksander-farsРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 2
Просмотров: 268
Последний ответ 12 Окт 2017, 14:02
от wise

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
172 Сообщений
ilyay ilyay
75 Сообщений
oleg-x
51 Сообщений
alex0402
49 Сообщений
andron81_81
39 Сообщений
AIFrame
37 Сообщений
MuI_I_Ika MuI_I_Ika
34 Сообщений
BuhRust
30 Сообщений
Golickoff Golickoff
28 Сообщений
Dima Dddd Dima Dddd
26 Сообщений

* Кто онлайн

  • Точка Гостей: 582
  • Точка Скрытых: 0
  • Точка Пользователей: 6
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal