1с группировка данных не разрешена без указания основной таблицы
Доброго всем здоровья! Прошу помочь чайнику в его нелегком ламерском пути. Имеется форма списка документа, куда выводятся документы с заполненным полем "Ответственный" (т.е. непосредственно исполнитель) и не заполненным (у документа пока не назначен исполнитель). Нужно эти документы сгруппировать, не важно - дерево или нет. Покрасил гугль в сиреневый цвет, нашел вот такую конструкцию: ГруппировкаСписка = Список.Группировка.Элементы; Но ее аналоги у меня не работают, валятся с ошибкой: "Группировка данных не разрешена без указания основной таблицы". Прошу помощи, господа
в чем проблема-то? пусть пользователи настроят список под себя, как им угодно
про вес действия я знаю, хочется чтобы список настроен был программно, и при настройке через "все действия" нет возможности переименовать группировки, а это обязательно
Откройте настройку списка в упр. форме, где запрос к данным, внизу выберите основную таблицу и все.
Примерчик будте любезны, уважаемый.Первый раз сталкиваюсь с такой задачей, если нетрудно, поясните
В моем случае "Список" имеет вложеные реквизит "Ответственный", по которому и нужно делать группировки (когда он заполнен и когда не заполнен). Пробую Ваш второй вариант, пишет ту же ошибку из . Первый Ваш вариант мне не подходит, тк нужно использовать свой запрос
Т.е. группируешь не по реквизиту из дин. списка, а добавленному вручную?
ВЫБРАТЬ (Пустой или текущий выводятся для того, чтобы пользователь видел только его документы, или не назначенные еще). Хотелось бы также переименовать группировки, что-то вроде "МоиДокументы" и "Бесхозные"
Реквизит "Список" (тип динамически список), в него вложена табличная часть "Ответственные" (тип справ.пользователи). Вот по ответственным мне и надо группировать
и по условию у вас видно что Ответственный это реквизит, а не ТЧ
и ответственного выводите в запросе примерно так выбор когда Документ.Ответственный = &Текущий тогда "Йа" иначе выбор когда документ.Ответственный = Значение(Справочник.Пользователи.ПустаяСсылка) //(тут варианты или неопределно или еще - нужно тестить) тогда "Бесхозные" иначе Документ,ответственный конец конец
Спасибо, понимание начало приходиь. Выводятся группировки как положено, но хотелось бы переименвать их. Не подскажите, как это реализовать?
в вы группируете по дате (точнее по дате или по дате-времени, в зависимости от типа данных), в вы хотите группировать по пользователю. Определитесь уж.
в я привет пример из растерзанного мною гугля. В я написал свою реализацию, адаптированную и работающею более-менее адекватно. Безмерно благодарен Вам за помощь, Уважаемый! Хотелоь бы получить ответ на еще один вопрос, который я описал в . Еще раз огромное спасибо за оказанную помощь!
Забыл ) ВЫБОР КОГДА Документ.Ответственный = &Пустой ТОГДА Неназначенные КОГДА Документ.Ответственный = &Пользователь ТОГДА Свои ИНАЧЕ Документ.Ответственный КОНЕЦ КОНЕЦ Но в таком виде он не отрабатывает, падает с ошибкой
и &Пустой не очень красиво, либо через неопределено, либо через ЗНАЧЕНИЕ. сравнивайте
Ограничения при использовании динамических списков
Область применения: управляемое приложение, мобильное приложение.
1.1. При разработке интерфейса, разработчик может использовать группировки в динамических списках (cм. Группировки в списках).
Разработчик может:
- установить в настройках динамического списка группировки по умолчанию;
- добавить на форму специальные элементы управления (команды меню, поля выбора для «быстрой» группировки и т.п.), которые предоставляют пользователю возможность устанавливать группировки.
В данном стандарте перечислены условия, которые должен соблюсти разработчик, если он тем или иным способом управляет группировками динамических списков.
1.2. Пользователь, при помощи настройки списка может установить свои группировки – в этом случае прикладной разработчик не может (и не должен) гарантировать оптимальную производительность.
1.3. Использование группировок рекомендуется в тех динамических списках, в которых заведомо небольшое число записей (не более нескольких сотен). Небольшое число записей может обеспечиваться отбором, примененным в запросе динамического списка или отбором, применяемым к динамическому списку в форме и действие которого пользователь не может отменить.
1.4. В динамических списках, которые отображают таблицы с большим количеством записей, группировка может осуществляться только по проиндексированным полям.
Требование связано со следующими особенностями работы динамического списка. Для построения группировки, динамическому списку необходимо выбрать все уникальные из таблицы базы данных значения поля, по которому строится группировка. Затем производится сортировка и вывод пользователю. Когда пользователь раскрывает значение группировки, динамический список выбирает все записи таблицы с заданным значением в поле.
1.5. Допускается делать многоуровневые группировки в динамических списках только при соблюдении следующих условий:
- поле, по которому осуществляется первая группировка, должно быть проиндексировано;
- поле, по которому осуществляется первая группировка, должно обладать хорошей селективностью (т.е. для каждому значению этого поля должно соответствовать небольшое количество записей в таблице базы данных);
Эти требования связаны с тем, что раскрытие пользователем последующих (после первой) группировок динамический список будет отрабатывать уже без использования индексов, по всем элементам, отобранным по первой группировке.
1.6. Не рекомендуется делать группировки по полям, которые являются характеристиками объекта метаданных. Это ограничение связано с тем, что при выводе характеристик делается ЛЕВОЕ СОЕДИНЕНИЕ с таблицей характеристик, поэтому запрос с отбором по одной характеристике будет не эффективным даже при наличии индекса (в любом случае будет сканирование по главной таблице).
2. Для иерархических списков не рекомендуется устанавливать свойство НачальноеОтображениеДерева в значение РаскрыватьВсеУровни , так как это приведет к критичному снижению скорости открытия больших списков. Следует использовать значения НеРаскрывать или РаскрыватьВерхнийУровень .
Дополнительную информацию об особенностях динамических списков можно получить в документации по платформе (см. Динамический список)
3. Строку поиска в командной панели динамического списка допустимо отключать в тех случаях, когда с его помощью не выполняются основные сценарии поиска. Например, в списке номенклатуры важен поиск по части артикула, что не поддерживается механизмом поиска.
Это ограничение обусловлено тем, что почти всегда поиск (когда он использует технологию полнотекстового поиска) работает только с начала слов. При этом в версиях платформы 1С:Предприятие 8.3.7 и ранее у данного механизма имеется еще более ограничений (в частности, в поисковую выдачу не попадали элементы, которые еще не были проиндексированы и т.п.).
Для отключения строки поиска в командной панели необходимо свойства ПоложениеСтрокиПоиска и ПоложениеУправленияПоиском динамических списков установить в значение Нет (для форм, созданных в предыдущих версиях платформы, значение Нет уже установлено по умолчанию).
Динамический список в 1С – это интерфейсный объект встроенного языка, который используется для отображения различных списков объектов базы данных или необъектных данных. Кроме того, он предоставляет возможность задавать произвольный текст запроса, который будет использован для считывания данных.
1. Настройки списка в 1С
Чтобы в динамическом списке 1С начать работу с произвольным запросом, необходимо в свойствах его объекта установить флаг «Произвольный запрос 1С». Далее можно перейти к настройке через «Настройку списка 1С».
В открывшемся диалоге «Динамический список в 1С» необходимо произвести основные настройки. Вкладка «Настройки» предназначена для установки значений параметров отбора, сортировки, группировки, а также условного оформления результата запроса. Вкладка «Запрос» предназначена для описания запроса. Разберем подробнее основные свойства последней.
С помощью команды «Конструктор запроса 1С» можно получить доступ к редактору текста запроса.
Свойство «Основная таблица» устанавливает основную таблицу. Данное свойство указывает динамическому списку в 1С главные данные для выбора и отображения информации, а также для предоставления стандартных команд. В случае с произвольным запросом 1С ключевые поля возможно настроить и без указания основной таблицы. Делается это посредством свойств «Вид ключа» и «Поля ключа».
Свойство «Динамическое считывание данных» определяет необходимость считывать данные порциями приближенно равными количеству видимых строк в таблице. При отключении данного свойства будут считаны все данные. Также в официальной документации можно найти информацию об изменении поведения данного свойства при установке дополнительных настроек.
Свойство «Автозаполнение доступных полей» позволяет системе установить доступные поля для отбора, порядка, выбора, группировки.
2. Программное изменение запроса 1С
3. Рекомендации к запросам в динамических списках
Динамические списки 1С предназначены для непосредственного представления информации пользователю, поэтому главную роль играет скорость обновления и вывода данных. Выделим ряд основных рекомендаций, которые следует учесть при проектировании.
Во-первых, стоит проектировать простые запросы за счет оптимизации архитектуры конфигурации. Например, сложные вычисления проводить не в запросе, а при проведении документов, включая их регистры, которые затем и использовать в запросе.
Во-вторых, необходимо рассматривать возможности индексирования полей, данные которых ожидается использовать при настройке группировок, порядка, отбора, группировок. Следует учесть, что избыточность индексов приводит к неоправданной нагрузке.
В-третьих, следует ограничить количество соединений с реальными и виртуальными таблицами, а также вложенными запросами. Оптимальный случай – использовать только основную таблицу.
Вместе с тем для эффективного использования запросов стоит ознакомиться с требованиями по разработке оптимальных запросов.
Динамический список 1С предназначен для вывода на форму любых данных в произвольном виде. Эти данные могут быть представлены в виде списка, таблицы или дерева. Динамический список позволяет делать сортировку выводимых данных, отбор, группировку, условное оформление и т.д. Причём, отбор, группировку и прочее может делать как разработчик, так и пользователь.
Динамический список 1С можно создать в качестве реквизита управляемой формы. Для этого достаточно, типу реквизита присвоить значение ДинамическийСписок.
В моем примере динамический список создан на основной форме обработки.
Для того, чтобы динамический список выводил какие-то данные, нам следует или указать основную таблицу в свойствах динамического списка, или написать произвольный запрос на языке запросов 1С.
Динамическому списку можно назначить основную таблицу. Основная таблица – это произвольный объект метаданных (документ, справочник, регистр значения и т.д.), данные которого должны отобразиться в динамическом списке.
Например, в качестве основной таблицы выберем справочник Номенклатура.
И поместим динамический список на форму в виде таблицы, не забыв добавить колонки при размещении.
Если мы сейчас откроем обработку в пользовательском режиме 1С: Предприятия, то на основной форме обработки будет номенклатура в виде иерархического списка.
Можно сделать отображение списка в виде дерева. Для этого можно изменить режим просмотра таблицы на форме в пользовательском режиме.
Либо, поменять значение свойства Отображение таблицы формы, в которой был размещен динамический список.
После этого, динамический список на форме будет в виде дерева.
Произвольный запрос динамического списка 1С
Помимо использования основной таблицы, можно также динамический список сделать на основании запроса. Причем, можно взять за основу основную таблицу. Для примера, выведем вместе с номенклатурой цены, которые хранятся в периодическом регистре сведений Цены номенклатуры. Если мы в свойстве Произвольный запрос динамического списка установим флаг, при уже выбранной основной таблице, то у нас основная таблица будет взята за основу при формировании запроса.
Чтобы посмотреть на запрос, следует нажать на гиперссылку Открыть свойства НастройкаСписка.
В случае произвольного запроса мы можем изменить набор данных, который должен отображаться в динамическом списке. Но в этом случае все равно рекомендуется указывать основную таблицу, необходимо это делать для того, чтобы платформа могла определить, какая информация в этом динамическом списке главная, а какая второстепенная, и исходя из этого настроить стандартные команды. В том случае, если у Вас несколько таблиц и они связаны каким-то соединением, то все равно рекомендуется всегда указывать основную таблицу, потому что в противном случае производительность основного списка будет желать лучшего.
Свяжем справочник Номенклатура с виртуальной таблицей срез последних регистра сведений Цены номенклатуры.
Для этого, вызовем конструктор запроса из окна динамического списка, и добавим в список таблиц запроса виртуальную таблицу СрезПоследних. У виртуальной таблицы выберем ресурс Цена, который поместим в список полей, применив к этому полю функцию ЕстьNULL.
Свяжем левым соединением таблицу номенклатуры с виртуальной таблицей СрезПоследних регистра сведений.
И исправим имя поля Цена.
Наш запрос готов.
Обратите внимание на свойства «Динамическое считывание данных», которое есть и в свойствах динамического списка, когда указана основная таблица, и в том случае, когда указан произвольный запрос . Если это свойство установлено, то считывание данных происходит порциями, т.е. выбираются только те данные, которые необходимы для отображения на экране. В целях улучшения производительности, лучше всегда это свойство устанавливать.
Поскольку, мы переделывали существующий динамический список, то поле цена в таблице формы не отобразилось. Добавим это поле.
После такой доработки динамического списка, на в таблице на форме будут отображаться цены у номенклатуры.
Очень подробно работа с динамическими списками дается в моей книге «Основы разработки в 1С: Такси».
В этой книге вы научитесь:
- Настраивать динамические списки;
- Работать с поиском в динамическом списке;
- Программировать динамические списки (программная установка параметров, отборов, группировок, сортировок и условного оформления).
У вас, как у читателя блога, есть скидка 15 % по промо-коду: 48PVXHeYu
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Если Вы всё еще «плаваете» в конструкциях языка запросов, и у Вас вызывают трудности даже самые простые запросы, то рекомендую вам мой курс «Запросы в 1С от новичка до профи». Где эти и многие другие вопросы рассматриваются более подробно.
В чем особенность этого курса:
• Курс рассчитан на тех, кто не знаком с языком запросов в 1С;
• Учебный материал грамотно скомпонован и прост в освоении;
• Несколько десятков уроков;
• Полезные практические примеры;
• Все уроки изложены понятным и простым языком
Для моих читателей, купон на скидку 25%: hrW0rl9Nnx
Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:
Читайте также: