8.х Работа с деревом значений.

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

  1. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Добрый день! Тысячу раз извиняюсь за глупый вопрос: как проверить заполненность дерева значений?
    Или как проверить заполнена ли строка?
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.745
    Симпатии:
    509
    Баллы:
    204
    Рекурсия чтоль ?
  3. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    проверить заполненность дерева: ЗначениеЗаполнено(Дерево)
    А заполнена ли строка: в каком смысле? если в смысле есть ли подчиненные строки у строки дерева, то СтрокаДерева.Строки.Количество() должно быть > 0
  4. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Почему то на ЗначениеЗаполнено - ошибка вылетает. А строка - не подчиненная, а равнозначная. Задача в том чтобы проверить - если такой строки нет - то выводить.
    --- Объединение сообщений, 20 янв 2015 ---
    Процедура или функция с указанным именем не определена (ЗначениеЗаполенно)
    Если <<?>>ЗначениеЗаполенно(ДеревоОстатков) Тогда (Проверка: Толстый клиент (обычное приложение))
    --- Объединение сообщений, 20 янв 2015 ---
    В том и вопрос, есть ли что-то кроме рекурсии?
  5. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Код уже показывайте и каким образом получается дерево тоже.
  6. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Код:
    Если ЗначениеЗаполенно(ДеревоОстатков) Тогда
                                ЦенаПриНулевомОстаткеНаСкладе = РезультатЗапроса.Выбрать();
                            //Если НЕ ВыборкаСклад.Количество()>0 Тогда
                              СтрокаНоменклатуры = ДеревоОстатков.Строки.Добавить();
                              Если ПолучатьЦены Тогда
                                  Пока ЦенаПриНулевомОстаткеНаСкладе.Следующий() Цикл
                                      Если ПолучатьЦены Тогда
                                          ЗаполнитьПоляСумм(СтрокаНоменклатуры, ЦенаПриНулевомОстаткеНаСкладе, СписокЦенОстатков, КурсыВалют);
                                      КонецЕсли;
                                  КонецЦикла;
                              КонецЕсли;
                            КонецЕсли;
    Последнее редактирование модератором: 20 янв 2015
  7. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    И в чем ошибка?
  8. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Это дерево
    Код:
    ДеревоОстатков = Новый ДеревоЗначений;
      
        МассивБазовыхТиповЦен = Новый Массив;
        МассивРасчитываемыхЦен = Новый Массив;
        СформироватьМассивБазовыхТиповЦен(ТаблицаПоиска, МассивБазовыхТиповЦен, МассивРасчитываемыхЦен, ВсеТипыЦен);
          ДеревоОстатков.Колонки.Добавить("ХарактеристикаСклад", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры,СправочникСсылка.Склады"));
        //ДеревоОстатков.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("Строка"));
        ДеревоОстатков.Колонки.Добавить("ГВ", Новый ОписаниеТипов("СправочникСсылка.ГодВыпуска"));
        ДеревоОстатков.Колонки.Добавить("МестоХранения"      , Новый ОписаниеТипов("Строка"));
        ДеревоОстатков.Колонки.Добавить("Общий"              , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
        ДеревоОстатков.Колонки.Добавить("Свободный"          , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
        ДеревоОстатков.Колонки.Добавить("СвободныйОжидаемый" , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
        ДеревоОстатков.Колонки.Добавить("ВРезерве"           , Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
      
    
        // Тут колонки добавляются в том порядке в котором они идут в списке типов цен
        Если МассивБазовыхТиповЦен.Количество() > 0 Тогда
          
            // колонки для Каждого типа цены
            Для Каждого Элемент Из МассивБазовыхТиповЦен Цикл
                ПрефиксИмени = ОпределитьПрефиксИмениКолонки(ТаблицаПоиска, Элемент);
                СоздатьКолонкиСуммДерево(ДеревоОстатков, ПрефиксИмени);
            КонецЦикла;
          
            Для Каждого Элемент Из МассивРасчитываемыхЦен Цикл
                ПрефиксИмени = ОпределитьПрефиксИмениКолонки(ТаблицаПоиска, Элемент);
                СоздатьКолонкиСуммДерево(ДеревоОстатков, ПрефиксИмени);
            КонецЦикла;
    
        КонецЕсли;
      
        Возврат ДеревоОстатков;
    --- Объединение сообщений, 20 янв 2015 ---
    На "ЗначениеЗаполнено" ошибка вылетает: "
    {ОбщийМодуль.УправлениеЗапасами.Модуль(2310,12)}: Процедура или функция с указанным именем не определена (ЗначениеЗаполенно)
    Если <<?>>ЗначениеЗаполенно(ДеревоОстатков) Тогда (Проверка: Толстый клиент (обычное приложение))"
    Последнее редактирование модератором: 20 янв 2015
  9. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Так. ошибка в какой строке? в Если ЗначениеЗаполнено(ДеревоЗначений) Тогда?
    --- Объединение сообщений, 20 янв 2015 ---
    Вы хотя б тупо копи-пастом не пользуйтесь что ли....ЗначениеЗаполнено()
  10. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Я копи пастом не пользовалась. ДеревоЗначений имя ДеревоОстатков - что не так? На форме два дерева
  11. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.745
    Симпатии:
    509
    Баллы:
    204
    Почитайте в СП про ЗначениеЗаполнено().
  12. TopicStarter Overlay
    Bonny
    Offline

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Угу - для значений типа строка. Поэтому вновь вопрос - как проверить?
    --- Объединение сообщений, 20 янв 2015 ---
    в смысле если не строку, а все дерево
  13. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    мдя.....еще можно проверить количество строк дерева значений, если уж сами не хотите С-П читать про ДеревоЗначений
  14. Tiger86
    Offline

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

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

    Bonny Опытный в 1С

    Регистрация:
    15 янв 2015
    Сообщения:
    56
    Симпатии:
    0
    Баллы:
    26
    Мне нужно проверка на наличие данных
  16. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    смотрите в сторону Строки.Количество() - можно проверить количество строк на определенном уровне дерева
  17. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Да поиск строк там по реквизитам нужен, ИМХО....либо переделать все на 1 запрос и не делать голову беременной...
  18. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    по дереву напрямую - только рекурсия, а так можно и запросом попробовать, но я задачу до конца так и не поняла
  19. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.552
    Симпатии:
    716
    Баллы:
    204
    Можно искать строки в ДЗ без рекурсии, как в ТЗ.
  20. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    пример в студию

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