Имя: Пароль:
1C
1С v8
Вывод табличной части в динамический список
0 Черный всадник
 
28.12.15
02:34
Доброго времени суток.
Есть справочник Исполнители, у него есть табличная часть ресурсы (две колонки: тип ресурса и сотрудник). Надо вывести сотрудников из ресурсов в колонку динамического списка. Подскажите, пожалуйста, возможно ли это в 1С, если да, то как это сделать? Заранее спасибо.
1 Сильф
 
28.12.15
02:42
(0) Возможно. Запросом.
2 Сильф
 
28.12.15
02:46
(0) У динамического списка ставим флажок "Произвольный запрос", "Настройка списка" -> "Открыть", пишем свой запрос, поля из этого запроса автоматически подтянутся как колонки дин. списка. Вкратце так.
3 Черный всадник
 
28.12.15
03:38
(1, 2) Мне не удалось найти способа свернуть табличную часть справочника в одно поле в запросе. Должен получиться список вида:
Исполнитель | Сотрудники
Бригада 1   | Иванов, Петров, Сидоров
Бригада 2   | Колобок, Степашка, Филин

На SQL я бы использовал такую конструкцию:
SELECT
    ExecutorId
    , (SELECT
           array_to_string(
             array_agg(tn.Name), ', ')
         FROM
           (SELECT
                e.Name
              FROM
                ExecutorsResourceLines erl
                LEFT JOIN Employee e ON e.Id = erl.Employee
              WHERE erl.ExecutorId = Executors.Id
              ORDER BY erl.!Name) tn
       )
  FROM
    Executors
4 Nuobu
 
28.12.15
05:52
(3) Задай реквизит в "Бригаде", куда "ПередЗАписью" пиши своих сотрудников и уже их вытаскивай в динамический список.
5 Черный всадник
 
28.12.15
23:53
(4) Это решение имеет несколько недостатка - растёт объём базы, записанные в дополнительный реквизит значения могут поменяться и надо обновить исполнителей. Конкретно для таблицы исполнителей это не критично, но для системы в целом это будет эффект разбитого окна (рано или поздно этот пример перенесут на таблицу где эти недостатки будут критичны), поэтому хотелось бы сделать сразу по уму. Как я понял в 1С это похоже единственный вариант. Спасибо.
6 vicof
 
28.12.15
23:58
(5) Можешь извратиться, Написать свой запрос в СКД, оттуда выгрузить в таблицу, а на динамический список вообще забить.
7 kosts
 
29.12.15
07:20
(5) Добавь в динамический список несколько колонок (штук 10 к примеру). Размести их в группе одно под другим.
В каждую колонку получай из запроса по одному исполнителю из одной конкретной строки ТЧ.
В условном оформлении скрывай колонки в которых нет исполнителей.
В последней колонке выводи многоточие, если исполнителей больше 10.

Я думаю вполне жизнеспособный вариант.
8 Мимохожий Однако
 
29.12.15
07:30
(5)По твоим словам, любой новый документ или реквизит ведёт к росту базы. Однако не просто так в ЗУПе пошли именно таким путём.
9 Черный всадник
 
29.12.15
10:25
(7) Интересный вариант, не смотря на большое количество левых соединений, выборка должна происходить быстро поскольку за раз отображается небольшое количество записей. Спасибо.
(8) Именно так. Платформа 1С сильно ограничена по возможностям. Выбрать оптимальное решение достаточно сложно. А типовые конфигурации пишут такие же люди как мы с вами, и случается используют далеко не лучшие способы решения задач.