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

```1c
    ОбъектыМД = Новый Массив;
    ОбъектыМД.Добавить("Документы");

    Для Каждого Эл Из ОбъектыМД Цикл

    Для Каждого Объект Из Метаданные[Эл] Цикл

    Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда

    НовСтр = ТабДок.Добавить();
    НовСтр.Документы = Строка(Объект);

    КонецЕсли;

    КонецЦикла;

    КонецЦикла;
```
---
в зависимости как именно вы хотите проверить наличие документов:

```1c
    ///За циклом:
    Запрос = Новый Запрос;

    ......

    Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда

    Запрос.Текст = "Выбрать Документы.Ссылка ИЗ &Таблица КАК Документы";
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Объект.ПолноеИмя());

    //ИЛИ

    Запрос.Текст = "Выбрать Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный ГДЕ Регистратор ССЫЛКА &Документ";
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Документ", Объект.ПолноеИмя());

    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
    //Значит документы есть
    КонецЕсли;

    КонецЕсли;
```
---
Запрос.Текст = "Выбрать ПЕРВЫЕ 1 Документы.Ссылка ИЗ &Таблица КАК Документы";

Достаточно
---
Опять же, если вам нужны все ссылки по каждому виду документов, то будет лучше сделать запрос объединение:

```1c
    Выбрать ссылка Из Документ.Документ1
    ОБЪЕДИНИТЬ ВСЕ
    Выбрать ссылка Из Документ.Документ2
```

и запросом сразу получить все, что нужно.

Если ссылки на все документы не нужны, то, как правильно заметили в (10), будет достаточно запроса вида:

```1c
    Выбрать Первые 1 Ссылка Из Документ.Документ1
```
---
как проверить существование документа в базе?

```1c
    Если Эл.Количество() > 0 Тогда
```
---
Если Эл.Количество() > 0 Тогда
получите ошибку
---
в зависимости как именно вы хотите проверить наличие документов:

```1c
    ///За циклом:
    Запрос = Новый Запрос;

    ......

    Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда

    Запрос.Текст = "Выбрать Документы.Ссылка ИЗ &Таблица КАК Документы";
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Таблица", Объект.ПолноеИмя());

    //ИЛИ

    Запрос.Текст = "Выбрать Регистратор ИЗ РегистрБухгалтерии.Хозрасчетный ГДЕ Регистратор ССЫЛКА &Документ";
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Документ", Объект.ПолноеИмя());

    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
    //Значит документы есть
    КонецЕсли;

    КонецЕсли;
```
---
Запрос.Текст = "Выбрать ПЕРВЫЕ 1 Документы.Ссылка ИЗ &Таблица КАК Документы";

Достаточно
---
Судя по коду ТС - нет, нужны именно все ссылки на документы
---
вы же здесь цикл по метаданным делаете. Так вы не проверите есть ли документ в базе (ссылка).
---
Типа этого может быть ?

```1c
    Для Каждого Эл Из ОбъектыМД Цикл
    Для Каждого ДокСсылка Из Документы[Эл] Цикл
```
---
Для Каждого ДокСсылка Из Документы[Эл] Цикл

результатом выполнения будет

```1c
    Для Каждого ДокСсылка Из Документы["Документы"] Цикл
```

Если Документ с именем "Документы" в дереве метаданных существует, то выполнится, но ссылок вы не получите, если документа в дереве метаданных нет, то будет ошибка.
---
Да, у меня ошибка вылезла,что поле объекта не обнаружено. Сейчас пробую вот так:

```1c
    Если Объект.Движения.Содержит(Метаданные.РегистрыБухгалтерии.Хозрасчетный) Тогда

    ТипДокумента = Объект.Имя;
    ВыборДок = Документы[ТипДокумента].Выбрать();

    Пока ВыборДок.Следующий() Цикл

    Если ЗначениеЗаполнено(ВыборДок.Ссылка) Тогда

    Сообщить(Объект);

    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
```

Если не получится, попробую метод, что вы выше написали. Спасибо!
---
Таким образом вы проверяете наличие любого документа выбранного типа.
Если это правильно по логике вашего кода, то можно делать так, но при существовании большого количества документов процесс может сильно затянуться по времени.
---
я уже это понял, опытным путем, когда на цикле завис :D. Буду пробовать ваш метод. Спасибо!
---
Опять же, если вам нужны все ссылки по каждому виду документов, то будет лучше сделать запрос объединение:

```1c
    Выбрать ссылка Из Документ.Документ1
    ОБЪЕДИНИТЬ ВСЕ
    Выбрать ссылка Из Документ.Документ2
```

и запросом сразу получить все, что нужно.

Если ссылки на все документы не нужны, то, как правильно заметили в (10), будет достаточно запроса вида:

```1c
    Выбрать Первые 1 Ссылка Из Документ.Документ1
```
---
Всем спасибо, коллеги!
---
я так понял автору необходимо понимать есть ли документ как (тип) объект в базе
если правильно понял то, я сначала 1 раз загоняю все возможные Типы, имена, объектов в массив, потом уже при передаче данных просто делаю поиск в массиве так думаю быстрее,
хотя могу и ошибаться

вот пример создания массива

```1c
    Для каждого Документ Из Метаданные.Документы Цикл
    МассивТиповТекст.Добавить("ДокументСсылка."+Документ.Имя);
    КонецЦикла;

    Далее уже поиск в массиве
    ****
    Если МассивТиповТекст.Найти(TYPEДок) <> Неопределено Тогда
    ****
    КонецЕсли

    и если найден тип документа как объект в базе то уже происходит поиск по Гуиду

    чтото вроде

    ИскомыйДок = XMLЗначение(Тип("ДокументСсылка."+ИмяДокумента), Строка(Guid));

    ссылкаПоГуиду = Документы[ИмяДокумента].ПолучитьСсылку(Новый УникальныйИдентификатор(Строка(Guid)));

    Если СтрНайти(Строка(ИскомыйДок), "<Объект не найден>")>0 Тогда

    ****
    Иначе
    ****
    КонецЕсли
```