Где и чем искать нужные строки в 1С: от списка документов до кода и запросов

· 9 мин

Содержание

Чтобы найти строку в таблице 1С, встаньте в список и начните печатать в строке поиска справа вверху, а для точного условия нажмите Alt+F — откроется расширенный поиск по выбранной колонке. В отчётах и печатных формах работает Ctrl+F, в коде — методы Найти() и НайтиСтроки(), в базе целиком — запрос с условием ПОДОБНО.

Частое заблуждение — что «поиск в 1С ничего не находит». Обычно находит, но ищет не там: в видимых колонках вместо реквизита, по началу строки вместо подстроки или в одной базе вместо архивной. Всё это платформенные механизмы 8.3 с интерфейсом «Такси», поэтому они одинаково работают в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других типовых.

Поиск строк в списках и табличных частях: что даёт интерфейс

Начните с того, что есть у любого пользователя без прав администратора. Это закрывает большую часть задач.

Строка поиска в списке

В каждом списке (документы, справочники, журналы) есть поле поиска в командной панели.

  1. Откройте список, например Продажи → Реализация (акты, накладные, УПД).
  2. Щёлкните в поле поиска или нажмите Ctrl+F — курсор встанет туда.
  3. Введите фрагмент: номер, часть наименования контрагента, сумму.
  4. Нажмите Enter. Список сократится до подходящих строк.

Сбросить поиск — крестик в поле или Ctrl+Q.

Строка поиска ищет по колонкам, которые выведены в список. Если нужного реквизита в списке нет, добавьте колонку через Ещё → Изменить форму или воспользуйтесь расширенным поиском.

Расширенный поиск по колонке

Alt+F или Ещё → Расширенный поиск открывает окно с тремя параметрами:

ПараметрЧто выбрать
Где искатьКолонку списка: Контрагент, Сумма, Комментарий
Что искатьЗначение или фрагмент текста
Как искатьПо началу строки, по части строки или точное совпадение

Режим «по части строки» найдёт ООО Ромашка-Юг по слову Юг. «По началу строки» — нет. Это главная причина, почему человек видит пустой список.

Есть быстрый вариант: встаньте на ячейку с нужным значением и выберите в меню Ещё команду поиска по текущему значению. 1С оставит только строки с таким же контрагентом, складом или статусом.

Табличная часть документа

В документе на 300 строк товаров листать бессмысленно. Встаньте в табличную часть и нажмите Ctrl+F (или найдите команду поиска в меню Ещё над таблицей). Откроется окно, где указывают колонку, текст и режим совпадения. F3 переходит к следующему совпадению.

Отбор вместо поиска

Поиск показывает совпадения, отбор задаёт постоянное условие. Если каждый день смотрите документы одного склада или одного ответственного, откройте в меню Ещё настройку списка и задайте условие на вкладке отбора. Условия сохраняются в настройках формы и переживают перезапуск.

Как искать строки в отчётах на СКД

Отчёт в 1С — это табличный документ. Обычный поиск по списку тут не работает , зато есть два своих инструмента.

Поиск по тексту готового отчёта

После формирования встаньте в поле отчёта и нажмите Ctrl+F. Введите фрагмент: номер счёта, ИНН, фамилию. Курсор прыгнет на первую ячейку с совпадением, F3 — к следующей. Так же ищут по печатной форме и по выгрузке из Excel, открытой в 1С.

Поиск идёт по тексту ячеек. Свёрнутые группировки он не раскрывает: сначала разверните уровни кнопками 1, 2, 3 слева над отчётом или через контекстное меню группировки.

Отбор в настройках отчёта

Когда нужна не одна строка, а все строки по условию, правильнее поставить отбор:

  1. Нажмите Настройки в форме отчёта.
  2. Переключитесь на расширенный вид настроек, если открылся простой.
  3. На вкладке отборов добавьте поле: Контрагент, Номенклатура, Субконто.
  4. Выберите вид сравнения и значение.
  5. Нажмите Закрыть и сформировать.

Какой вид сравнения выбрать:

Вид сравненияКогда нужен
РавноОдин конкретный контрагент или товар
В спискеНесколько значений, набранных вручную
В группеВсе элементы папки справочника
СодержитФрагмент текста в строковом поле: комментарий, артикул
Заполнено / Не заполненоНайти строки, где реквизит пустой

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

Отборы в СКД работают на этапе запроса, поэтому отчёт с отбором формируется быстрее, чем полный отчёт с последующим поиском по тексту.

Программный поиск строк в коде 1С

Для разработчика таблица — это коллекция: таблица значений, табличная часть объекта, дерево значений или данные формы. У каждой свои методы поиска.

Найти() — первая подходящая строка

Строка = ТаблицаТоваров.Найти(Номенклатура, "Номенклатура");
Если Строка = Неопределено Тогда
    // строки с таким товаром нет
Иначе
    Строка.Количество = Строка.Количество + 1;
КонецЕсли;

Второй параметр — список колонок через запятую. Без него поиск идёт по всем колонкам, что медленнее и может найти значение не там.

НайтиСтроки() — все строки по условию

Отбор = Новый Структура("Номенклатура, Склад", Номенклатура, Склад);
НайденныеСтроки = Объект.Товары.НайтиСтроки(Отбор);

Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл
    Сообщить(СтрШаблон("Строка %1: количество %2",
        СтрокаТЧ.НомерСтроки, СтрокаТЧ.Количество));
КонецЦикла;

Метод возвращает массив ссылок на строки, а не копии. Изменения в найденной строке сразу попадают в таблицу. Если массив пуст — совпадений нет, проверка на Неопределено тут не нужна.

Поиск по подстроке

Ни Найти(), ни НайтиСтроки() не ищут фрагмент текста — только точное значение. Для подстроки нужен цикл:

Фрагмент = ВРег("кабель");
Результат = Новый Массив;

Для Каждого СтрокаТЗ Из ТаблицаТоваров Цикл
    Если СтрНайти(ВРег(СтрокаТЗ.Наименование), Фрагмент) > 0 Тогда
        Результат.Добавить(СтрокаТЗ);
    КонецЕсли;
КонецЦикла;

ВРег() с обеих сторон снимает зависимость от регистра.

Что выбрать для своей коллекции

КоллекцияМетоды поискаОсобенность
ТаблицаЗначенийНайти(), НайтиСтроки()Можно ускорить индексом
Табличная часть объектаНайти(), НайтиСтроки()Есть колонка НомерСтроки
ДеревоЗначенийСтроки.Найти(), Строки.НайтиСтроки()Третий параметр Истина ищет во вложенных уровнях
Данные формы (таблица на форме)НайтиСтроки(), НайтиПоИдентификатору()Найденную строку делают текущей через её идентификатор
Табличный документНайтиТекст()Возвращает область с найденным текстом

Чтобы выделить найденную строку на форме, передайте её идентификатор в свойство ТекущаяСтрока элемента таблицы:

Найденные = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Номенклатура));
Если Найденные.Количество() > 0 Тогда
    Элементы.Товары.ТекущаяСтрока = Найденные[0].ПолучитьИдентификатор();
КонецЕсли;

Консоль запросов: найти строки во всей базе

Интерфейс ищет в одном списке. Когда надо понять, в каких документах за год встречался товар или где в комментарии упомянут номер договора, нужен запрос.

Как открыть консоль

Консоль запросов — внешняя обработка. Её открывают через главное меню: ☰ → Файл → Открыть, затем выбирают файл .epf. У пользователя должно быть право на интерактивное открытие внешних обработок; обычно оно есть у роли администратора. В Конфигураторе текст запроса удобно собрать конструктором, а выполнить — в консоли.

Поиск по фрагменту текста

ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Код,
    Номенклатура.Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО &Шаблон

Параметр Шаблон задайте как %кабель%. Знак % — любое число символов, _ — ровно один символ. Если в искомом тексте сами есть % или _, экранируйте их конструкцией СПЕЦСИМВОЛ.

Поиск строк табличной части по всем документам

ВЫБРАТЬ
    Товары.Ссылка КАК Документ,
    Товары.НомерСтроки,
    Товары.Количество,
    Товары.Сумма
ИЗ
    Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
    Товары.Номенклатура = &Номенклатура
    И Товары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
    И Товары.Ссылка.Проведен

Запрос сразу покажет документ и номер строки, где стоит товар. Двойной щелчок по документу в результате консоли обычно открывает его форму.

Строки неограниченной длины

Комментарии и многие текстовые реквизиты хранятся как строка неограниченной длины. Сравнивать такие поля напрямую запрос не даёт. Оберните поле:

ГДЕ
    ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(500)) ПОДОБНО "%договор 15%"

Поиск в исторических данных и архивных базах

Строка могла быть в базе, а потом исчезнуть: документ удалили, значение перезаписали, период свернули. Источников истории три.

  • 📜 Журнал регистрации. Администрирование → Обслуживание → Журнал регистрации. Поставьте отбор по периоду, пользователю и событию «Данные. Удаление» или «Данные. Изменение». В колонке данных видно, какой объект трогали.
  • 🗂 История изменений объектов. Если в общих настройках администрирования включено версионирование, у документа доступна история версий. Две версии можно сравнить и увидеть, какая строка табличной части пропала.
  • 💾 Резервная копия. Разверните выгрузку .dt в отдельную пустую информационную базу и ищите там теми же способами: строкой поиска, отбором, запросом.

Загружайте архивную выгрузку только в новую пустую базу. Загрузка .dt полностью заменяет данные базы, в которую её загружают, и рабочие данные пропадут.

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

Для периодических регистров сведений (цены, курсы, ставки) история лежит в самом регистре. Откройте его список и поставьте отбор по измерению — увидите все записи с датами, а не только последнюю.

Почему 1С не находит строку и как ускорить поиск

Начинайте с симптома: под каждым — первая проверка.

Диагностика: выберите симптом

Что ускоряет поиск в коде и запросах

  • ⚡ Индекс таблицы значений. ТаблицаТоваров.Индексы.Добавить("Номенклатура, Склад") — и НайтиСтроки() по этим колонкам работает без полного перебора. Окупается, когда поиск выполняется в цикле сотни раз.
  • 🏷 Индексирование реквизита. В Конфигураторе у реквизита есть свойство «Индексировать». Оно ускоряет отборы и запросы по точному значению, но увеличивает базу и замедляет запись. В типовой конфигурации такая правка снимает её с полной поддержки — лучше делать через расширение.
  • 🔍 Условие ПОДОБНО "%…" с процентом в начале индекс не использует. Где можно, ищите по началу строки: ПОДОБНО "Кабель%".
  • 📅 Период и организация в условии запроса сокращают объём перебора сильнее любых других оптимизаций.

Полнотекстовый поиск по базе

Если нужно найти слово сразу во всех справочниках и документах, включите полнотекстовый поиск в Администрирование → Общие настройки. После включения программа строит индекс. Пока индекс не обновлён, свежие документы в результаты не попадают — поэтому для него настраивают регламентное обновление.

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

Частые вопросы

Можно ли искать сразу по нескольким колонкам списка?
Строка поиска ищет по всем видимым колонкам одновременно. Для условия «контрагент И склад» используйте отбор: в нём можно задать несколько полей сразу.
Чем Найти() отличается от НайтиСтроки()?
Найти() возвращает первую строку с указанным значением или Неопределено. НайтиСтроки() принимает структуру условий и возвращает массив всех подходящих строк.
Как найти документы, в которых не заполнен реквизит?
В отборе списка или отчёта выберите поле и вид сравнения «Не заполнено». В запросе — условие на пустую ссылку или пустую строку для этого поля.
Можно ли сохранить результат поиска?
Отбор сохраняется в настройках списка или в варианте отчёта. Результат запроса в консоли можно выгрузить в табличный документ и сохранить в Excel.
Почему поиск в общей базе и в моей копии даёт разное число строк?
Скорее всего, у пользователей разные права и разные сохранённые отборы списка. Сбросьте настройки формы через Ещё → Установить стандартные настройки и сравните снова.