Помогите начинающему разработчику. Нужно запретить изменение организации в договоре контрагента если по нему уже было движение.
Хочу с помощью запроса проверить имеет ли договор ссылки, и потом уже поставить запрет на изменение.
---
Нашел оказывается в модуле объекта УТ10 это стандартная проверка.Но у меня кто то ее за комментировал и проверки не проводились

```1c
    // Проверим можно ли изменять реквизиты договора.
    // Проверка осуществляется только если записывается уже существующий договор
    Если НЕ ОбменДанными.Загрузка И НЕ ЭтоНовый() Тогда

    Если ЭтоГруппа Тогда

    // Для группы владельца менять нельзя
    Если Владелец <> Ссылка.Владелец Тогда

    Сообщить("Нельзя изменять контрагента для группы договоров.", СтатусСообщения.Важное);
    //Отказ = Истина;

    КонецЕсли;

    Иначе

    // Проверим возможность смены владельца для договора
    Если Владелец <> Ссылка.Владелец Тогда

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
    | ДокументыПоДоговоруКонтрагента.Ссылка
    |ИЗ
    | КритерийОтбора.ДокументыПоДоговоруКонтрагента(&Договор) КАК ДокументыПоДоговоруКонтрагента";

    Запрос.УстановитьПараметр("Договор", Ссылка);

    Результат = Запрос.Выполнить();
    ЕстьДокументыПоДоговору = НЕ Результат.Пустой();

    Если ЕстьДокументыПоДоговору Тогда
    Сообщить("Существуют документы, оформленные по договору "" + Наименование + "".
    |Контрагент договора не может быть изменен, элемент не записан.",
    СтатусСообщения.Важное);
    //Отказ = Истина;
    КонецЕсли;

    КонецЕсли;

    // Проверим возможность смены способа ведения взаиморасчетов и валюты взаиморасчетов
    Если ВедениеВзаиморасчетов <> Ссылка.ВедениеВзаиморасчетов
    ИЛИ ВалютаВзаиморасчетов <> Ссылка.ВалютаВзаиморасчетов
    ИЛИ ВидДоговора <> Ссылка.ВидДоговора
    ИЛИ Организация <> Ссылка.Организация
    ИЛИ РасчетыВУсловныхЕдиницах <> Ссылка.РасчетыВУсловныхЕдиницах
    ИЛИ ВидУсловийДоговора <> Ссылка.ВидУсловийДоговора
    ИЛИ ВестиПоДокументамРасчетовСКонтрагентом <> Ссылка.ВестиПоДокументамРасчетовСКонтрагентом Тогда

    Если ЭтотОбъект.СуществуютСсылки() Тогда

    Сообщить("Существуют документы, проведенные по договору "" + Наименование + "".
    |Реквизиты "Организация", "Ведение взаиморасчетов", "Валюта взаиморасчетов", "Вид договора",
    |"Вести по документам расчетов с контрагентом", "Расчеты в условных единицах" и "Условия выполнения договора" не могут быть изменены, элемент не записан.",
    СтатусСообщения.Важное);
    //Отказ = Истина;

    КонецЕсли;

    КонецЕсли;
    Если ОбособленныйУчетТоваровПоЗаказамПокупателей<>Ссылка.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
    Если ПолныеПрава.ПроверитьНаличиеСсылокНаДоговорКонтрагентаВЗаказахПокупателе­й(Ссылка) Тогда
    Сообщить("Существуют заказы покупателей, проведенные по договору "" + Наименование + "".
    |Реквизит "Обособленный учет товаров по заказам покупателей" не может быть изменен, элемент не записан.",
    СтатусСообщения.Важное);
    //Отказ = Истина;

    КонецЕсли;

    КонецЕсли;

    // Если изменился порядок регистрации счетов-фактур на аванс, нужно сообщить
    Если ПорядокРегистрацииСчетовФактурНаАвансПоДоговору <> Ссылка.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору Тогда
    Если ЭтотОбъект.СуществуютСсылки() Тогда
    Сообщить("Изменился порядок регистрации счетов-фактур на аванс по договору.
    |При регистрации счетов-фактур на аванс за прошлые периоды возможны изменения в ранее зарегистрированных документах.", СтатусСообщения.Важное);
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

    КонецЕсли;
```
---
пробежаться по ключевым регистрам и проверить засветился там этот договор или нет.
Пример из УПП, подставьте туда свои регистры.

```1c
    Функция ПроверитьНаличиеСсылокНаДоговорКонтрагента(ДоговорКонтрагента) Экспорт

    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);

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

    Возврат НЕ Запрос.Выполнить().Пустой();

    КонецФункции
```
---
Думал пройтись по всем справочникам, но по регистрам мне большее идея привлекает. Не такой трудоемкий получается запрос
---
у вас условие звучит "если по нему уже было движение". Пройтись по справочникам ничего не даст, справочник не делает движений.
---
Думы пройтись по справочникам мягко сказать неверные! Что по вашему и в каких справочниках вы бы искали в ключе своих задач?
Пройтись по регистрам - тоже неверный подход!
А что если вы пропустите какой-то ?
---
а что если вы ошибку в коде допустите? Вот тоже самое и будет. При грамотном запросе он будет выполнятся намного быстрее чем искать ссылки во всех объектах системы.
---
запроса проверить имеет ли договор ссылки, и потом уже поставить запрет на изменение.

При открытии в конце процедуры
ЭлементыФормы.Организация.ТолькоПросмотр = Не СправочникОбъект.ЭтоНовый();
Если договор записан то редактирование организации запрещено, новый редактирование разрешено!
И при этом ненужно нагружать программу лишним запросом.
---
Это не совсем верное предложение, ибо по условию требуется редактирование запретить не у нового договора, а только у того у которого есть уже документы
---
Ну тогда в УТ 10 есть модуль
Если ПолныеПрава.Номенклатура_СуществуютСсылки(Владелец, Неопределено) Тогда
там можно посмотреть, кусок из ЕдиницыИзмерения.Модуль.ПередЗаписью
---
В синтаксис помощнике искать этот модуль?
---
Это общий модуль ПолныеПрава
---
ПолныеПрава.ПроверитьНаличиеСсылокНаДоговорКонтрагента(ДоговорКонтрагента)

```1c
    Функция ПроверитьНаличиеСсылокНаДоговорКонтрагента(ДоговорКонтрагента) Экспорт

    Запрос = Новый Запрос();
    Запрос.УстановитьПараметр("ДоговорКонтрагента", ДоговорКонтрагента);

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

    Возврат НЕ Запрос.Выполнить().Пустой();

    КонецФункции
```
---
Вот это уже реально хороший ход! ;-)
Только уточню , что стоит использовать Привегилированный режим для запуска этой процедуры...
---
Что значит использовать привелигированный режим для запуска процедуры?
---
При запуске какой-либо процедуры, у которой права на запуск только с полными правами, может возникнуть отказ в случае отсутствия полных прав у текущего пользователя. В этом случае при необходимости есть возможность перед запуском включить , а после выполнения выключить привелигированный режим, который позволит выполнить все от имени простого смертного, а не от Админа...
---
Только уточню , что стоит использовать Привегилированный режим для запуска этой процедуры...
функция находится в привилегированном модуле, вызов привилегированного режима не потребуется. наверное ;-), надо пробовать.
---
ну да верно. Требуется запретить редактирование договора по которому были движения
---
так как запрос идет к регистрам накопления, то проверяются только проведенные документы, могут быть не проведённые, счет на оплату например. лучше запрещать после записи. Так вернее.
---
Вообще я хотел реализовать в процедуре перед записью
---
Их две, одна в модуле формы, другая в модуле объекта. лучше в модуле объекта!
---
Почему лучше аргументируйте? я всегда делал на модуле формы
---
Записать из модуля формы выполняется только из формы, а из модуля объекта будет выполнятся при любой попытки Записать()... как то так
---
ну по идее мне так и нужно чтобы после открытия это выполнялось, и при попытке перезаписать
---
по идее мне так и нужно чтобы после открытия это выполнялось, и при попытке перезаписать
При попытки программной перезаписи модуль объекта выполнится, а модуль формы нет. По обстоятельствам...
---
Нашел оказывается в модуле объекта УТ10 это стандартная проверка.Но у меня кто то ее за комментировал и проверки не проводились

```1c
    // Проверим можно ли изменять реквизиты договора.
    // Проверка осуществляется только если записывается уже существующий договор
    Если НЕ ОбменДанными.Загрузка И НЕ ЭтоНовый() Тогда

    Если ЭтоГруппа Тогда

    // Для группы владельца менять нельзя
    Если Владелец <> Ссылка.Владелец Тогда

    Сообщить("Нельзя изменять контрагента для группы договоров.", СтатусСообщения.Важное);
    //Отказ = Истина;

    КонецЕсли;

    Иначе

    // Проверим возможность смены владельца для договора
    Если Владелец <> Ссылка.Владелец Тогда

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1
    | ДокументыПоДоговоруКонтрагента.Ссылка
    |ИЗ
    | КритерийОтбора.ДокументыПоДоговоруКонтрагента(&Договор) КАК ДокументыПоДоговоруКонтрагента";

    Запрос.УстановитьПараметр("Договор", Ссылка);

    Результат = Запрос.Выполнить();
    ЕстьДокументыПоДоговору = НЕ Результат.Пустой();

    Если ЕстьДокументыПоДоговору Тогда
    Сообщить("Существуют документы, оформленные по договору "" + Наименование + "".
    |Контрагент договора не может быть изменен, элемент не записан.",
    СтатусСообщения.Важное);
    //Отказ = Истина;
    КонецЕсли;

    КонецЕсли;

    // Проверим возможность смены способа ведения взаиморасчетов и валюты взаиморасчетов
    Если ВедениеВзаиморасчетов <> Ссылка.ВедениеВзаиморасчетов
    ИЛИ ВалютаВзаиморасчетов <> Ссылка.ВалютаВзаиморасчетов
    ИЛИ ВидДоговора <> Ссылка.ВидДоговора
    ИЛИ Организация <> Ссылка.Организация
    ИЛИ РасчетыВУсловныхЕдиницах <> Ссылка.РасчетыВУсловныхЕдиницах
    ИЛИ ВидУсловийДоговора <> Ссылка.ВидУсловийДоговора
    ИЛИ ВестиПоДокументамРасчетовСКонтрагентом <> Ссылка.ВестиПоДокументамРасчетовСКонтрагентом Тогда

    Если ЭтотОбъект.СуществуютСсылки() Тогда

    Сообщить("Существуют документы, проведенные по договору "" + Наименование + "".
    |Реквизиты "Организация", "Ведение взаиморасчетов", "Валюта взаиморасчетов", "Вид договора",
    |"Вести по документам расчетов с контрагентом", "Расчеты в условных единицах" и "Условия выполнения договора" не могут быть изменены, элемент не записан.",
    СтатусСообщения.Важное);
    //Отказ = Истина;

    КонецЕсли;

    КонецЕсли;
    Если ОбособленныйУчетТоваровПоЗаказамПокупателей<>Ссылка.ОбособленныйУчетТоваровПоЗаказамПокупателей Тогда
    Если ПолныеПрава.ПроверитьНаличиеСсылокНаДоговорКонтрагентаВЗаказахПокупателе­й(Ссылка) Тогда
    Сообщить("Существуют заказы покупателей, проведенные по договору "" + Наименование + "".
    |Реквизит "Обособленный учет товаров по заказам покупателей" не может быть изменен, элемент не записан.",
    СтатусСообщения.Важное);
    //Отказ = Истина;

    КонецЕсли;

    КонецЕсли;

    // Если изменился порядок регистрации счетов-фактур на аванс, нужно сообщить
    Если ПорядокРегистрацииСчетовФактурНаАвансПоДоговору <> Ссылка.ПорядокРегистрацииСчетовФактурНаАвансПоДоговору Тогда
    Если ЭтотОбъект.СуществуютСсылки() Тогда
    Сообщить("Изменился порядок регистрации счетов-фактур на аванс по договору.
    |При регистрации счетов-фактур на аванс за прошлые периоды возможны изменения в ранее зарегистрированных документах.", СтатусСообщения.Важное);
    КонецЕсли;
    КонецЕсли;

    КонецЕсли;

    КонецЕсли;
```
---
По аналогии с единицей измерения код должен быть примерно такой
в модуле ЕдиницыИзмерения

```1c
    // Обработчик события ПередЗаписью .
    //
    Процедура ПередЗаписью(Отказ)

    Если НЕ ОбменДанными.Загрузка
    И ТипЗнч(Владелец) = Тип("СправочникСсылка.Номенклатура") Тогда
    Если Владелец.ЕдиницаХраненияОстатков = Ссылка Тогда

    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка);

    Запрос.Текст =
    "ВЫБРАТЬ
    | ЕдиницыИзмерения.Ссылка КАК Элемент,
    | ЕдиницыИзмерения.Коэффициент КАК Коэффициент
    |ИЗ
    | Справочник.ЕдиницыИзмерения КАК ЕдиницыИзмерения
    |
    |ГДЕ
    | ЕдиницыИзмерения.Ссылка = &ТекущийЭлемент";

    Выборка = Запрос.Выполнить().Выбрать();

    Если Выборка.Следующий() Тогда
    Если Выборка.Коэффициент <> Коэффициент Тогда
    Если ПолныеПрава.Номенклатура_СуществуютСсылки(Владелец, Неопределено) Тогда
    ОбщегоНазначения.СообщитьОбОшибке("Единица "" + СокрЛП(Наименование) + "" является единицей хранения остатков для "" +
    СокрЛП(Владелец) + "" и уже участвует в товародвижении. Изменить коэффициент уже нельзя!", Отказ);
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;

    //88( Администратор 06.05.2020 10:53:03
    Если Не Отказ И ЭтотОбъект.Коэффициент <> 1 Тогда
    ОбщегоНазначения.СообщитьОбОшибке(".единица «"+СокрЛП(ЭтотОбъект.Наименование)+"» является единицей хранения остатков для «"+СокрЛП(ЭтотОбъект.Владелец)+"», коэффициент не может отличатся от 1!");
    ЭтотОбъект.Коэффициент = 1;
    КонецЕсли;
    Иначе// дополнительная единица измерения
    Если Не РольДоступна("ПравоАдминистрирования") Тогда// Администратору коэффициент изменить можно, даже при существующих ссылках в документах
    Если ЭтотОбъект.Коэффициент <> ЭтотОбъект.Ссылка.Коэффициент Тогда// коэффициент был изменён
    Если ПолныеПрава.ЕдиницыИзмерения_СуществуютСсылки(ЭтотОбъект.Ссылка, Неопределено) Тогда
    ОбщегоНазначения.СообщитьОбОшибке(".единица измерения «"+СокрЛП(ЭтотОбъект.Наименование)+"» участвует в документах. Изменить коэффициент уже нельзя, обратитесь к Администратору!");
    ЭтотОбъект.Коэффициент = ЭтотОбъект.Ссылка.Коэффициент;
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    //)88 Администратор 06.05.2020 10:53:06
    КонецЕсли;
    КонецЕсли;

    Если Не ОбменДанными.Загрузка
    И Не Отказ
    И Коэффициент = 0 Тогда
    ОбщегоНазначения.СообщитьОбОшибке("Для "+СокрЛП(Владелец)+" у единицы измерения "+СокрЛП(Ссылка)+" не задан коэффициент! Он будет установлен равным 1.");
    Коэффициент = 1;
    КонецЕсли;

    КонецПроцедуры // ПередЗаписью()

    // Функция проверяет, существуют ли ссылки на единицу измерения в документах.
    // Если есть - нельзя менять коэффицент
    //
    // Параметры:
    // СуществуютСсылки - булево, переменная, в которой сохраняется результат работы функции, чтобы
    // при последующих вызовах заново не считать функцию.
    //
    // Возвращаемое значение:
    // Истина - если есть ссылки в документах, Ложь - если нет.
    //
    Функция ЕдиницыИзмерения_СуществуютСсылки(Ссылка, СуществуютСсылки) Экспорт

    Если НЕ ЗначениеЗаполнено(Ссылка) Тогда
    Возврат Ложь;
    ИначеЕсли СуществуютСсылки <> Неопределено Тогда
    Возврат СуществуютСсылки; // уже было рассчитано
    КонецЕсли;

    Запрос = Новый Запрос();

    Запрос.УстановитьПараметр("ТекущаяЕдиницаИзмерения", Ссылка);

    ТипЕдиницаИзмерения = Тип("СправочникСсылка.ЕдиницыИзмерения");

    Запрос.Текст = ";

    Для Каждого Документ Из Метаданные.Документы Цикл
    Для Каждого ТабличнаяЧасть Из Документ.ТабличныеЧасти Цикл
    Для Каждого РеквизитТабличнаяЧасть Из ТабличнаяЧасть.Реквизиты Цикл
    Если РеквизитТабличнаяЧасть.Тип.СодержитТип(ТипЕдиницаИзмерения) Тогда
    Если Запрос.Текст <> " Тогда
    Запрос.Текст = Запрос.Текст+"
    |ОБЪЕДИНИТЬ ВСЕ
    |";
    КонецЕсли;
    Запрос.Текст = Запрос.Текст+"
    |ВЫБРАТЬ ПЕРВЫЕ 1
    | 1 КАК Результат
    |ИЗ
    | Документ."+Документ.Имя+"."+ТабличнаяЧасть.Имя+" КАК Док
    |ГДЕ
    | Док."+РеквизитТабличнаяЧасть.Имя+" = &ТекущаяЕдиницаИзмерения
    |";
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;

    Возврат Не Запрос.Выполнить().Пустой();

    КонецФункции
```
---
начните с консоли запросов
---
Есть такая функция НайтиПоСсылкам(), попробуй её
---
```1c
    Ссылки = НайтиСсылкиНаОбъект();
    ТабСсылок = НайтиПоСсылкам (Ссылки);
    Для Каждого Ссылка из ТабСсылок Цикл
    Сообщить (" " + Сокр(Ссылка[0]) + " " + Сокр(Ссылка[1]));
    КонецЦикла;
    С этим пробовал тоже уже. Но что не удалось с ним подружится
```
---
Вот так попробуй.

```1c
    Договор = Справочники.ДоговорыКонтрагентов.НайтиПоРеквизиту("Номер","ДОГ45658\12");
    МассивСсылок = Новый Массив;
    МассивСсылок.Добавить(Договор);

    ТабСсылок = НайтиПоСсылкам(МассивСсылок);

    Для Каждого Строка из ТабСсылок Цикл
    Сообщить(Строка.Данные);
    КонецЦикла
```
---
Ошибку в коде допустить гораздо труднее. Практически невозможно, ибо синтаксис ясно проверяет платформа, а логика проверяется автоматом на одном договоре с документом, если его находит код , значит 100% рабочий...

А вот пропустить регистр из-за не знания списка регистров , где в принципе нужно искать - да с полпинка!
И никакая проверка не прокатит, нужно именно знание всех необходимых регистров...

И вообще у вас что конкретные претензии к методу НайтиПоСсылкам ??
---
если нет знаний регистров, то и не надо рисовать запрос. Я лишь предложил оптимальный на мой взгляд вариант.
Претензии к методу я описал выше. При достаточно крупной БД метод не блещет скоростью выполнения.
---
Вы бы проанализировали тогда уж все исходные данные перед тем как давать рекомендации...
Зачем сначала давать совет писать запрос по регистрам, а потом сказать - если ты не знаешь регистры , то не пользуйся!
Вы даете свой совет НАЧИНАЮЩЕМУ! задумайтесь и сами оцените свои ответы...
---
нет никакого желания с вами общаться, всего вам наилучшего.
---
Кооонечно! Вам же только с единственно умным собеседником есть желания общаться - пообщайтесь с ним... ;-)
---
вы просто неадекват, мне жаль.
---
Ваш стиль - только себя видеть всегда правым?
Вы в принципе способны вести дисскусию, приводя хоть какие-либо аргументы?
Или следующий шаг будет перечисление моих физических уродств?
Хотя возможно вы даже не понимаете как низко пали...
---
Тоже склоняюсь больше к запросу. Потому что УТ сильно переписана и всех регистров я не знаю. Я с ними долго разбиратся