8.х Задача: построение структуры холдингов на базе контрагентов

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

  1. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Уважаемые коллеги. Столкнулся с задачкой: каким образом, используя язык запросов и консоль отчётов грамотно вывести структуру определённого холдинга из базы контрагентов в системе сворачивающихся-разворачивающихся группировок (в одном столбце). Но чтобы не было пустых строк.

    Головные предприятия привязаны с помощью поля "Родитель", Длина (глубина) веток дерева как правило не превышает четырёх, но всё время различная.
    Простой пример для лучшего понимания:

    =1= =2= =3= =4=
    ГАЗПРОМ - Газпром Трансгаз Уфа - Уфимское отделение Трансгаз Уфа - Линейное управление
    - Бирское отделение Трансгаз Уфа
    - Газпром Трансгаз Томск - Линейное управление
    - Газкоплектимпэкс

    для решения задачки я пошёл так: получил Таблицу следующего содержания:

    ГАЗПРОМ NULL NULL NULL
    ГАЗПРОМ Газкоплектимпэкс NULL NULL
    ГАЗПРОМ Газпром Трансгаз Томск Линейное управление NULL
    ГАЗПРОМ Газпром Трансгаз Уфа Бирское отделение Трансгаз Уфа NULL
    ГАЗПРОМ Газпром Трансгаз Уфа Уфимское отделение Трансгаз Уфа Линейное управление

    (строк как правило более 100)

    После настройки итогов, уровней группировок и вывода в Одну колонку с раскрывающимися списками получаются пропуски (пустые строки) там, где уровень веток меньше четырёх.
    Отборы встроенными средствами не помогают, т.к. отбирая строки со значением NULL он убирает из отчёта всю строку (всю ветку).

    Похоже что то с методикой решения неправильно, но правильное решение отыскать не получается.

    Буду рад любым мыслям.
    RH.
  2. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    Каким образом формируется таблица?

    Для формирования подобной структуры необходимо знать три реквизита: Ссылка, Родитель, ЭтоГруппа.
  3. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Таблица формируется как: сначала в 1-ый столбец собираются все организации 1-го уровня, в данном примере это везде будет "ГАЗПРОМ". Т.е. столбец полностью состоит из этой организации. Второй столбец - организации второго уровня и т.д. Пример - вложение "Отчёт1.jpg".
    После затаскивания в консоль отчётов и группировки получается отчёт как показано во влож "Отчёт2.jpg".

    Уровни иерархии всегда четыре (как закажешь), из пустых ячееек первой таблицы Отчёт1 образуются пустые строки второй таблицы Отчёт2. Отбор в данном случае применить нельзя.
    Текст запроса - текст.txt

    Вложения:

    • отч_т1.JPG
      отч_т1.JPG
      Размер файла:
      50,6 КБ
      Просмотров:
      31
    • Отч_т2.JPG
      Отч_т2.JPG
      Размер файла:
      50,7 КБ
      Просмотров:
      43
    • текст.txt
      Размер файла:
      1,2 КБ
      Просмотров:
      26
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    А чем не устраивает группировка с иерархией?

    Запрос будет:

    "Выбрать Ссылка
    Из Справочник.Контрагенты"
  5. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204

    Вложения:

  6. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1

    В этом случае отчёт выводит лишь структуру папок справочника "Контрагенты". Ну например - ПОКУПАТЕЛИ, ПОСТАВЩИКИ и т. д.

    Холдинги привязаны через поле "Входит в холдинг" карточки контрагенты
  7. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    значит будет группировка по полю "ГоловнойКонтрагент"

    Выбрать ссылка, головнойконтрагент
    Из справочник.Контрагенты
    Где НЕ ГоловнойКонтрагент = Значение(Справочник.Контрагенты.ПустаяСсылка)
  8. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    проблема в том, что уровней не два, а больше.
    если попробовать прописать следующий текст, то выводит лишь контрагентов с ветками где обязательно присутствуют четыре уровня иерархии. А где меньше даже не попадают в отчёт
    ВЫБРАТЬ
    Ссылка,
    ГоловнойКонтрагент,
    ГоловнойКонтрагент.ГоловнойКонтрагент,
    Головнойконтрагент.ГоловнойКонтрагент.ГоловнойКонтрагент
    ИЗ
    Справочник.Контрагенты
    ГДЕ
    ГоловнойКонтрагент.ГоловнойКонтрагент.ГоловнойКонтрагент.Наименование="ГАЗПРОМ"


    ИТОГИ ПО
    Ссылка,
    ГоловнойКонтрагент,
    ГоловнойКонтрагент.ГоловнойКонтрагент,
    ГоловнойКонтрагент.ГоловнойКонтрагент.ГоловнойКонтрагент
  9. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    логично, т.к. искуственно ограничено 4-мя уровнями и не больше/не меньше.

    Повторю: пишем запрос вида

    Выбрать ссылка, головнойконтрагент
    Из справочник.Контрагенты
    Где НЕ ГоловнойКонтрагент = Ссылка

    Он выведет нам все, что имеет головные организации, т.е. холдинги.

    Далее, в СКД пихаем его и там настраиваем группировку с иерархией по ГоловнойКонтрагент.

    Чем не устраивает такой вариант?
  10. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204

    Вложения:

  11. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Получается почти то. Спасибо. Единственная засада - почему то в конфигурации 1С 8.1 прописано так, что если у контрагента не указан головной (не стоит галка "Входит в холдинг" и не указан контрагент"), то по в поле Родитель прописан сам этот контрагент, а не пустая ссылка.

    Выбрать первые 3000
    ссылка, головнойконтрагент
    Из справочник.Контрагенты
    Где НЕ ГоловнойКонтрагент.Ссылка = Ссылка И НЕ ГоловнойКонтрагент.ГоловнойКонтрагент.Ссылка = Ссылка
    И НЕ ГоловнойКонтрагент.ГоловнойКонтрагент.ГоловнойКонтрагент.Ссылка = Ссылка
    ИТОГИ ПО
    ссылка,
    головнойконтрагент



    получаются повторы (рис.)

    Вложения:

    • отч_т3.JPG
      отч_т3.JPG
      Размер файла:
      38,5 КБ
      Просмотров:
      29
  12. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    во первых - не нужно проверять головных контрагентов у головных контрагентов - это принципиально не правильно.
    во-вторых - зачем выводить одни и те же поля несколько раз? естественно будет дублирование.
    Поймите, наконец, иерархия - на то и иерархия и она будет выстраиваться автоматический, не нужно её формировать вручную.
  13. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    я наверное чего-то не понимаю

    Выбрать первые 3000
    ссылка, головнойконтрагент
    Из справочник.Контрагенты
    Где НЕ ГоловнойКонтрагент.Ссылка = Ссылка
    ИТОГИ ПО
    ссылка,
    головнойконтрагент

    в консоле отчётов настроил группировку по Ссылка и ГоловнойКонтрагент, Поля те же

    Выводит список иерархии лишь до второго уровня иерархии

    Если не меняя запрос настроить группировку в консоле отчётов ещё по двум уровням и добавить ещё два поля (головные и их головные) то выводит все уровни иерархии, но организации начинают повторяться. Ни то ни другое не подходит как конечныйй результат.



    только два уровня

    Вложения:

    • отч_т4.JPG
      отч_т4.JPG
      Размер файла:
      167,1 КБ
      Просмотров:
      22
  14. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    если вычисляем итоги в запросе, то тогда нужно делать

    ИТОГИ ПО
    ССЫЛКА ИЕРАРХИЯ,
    ГоловнойКонтрагент ИЕРАРХИЯ

    Я прото в СКД делаю - там группировка на другом уровне происходт.
  15. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    вариант для четырёх уровней

    Вложения:

    • отч_т5.JPG
      отч_т5.JPG
      Размер файла:
      75,6 КБ
      Просмотров:
      26
  16. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.548
    Симпатии:
    716
    Баллы:
    204
    я так понимаю, вам нужно иерархию головного контрагента по колонкам выводить, а не по строкам, по строкам выводится иерахия самого контрагента
  17. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Отстаньте Вы от этих запросов, пройдись рекурсивной функцией, составьте иерархический список любой вложенности потом передайте в СКД внешний объект -- Ваш список, ну а там достраивайте вывод.
  18. TopicStarter Overlay
    ravehead
    Offline

    ravehead

    Регистрация:
    22 июл 2010
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    не очень понял - как это всё может выглядеть.



    по поводу рекурсивных процедур - там то конечно всё гибко настраивается, вопросов нет, но у меня знания на уровне лишь языка запросов, с языком самой платформы не знаком.

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