Разработка и Конфигурация · 8 мин
Как проверить наличие документа в 1С
Способы проверить наличие документа в 1С: поиск в журнале, универсальный отчёт, запрос и методы НайтиПоНомеру. Примеры кода, ошибки и FAQ.
Проверить наличие документа в 1С может понадобиться в разных ситуациях: бухгалтер ищет конкретную накладную по номеру, разработчик перед созданием нового документа убеждается, что он не задвоится, а администратор выясняет, были ли вообще выгружены данные из другой системы. Способ проверки зависит от того, кто ищет и что именно известно о документе.
Пользователю обычно достаточно журнала документов и встроенного поиска. Программисту нужны методы встроенного языка: НайтиПоНомеру, запрос или проверка по ссылке. Ниже разобраны оба сценария — интерактивный и программный, с примерами кода и типичными ошибками.
Поиск документа в журнале через интерфейс
Самый простой способ — открыть журнал соответствующего вида документов. Например, для реализаций: раздел «Продажи» → «Реализация (акты, накладные)». В шапке журнала есть поле поиска по номеру и отбор по периоду. Введите номер без лидирующих нулей или с ними — 1С обычно находит оба варианта, но лучше проверить оба.
Если документ не находится, первым делом расширьте период отбора: по умолчанию журнал часто показывает только текущий месяц или квартал. Также проверьте, не установлены ли дополнительные отборы по организации или контрагенту, которые скрывают нужную запись.
Помимо журнала конкретного вида, во многих конфигурациях есть общие журналы («Все документы», операции по контрагенту). Они удобны, когда неизвестен вид документа, но известен контрагент или сумма.
- 1Откройте журнал нужного вида документов
- 2Снимите или расширьте отбор по периоду
- 3Введите номер документа в поле поиска
- 4При отсутствии результата проверьте отборы по организации и контрагенту
- 5Откройте найденный документ и сверьте дату, сумму и статус проведения
Универсальный поиск и полнотекстовый поиск
Если неизвестен ни вид документа, ни его точный номер, используйте полнотекстовый поиск — значок лупы в правом верхнем углу окна программы. Он ищет по всем данным, включая комментарии, наименования и содержимое табличных частей. Условие: полнотекстовый поиск должен быть включён администратором (Администрирование → Общие настройки → Полнотекстовый поиск), а индекс — обновлён.
Ещё один инструмент — глобальный поиск по строке (Ctrl+Shift+F в тонком клиенте), который ищет по всем данным с учётом прав пользователя. Учтите: если у пользователя нет прав на вид документа, поиск его не покажет, хотя в базе документ существует.
Проверка через стандартные отчёты
Когда нужно проверить не один документ, а целый пласт (например, все ли счета-фактуры выписаны за квартал), удобнее отчёты. В типовых конфигурациях есть «Универсальный отчёт» (или «Отчёт по документам» в отдельных решениях), где можно выбрать вид документа, период и вывести список с номерами, датами и суммами.
Для проверки разрывов в нумерации — пропущенных номеров — удобно вывести отчёт по номерам документов за период и отсортировать по номеру. Пропуски сразу видны. Это типичная задача при подготовке к проверке: налоговая часто спрашивает про непрерывность нумерации счетов-фактур.
Проверка наличия документа из кода: НайтиПоНомеру
Для программной проверки по номеру у менеджера документа есть метод НайтиПоНомеру(). Он принимает номер и дату (дата определяет интервал уникальности номеров — обычно год) и возвращает ссылку на документ или пустую ссылку, если документ не найден.
НайденныйДокумент = Документы.РеализацияТоваровУслуг.НайтиПоНомеру(НомерДок, ДатаДок);
Если НайденныйДокумент.Пустая() Тогда
Сообщить("Документ не найден");
Иначе
Сообщить("Найден: " + НайденныйДокумент);
КонецЕсли;Важный нюанс: метод находит документ в том числе помеченный на удаление. Если нужно проверить именно «живой» документ, после поиска проверьте реквизит ПометкаУдаления у полученного объекта или ссылки через запрос.
Если номер хранится как строка с префиксом, передавайте его точно так, как он записан в базе, иначе поиск вернёт пустую ссылку даже при существующем документе.
Проверка запросом и по ссылке
Запрос — самый гибкий способ: можно искать по любому сочетанию реквизитов (контрагент, сумма, договор) и сразу отсечь помеченные на удаление. Это стандартный приём перед созданием документа в обмене данными, чтобы избежать дублей.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Док.Ссылка
|ИЗ
| Документ.ПоступлениеТоваровУслуг КАК Док
|ГДЕ
| Док.НомерВходящегоДокумента = &Номер
| И Док.Контрагент = &Контрагент
| И НЕ Док.ПометкаУдаления";
Запрос.УстановитьПараметр("Номер", ВходящийНомер);
Запрос.УстановитьПараметр("Контрагент", Поставщик);
Результат = Запрос.Выполнить();
ДокументСуществует = НЕ Результат.Пустой();Если у вас уже есть ссылка (например, пришла из обмена) и нужно проверить, существует ли объект в базе, используйте проверку «битой ссылки»: запросом по ссылке или методом ПолучитьОбъект() — если объект отсутствует, вернётся Неопределено.
Как убедиться, что результат проверки достоверен
После любой проверки полезно сверить результат по независимому признаку. Если искали в журнале — откройте документ и проверьте дату, организацию и сумму. Если проверяли кодом — выведите найденную ссылку в сообщение и убедитесь, что это именно тот документ.
Как проверить результат
Форма открывается, реквизиты совпадают с ожидаемыми
Документ не открывается или данные не совпадают — найден другой документ
Ссылка не пустая, пометка удаления отсутствует
Пустая ссылка при заведомо существующем номере — проверьте префикс и дату
Документ находится по номеру и по содержимому
Не находится — вероятно, индекс устарел, нужно обновить
Частые вопросы
Почему НайтиПоНомеру не находит документ, который есть в журнале?
Чаще всего причина в префиксе номера или в дате: метод ищет документ в интервале уникальности номеров, определяемом переданной датой. Передайте номер точно в том виде, в котором он хранится, и дату из того же периода, что и документ.
Как проверить, существует ли документ по ссылке из другой базы?
Выполните запрос «ВЫБРАТЬ Ссылка ИЗ Документ.ВидДокумента ГДЕ Ссылка = &Ссылка». Если выборка пуста — объекта нет (битая ссылка). Альтернатива — вызвать ПолучитьОбъект() и сравнить результат с Неопределено, но запрос работает быстрее.
Находит ли поиск помеченные на удаление документы?
Журнал показывает их со специальной пиктограммой, если не включён фильтр. НайтиПоНомеру возвращает и помеченные документы, поэтому в коде дополнительно проверяйте реквизит ПометкаУдаления или добавляйте условие в запрос.
Почему полнотекстовый поиск не находит недавно созданный документ?
Индекс полнотекстового поиска обновляется по расписанию или вручную. Попросите администратора обновить индекс (Администрирование → Полнотекстовый поиск → Обновить индекс) и повторите поиск.
Как проверить наличие документов сразу по списку номеров?
Используйте запрос с условием «Номер В (&СписокНомеров)», передав массив или список значений параметром. В результате вы получите только существующие номера — сравнив их с исходным списком, увидите отсутствующие.
Что важно запомнить
В интерфейсе документ ищут через журнал с отборами и полнотекстовый поиск, из кода — через НайтиПоНомеру и запросы. Всегда учитывайте префиксы номеров, пометки удаления, права доступа и актуальность поискового индекса, а перед массовыми операциями с документами делайте резервную копию.