8.х Получить данные в иерархии

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

  1. TopicStarter Overlay
    Korolev
    Offline

    Korolev Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Делаю отчет через СКД. Данные формируются на основе справочника, в котором выбирается категория товара.
    Проблема в том, что мой запрос работает правильно только тогда, когда категория проставлена именно для товара. Если же выбирать папку, то запрос работает неверно.

    Пример:
    Есть две категории: "Бар" и "Кухня"
    Нужный Товар1 лежит так:

    Меню > Папка1 > Папка2 > Товар1

    т.е. если в справочнике (на основе которого формируется отчет) выбрать что Товар1 имеет категорию "Бар", то данные будут сформированы верно.

    если же выбрать "Папка2" принадлежит категории "Бар", то запрос не понимает что Товар1 принадлежит тоже Бару. этот момент можно обойти, если в связи добавить родителя:

    Код:
    		ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КлассификацияТоваровДляЗП КАК КлассификацияТоваровДляЗП
    ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ВидыТоваровДляЗП КАК ВидыТоваровДляЗП
    ПО КлассификацияТоваровДляЗП.ВидТовараДляЗП = ВидыТоваровДляЗП.Ссылка
    ПО ЗаказТовары.Товар.Родитель = КлассификацияТоваровДляЗП.Товар
    
    Тогда данные будут передаваться верно. Но тут возникает следующая проблема, а именно что родителей может быть несколько, как в примере, и тогда данные опять будут переданы не верно :(

    запрос сам такой:
    Код:
    ВЫБРАТЬ
    ЕСТЬNULL(КлассификацияТоваровДляЗП.ВидТовараДляЗП, "Кухня") КАК ВидТовара,
    СУММА(ЗаказТовары.Количество) КАК Количество,
    ЗаказТовары.Товар КАК Товар,
    ЗаказТовары.Товар.Родитель,
    СУММА(ЗаказТовары.СуммаРеализации) КАК СуммаРеализации,
    ЗаказТовары.Ссылка КАК Документ,
    ЗаказТовары.Ссылка.Автор,
    СУММА(ВЫБОР
    КОГДА КлассификацияТоваровДляЗП.ВидТовараДляЗП = ЗНАЧЕНИЕ(Перечисление.ВидыТоваровДляЗП.Бар)
    ИЛИ КлассификацияТоваровДляЗП.ВидТовараДляЗП ЕСТЬ NULL 
    ТОГДА ЗаказТовары.СуммаРеализации
    ИНАЧЕ 0
    КОНЕЦ) КАК ОбщаяВыручка
    {ВЫБРАТЬ
    ВидТовара.*,
    Количество,
    Товар}
    ИЗ
    Документ.Заказ.Товары КАК ЗаказТовары
    ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КлассификацияТоваровДляЗП КАК КлассификацияТоваровДляЗП
    ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ВидыТоваровДляЗП КАК ВидыТоваровДляЗП
    ПО КлассификацияТоваровДляЗП.ВидТовараДляЗП = ВидыТоваровДляЗП.Ссылка
    ПО ЗаказТовары.Товар = КлассификацияТоваровДляЗП.Товар
    ГДЕ
    ЗаказТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
    
    СГРУППИРОВАТЬ ПО
    ЗаказТовары.Товар,
    ЕСТЬNULL(КлассификацияТоваровДляЗП.ВидТовараДляЗП, "Кухня"),
    ЗаказТовары.Товар.Родитель,
    ЗаказТовары.СуммаРеализации,
    ЗаказТовары.Ссылка,
    ЗаказТовары.Ссылка.Автор
    
    Может можно как-то соединение правильней сделать (в иерархии например).
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КлассификацияТоваровДляЗП КАК КлассификацияТоваровДляЗП ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ВидыТоваровДляЗП КАК ВидыТоваровДляЗП ПО КлассификацияТоваровДляЗП.ВидТовараДляЗП В ИЕРАРХИИ( ВидыТоваровДляЗП.Ссылка) ПО ЗаказТовары.Товар.Родитель В ИЕРАРХИИ( КлассификацияТоваровДляЗП.Товар)

    или как-то по-другому нужно учитывать иерархию?
  3. TopicStarter Overlay
    Korolev
    Offline

    Korolev Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    Тоже так пробовал, но видимо нельзя использовать "В иерархии" при связи.
    Ошибка вылетает:
    Посмотреть вложение 4988

    Вложения:

    • error.PNG
      error.PNG
      Размер файла:
      3,9 КБ
      Просмотров:
      88
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    так. стоп. я не вникал в текст условий соединения таблиц, а теперь вижу, что ошибка в том, что у Перечисления не бывает иерархии, следовательно

    ПОЛНОЕ СОЕДИНЕНИЕ Справочник.КлассификацияТоваровДляЗП КАК КлассификацияТоваровДляЗП
    ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ВидыТоваровДляЗП КАК ВидыТоваровДляЗП
    ПО КлассификацияТоваровДляЗП.ВидТовараДляЗП = ВидыТоваровДляЗП.Ссылка
    ПО ЗаказТовары.Товар В Иерархии( КлассификацияТоваровДляЗП.Товар)
  5. TopicStarter Overlay
    Korolev
    Offline

    Korolev Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    увы, так тоже пробовал.
    Посмотреть вложение 4990
    иерархия мне кажется вообще нужна для "ЗаказТовары.Товар"
    но если писать что
    Код:
     ПО В Иерархии(ЗаказТовары.Товар) =  КлассификацияТоваровДляЗП.Товар
    
    
    будет тоже ошибка.

    Вложения:

    • error2.PNG
      error2.PNG
      Размер файла:
      3,8 КБ
      Просмотров:
      34
  6. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    нужно делать

    ПО ЗаказТовары.Товар В Иерархии(КлассификацияТоваровДляЗП.Товар)

    ИЛИ

    ПО КлассификацияТоваровДляЗП.Товар В Иерархии(ЗаказТовары.Товар)
  7. TopicStarter Overlay
    Korolev
    Offline

    Korolev Опытный в 1С

    Регистрация:
    20 апр 2010
    Сообщения:
    269
    Симпатии:
    0
    Баллы:
    26
    К сожалению, в обоих случаях ругается что "неверные параметры В ИЕРАРХИИ")
  8. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    возможно из-за того, что поле имеет не однозначный тип.
    указывай иерархию в условиях

    ГДЕ
    ЗаказТовары.Ссылка.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата1, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата2, ДЕНЬ)
    И КлассификацияТоваровДляЗП.Товар В иерархии(&Товар)
    И ЗаказТовары.Товар В Иерархии(&Товар)

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