К статье
Практический материал

Разработка и Конфигурация · 8 мин

Как проверить наличие документа в 1С

Способы проверить наличие документа в 1С: поиск в журнале, универсальный отчёт, запрос и методы НайтиПоНомеру. Примеры кода, ошибки и FAQ.

Проверить наличие документа в 1С может понадобиться в разных ситуациях: бухгалтер ищет конкретную накладную по номеру, разработчик перед созданием нового документа убеждается, что он не задвоится, а администратор выясняет, были ли вообще выгружены данные из другой системы. Способ проверки зависит от того, кто ищет и что именно известно о документе.

Пользователю обычно достаточно журнала документов и встроенного поиска. Программисту нужны методы встроенного языка: НайтиПоНомеру, запрос или проверка по ссылке. Ниже разобраны оба сценария — интерактивный и программный, с примерами кода и типичными ошибками.

Поиск документа в журнале через интерфейс

Самый простой способ — открыть журнал соответствующего вида документов. Например, для реализаций: раздел «Продажи» → «Реализация (акты, накладные)». В шапке журнала есть поле поиска по номеру и отбор по периоду. Введите номер без лидирующих нулей или с ними — 1С обычно находит оба варианта, но лучше проверить оба.

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

Помимо журнала конкретного вида, во многих конфигурациях есть общие журналы («Все документы», операции по контрагенту). Они удобны, когда неизвестен вид документа, но известен контрагент или сумма.

Порядок действий в пользовательском режиме
  1. 1
    Откройте журнал нужного вида документов
  2. 2
    Снимите или расширьте отбор по периоду
  3. 3
    Введите номер документа в поле поиска
  4. 4
    При отсутствии результата проверьте отборы по организации и контрагенту
  5. 5
    Откройте найденный документ и сверьте дату, сумму и статус проведения

Универсальный поиск и полнотекстовый поиск

Если неизвестен ни вид документа, ни его точный номер, используйте полнотекстовый поиск — значок лупы в правом верхнем углу окна программы. Он ищет по всем данным, включая комментарии, наименования и содержимое табличных частей. Условие: полнотекстовый поиск должен быть включён администратором (Администрирование → Общие настройки → Полнотекстовый поиск), а индекс — обновлён.

Ещё один инструмент — глобальный поиск по строке (Ctrl+Shift+F в тонком клиенте), который ищет по всем данным с учётом прав пользователя. Учтите: если у пользователя нет прав на вид документа, поиск его не покажет, хотя в базе документ существует.

Проверка через стандартные отчёты

Когда нужно проверить не один документ, а целый пласт (например, все ли счета-фактуры выписаны за квартал), удобнее отчёты. В типовых конфигурациях есть «Универсальный отчёт» (или «Отчёт по документам» в отдельных решениях), где можно выбрать вид документа, период и вывести список с номерами, датами и суммами.

Для проверки разрывов в нумерации — пропущенных номеров — удобно вывести отчёт по номерам документов за период и отсортировать по номеру. Пропуски сразу видны. Это типичная задача при подготовке к проверке: налоговая часто спрашивает про непрерывность нумерации счетов-фактур.

Проверка наличия документа из кода: НайтиПоНомеру

Для программной проверки по номеру у менеджера документа есть метод НайтиПоНомеру(). Он принимает номер и дату (дата определяет интервал уникальности номеров — обычно год) и возвращает ссылку на документ или пустую ссылку, если документ не найден.

bsl
НайденныйДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерДок, ДатаДок);
Если НайденныйДокумент.Пустая() Тогда
    Сообщить("Документ не найден");
Иначе
    Сообщить("Найден: " + НайденныйДокумент);
КонецЕсли;

Важный нюанс: метод находит документ в том числе помеченный на удаление. Если нужно проверить именно «живой» документ, после поиска проверьте реквизит ПометкаУдаления у полученного объекта или ссылки через запрос.

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

Проверка запросом и по ссылке

Запрос — самый гибкий способ: можно искать по любому сочетанию реквизитов (контрагент, сумма, договор) и сразу отсечь помеченные на удаление. Это стандартный приём перед созданием документа в обмене данными, чтобы избежать дублей.

bsl
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
|    Док.Ссылка
|ИЗ
|    Документ.ПоступлениеТоваровУслуг КАК Док
|ГДЕ
|    Док.НомерВходящегоДокумента = &Номер
|    И Док.Контрагент = &Контрагент
|    И НЕ Док.ПометкаУдаления";
Запрос.УстановитьПараметр("Номер", ВходящийНомер);
Запрос.УстановитьПараметр("Контрагент", Поставщик);
Результат = Запрос.Выполнить();
ДокументСуществует = НЕ Результат.Пустой();

Если у вас уже есть ссылка (например, пришла из обмена) и нужно проверить, существует ли объект в базе, используйте проверку «битой ссылки»: запросом по ссылке или методом ПолучитьОбъект() — если объект отсутствует, вернётся Неопределено.

Типичные ошибки
01
Поиск по номеру без учёта префикса: документ существует, но НайтиПоНомеру возвращает пустую ссылку
02
Игнорирование пометки удаления: найденный документ считается действующим, хотя помечен на удаление
03
Проверка наличия поиском по журналу с активным отбором по периоду — документ просто не попадает в выборку
04
Создание документа без предварительной проверки в обмене данными — появляются дубли, которые потом приходится сворачивать вручную

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

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

Контрольные точки

Как проверить результат

Документ открывается из журнала
Норма

Форма открывается, реквизиты совпадают с ожидаемыми

Тревожный признак

Документ не открывается или данные не совпадают — найден другой документ

Ссылка, возвращённая НайтиПоНомеру
Норма

Ссылка не пустая, пометка удаления отсутствует

Тревожный признак

Пустая ссылка при заведомо существующем номере — проверьте префикс и дату

Полнотекстовый поиск
Норма

Документ находится по номеру и по содержимому

Тревожный признак

Не находится — вероятно, индекс устарел, нужно обновить

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

Почему НайтиПоНомеру не находит документ, который есть в журнале?

Чаще всего причина в префиксе номера или в дате: метод ищет документ в интервале уникальности номеров, определяемом переданной датой. Передайте номер точно в том виде, в котором он хранится, и дату из того же периода, что и документ.

Как проверить, существует ли документ по ссылке из другой базы?

Выполните запрос «ВЫБРАТЬ Ссылка ИЗ Документ.ВидДокумента ГДЕ Ссылка = &Ссылка». Если выборка пуста — объекта нет (битая ссылка). Альтернатива — вызвать ПолучитьОбъект() и сравнить результат с Неопределено, но запрос работает быстрее.

Находит ли поиск помеченные на удаление документы?

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

Почему полнотекстовый поиск не находит недавно созданный документ?

Индекс полнотекстового поиска обновляется по расписанию или вручную. Попросите администратора обновить индекс (Администрирование → Полнотекстовый поиск → Обновить индекс) и повторите поиск.

Как проверить наличие документов сразу по списку номеров?

Используйте запрос с условием «Номер В (&СписокНомеров)», передав массив или список значений параметром. В результате вы получите только существующие номера — сравнив их с исходным списком, увидите отсутствующие.

Итог

Что важно запомнить

В интерфейсе документ ищут через журнал с отборами и полнотекстовый поиск, из кода — через НайтиПоНомеру и запросы. Всегда учитывайте префиксы номеров, пометки удаления, права доступа и актуальность поискового индекса, а перед массовыми операциями с документами делайте резервную копию.