Подскажите пожалуйста как из модуля объекта можно обратиться к реквизиту который был создан программно в Форме Документа. Может быть в 1С есть возможно отключать ошибки или что-то в этом роде.
В данном случае пишет что переменная не найдена.
Тут я создаю реквизит на форме:

```1c
    &НаСервере
    Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ДобавляемыеРеквизиты = Новый Массив();
    РеквизитТестовый = Новый РеквизитФормы("Черновик",Новый ОписаниеТипов("Булево"));
    ДобавляемыеРеквизиты.Добавить(РеквизитТестовый);
    ЭтаФорма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
    НовЭлемент = Элементы.Добавить("Черновик", Тип("ПолеФормы"), Элементы.ГруппаСтатусПриоритет);
    НовЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
    НовЭлемент.ПутьКДанным = "Черновик";
    КонецПроцедуры
```

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

```1c
    Процедура ОбработкаПроведения(Отказ, РежимПроведения)
    ПолучитьДокумент = Документы.МойДокумент.СоздатьДокумент();
    ФормаДокумента = ПолучитьФорму("Документ.ФормаДокумента", ,ПолучитьДокумент);
    Если Черновик = Истина Тогда
    ВызватьИсключение "Это Черновик!";
    Отказ = Истина;
    КонецЕсли;
    КонецПроцедуры
```
---
Коллеги, ну 15 сообщений и все ерунда какая-то)

В модуле формы в событии ПередЗаписьюНаСервере добавить

```1c
    ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеРеквизита", ЭтаФорма["Черновик"]);
```

В Обработка проведения проверять

```1c
    Если ДополнительныеСвойства.Свойство("ЗначениеРеквизита") Тогда
    <Тут проверяем значение реквизита>
    КонецЕсли;
```
---
Передавать значения можно с помощью ДополнительныеСвойства. В обработчике на форме "ПередЗаписьюНаСервере"

ТекущийОбъект.ДополнительныеСвойства.Вставить("Черновик", Черновик);

В модуле проведения
Если ДополнительныеСвойства.Свойство("Черновик") Тогда //Желательно еще проверить в начале есть ли такое свойство.
ЭтоЧерновик = ДополнительныеСвойства.Черновик;
КонецЕсли;
---
```1c
    Форма = ЭтотОбъект.ПолучитьФорму("<ВашаФорма>");
    Форма.ЭлементыФормы.<ВашРеквизит>
```
---
Я пробовал так изначально) Но ругалось что интерактивные операции недоступны.
---
Хм... Ну да! Тогда ни как( Либо через Хранилище, либо хранить знечение в Реквизите объекта;
---
Спасибо) Пойду читать про хранилища)
---
В Вашем случае:

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

```1c
    &НаКлиенте
    Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

    Если Черновик Тогда
    ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Запись;
    Сообщить(НСтр("ru = 'Это черновик'"), СтатусСообщения.Информация);
    КонецЕсли;

    КонецПроцедуры
```
---
сделать его реквизитом документа.
Ваш модуль ничего не знает о вашей форме, ему доступны только реквизиты объекта.
---
А не подскажите где гайд можно прочитать какой про это?)
---
Черновик - это реквизит формы, а не документа
---
Про что именно ?
Всё есть в доке ИТС и в СП.
---
Коллеги, ну 15 сообщений и все ерунда какая-то)

В модуле формы в событии ПередЗаписьюНаСервере добавить

```1c
    ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗначениеРеквизита", ЭтаФорма["Черновик"]);
```

В Обработка проведения проверять

```1c
    Если ДополнительныеСвойства.Свойство("ЗначениеРеквизита") Тогда
    <Тут проверяем значение реквизита>
    КонецЕсли;
```
---
Технически то это сработает, но коллега в (8) задает правильный вопрос. Если этот реквизит влияет на логику документа, он должен быть реквизитом документа.
---
Костылей можно придумать несколько вариантов, но костылями они быть не перестанут.
А для случаев, когда нельзя трогать метаданные (и не только), давно уже есть расширения.
---
Из модуля объекта нельзя получить реквизит формы. Можно если форму с сервера передать в процедуру модуля объекта.
---
Передавать значения можно с помощью ДополнительныеСвойства. В обработчике на форме "ПередЗаписьюНаСервере"

ТекущийОбъект.ДополнительныеСвойства.Вставить("Черновик", Черновик);

В модуле проведения
Если ДополнительныеСвойства.Свойство("Черновик") Тогда //Желательно еще проверить в начале есть ли такое свойство.
ЭтоЧерновик = ДополнительныеСвойства.Черновик;
КонецЕсли;
---
Спасибо всем огромное за помощь
---
Вам выше написали правильно, для работы вам нужно сделать реквизит документа. Т.к. документ могут провести из списка документов, не открывая формы или в обрабочике востановления последовательности. И вы уже получите из черновика, не черновик.

Вообще черновик, это записанный не проведённый документ.
---
Понял, спасибо большое)