Где и чем искать нужные строки в 1С: от списка документов до кода и запросов
Содержание
Чтобы найти строку в таблице 1С, встаньте в список и начните печатать в строке поиска справа вверху, а для точного условия нажмите Alt+F — откроется расширенный поиск по выбранной колонке. В отчётах и печатных формах работает Ctrl+F, в коде — методы Найти() и НайтиСтроки(), в базе целиком — запрос с условием ПОДОБНО.
Частое заблуждение — что «поиск в 1С ничего не находит». Обычно находит, но ищет не там: в видимых колонках вместо реквизита, по началу строки вместо подстроки или в одной базе вместо архивной. Всё это платформенные механизмы 8.3 с интерфейсом «Такси», поэтому они одинаково работают в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других типовых.
Поиск строк в списках и табличных частях: что даёт интерфейс
Начните с того, что есть у любого пользователя без прав администратора. Это закрывает большую часть задач.
Строка поиска в списке
В каждом списке (документы, справочники, журналы) есть поле поиска в командной панели.
- Откройте список, например
Продажи → Реализация (акты, накладные, УПД). - Щёлкните в поле поиска или нажмите
Ctrl+F— курсор встанет туда. - Введите фрагмент: номер, часть наименования контрагента, сумму.
- Нажмите
Enter. Список сократится до подходящих строк.
Сбросить поиск — крестик в поле или Ctrl+Q.
Строка поиска ищет по колонкам, которые выведены в список. Если нужного реквизита в списке нет, добавьте колонку через Ещё → Изменить форму или воспользуйтесь расширенным поиском.
Расширенный поиск по колонке
Alt+F или Ещё → Расширенный поиск открывает окно с тремя параметрами:
| Параметр | Что выбрать |
|---|---|
| Где искать | Колонку списка: Контрагент, Сумма, Комментарий |
| Что искать | Значение или фрагмент текста |
| Как искать | По началу строки, по части строки или точное совпадение |
Режим «по части строки» найдёт ООО Ромашка-Юг по слову Юг. «По началу строки» — нет. Это главная причина, почему человек видит пустой список.
Есть быстрый вариант: встаньте на ячейку с нужным значением и выберите в меню Ещё команду поиска по текущему значению. 1С оставит только строки с таким же контрагентом, складом или статусом.
Табличная часть документа
В документе на 300 строк товаров листать бессмысленно. Встаньте в табличную часть и нажмите Ctrl+F (или найдите команду поиска в меню Ещё над таблицей). Откроется окно, где указывают колонку, текст и режим совпадения. F3 переходит к следующему совпадению.
Отбор вместо поиска
Поиск показывает совпадения, отбор задаёт постоянное условие. Если каждый день смотрите документы одного склада или одного ответственного, откройте в меню Ещё настройку списка и задайте условие на вкладке отбора. Условия сохраняются в настройках формы и переживают перезапуск.
Как искать строки в отчётах на СКД
Отчёт в 1С — это табличный документ. Обычный поиск по списку тут не работает , зато есть два своих инструмента.
Поиск по тексту готового отчёта
После формирования встаньте в поле отчёта и нажмите Ctrl+F. Введите фрагмент: номер счёта, ИНН, фамилию. Курсор прыгнет на первую ячейку с совпадением, F3 — к следующей. Так же ищут по печатной форме и по выгрузке из Excel, открытой в 1С.
Поиск идёт по тексту ячеек. Свёрнутые группировки он не раскрывает: сначала разверните уровни кнопками 1, 2, 3 слева над отчётом или через контекстное меню группировки.
Отбор в настройках отчёта
Когда нужна не одна строка, а все строки по условию, правильнее поставить отбор:
- Нажмите
Настройкив форме отчёта. - Переключитесь на расширенный вид настроек, если открылся простой.
- На вкладке отборов добавьте поле: Контрагент, Номенклатура, Субконто.
- Выберите вид сравнения и значение.
- Нажмите
Закрыть и сформировать.
Какой вид сравнения выбрать:
| Вид сравнения | Когда нужен |
|---|---|
| Равно | Один конкретный контрагент или товар |
| В списке | Несколько значений, набранных вручную |
| В группе | Все элементы папки справочника |
| Содержит | Фрагмент текста в строковом поле: комментарий, артикул |
| Заполнено / Не заполнено | Найти строки, где реквизит пустой |
Если строки нужно не скрыть, а подсветить, используйте вкладку условного оформления: задайте то же условие и цвет фона. Отчёт покажет всё, а нужные строки будут выделены.
Отборы в СКД работают на этапе запроса, поэтому отчёт с отбором формируется быстрее, чем полный отчёт с последующим поиском по тексту.
Программный поиск строк в коде 1С
Для разработчика таблица — это коллекция: таблица значений, табличная часть объекта, дерево значений или данные формы. У каждой свои методы поиска.
Найти() — первая подходящая строка
Строка = ТаблицаТоваров.Найти(Номенклатура, "Номенклатура");
Если Строка = Неопределено Тогда
// строки с таким товаром нет
Иначе
Строка.Количество = Строка.Количество + 1;
КонецЕсли;
Второй параметр — список колонок через запятую. Без него поиск идёт по всем колонкам, что медленнее и может найти значение не там.
НайтиСтроки() — все строки по условию
Отбор = Новый Структура("Номенклатура, Склад", Номенклатура, Склад);
НайденныеСтроки = Объект.Товары.НайтиСтроки(Отбор);
Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл
Сообщить(СтрШаблон("Строка %1: количество %2",
СтрокаТЧ.НомерСтроки, СтрокаТЧ.Количество));
КонецЦикла;
Метод возвращает массив ссылок на строки, а не копии. Изменения в найденной строке сразу попадают в таблицу. Если массив пуст — совпадений нет, проверка на Неопределено тут не нужна.
Поиск по подстроке
Ни Найти(), ни НайтиСтроки() не ищут фрагмент текста — только точное значение. Для подстроки нужен цикл:
Фрагмент = ВРег("кабель");
Результат = Новый Массив;
Для Каждого СтрокаТЗ Из ТаблицаТоваров Цикл
Если СтрНайти(ВРег(СтрокаТЗ.Наименование), Фрагмент) > 0 Тогда
Результат.Добавить(СтрокаТЗ);
КонецЕсли;
КонецЦикла;
ВРег() с обеих сторон снимает зависимость от регистра.
Что выбрать для своей коллекции
| Коллекция | Методы поиска | Особенность |
|---|---|---|
| ТаблицаЗначений | Найти(), НайтиСтроки() | Можно ускорить индексом |
| Табличная часть объекта | Найти(), НайтиСтроки() | Есть колонка НомерСтроки |
| ДеревоЗначений | Строки.Найти(), Строки.НайтиСтроки() | Третий параметр Истина ищет во вложенных уровнях |
| Данные формы (таблица на форме) | НайтиСтроки(), НайтиПоИдентификатору() | Найденную строку делают текущей через её идентификатор |
| Табличный документ | НайтиТекст() | Возвращает область с найденным текстом |
Чтобы выделить найденную строку на форме, передайте её идентификатор в свойство ТекущаяСтрока элемента таблицы:
Найденные = Объект.Товары.НайтиСтроки(Новый Структура("Номенклатура", Номенклатура));
Если Найденные.Количество() > 0 Тогда
Элементы.Товары.ТекущаяСтрока = Найденные[0].ПолучитьИдентификатор();
КонецЕсли;
Консоль запросов: найти строки во всей базе
Интерфейс ищет в одном списке. Когда надо понять, в каких документах за год встречался товар или где в комментарии упомянут номер договора, нужен запрос.
Как открыть консоль
Консоль запросов — внешняя обработка. Её открывают через главное меню: ☰ → Файл → Открыть, затем выбирают файл .epf. У пользователя должно быть право на интерактивное открытие внешних обработок; обычно оно есть у роли администратора. В Конфигураторе текст запроса удобно собрать конструктором, а выполнить — в консоли.
Поиск по фрагменту текста
ВЫБРАТЬ
Номенклатура.Ссылка,
Номенклатура.Код,
Номенклатура.Наименование
ИЗ
Справочник.Номенклатура КАК Номенклатура
ГДЕ
Номенклатура.Наименование ПОДОБНО &Шаблон
Параметр Шаблон задайте как %кабель%. Знак % — любое число символов, _ — ровно один символ. Если в искомом тексте сами есть % или _, экранируйте их конструкцией СПЕЦСИМВОЛ.
Поиск строк табличной части по всем документам
ВЫБРАТЬ
Товары.Ссылка КАК Документ,
Товары.НомерСтроки,
Товары.Количество,
Товары.Сумма
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Номенклатура = &Номенклатура
И Товары.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода
И Товары.Ссылка.Проведен
Запрос сразу покажет документ и номер строки, где стоит товар. Двойной щелчок по документу в результате консоли обычно открывает его форму.
Строки неограниченной длины
Комментарии и многие текстовые реквизиты хранятся как строка неограниченной длины. Сравнивать такие поля напрямую запрос не даёт. Оберните поле:
ГДЕ
ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(500)) ПОДОБНО "%договор 15%"
Поиск в исторических данных и архивных базах
Строка могла быть в базе, а потом исчезнуть: документ удалили, значение перезаписали, период свернули. Источников истории три.
- 📜 Журнал регистрации.
Администрирование → Обслуживание → Журнал регистрации. Поставьте отбор по периоду, пользователю и событию «Данные. Удаление» или «Данные. Изменение». В колонке данных видно, какой объект трогали. - 🗂 История изменений объектов. Если в общих настройках администрирования включено версионирование, у документа доступна история версий. Две версии можно сравнить и увидеть, какая строка табличной части пропала.
- 💾 Резервная копия. Разверните выгрузку
.dtв отдельную пустую информационную базу и ищите там теми же способами: строкой поиска, отбором, запросом.
Загружайте архивную выгрузку только в новую пустую базу. Загрузка .dt полностью заменяет данные базы, в которую её загружают, и рабочие данные пропадут.
Журнал регистрации хранит события столько, сколько задано в его настройках. Если событие старше срока хранения, остаётся только резервная копия.
Для периодических регистров сведений (цены, курсы, ставки) история лежит в самом регистре. Откройте его список и поставьте отбор по измерению — увидите все записи с датами, а не только последнюю.
Почему 1С не находит строку и как ускорить поиск
Начинайте с симптома: под каждым — первая проверка.
Что ускоряет поиск в коде и запросах
- ⚡ Индекс таблицы значений.
ТаблицаТоваров.Индексы.Добавить("Номенклатура, Склад")— иНайтиСтроки()по этим колонкам работает без полного перебора. Окупается, когда поиск выполняется в цикле сотни раз. - 🏷 Индексирование реквизита. В Конфигураторе у реквизита есть свойство «Индексировать». Оно ускоряет отборы и запросы по точному значению, но увеличивает базу и замедляет запись. В типовой конфигурации такая правка снимает её с полной поддержки — лучше делать через расширение.
- 🔍 Условие
ПОДОБНО "%…"с процентом в начале индекс не использует. Где можно, ищите по началу строки:ПОДОБНО "Кабель%". - 📅 Период и организация в условии запроса сокращают объём перебора сильнее любых других оптимизаций.
Полнотекстовый поиск по базе
Если нужно найти слово сразу во всех справочниках и документах, включите полнотекстовый поиск в Администрирование → Общие настройки. После включения программа строит индекс. Пока индекс не обновлён, свежие документы в результаты не попадают — поэтому для него настраивают регламентное обновление.
Первичное построение полнотекстового индекса на большой базе нагружает сервер. Запускайте его вечером или в выходной, когда пользователей мало.
Частые вопросы
Можно ли искать сразу по нескольким колонкам списка?
Чем Найти() отличается от НайтиСтроки()?
Найти() возвращает первую строку с указанным значением или Неопределено. НайтиСтроки() принимает структуру условий и возвращает массив всех подходящих строк.Как найти документы, в которых не заполнен реквизит?
Можно ли сохранить результат поиска?
Почему поиск в общей базе и в моей копии даёт разное число строк?
Ещё → Установить стандартные настройки и сравните снова.