Поиск объектов 1С по значению реквизита: от строки поиска до запроса к базе
Содержание
Найти документ по реквизиту в 1С 8.3 быстрее всего прямо в списке: встаньте на нужную колонку и нажмите Alt+F — откроется расширенный поиск, где можно задать значение, например контрагента или сумму. Если вид документа неизвестен, включите полнотекстовый поиск и ищите строкой по всей базе. Для сложных условий — консоль запросов.
Частое заблуждение: строка поиска в правом верхнем углу списка ищет по всем реквизитам документа. Нет. Она смотрит только колонки, которые выведены в список, и то не все. Если нужного поля в списке нет, искать по нему придётся другими способами. Ниже они идут от простого к техническому: от пользователя до разработчика и администратора.
С чего начать: какой способ выбрать
Выбор зависит от двух вопросов: знаете ли вы вид объекта и есть ли у вас права администратора.
| Способ | Когда подходит | Кто может | Ограничения |
|---|---|---|---|
| Строка поиска в списке | Вид документа известен, значение видно в колонке | Любой пользователь | Ищет только по колонкам списка |
Расширенный поиск Alt+F | Нужно точное совпадение по одной колонке | Любой пользователь | Одно поле за раз |
| Отбор в настройках списка | Несколько условий, поле не выведено в колонки | Любой пользователь | Только реквизиты шапки |
| Полнотекстовый поиск | Вид объекта неизвестен | Пользователь, если индекс включён | Нужен актуальный индекс |
| Поиск ссылок на объект | Найти все места, где использован элемент | Пользователь с «Все функции» | Показывает только ссылки |
| Консоль запросов | Табличные части, сложные условия, все виды документов | Администратор | Нужна обработка и права |
| SQL-запрос | База недоступна через 1С, разовый анализ | Администратор СУБД | Только чтение, сложные имена таблиц |
Alt+F по нужной колонке или отбор в настройках списка.Поиск документа в списке по реквизиту: стандартные средства
Начните со списка нужного вида: например, Продажи → Реализация (акты, накладные, УПД) в Бухгалтерии 3.0 или журнал документов в любой другой конфигурации.
Строка поиска
- Кликните в поле «Поиск» над списком или нажмите
Ctrl+F. - Введите часть значения: номер, наименование контрагента, сумму.
- Нажмите
Enter. Список отфильтруется по совпадению в видимых колонках.
💡 Сумму вводите без пробелов-разделителей разрядов: 125000, а не 125 000.
Расширенный поиск по колонке
- Выделите ячейку в колонке, по которой ищете, например «Контрагент».
- Нажмите
Alt+Fили выберите в менюЕщёкоманду «Расширенный поиск». - В окне выберите поле, значение и вариант сравнения: по началу строки, по любой части или точное совпадение.
- Нажмите «Найти».
Удобный приём: щёлкните правой кнопкой по ячейке с нужным значением и выберите поиск по текущему значению. Список сразу отберёт все документы с тем же контрагентом или складом.
Отбор по реквизиту, которого нет в колонках
Если поле не выведено в список, откройте Ещё → Настроить список, вкладку «Отбор». Перетащите туда реквизит из левой панели, задайте условие и значение. Отбор работает по любому реквизиту шапки, включая «Ответственный», «Комментарий», «Договор».
На той же вкладке «Поля» можно вывести реквизит колонкой, тогда по нему заработает и строка поиска.
Отбор, заданный в настройках списка, сохраняется. Если завтра список покажется «пустым», сначала проверьте отбор: часто это забытая настройка, а не пропавшие документы.
Поиск по всей базе: полнотекстовый поиск и поиск ссылок
Когда вид документа неизвестен, помогает поиск по всем данным. В типовых конфигурациях на базе БСП его поле находится в верхней части окна программы, рядом с иконками избранного и истории.
Как включить полнотекстовый поиск
- Откройте раздел
Администрированиеи перейдите в общие настройки. - Найдите группу «Полнотекстовый поиск» и включите его.
- Откройте настройку индекса и выполните обновление. На крупной базе первое построение может идти от десятков минут до нескольких часов.
- Проверьте, что включено регламентное задание обновления индекса: иначе новые документы в результатах не появятся.
После этого вводите в поле поиска ИНН, номер счёта, фамилию или фрагмент комментария. Система вернёт все объекты, где встречается строка, с указанием вида.
Полнотекстовый поиск не ищет точное равенство сумм и дат: он работает с текстом. Сумму 125000 он найдёт, только если она попала в индекс как строка, на что полагаться не стоит.
Поиск ссылок на объект
Задача «найти все документы, где указан этот контрагент» решается штатной командой платформы.
- Включите меню «Все функции»:
Сервис и настройки → Параметры, флажок «Отображать команду “Все функции”». - Откройте
Все функции → Стандартные → Поиск ссылок на объект. - Выберите тип и сам объект, нажмите «Найти».
Результат покажет все документы, справочники и регистры, где объект использован, в том числе в табличных частях. Это быстрый способ перед удалением элемента понять, где он «зашит».
Консоль запросов: поиск по табличным частям и сразу по всем документам
Консоль запросов — главный инструмент, когда штатного поиска мало. Это обработка: в типовых конфигурациях её берут из набора стандартных обработок или подключают как внешнюю через Файл → Открыть. Нужны права на открытие внешних обработок.
Документы по реквизиту шапки
ВЫБРАТЬ
Док.Ссылка,
Док.Дата,
Док.Номер,
Док.СуммаДокумента
ИЗ
Документ.РеализацияТоваровУслуг КАК Док
ГДЕ
Док.Контрагент = &Контрагент
И Док.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Параметры задаёте на вкладке параметров консоли, выбирая значение из справочника.
Поиск по реквизиту табличной части
Номенклатура, количество, цена лежат не в шапке, а в табличной части. Запрос идёт к ней:
ВЫБРАТЬ РАЗЛИЧНЫЕ
Товары.Ссылка КАК Документ,
Товары.Ссылка.Дата КАК Дата
ИЗ
Документ.РеализацияТоваровУслуг.Товары КАК Товары
ГДЕ
Товары.Номенклатура = &Номенклатура
Поиск по строке неограниченной длины
Реквизит «Комментарий» обычно неограниченной длины, и сравнивать его напрямую в запросе нельзя. Приведите его к строке фиксированной длины:
ВЫБРАТЬ
Док.Ссылка
ИЗ
Документ.ПоступлениеТоваровУслуг КАК Док
ГДЕ
ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(500)) ПОДОБНО "%аванс%"
Один реквизит во всех видах документов
Если неизвестно, в каком документе лежит значение, соберите запрос по метаданным. Код выполняется на сервере, например во внешней обработке:
ИмяРеквизита = "Контрагент";
Тексты = Новый Массив;
Для Каждого МетаДок Из Метаданные.Документы Цикл
Если МетаДок.Реквизиты.Найти(ИмяРеквизита) <> Неопределено Тогда
Тексты.Добавить("ВЫБРАТЬ Ссылка ИЗ Документ." + МетаДок.Имя
+ " ГДЕ " + ИмяРеквизита + " = &Значение");
КонецЕсли;
КонецЦикла;
Если Тексты.Количество() > 0 Тогда
Запрос = Новый Запрос(СтрСоединить(Тексты, Символы.ПС + "ОБЪЕДИНИТЬ ВСЕ" + Символы.ПС));
Запрос.УстановитьПараметр("Значение", ИскомоеЗначение);
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
Сообщить(Строка(Строка.Ссылка));
КонецЦикла;
КонецЕсли;
ИскомоеЗначение — ссылка на искомый элемент, например контрагента. Если у реквизита в разных документах разный тип, запрос всё равно отработает: несовпадающие типы просто не дадут строк.
Отладчик
Разработчику иногда проще найти объект прямо в отладке. Поставьте точку останова в модуле, где объект уже получен, и откройте «Вычислить выражение» (Shift+F9). Там видны все реквизиты и табличные части, а выражение вроде Объект.Ссылка.УникальныйИдентификатор() даёт идентификатор для дальнейшего поиска.
Прямой SQL-запрос к базе данных 1С
В клиент-серверной базе данные лежат в MS SQL или PostgreSQL. Искать там можно, но имена таблиц и полей обезличены: документ хранится в таблице вида _Document245, реквизит — в поле вида _Fld3812RRef.
Соответствие имён получают функцией платформы:
Структура = ПолучитьСтруктуруХраненияБазыДанных(, Истина);
Параметр Истина возвращает имена в терминах СУБД. В результате для каждого объекта метаданных видно имя таблицы и полей.
Пример для PostgreSQL после того, как имена найдены:
SELECT _idrref, _number, _date_time
FROM _document245
WHERE _fld3812rref = '\x8a2b00155d01c80711eb4c3f9a1e7d22';
Особенности, о которых стоит знать заранее:
- 🔢 ссылки хранятся в двоичном поле из 16 байт, и порядок байтов не совпадает с текстовым видом идентификатора из 1С;
- 📅 к датам в базе может быть прибавлено 2000 лет, если при создании базы задано смещение дат (так делают для MS SQL);
- 🔒 доступ к данным в обход платформы ограничен лицензионным соглашением 1С, поэтому SQL оставьте для разовой диагностики.
Никаких UPDATE и DELETE напрямую в базе 1С. Платформа не узнает об изменении: не пересчитаются итоги регистров, не сработают проверки, обмены не получат изменений. Только чтение, и лучше на копии.
У файловой базы (1Cv8.1CD) SQL-доступа нет. Для неё все задачи поиска решаются средствами 1С.
Журнал регистрации и история изменений: кто и когда менял реквизит
Иногда вопрос не «где документ», а «кто поставил в нём этого контрагента». Тогда нужен журнал регистрации.
- Откройте
Администрирование → Обслуживание → Журнал регистрации. - Нажмите «Установить отбор».
- Укажите период, событие «Данные. Изменение» и, при необходимости, пользователя.
- В поле «Данные» выберите конкретный документ.
Журнал покажет, кто и когда записывал объект, но не покажет, какое именно поле изменилось.
Чтобы видеть старые и новые значения реквизитов, нужно версионирование объектов. В конфигурациях на БСП оно включается в разделе Администрирование, в общих настройках, группа «Версионирование». После этого у документа появится команда истории изменений с отчётом по версиям.
💡 Версионирование работает только с момента включения. Прошлые изменения оно не восстановит: для них остаётся журнал регистрации и резервные копии.
Таблицы регистрации изменений
В базах с обменами каждое изменение объекта попадает в таблицы регистрации плана обмена. Через консоль запросов можно найти, что ждёт выгрузки:
ВЫБРАТЬ
Изм.Ссылка,
Изм.Узел,
Изм.НомерСообщения
ИЗ
Документ.РеализацияТоваровУслуг.Изменения КАК Изм
Если НомерСообщения пустой, изменение ещё не отправлялось в этот узел.
Поиск объекта в распределённой базе (РИБ)
В распределённой информационной базе у объекта одна и та же ссылка во всех узлах. Это главный приём: ищите не по номеру, а по уникальному идентификатору.
- 🔁 Номера документов в узлах обычно различаются префиксом. Документ «ЦБ00-000123» в центральной базе в филиале будет искаться по тому же номеру, но фильтр по «000123» без префикса даст чужие документы.
- 🧭 Навигационная ссылка (
e1cib/data/...) содержит идентификатор объекта. Скопируйте её командой «Получить ссылку» в одном узле и откройте черезСервис и настройки → Перейти по ссылкев другом. - 🧩 В консоли запросов объект находят по идентификатору:
УИД = Новый УникальныйИдентификатор("3f4c1e9a-7d22-11eb-8a2b-00155d01c807");
Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
Сообщить("Объект в этом узле отсутствует");
Иначе
Сообщить(Строка(Ссылка));
КонецЕсли;
Если объект есть в центре, но не находится в узле, проверьте таблицу регистрации изменений из предыдущего раздела. Чаще всего изменение зарегистрировано, но обмен ещё не прошёл, либо объект не попал под правила регистрации, например по отбору организаций.
Если в узле видна «битая ссылка» вида <Объект не найден> (245:8a2b00155d01c807...), сам объект в этот узел не пришёл. Не создавайте его вручную: при следующем обмене получится дубль. Выясните причину на стороне центральной базы.
Частые вопросы
Почему поиск в списке ничего не находит, хотя документ точно есть?
Можно ли найти документ по сумме в табличной части?
Найдёт ли полнотекстовый поиск помеченные на удаление объекты?
Как найти документ, если известен только его уникальный идентификатор?
ПолучитьСсылку менеджера документа в консоли или навигационную ссылку e1cib/data/ и команду перехода по ссылке.