Поиск строки в табличной части документа 1С: от Ctrl+F до кода
Содержание
В «Поступлении товаров» двести сорок строк, и среди них нужно найти одну позицию с неверной ценой. Листать глазами долго и ненадёжно. Быстрый путь такой: встать в нужную колонку, нажать Ctrl+F, ввести часть названия или артикул и нажать Enter. Курсор прыгнет на первую подходящую строку, а F3 перейдёт к следующей.
Это основа. Дальше есть ещё несколько приёмов: отбор в списках, выгрузка таблицы в Excel для сравнения, сортировка как способ сгруппировать одинаковое и поиск из кода. Какой выбрать, зависит от того, где лежат данные и сколько их.
Какой способ выбрать
Сначала определите, что у вас перед глазами: табличная часть открытого документа или список документов, справочников, регистров. Инструменты у них разные.
| Ситуация | Что использовать | Что получите |
|---|---|---|
| Нужна одна строка в документе | Поиск Ctrl+F в табличной части | Курсор встаёт на найденную строку |
| Нужны все строки с одним значением | Сортировка по колонке или выгрузка в Excel | Одинаковые значения идут подряд |
| Ищете документ или элемент в списке | Строка поиска и отбор списка | Список сужается до подходящих записей |
| Сравниваете две таблицы | Копирование через буфер обмена | Расхождения видны рядом |
| Нужно найти значение в обработке или отчёте | Метод НайтиСтроки и отладчик | Массив строк или одна строка в коде |
Поиск по колонке в табличной части
Поиск работает по той колонке, в которой стоит курсор. Это главное правило, о которое спотыкаются чаще всего: вы искали артикул, а курсор стоял в колонке «Количество», и 1С честно ничего не нашла.
Порядок действий:
- Щёлкните ячейку в колонке, где должно быть значение (например, «Номенклатура»).
- Нажмите
Ctrl+Fили найдите команду «Найти» в меню «Ещё» над табличной частью. - Введите искомый текст и нажмите «Найти».
- Для перехода к следующему совпадению используйте
F3или повторите команду поиска.
В окне поиска есть два параметра, которые стоит знать. Первый определяет, где искать совпадение: с начала строки, по части строки или по всему полю. Если ищете «болт», а в названии «Болт М8 оцинкованный», подойдёт любой режим, но для слова из середины названия нужен поиск по части строки. Второй параметр касается направления: вперёд или назад от текущей строки.
Если нужной колонки нет на экране, ищите по тому, что видно. В «Номенклатуре» часто хватает первых трёх-четырёх букв. Для точности вставляйте артикул или код: они уникальны, и совпадение будет единственным.
Что ещё важно:
- 🔹 Поиск идёт от текущей строки вниз и по кругу, поэтому перед началом можно встать в первую строку.
- 🔹 Искать можно только по тому, что показано в ячейке. Если в колонке стоит ссылка на справочник, поиск работает по представлению: по тому тексту, который вы видите.
- 🔹 Цифры в колонках с числами ищутся так, как они отображаются: с пробелами-разделителями тысяч и запятой в дробной части.
Строка поиска и отбор в списках
У списка документов и справочников инструменты богаче. Над списком обычно есть строка поиска, в которую вводят часть номера, названия или контрагента. Она быстро сужает список до записей, где есть введённая подстрока.
Для точной настройки пригодится отбор. Работает он по такой схеме:
- Откройте список, например
Покупки → Поступление (акты, накладные). - Встаньте в колонку, по значению которой хотите отфильтровать, и вызовите контекстное меню правой кнопкой.
- Выберите команду отбора по значению в текущей колонке.
- Проверьте над списком подсказку об активном отборе и при необходимости снимите его.
Если значение нужно искать по нескольким условиям сразу (период, контрагент, сумма больше заданной), в меню «Ещё» списка найдите команду расширенного поиска или настройки списка. Там условия задают явно, как в простом конструкторе.
Отбор остаётся включённым, пока вы его не снимете. Если после отбора вы открыли список снова и не видите нужных документов, сначала посмотрите, не стоит ли отбор от прошлого раза. Это самая частая причина фразы «документ пропал».
Табличная часть внутри документа отбор, как в списке, не поддерживает. Там вместо отбора работают поиск, сортировка и выгрузка, о которых ниже.
Копирование в буфер обмена и сравнение
Когда найти нужно не одну строку, а все совпадения, или сравнить таблицы между собой, проще выгрузить данные наружу. Алгоритм простой:
- Щёлкните любую ячейку табличной части.
- Выделите все строки:
Ctrl+A. - Скопируйте:
Ctrl+C. - Вставьте в Excel или в табличный документ 1С:
Ctrl+V.
В Excel доступны привычные инструменты: автофильтр, поиск по всей книге, условное форматирование. Для документа из 500 строк это обычно быстрее, чем перебирать руками.
Сравнение двух таблиц
Типовая задача: сверить свою табличную часть с файлом поставщика. Скопируйте обе таблицы на разные листы и используйте функцию ВПР (в английском Excel VLOOKUP). Ищите по артикулу, подтягивайте количество и цену, затем вычитайте одно из другого. Ненулевая разность и есть расхождение.
Пример на числах. В документе у позиции А-104 количество 12, в файле поставщика 10. Разность 12 - 10 = 2, значит, две единицы приняты сверх накладной. Строки, где ВПР вернул ошибку #Н/Д, есть у вас, но отсутствуют у поставщика (или наоборот).
Если выделили не все колонки, а только нужные, вставка получится аккуратнее. Для этого мышью выделите диапазон ячеек внутри табличной части: в 1С поддерживается выделение прямоугольной области.
Ещё одна возможность: скопировать значение одной ячейки и вставить его в окно поиска. Так вы не перепечатываете длинный артикул и не ошибаетесь в символах, похожих друг на друга (латинская A и кириллическая «А» выглядят одинаково, но для поиска это разные буквы).
Сортировка как способ собрать одинаковое
Если нужны все строки по одному товару или контрагенту, сортировка решает задачу без дополнительных инструментов. Щёлкните заголовок колонки: строки выстроятся по возрастанию, повторный щелчок развернёт порядок. После сортировки одинаковые значения идут подряд, и их видно одним блоком.
Что это даёт на практике:
- 📌 Дубли номенклатуры оказываются рядом, и видно, что один товар введён двумя строками.
- 📌 Строки с нулевой ценой собираются в начале или в конце списка.
- 📌 Самые большие суммы поднимаются наверх, и их удобно проверять первыми.
Теперь о подвохе. Сортировка в табличной части документа меняет порядок строк в самом документе. После записи этот порядок сохранится, и если порядок строк важен для печатной формы, это нужно учитывать. Для документа реализации это обычно безразлично, а вот в документах, где строки идут по смыслу (этапы, партии), порядок могут нарушить.
Для чисел сортировка срабатывает по значению, для строк по алфавиту, для дат по хронологии. Колонка с типом «Ссылка» сортируется по представлению, то есть по тому тексту, который вы читаете.
Поиск в коде: НайтиСтроки и Найти
Разработчику и тому, кто правит отчёты и обработки, нужен программный поиск. У табличной части в коде два основных метода.
Найти возвращает первую строку, где в указанных колонках стоит нужное значение, или Неопределено, если ничего нет:
НайденнаяСтрока = Объект.Товары.Найти(НужнаяНоменклатура, "Номенклатура");
Если НайденнаяСтрока <> Неопределено Тогда
Сообщить("Количество: " + НайденнаяСтрока.Количество);
КонецЕсли;
НайтиСтроки возвращает массив всех подходящих строк. Условия задаются структурой, где ключ есть имя колонки, а значение есть искомое:
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", НужнаяНоменклатура);
Отбор.Вставить("Склад", НужныйСклад);
НайденныеСтроки = Объект.Товары.НайтиСтроки(Отбор);
Для Каждого Строка Из НайденныеСтроки Цикл
Сообщить(Строка(Строка.Номенклатура) + ": " + Формат(Строка.Количество, "ЧГ=0"));
КонецЦикла;
Условия в структуре объединяются по «И»: строка подойдёт, только если совпали все указанные колонки. Если нужно «ИЛИ», делайте два вызова и объединяйте результаты.
Что учесть при работе с кодом:
- 🔹
НайтииНайтиСтрокисравнивают значения на точное равенство. Поиска по части строки здесь нет, для него пишут цикл соСтрНайти. - 🔹 Метод возвращает ссылки на сами строки, поэтому изменение найденной строки меняет табличную часть.
- 🔹 Для большой таблицы, по которой код ищет в цикле много раз, быстрее выгрузить колонку или построить соответствие и искать уже в нём.
В отчётах на СКД искать значение в таблице обычно не нужно: условия задают в настройках компоновки, как отбор.
Как найти значение через отладчик
Бывает, что вы не знаете, почему строка не находится, а код выглядит правильно. Тогда на помощь приходит отладчик в конфигураторе.
Порядок такой:
- Откройте конфигуратор и найдите процедуру, где идёт поиск.
- Поставьте точку останова в строке перед поиском (клавиша
F9). - Запустите отладку и воспроизведите действие в пользовательском режиме.
- Когда выполнение остановится, посмотрите значения: вычисление выражения (
Shift+F9) покажет содержимое переменных и табличной части. - Пройдите дальше построчно (
F10) и сравните искомое значение с тем, что лежит в колонке.
Смотреть стоит на три вещи. Первое, совпадает ли тип: поиск ссылки по строке с названием ничего не найдёт. Второе, нет ли лишних пробелов в строковых значениях. Третье, не отличается ли регистр, если сравнение идёт на уровне строк.
Отладка на рабочей базе замедляет работу и может остановить сеанс пользователя, если стоит точка останова. Выполняйте её на копии базы или в согласованное время.
Что делать, если ничего не находится
Поиск молчит? Проверьте по порядку.
- ✅ Курсор стоит в той колонке, где лежит значение, а не в соседней.
- ✅ Режим поиска позволяет находить по части строки.
- ✅ В колонке нет ссылки, у которой другое представление: вы ищете «Вилка», а в ячейке «Вилка столовая».
- ✅ Нет лишних символов, в том числе невидимых (неразрывного пробела из файла поставщика).
- ✅ В списке не включён старый отбор.
- ✅ Данные записаны: строка, которую добавили, но не провели и не записали, в списке не появится.
Если значение скопировано из письма или мессенджера, в нём иногда встречается неразрывный пробел. Для глаза текст одинаковый, а поиск находит разное. Выход: вставьте значение в блокнот, удалите пробел и введите заново.
Если табличная часть очень большая
На тысячах строк пролистывание и повторный поиск выматывают. Разбейте задачу на два шага. Сначала отсортируйте таблицу по нужной колонке, чтобы нужный блок оказался в начале или в конце. Затем ищите уже внутри блока.
Для регулярной сверки удобнее завести привычный маршрут: выгрузка в Excel, ВПР по артикулу, фильтр по ненулевой разности. Такой разбор занимает несколько минут, а ручной просмотр тысячи строк растягивается на час и всё равно оставляет сомнения. Если же сверку надо делать каждый день, пусть разработчик напишет обработку на НайтиСтроки: она сама сопоставит позиции и выведет только расхождения.
Частые вопросы
Можно ли искать сразу по нескольким колонкам в табличной части документа?
Ctrl+F идёт по одной текущей колонке. Для нескольких условий выгрузите таблицу в Excel и примените автофильтр или используйте НайтиСтроки со структурой из нескольких ключей.Как найти повторяющиеся строки в документе?
Почему `Ctrl+F` не реагирует?
Чем `Найти` отличается от `НайтиСтроки` в коде?
Найти возвращает одну первую строку или Неопределено. НайтиСтроки возвращает массив всех подходящих строк, который может быть пустым.