8.х Развернуть дерево значений на управляемой форме программно

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Euronymous, 20 ноя 2014.

  1. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Имеется управляемая форма, на ней по горизонтали 2 дерева значений, при активизации строки в левом дереве, правое дерево должно автоматически заполняться и разворачиваться самый верхний узел в иерархии
    Код:
    Элементы.ДеревоНоменклатуры.Развернуть(0);
    Но почему-то данный код отрабатывает только первый раз, при активизации другой строки, или повторной активизации первой начинают сыпаться ошибки и дерево остается не развернутым.-Hungover-
    http://gyazo.com/d4eec7b8119e7fef327e4f3b717420f4
    http://gyazo.com/1fdec326db08a69ed329daa915380ff2

    Что это вообще за ***** и как с ней бороться? :mad:
  2. Dragnir
    Offline

    Dragnir Новичок в 1С

    Регистрация:
    22 окт 2014
    Сообщения:
    39
    Симпатии:
    8
    Баллы:
    4
    Если верить синтаксису команды для управляемых форм, то:

    Код:
    Развернуть(<ИдентификаторСтроки>, <СПодчиненными>)
    Параметры:
    
    <ИдентификаторСтроки> (обязательный)
    
    Тип: Произвольный.
    Идентификатор строки таблицы.
    <СПодчиненными> (необязательный)
    
    Определяет необходимость раскрытия подчиненных узлов. ИСТИНА - раскрывать подчиненные узлы, ЛОЖЬ - не раскрывать подчиненные узлы.
    Значение по умолчанию: ИСТИНА
    Описание:
    
    Разворачивает узел в указанной строке дерева.
    Доступность:
    
    Тонкий клиент, веб-клиент, толстый клиент.
    
    Получается, что запись без второго параметра сама по себе в рамках прикладной задачи уже не верна. Нужно ведь раскрывать, значит как минимум нужно указать ИСТИНА.
    По поводу ошибки в типовых конфигурациях всегда в качестве первого параметра указывается либо конкретная строка, либо ее идентификатор.

    Исходя из описанного выше попробуй так:

    Код:
    Элементы.ДеревоНоменклатуры.Развернуть(ДеревоНоменклатуры.Строки[0], ИСТИНА);
    
    Конечно же в скобках вместо "ДеревоНоменклатуры" нужно написать текст из поля "Данные" окна просмотра свойств элемента УФ ДеревоНоменклатуры.
    Последнее редактирование: 21 ноя 2014
  3. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Как раз нужно открывать только самый верхний узел в иерархии, поэтому нужно прописывать Ложь, а т.к. второй параметр не обязательный, да и он по умолчанию Ложь, то можно его вообще не прописывать. В любом случае манипуляции со вторым параметром ни к чему не привели, код первый раз отрабатывает, а все последующие разы вылетает ошибка.
    --- Объединение сообщений, 21 ноя 2014 ---
    Код:
    Элементы.ДеревоНоменклатуры.Развернуть(ДеревоНоменклатурыЗначение.Строки[0])
    Та же ошибка, правда в этом случае код не отрабатывает даже и первый раз-Dead-
    Последнее редактирование: 21 ноя 2014
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Скорее всего, дело в том, что метод "Развернуть()", как написано выше, первым параметром принимает идентификатор строки.
    Вы пытаетесь туда передать индекс первой строки.
    Но индекс и идентификатор - это не одно и то же. При перезаполнении дерева индексы строк остаются теми же, а идентификаторы меняются. Поэтому во второй раз идентификатора "0" (ноль) уже не существует, отсюда и ошибка.

    Попробуйте так:
    Код:
    Элементы.ДеревоНоменклатуры.Развернуть(ДеревоНоменклатуры.ПолучитьЭлементы()[0].ПолучитьИдентификатор());
    Euronymous нравится это.
  5. TopicStarter Overlay
    Euronymous
    Offline

    Euronymous Опытный в 1С

    Регистрация:
    19 фев 2014
    Сообщения:
    206
    Симпатии:
    0
    Баллы:
    26
    Спасибо! То что надо! :)
    Правда не могу понять почему идентификатору все время увеличиваются о_О
  6. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Потому что каждой новой строке присваивается новый идентификатор. ))
    Даже если удаляете все строки и заново добавляете, "счетчик идентификаторов" не обнуляется )
    Euronymous нравится это.

Поделиться этой страницей