8.х проблема с ПоказатьУровеньГруппировокСтрок();

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем Дмитрий Игоревич, 17 апр 2013.

  1. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    есть такая штука как ПоказатьУровеньГруппировокСтрок();,и можно там задать число 1, 2, 3 и т.д. но проблема в следующем в номенклатуре всегда разный уровень иерархии. а задача состоит в том. чтобы он не показывал только последний уровень, т.е. если 4 уровня то выведет ПоказатьУровеньГруппировокСтрок(3); если 5 уровней то ПоказатьУровеньГруппировокСтрок(4 );, т.е. уровень -1, как такое можно реализовать
  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Когда заведомо не известно количество уровней, поможет только рекурсия.
  3. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    а поподробнее ?)
  4. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Вам необходимо написать некую рекурсивную функцию, которая будет обходить нужные Вам группировки и возвращать нужное значение.
  5. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    А есть какой-нибудь пример наглядный ? просто определение рекурсивной функции на википедии ввело еще в больший ступор))))
  6. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    самый распространенный пример - это вычисление чисел Фибоначчи. Погуглите эту тему. Вот на хабре пример организации алгоритма рекурсивного вычисления чисел __http://habrahabr.ru/post/148531/

    З.Ы. надеюсь админы форума не против данной ссылки в целях обучения
  7. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Ян, ты его сейчас вообще в кому введешь этим)))))) Пусть попробует с чего по-проще. В двух словах. Рекурсия - это вызов процедуры самой из себя. У меня где-то был хороший пример. Поищу, скину и объясню.
  8. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    Костя, чем плох пример с числами фибоначи для изучения рекурсии? есть куда более сложные вещи... хотя кому как
  9. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    6.979
    Симпатии:
    397
    Баллы:
    104
    Просто помню, когда сам пытался это понять, тоже наткнулся на почти такой же пример. Вообще ниче не понял. А потом нашел какую-то статью и по ней уже разобрался быстро. Хотя, по себе людей не судят.))))
    Попробуйте почитать эти простые примеры, может помогут.
    Ссылка № 1
    Ссылка № 2
    Ссылка № 3
  10. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    просто в ВУЗе изучение рекурсии вроде как раз начиналось с чисел Фибоначчи, ну ТС надеюсь поделится мыслями где ему проще показалось изучение рекурсии, а то мы уже отклонились от темы ...
  11. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Всем спасибо за советы) прочитал вышеупомянутые статьи сейчас буду пробовать)
  12. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    главное не забудьте условие для выхода из рекурсии, а то зациклитесь
  13. TopicStarter Overlay
    Дмитрий Игоревич
    Offline

    Дмитрий Игоревич Опытный в 1С

    Регистрация:
    11 апр 2013
    Сообщения:
    152
    Симпатии:
    0
    Баллы:
    26
    Но первый вопрос который возникает как я понимаю ПоказатьУровеньГруппировокСтрок() работает сразу для всей группировки, так, что что-то наподобие такого

    Код:
    
    Таблица = ЭлементыФормы.Результат;
    КолУровней	= Таблица.КоличествоУровнейГруппировокСтрок();
    Таблица.ПоказатьУровеньГруппировокСтрок(КолУровней-1);
    
    
    не прокатит, т.е. приходится не программно, а руками выводить весь отчет?
  14. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    чета намудрили с рекурсией.. можно попробовать с этим методом поиграться..


    СправочникСсылка.<Имя справочника>.Уровень (CatalogRef.<Имя справочника>.Level)

    СправочникСсылка.<Имя справочника> (CatalogRef.<Имя справочника>)
    Уровень (Level)
    Синтаксис:Уровень()
    Возвращаемое значение:Тип: Число. Уровень элемента справочника.
    Описание:Получает уровень элемента справочника.
    Примечание:Имеет смысл только для многоуровневых справочников. Следует учитывать, что уровень элемента может меняться, например, при переносе в другую группу (смене родителя). Для элемента, не имеющего родителя, уровень будет равняться 0.
    Если ссылка пустая, вызов метода вызывает исключение.
    Пример:
    Сообщить("Данный элемент принадлежит уровню " +
    СсылкаНаЭлемент.Уровень());
  15. vartanet
    Offline

    vartanet Опытный в 1С Команда форума

    Регистрация:
    16 ноя 2010
    Сообщения:
    2.698
    Симпатии:
    15
    Баллы:
    29
    или ориентироваться на группу.. если текущий уровень содержит группу, значит у него есть дочерние элементы, значит этот уровень не последний..

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