Отбор в 1С: как оставить в списке только нужные строки
Содержание
Частая ошибка: пользователь ставит отбор в списке, закрывает окно и через час думает, что документы пропали. Отбор не удаляет ничего. Он скрывает строки, которые не подходят под условие. Чтобы данные вернулись, достаточно снять отбор. Любая фильтрация данных в 1С работает по этому принципу, будь то справочник, журнал документов , отчёт или запрос на встроенном языке.
Способов отфильтровать данные несколько, и выбирать нужно по задаче. Для разового поиска хватит строки быстрого поиска. Для повторяющейся работы удобнее сохранённый отбор. Для отчётов настраивают условия в самом отчёте. Разработчик пишет условие прямо в запросе. Ниже все способы по порядку, от простого к сложному.
С чего начать: поиск и быстрый отбор
В любом списке управляемого интерфейса над таблицей есть строка поиска. Вводите часть названия, номера или контрагента, нажимаете Enter, и список сокращается до подходящих строк. Поиск ищет по тем колонкам, которые видны в списке, и по подстроке, а не только по началу слова.
Если нужно искать не по всем колонкам, а по одной, установите курсор в ячейку с нужным значением и вызовите отбор по текущему значению. Он находится в меню «Ещё» списка. Например, встали на контрагента «Ромашка» в журнале реализаций, применили отбор, и остались только его документы.
Что умеет быстрый отбор:
- 🔎 оставляет строки, где значение колонки совпадает с выбранным;
- 🔎 накапливается: можно применить его по нескольким колонкам подряд;
- 🔎 показывается над списком в виде строки условий, откуда его снимают крестиком.
Если список «пустой», а вы уверены, что данные есть, посмотрите над таблицей. Скорее всего, там остался чужой отбор, поставленный вчера. В типовых конфигурациях он иногда запоминается между сеансами.
Для журналов документов есть ещё один быстрый фильтр: период. Он задаётся кнопкой выбора периода над списком. Пока выбран месяц, документы другого месяца в списке не появятся, даже если отбора по другим полям нет.
Расширенный отбор: условия, группы, «И» и «ИЛИ»
Когда одного значения мало, открывайте настройку списка: «Ещё → Настроить список». На закладке отбора добавляются поля и условия сравнения. Набор условий одинаков почти везде:
| Условие | Для чего |
|---|---|
| Равно / Не равно | точное значение: организация, склад, вид операции |
| В списке / Не в списке | несколько допустимых значений сразу |
| В группе / Не в группе | элементы выбранной группы справочника |
| Содержит / Не содержит | часть строки в наименовании или комментарии |
| Начинается с | коды и номера с общим префиксом |
| Больше / Меньше / Между | суммы и даты |
| Заполнено / Не заполнено | поиск документов без контрагента или договора |
Условия по умолчанию соединяются через «И»: строка должна подходить под все. Чтобы получить «ИЛИ», добавляют группу условий и меняют её тип. Например, «сумма больше 100 000 ИЛИ комментарий содержит “срочно”» собирается в группе типа «ИЛИ», а сама группа вкладывается в общий отбор.
У каждого условия есть флажок использования. Его можно снять, не удаляя условие: удобно, когда один и тот же отбор нужен то включённым, то выключенным.
Отбор в списке привязан к вашему пользователю и форме. Коллеги его не увидят, а при очистке настроек пользователя он пропадёт. Если отбор нужен всем, делайте отдельный отчёт или быстрый фильтр на уровне конфигурации, а не надейтесь на личные настройки.
Фильтрация в отчётах: настройки и параметры
В отчётах на системе компоновки данных отбор находится в настройках. Нажмите «Показать настройки» или «Настройки» на панели отчёта. В простом виде видны основные поля: период, организация, иногда несколько условий. В расширенном виде открываются все возможности: отбор, группировки, выбранные поля, порядок, условное оформление.
Порядок действий:
- Откройте отчёт и нажмите кнопку настроек.
- Переключитесь в расширенный вид, если нужного поля нет.
- На закладке отбора добавьте поле, выберите условие и значение.
- Сформируйте отчёт заново: без этого отбор не применится.
Здесь важно различать отбор и параметр. Параметр, например «Период» или «Организация», подставляется внутрь запроса отчёта и меняет саму выборку. Отбор накладывается на уже готовый набор данных. Результат часто совпадает, но параметр работает быстрее: база читает меньше строк, а не фильтрует лишнее потом.
Если у параметра есть флажок использования, снимите его, и значение не будет учитываться вовсе. Это частая причина «пустых» отчётов: параметр включён, а значение забыто с прошлого раза.
Сохраните удачную настройку через «Ещё → Сохранить вариант отчёта», чтобы не собирать её заново. Для рабочих отчётов лучше завести отдельный вариант с понятным названием, чем править типовой.
Отбор по полю, которого нет среди выбранных, работает не во всех отчётах: часть из них фиксирует состав доступных полей на этапе разработки. Если нужного поля нет в списке, значит, автор отчёта его не открыл.
Условия в запросах: примеры для разработчика
На встроенном языке отбор строится в тексте запроса. Условие после слова ГДЕ отсекает строки сразу при выборке из базы, поэтому такой способ самый быстрый.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| Номенклатура.Наименование ПОДОБНО &Шаблон
| И НЕ Номенклатура.ПометкаУдаления";
Запрос.УстановитьПараметр("Шаблон", "%кабель%");
Выборка = Запрос.Выполнить().Выбрать();
Что стоит знать:
- ⚙️ значения передают через параметры, а не склеивают в строку запроса: так нет ошибок с кавычками и датами;
- ⚙️
ПОДОБНОпонимает%как любое число символов и_как один символ; - ⚙️ для списка значений используют
В (&Список), а сам список передают массивом или таблицей значений; - ⚙️
В ИЕРАРХИИ (&Группа)вернёт выбранную группу и все вложенные; - ⚙️ условие по виртуальной таблице, например остатков, лучше передавать в параметры таблицы, а не в
ГДЕпосле неё.
Последний пункт даёт заметную разницу. Если отбор по складу стоит в параметрах виртуальной таблицы остатков, система читает только нужный склад. Если поставить его в ГДЕ внешнего запроса, она сначала посчитает остатки по всем складам.
Если фильтруете коллекцию уже в памяти, например таблицу значений, используйте НайтиСтроки со структурой отбора:
Отбор = Новый Структура("Склад, Статус", Склад, "Принят");
НайденныеСтроки = ТаблицаТоваров.НайтиСтроки(Отбор);
Метод находит только точные совпадения. Для условий «больше» или «содержит» придётся пройти по таблице циклом либо выгрузить её во временную таблицу запроса.
Справочники: иерархия, группы и реквизиты
В иерархическом справочнике отбор ведёт себя неочевидно. Когда вы встаёте в группу и ищете элемент, система по умолчанию показывает содержимое только этой группы. Поиск по строке при этом может идти и по вложенным уровням, если включён режим просмотра списком, а не деревом. Если нужного элемента нет в выдаче, переключите режим просмотра: иерархический список, дерево или обычный список.
Для работы с группами:
- 📁 условие «В группе» берёт элементы выбранной группы, а при необходимости и вложенных;
- 📁 для отбора только по самим группам или только по элементам есть поле «Это группа»;
- 📁 отбор по группе с вложенными уровнями в запросе делается через
В ИЕРАРХИИ.
Дополнительные реквизиты и сведения, если они подключены в конфигурации, тоже доступны для отбора. В настройке списка они появляются в перечне полей отдельным блоком. Если нужного поля там нет, проверьте, что реквизит добавлен именно для этого вида объектов, и что у пользователя есть право его видеть.
Отбор по подчинённым данным, например «контрагенты с договорами в валюте», в простой настройке списка не собрать. Для таких вопросов делают отчёт или запрос с соединением таблиц.
Типичные промахи при фильтрации
Самые частые причины, по которым отбор «не работает »:
- Остался старый отбор. Проверьте строку условий над списком и признак периода.
- Условие «Равно» вместо «Содержит». Наименование с лишним пробелом или другой регистр точное сравнение не пройдёт.
- Ссылка на элемент-дубль. В списке три «Ромашки», отбор поставлен по одной, а документы оформлены на другую.
- Пустое значение считается значением. Отбор «Равно» с незаполненным полем ищет строки с пустым значением, а не отключает условие.
- Параметр отчёта не включён. Значение заполнено, но флажок использования снят.
- Отчёт не переформирован. Настройку изменили, а результат остался прежним.
Для запросов отдельная ловушка: сравнение с NULL. Условие Поле = NULL никогда не выполняется. Проверяют через Поле ЕСТЬ NULL либо заменяют значение функцией ЕСТЬNULL. Так же осторожно сравнивайте даты: конец периода без времени отсекает документы, оформленные в последний день после полуночи.
Не меняйте отбор в динамическом списке, который используется в рабочей базе, через обработки без проверки на копии. Ошибка в условии может скрыть нужные записи у всех пользователей сразу.
Расширения и внешние обработки
Если штатных возможностей не хватает, есть два пути, не затрагивающих типовую конфигурацию .
Внешние отчёты и обработки. Подключаются без изменения конфигурации. В типовых решениях на базе библиотеки стандартных подсистем их регистрируют в разделе администрирования, в блоке печатных форм, отчётов и обработок. Там же назначают, кому и в каких списках они доступны. Это самый быстрый способ получить «свой» отчёт с нужным отбором.
Расширения конфигурации
. Появились в версии платформы 8.3.6. Расширение может добавить в список новое поле для отбора, изменить запрос динамического списка или добавить готовый быстрый фильтр на форму. Загружается файл .cfe, после чего расширение нужно применить к базе. При обновлении типовой конфигурации расширение остаётся на месте, поэтому такой путь предпочтительнее правки самой конфигурации.
Оба способа требуют аккуратности:
- проверяйте их на копии базы;
- следите, чтобы запрос не читал всю таблицу ради одного условия: на больших объёмах это заметно замедляет открытие списка;
- храните исходники и описание, чтобы после смены разработчика не гадать, что делает обработка.
Для пользователя без программирования практичнее всего первые три способа: быстрый отбор, настройка списка и вариант отчёта. Остальное нужно, когда задача повторяется ежедневно и стандартных условий не хватает.
Как выбрать способ под задачу
Прежде чем настраивать сложный отбор, ответьте себе на три вопроса. Нужен ли результат один раз или каждый день? Нужен ли он только вам или всем сотрудникам? Достаточно ли данных одного списка, или придётся соединять несколько таблиц?
- 🧭 Разово и только вам: строка поиска или отбор по значению в текущей колонке.
- 🧭 Регулярно и только вам: настроенный список или сохранённый вариант отчёта.
- 🧭 Для всех сотрудников: общий вариант отчёта, внешний отчёт или доработка формы в расширении.
- 🧭 Данные из нескольких таблиц сразу: отчёт на запросе, где соединения и условия описаны явно.
Простое правило экономит время: чем раньше условие применяется, тем быстрее работает выборка. Параметр отчёта быстрее отбора, условие в запросе быстрее фильтра по готовой таблице, а фильтр по готовой таблице быстрее ручного перебора строк в цикле. Если список из сотен тысяч строк открывается медленно, начинайте оптимизацию с поиска условия, которое применяется слишком поздно.
И последнее. Перед массовыми действиями над отобранными строками, будь то пометка на удаление или групповое изменение реквизитов, пересчитайте, сколько строк попало в выборку. Число внизу списка или в отчёте сразу показывает, что отбор захватил лишнее.