Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Иерархия с владельцем справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Система компоновки данных
SV71
Всем здравия!

Самописная конфигурация.
Версия 1С 8.2, режим "Управляемое приложение".

1. Есть справочники: "Проекты" - иерархия групп и элементов, "ЧастиПроекта" - владелец "Проекты".

2. Документ "Платеж".
В табличной части "Операции" документа "Платеж" установлен реквизит "Проект" составного типа: СправочникСсылка.Проекты, СправочникСсылка.ЧастиПроекта.
При проведении реквизит "Проект" заносится в регист бухгалтерии "ЖурналОпераций"."Субконто1".
Не указываю подробного описания по связи "ЖурналаОпераций" с "Планом счетов" и "Планом видов характеристик", т.к. это не важно - суть в следующем.

3. Создал отчет "СостояниеПроектов".
3.1. Запрос:
ВЫБРАТЬ
    ТАБ_Обороты.Субконто1 КАК Проект,
    ТАБ_Обороты.СуммаОборот
ИЗ
    РегистрБухгалтерии.ЖурналОпераций.Обороты КАК ТАБ_Обороты

3.2. Ресуры: "СуммаОборот"
3.3. Настройки: Список, Группировка "Проект" (иерархия).

В данном отчете "Проекты" в иерархии как и должно быть отображаются нормально.
Хочется и "ЧастиПроекта" отобразить в иерархии. Иерархию для них нужно построить к "Владелец", который является элементом "Проекты".


Здесь желтым выделены "ЧастиПроекта"

Помогите пожалуйста решить вопрос.

Всех благ!!!
TipsyKID
Попробую включить телепата :
ВЫБРАТЬ
    ТАБ_Обороты.Субконто1 КАК Проект,
    ТАБ_Обороты.СуммаОборот
ИЗ
    РегистрБухгалтерии.ЖурналОпераций.Обороты КАК ТАБ_Обороты

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ТАБ_Обороты2.Субконто2.Владелец,
    ТАБ_Обороты2.СуммаОборот
ИЗ
    РегистрБухгалтерии.ЖурналОпераций.Обороты КАК ТАБ_Обороты2
sava1
А не проще использовать иерархию Проект и не задействовать ЧастиПроекта?
Цитата(TipsyKID @ 08.07.15, 12:26) необходимо зарегистрироваться для просмотра ссылки
ВЫБРАТЬ
    ТАБ_Обороты2.Субконто2.Владелец,

Имхо, части проекта находятся в Субконто1?
Используйте в запросе
CASE Субконто1 когда ссылка справочник.Проекты тогда  Субконто1
                                                         когда ссылка справочник.ЧастиПроекта тогда  Субконто1.Владелец конец как Проект
TipsyKID
В условиях телепатии, тяжело давать оптимальные советы, лишь, по возможности, универсальные.
SV71
Цитата(TipsyKID @ 08.07.15, 13:26) необходимо зарегистрироваться для просмотра ссылки
Попробую включить телепата :
ВЫБРАТЬ
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ


Спасибо за подсказанное решение.
Пошел по этому пути.

Наваял следующее (код из реальной конфигурации содержит еще префиксы к объектам):
// ВЫБРАТЬ "Проекты"-родители для "Части проекта"
ВЫБРАТЬ
    ТАБ_Владельцы.Субконто1.Владелец КАК Проект,
    ТАБ_Владельцы.Субконто1.Владелец.Родитель КАК Родитель,
    ТАБ_Владельцы.СуммаОборот
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_Владельцы
ГДЕ
    ТАБ_Владельцы.Субконто1 ССЫЛКА Справочник.НИС_Спр_Пр_ЧастиПроекта

ОБЪЕДИНИТЬ ВСЕ

// ВЫБРАТЬ "Части проекта" с привязкой к "Проекты"-родители
ВЫБРАТЬ
    ТАБ_ЧастиПроекта.Субконто1 КАК Проект,
    ТАБ_ЧастиПроекта.Субконто1.Владелец КАК Родитель,
    ТАБ_ЧастиПроекта.СуммаОборот
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_ЧастиПроекта
ГДЕ
    ТАБ_ЧастиПроекта.Субконто1 ССЫЛКА Справочник.НИС_Спр_Пр_ЧастиПроекта

ОБЪЕДИНИТЬ ВСЕ

// ВЫБРАТЬ просто "Проекты"
ВЫБРАТЬ
    ТАБ_Проекты.Субконто1 КАК Проект,
    ТАБ_Проекты.Субконто1.Родитель КАК Родитель,
    ТАБ_Проекты.СуммаОборот
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_Проекты
ГДЕ
    ТАБ_Проекты.Субконто1 ССЫЛКА Справочник.НИС_Спр_Пр_Проекты


Ожидал, что "Части проекта" окажутся в иерархии с привязкой к своим "Проектам" но этого не произошло:

Здесь отмеченное красным должно быть в иерархии под выделенным желтым

Как обеспечить правильное отображение иерархии?
TipsyKID
Как - то так.
ВЫБРАТЬ
    ТАБ_Владельцы.Субконто1.Владелец КАК Проект,
    ТАБ_Владельцы.Субконто1.Владелец.Родитель КАК Родитель,
    ТАБ_Владельцы.СуммаОборот
ПОМЕСТИТЬ ВТ_Данные
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_Владельцы
ГДЕ
    ТАБ_Владельцы.Субконто1 ССЫЛКА Справочник.НИС_Спр_Пр_ЧастиПроекта

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ТАБ_ЧастиПроекта.Субконто1,
    ТАБ_ЧастиПроекта.Субконто1.Владелец,
    ТАБ_ЧастиПроекта.СуммаОборот
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_ЧастиПроекта
ГДЕ
    ТАБ_ЧастиПроекта.Субконто1 ССЫЛКА Справочник.НИС_Спр_Пр_ЧастиПроекта

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    ТАБ_Проекты.Субконто1,
    ТАБ_Проекты.Субконто1.Родитель,
    ТАБ_Проекты.СуммаОборот
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_Проекты
ГДЕ
    ТАБ_Проекты.Субконто1 ССЫЛКА Справочник.НИС_Спр_Пр_ЧастиПроекта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Проекты.Ссылка КАК Проект,
    ЕСТЬNULL(ВТ_Данные.Родитель, "") КАК Родитель,
    ЕСТЬNULL(ВТ_Данные.СуммаОборот, 0) КАК СуммаОборот
ИЗ
    Справочник.Проекты КАК Проекты
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные КАК ВТ_Данные
        ПО Проекты.Ссылка = ВТ_Данные.Проект
ГДЕ
    НЕ ВТ_Данные.СуммаОборот ЕСТЬ NULL
СГРУППИРОВАТЬ ПО
       Проекты.Ссылка,
       ЕСТЬNULL(ВТ_Данные.Родитель, """")
SV71
Цитата(TipsyKID @ 09.07.15, 11:42) необходимо зарегистрироваться для просмотра ссылки
Как - то так.
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    Проекты.Ссылка КАК Проект,
    ЕСТЬNULL(ВТ_Данные.Родитель, "") КАК Родитель,
    ЕСТЬNULL(ВТ_Данные.СуммаОборот, 0) КАК СуммаОборот
ИЗ
    Справочник.Проекты КАК Проекты
        ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные КАК ВТ_Данные
        ПО Проекты.Ссылка = ВТ_Данные.Проект
ГДЕ
    НЕ ВТ_Данные.СуммаОборот ЕСТЬ NULL
СГРУППИРОВАТЬ ПО
       Проекты.Ссылка,
       ЕСТЬNULL(ВТ_Данные.Родитель, """")


Так не будет работать: отмеченные на картинке красным записи сразу отсекуться в "ЛЕВОЕ СОЕДИНЕНИЕ", потому что они не из "Справочник.Проекты", а из "Справочник.ЧастиПроекта".


Надо как-то по другому.
TipsyKID
Поправте соединение.
       ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные КАК ВТ_Данные
       ПО Проекты.Ссылка = ВТ_Данные.Проект ИЛИ Проекты.Ссылка =  ВТ_Данные.Родитель
SV71
Цитата(TipsyKID @ 09.07.15, 13:19) необходимо зарегистрироваться для просмотра ссылки
Поправте соединение.
       ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Данные КАК ВТ_Данные
       ПО Проекты.Ссылка = ВТ_Данные.Проект ИЛИ Проекты.Ссылка =  ВТ_Данные.Родитель


Сомневался что это поможет. Проверил - так и есть: пропали записи с "Части проекта" (выделены на скриншотах отчета красным).

Тут принципиальная ошибка - попытка собрать только данные по справочнику "Проект", а нужно еще за проект выдать "Части проекта".

===========================================
Теперь про текущее состояние.

Загнал результат своего запроса (сообщение 09.07.15, 7:34) во временную таблицу. Потом выбрал данные и тип данных в полях "Проект", "Родитель":
// ВЫБРАТЬ "Проекты"-родители для "Части проекта"
ВЫБРАТЬ
    ТАБ_Владельцы.Субконто1.Владелец КАК Проект,
    ТАБ_Владельцы.Субконто1.Владелец.Родитель КАК Родитель,
    ТАБ_Владельцы.СуммаОборот
ПОМЕСТИТЬ ВТ_Данные
ИЗ
    РегистрБухгалтерии.Фин_Отч_ЖурналОпераций.Обороты КАК ТАБ_Владельцы
...
;

// ВЫБРАТЬ Данные
ВЫБРАТЬ
    ТипЗначения(Проект),
    Проект,
    ТипЗначения(Родитель),
    Родитель,
    СуммаОборот
ИЗ
    ВТ_Данные


Получил следующее:


С родителями тут все в порядке.
Я думаю СКД при сборе иерархии не присоединяет записи с типом "Части проекта", т.к. их тип отличается от родителей - тип "Проект".

Может можно как то преобразовать типы к какому-то универсальному, например "СправочникСсылка"?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.