Поиск объектов 1С по значению реквизита: от строки поиска до запроса к базе

· 9 мин

Содержание

Найти документ по реквизиту в 1С 8.3 быстрее всего прямо в списке: встаньте на нужную колонку и нажмите Alt+F — откроется расширенный поиск, где можно задать значение, например контрагента или сумму. Если вид документа неизвестен, включите полнотекстовый поиск и ищите строкой по всей базе. Для сложных условий — консоль запросов.

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

С чего начать: какой способ выбрать

Выбор зависит от двух вопросов: знаете ли вы вид объекта и есть ли у вас права администратора.

СпособКогда подходитКто можетОграничения
Строка поиска в спискеВид документа известен, значение видно в колонкеЛюбой пользовательИщет только по колонкам списка
Расширенный поиск Alt+FНужно точное совпадение по одной колонкеЛюбой пользовательОдно поле за раз
Отбор в настройках спискаНесколько условий, поле не выведено в колонкиЛюбой пользовательТолько реквизиты шапки
Полнотекстовый поискВид объекта неизвестенПользователь, если индекс включёнНужен актуальный индекс
Поиск ссылок на объектНайти все места, где использован элементПользователь с «Все функции»Показывает только ссылки
Консоль запросовТабличные части, сложные условия, все виды документовАдминистраторНужна обработка и права
SQL-запросБаза недоступна через 1С, разовый анализАдминистратор СУБДТолько чтение, сложные имена таблиц
Что вы знаете об искомом объекте?

Поиск документа в списке по реквизиту: стандартные средства

Начните со списка нужного вида: например, Продажи → Реализация (акты, накладные, УПД) в Бухгалтерии 3.0 или журнал документов в любой другой конфигурации.

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

  1. Кликните в поле «Поиск» над списком или нажмите Ctrl+F.
  2. Введите часть значения: номер, наименование контрагента, сумму.
  3. Нажмите Enter. Список отфильтруется по совпадению в видимых колонках.

💡 Сумму вводите без пробелов-разделителей разрядов: 125000, а не 125 000.

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

  1. Выделите ячейку в колонке, по которой ищете, например «Контрагент».
  2. Нажмите Alt+F или выберите в меню Ещё команду «Расширенный поиск».
  3. В окне выберите поле, значение и вариант сравнения: по началу строки, по любой части или точное совпадение.
  4. Нажмите «Найти».

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

Отбор по реквизиту, которого нет в колонках

Если поле не выведено в список, откройте Ещё → Настроить список, вкладку «Отбор». Перетащите туда реквизит из левой панели, задайте условие и значение. Отбор работает по любому реквизиту шапки, включая «Ответственный», «Комментарий», «Договор».

На той же вкладке «Поля» можно вывести реквизит колонкой, тогда по нему заработает и строка поиска.

Отбор, заданный в настройках списка, сохраняется. Если завтра список покажется «пустым», сначала проверьте отбор: часто это забытая настройка, а не пропавшие документы.

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

Когда вид документа неизвестен, помогает поиск по всем данным. В типовых конфигурациях на базе БСП его поле находится в верхней части окна программы, рядом с иконками избранного и истории.

Как включить полнотекстовый поиск

  1. Откройте раздел Администрирование и перейдите в общие настройки.
  2. Найдите группу «Полнотекстовый поиск» и включите его.
  3. Откройте настройку индекса и выполните обновление. На крупной базе первое построение может идти от десятков минут до нескольких часов.
  4. Проверьте, что включено регламентное задание обновления индекса: иначе новые документы в результатах не появятся.

После этого вводите в поле поиска ИНН, номер счёта, фамилию или фрагмент комментария. Система вернёт все объекты, где встречается строка, с указанием вида.

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

Поиск ссылок на объект

Задача «найти все документы, где указан этот контрагент» решается штатной командой платформы.

  1. Включите меню «Все функции»: Сервис и настройки → Параметры, флажок «Отображать команду “Все функции”».
  2. Откройте Все функции → Стандартные → Поиск ссылок на объект.
  3. Выберите тип и сам объект, нажмите «Найти».

Результат покажет все документы, справочники и регистры, где объект использован, в том числе в табличных частях. Это быстрый способ перед удалением элемента понять, где он «зашит».

Консоль запросов: поиск по табличным частям и сразу по всем документам

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

Документы по реквизиту шапки

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

Параметры задаёте на вкладке параметров консоли, выбирая значение из справочника.

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

Номенклатура, количество, цена лежат не в шапке, а в табличной части. Запрос идёт к ней:

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

Поиск по строке неограниченной длины

Реквизит «Комментарий» обычно неограниченной длины, и сравнивать его напрямую в запросе нельзя. Приведите его к строке фиксированной длины:

ВЫБРАТЬ
    Док.Ссылка
ИЗ
    Документ.ПоступлениеТоваровУслуг КАК Док
ГДЕ
    ВЫРАЗИТЬ(Док.Комментарий КАК СТРОКА(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С.

Журнал регистрации и история изменений: кто и когда менял реквизит

Иногда вопрос не «где документ», а «кто поставил в нём этого контрагента». Тогда нужен журнал регистрации.

  1. Откройте Администрирование → Обслуживание → Журнал регистрации.
  2. Нажмите «Установить отбор».
  3. Укажите период, событие «Данные. Изменение» и, при необходимости, пользователя.
  4. В поле «Данные» выберите конкретный документ.

Журнал покажет, кто и когда записывал объект, но не покажет, какое именно поле изменилось.

Чтобы видеть старые и новые значения реквизитов, нужно версионирование объектов. В конфигурациях на БСП оно включается в разделе Администрирование, в общих настройках, группа «Версионирование». После этого у документа появится команда истории изменений с отчётом по версиям.

💡 Версионирование работает только с момента включения. Прошлые изменения оно не восстановит: для них остаётся журнал регистрации и резервные копии.

Таблицы регистрации изменений

В базах с обменами каждое изменение объекта попадает в таблицы регистрации плана обмена. Через консоль запросов можно найти, что ждёт выгрузки:

ВЫБРАТЬ
    Изм.Ссылка,
    Изм.Узел,
    Изм.НомерСообщения
ИЗ
    Документ.РеализацияТоваровУслуг.Изменения КАК Изм

Если НомерСообщения пустой, изменение ещё не отправлялось в этот узел.

Поиск объекта в распределённой базе (РИБ)

В распределённой информационной базе у объекта одна и та же ссылка во всех узлах. Это главный приём: ищите не по номеру, а по уникальному идентификатору.

  • 🔁 Номера документов в узлах обычно различаются префиксом. Документ «ЦБ00-000123» в центральной базе в филиале будет искаться по тому же номеру, но фильтр по «000123» без префикса даст чужие документы.
  • 🧭 Навигационная ссылка (e1cib/data/...) содержит идентификатор объекта. Скопируйте её командой «Получить ссылку» в одном узле и откройте через Сервис и настройки → Перейти по ссылке в другом.
  • 🧩 В консоли запросов объект находят по идентификатору:
УИД = Новый УникальныйИдентификатор("3f4c1e9a-7d22-11eb-8a2b-00155d01c807");
Ссылка = Документы.РеализацияТоваровУслуг.ПолучитьСсылку(УИД);
Если Ссылка.ПолучитьОбъект() = Неопределено Тогда
    Сообщить("Объект в этом узле отсутствует");
Иначе
    Сообщить(Строка(Ссылка));
КонецЕсли;

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

Если в узле видна «битая ссылка» вида <Объект не найден> (245:8a2b00155d01c807...), сам объект в этот узел не пришёл. Не создавайте его вручную: при следующем обмене получится дубль. Выясните причину на стороне центральной базы.

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

Почему поиск в списке ничего не находит, хотя документ точно есть?
Чаще всего мешает установленный отбор или период списка. Проверьте вкладку «Отбор» в настройках списка и период в командной панели. Ещё одна причина — у пользователя нет прав на документы этой организации.
Можно ли найти документ по сумме в табличной части?
Да, через консоль запросов: обратитесь к табличной части и задайте условие по полю «Сумма». Штатный поиск в списке видит только итог документа в шапке.
Найдёт ли полнотекстовый поиск помеченные на удаление объекты?
Да, если они попали в индекс. Пометка удаления объект не убирает, он остаётся в базе до удаления помеченных объектов.
Как найти документ, если известен только его уникальный идентификатор?
Используйте метод ПолучитьСсылку менеджера документа в консоли или навигационную ссылку e1cib/data/ и команду перехода по ссылке.
Почему консоль запросов не открывается у бухгалтера?
Для внешних обработок нужно отдельное право. Его выдаёт администратор в профиле групп доступа; без него запускайте поиск штатными средствами.