Поиск нужной позиции в документе 1С 8.3, где сотни строк

· 10 мин

Содержание

Чтобы найти строку в табличной части 1С 8.3, встаньте в нужную колонку таблицы и нажмите Ctrl+F: откроется окно поиска, где задаётся значение и способ сравнения. Отменить результат поиска — Ctrl+Q. Если строк сотни, а искать нужно по нескольким условиям сразу, выручают сортировка, вывод списка в табличный документ и, для разработчика, методы НайтиСтроки() и ОтборСтрок.

Поиск в табличной части — механизм платформы, а не конкретной конфигурации. Поэтому всё ниже одинаково работает в Бухгалтерии 3.0, ЗУП 3.1, УТ 11 и других решениях на управляемых формах с интерфейсом «Такси». Отличаются только имена табличных частей: «Товары», «Услуги», «Начисления» и т. д.

Поиск строки в табличной части через Ctrl+F

Это самый быстрый способ, и о нём часто забывают из-за одной детали: поиск идёт по той колонке, где сейчас стоит курсор. Встали в колонку «Количество», а ищете номенклатуру — ничего не найдётся.

Порядок действий:

  1. Откройте документ и щёлкните по любой ячейке нужной колонки, например «Номенклатура».
  2. Нажмите Ctrl+F или выберите в меню Ещё над таблицей команду поиска.
  3. В окне поиска проверьте поле «Где искать» — там должна быть нужная колонка. Если нет, выберите её из списка.
  4. Введите фрагмент текста в поле «Что искать».
  5. Выберите способ сравнения: по части строки, по началу строки или по точному совпадению.
  6. Нажмите «Найти».

В зависимости от версии платформы результат выглядит по-разному. В одних релизах курсор просто переходит к первой подходящей строке. В других таблица временно показывает только найденные строки, а над ней появляется признак активного поиска. В обоих случаях Ctrl+Q возвращает полный список.

Ограничения обычного поиска

  • 🔍 Ищется представление значения — то, что видно на экране. Для ссылки это наименование элемента, а не код и не артикул.
  • 📏 Одно условие за раз. «Номенклатура содержит «болт» и количество больше 10» стандартным окном не задать.
  • 🔢 Числа сравниваются как текст. Поиск «1 500» по колонке «Сумма» может не найти строку, где отображается «1 500,00», если выбрано точное совпадение.
  • 🙈 Скрытые колонки в поиск не попадают. Если артикул не выведен в таблицу, по нему окно не найдёт.

Ищете по артикулу или коду, а колонки нет? Выведите её через Ещё → Изменить форму, отметьте нужное поле галочкой, и оно появится в таблице. После этого поиск по нему заработает.

Сортировка и отбор строк табличной части вручную

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

Сортировка по колонке

В меню Ещё таблицы есть команды сортировки по возрастанию и по убыванию. Они упорядочивают строки по текущей колонке. После сортировки по номенклатуре все строки с одним товаром стоят рядом — это быстрый способ найти дубли позиций.

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

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

Команда Ещё → Вывести список... выгружает содержимое таблицы в отдельное окно. В настройках вывода можно оставить только нужные колонки. Дальше с этим окном работают как с обычной таблицей:

  1. Нажмите Ctrl+F — поиск здесь ищет по всем ячейкам, а не по одной колонке.
  2. Сохраните результат в Excel через меню сохранения, если нужен автофильтр по нескольким колонкам.
  3. Найдите номер строки (колонка «N») и вернитесь в документ.

Этот способ особенно удобен, когда в документе 300–500 строк и нужно проверить сразу несколько условий.

Подсветка строк условным оформлением

Иногда нужно не найти одну строку, а увидеть все проблемные сразу: нулевую цену, пустой счёт учёта, отрицательное количество. Для этого служит условное оформление — правило «если поле равно X, раскрась строку».

Для пользователя в списках документов и справочников это делается через Ещё → Настроить список → Условное оформление. Для табличной части внутри документа такой настройки в меню нет. Её добавляет разработчик — в форме или через расширение, не трогая типовую конфигурацию .

Пример: подсветить красным строки «Товаров», где цена равна нулю. Код ставится в ПриСозданииНаСервере формы документа (или в расширении этой формы):

&НаСервере
Процедура ПодсветитьНулевыеЦены()

	Элемент = УсловноеОформление.Элементы.Добавить();

	Поле = Элемент.Поля.Элементы.Добавить();
	Поле.Поле = Новый ПолеКомпоновкиДанных("Товары");

	Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	Отбор.ЛевоеЗначение  = Новый ПолеКомпоновкиДанных("Объект.Товары.Цена");
	Отбор.ВидСравнения   = ВидСравненияКомпоновкиДанных.Равно;
	Отбор.ПравоеЗначение = 0;

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Красный);

КонецПроцедуры

Здесь "Товары" — имя элемента формы (таблицы), а Объект.Товары.Цена — путь к данным. Если элемент таблицы на форме называется иначе, подставьте его имя: посмотреть можно в Конфигураторе, в дереве элементов формы.

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

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

В открытой форме: НайтиСтроки и переход к строке

Коллекция табличной части в форме (ДанныеФормыКоллекция) поддерживает метод НайтиСтроки(). Он принимает структуру условий и возвращает массив подходящих строк. Чтобы поставить курсор на найденную строку, нужен её идентификатор:

&НаКлиенте
Процедура ПерейтиКНоменклатуре(Номенклатура)

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

	Если Найденные.Количество() = 0 Тогда
		Сообщить("Позиция в документе не найдена");
		Возврат;
	КонецЕсли;

	Элементы.Товары.ТекущаяСтрока = Найденные[0].ПолучитьИдентификатор();
	Сообщить(СтрШаблон("Найдено строк: %1, первая — N %2",
		Найденные.Количество(),
		Формат(Найденные[0].НомерСтроки, "ЧГ=0")));

КонецПроцедуры

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

Отбор строк в таблице формы

Если нужно показать пользователю только подходящие строки, используйте свойство ОтборСтрок элемента таблицы:

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

Снять отбор — присвоить Неопределено. Строки при этом не удаляются, они просто скрыты. Документ записывается целиком.

В объекте на сервере: Найти

У табличной части объекта (ДокументОбъект.Товары) есть метод Найти(Значение, Колонки). Он возвращает первую строку, где значение совпало в одной из перечисленных колонок, или Неопределено:

Строка = ДокументОбъект.Товары.Найти(Номенклатура, "Номенклатура");
Если Строка <> Неопределено Тогда
	Сообщить("Строка N " + Формат(Строка.НомерСтроки, "ЧГ=0"));
КонецЕсли;

Для нескольких условий — тот же НайтиСтроки() со структурой.

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

Когда вопрос звучит как «в каких документах встречается этот товар», перебирать документы в цикле нельзя — это долго. Табличная часть доступна в запросе как отдельная таблица:

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

Запрос возвращает документ и номер строки. Номер затем ищут в документе через Ctrl+F по колонке «N».

Горячие клавиши для работы с таблицей

СочетаниеЧто делает
Ctrl+FПоиск по текущей колонке
Alt+FРасширенный поиск в списках
Ctrl+QОтменить поиск, вернуть все строки
Ctrl+Home / Ctrl+EndПерейти к первой / последней строке
PageUp / PageDownЛистать таблицу страницами
F2Начать редактирование ячейки
InsДобавить строку
F9Скопировать текущую строку

Полный список сочетаний для своей версии платформы откройте через меню Справка в главном окне — там есть раздел про сочетания клавиш.

В длинной табличной части после Ctrl+End вы сразу видите номер последней строки — это быстрый способ проверить, сколько позиций загрузилось из файла, не листая документ.

Поиск в динамических списках и больших таблицах

Журналы документов, списки справочников и регистров — это динамические списки. Поиск в них устроен иначе, чем в табличной части документа.

  • 🔎 Строка поиска в правом верхнем углу списка ищет сразу по всем видимым колонкам. Достаточно начать вводить текст.
  • 🧭 Расширенный поиск (Alt+F) позволяет выбрать колонку и способ сравнения, как в окне Ctrl+F табличной части.
  • 🗂 Отбор через Ещё → Настроить список → Отбор задаёт несколько условий сразу и сохраняется в настройках пользователя.
  • 📚 Полнотекстовый поиск ищет слово во всех реквизитах объектов. Он включается администратором и работает, только когда индекс обновлён.

Ключевое ограничение: строка поиска в журнале документов ищет по колонкам журнала, а не по строкам табличных частей. Найти в списке реализаций «все документы, где есть товар Болт М8» через строку поиска не получится. Для этого нужен отчёт или запрос.

Без программирования: универсальный отчёт

В Бухгалтерии 3.0 есть Отчеты → Универсальный отчет. В нём выбирают вид объекта «Документ», конкретный документ и его табличную часть. Дальше в настройках задают отбор по номенклатуре и период. Отчёт выводит документы и строки, где встречается позиция. Это пользовательская замена запросу из предыдущего раздела.

Регистр, пробелы и спецсимволы при поиске

Частая жалоба: «строка точно есть, а поиск её не находит». Причин несколько, и почти все — в символах, которых не видно.

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

Регистр в коде и запросе

Окно поиска платформы регистр не учитывает. Встроенный язык — учитывает: выражение "Болт" = "болт" вернёт Ложь. То же с функцией СтрНайти(). Для поиска без учёта регистра приводите обе строки к одному виду:

Если СтрНайти(НРег(Строка.Содержание), НРег(ИскомыйТекст)) > 0 Тогда
	// строка подходит
КонецЕсли;

В запросах сравнение строк, как правило, регистр не учитывает, но поведение зависит от СУБД и её настроек сортировки. Надёжнее не полагаться на это и сравнивать данные, приведённые к одному регистру.

Спецсимволы в ПОДОБНО

В операторе ПОДОБНО символ % означает любую последовательность, _ — любой один символ, [...] — один символ из набора. Чтобы найти текст, где эти символы есть буквально, назначьте спецсимвол:

ГДЕ
	Товары.Содержание ПОДОБНО "%10~%%" СПЕЦСИМВОЛ "~"

Такой шаблон найдёт строки, где встречается «10%».

Неразрывный пробел

Если данные пришли из Excel или с сайта, в них часто попадает неразрывный пробел. На экране он не отличается от обычного. Перед сравнением в коде заменяйте его: СтрЗаменить(Текст, Символы.НПП, " "), а затем обрезайте края через СокрЛП().

Своя команда поиска через расширение

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

Что обычно делает такая команда:

  1. Спрашивает у пользователя значение — например, через выбор из справочника номенклатуры.
  2. Вызывает НайтиСтроки() по табличной части.
  3. Ставит курсор на первую найденную строку и сообщает, сколько совпадений.
  4. По повторному нажатию переходит к следующему совпадению.

Последний пункт решается просто: храните в реквизите формы индекс текущего совпадения и при каждом нажатии увеличивайте его по кругу. Код перехода к строке — тот же, что в примере с НайтиСтроки() выше, только вместо Найденные[0] берётся элемент с сохранённым индексом.

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

Перед тем как писать свою команду поиска
Выполнено: 0 / 5

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

Почему Ctrl+F в документе ничего не находит?
Чаще всего курсор стоит не в той колонке. Поиск идёт только по колонке, указанной в поле «Где искать». Проверьте его в окне поиска.
Можно ли найти строку по номеру?
Да. Встаньте в колонку «N» и нажмите Ctrl+F, введите номер и выберите точное совпадение. Для коротких документов быстрее пролистать через PageDown.
Как найти все документы, где встречается товар?
Строка поиска журнала здесь не поможет: она не смотрит внутрь табличных частей. Используйте универсальный отчёт с отбором по номенклатуре или запрос к табличной части документа.
Сохранится ли отбор строк после закрытия документа?
Нет. Результат поиска и ОтборСтрок действуют, пока форма открыта. При повторном открытии таблица снова показывает все строки.
Удаляются ли скрытые поиском строки при записи?
Нет. Поиск и отбор только скрывают строки на экране. В базу записывается вся табличная часть целиком.