Всем привет,
знаю, что тема уже избита, но не могу разобраться сама, прошу помощи

Хочу сделать обработку в комплексном процессе, которая бы выполняла программное "подписание" документа в случае, если автором документа является тот, кто должен его подписывать.

```1c
    ЭтотДокумент = Процесс.Предметы[0].Предмет;

    АвторДокумента = ЭтотДокумент.Подписал;

    ЭтотДокумент.РезультатПодписания = Перечисления.РезультатыПодписания.Подписан;
    ЭтотДокумент.Подписал = АвторДокумента;
    ЭтотДокумент.ДатаПодписания = ТекущаяДата();
    ЭтотДокумент.КомментарийПодписи = "Документ был подписан автоматически (автор документа является его подписантом)";
    ЭтотДокумент.УстановилПодпись = АвторДокумента;
    ЭтотДокумент.ДатаУстановкиПодписи = ТекущаяДата();

    Делопроизводство.ЗаписатьСостояниеДокумента(
    ЭтотДокумент,
    ТекущаяДата(),
    Перечисления.СостоянияДокументов.Подписан,
    АвторДокумента);
```

При запуске ошибка
Во время старта этого процесса произошла ошибка:
{ОбщийМодуль.СтартПроцессовСервер.Модуль(179)}: Ошибка при вызове метода контекста (Старт)
  БизнесПроцесс.Старт();
по причине:
Ошибка при выполнении обработчика - 'ВыполнитьПроцессБезДействийОбработка'
по причине:
{(5)}: Поле объекта недоступно для записи (РезультатПодписания)
ЭтотДокумент.РезультатПодписания = Перечисления.РезультатыПодписания.Подписан;
Попробуйте стартовать процесс еще раз.

Я так понимаю, что неправильно обращаюсь к объекту ЭтотДокумент и его реквизитам
Пробовала ПолучитьОбъект() из него, успехом не увенчалось
Я новичок и с этими объектами у меня пока полная каша в голове)))
---
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.

Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
---
Воз эта строчка:
ЭтотДокумент = Процесс.Предметы[0].Предмет;
Тут много вопросов:
1) Какой тип документа возвращает: Процесс.Предметы[0].Предмет
2) Всегда ли там есть документ?
Если там всегда есть документ, то правильно будет так:
ЭтотДокумент = Процесс.Предметы[0].Предмет.ПолучитьОбъект();
Но что бы быть уверенным, можно написать так:
Сообщить(ТипЗнч(Процесс.Предметы[0].Предмет)); И все станет ясно
---
1) не уверена, должен быть объект, как мне казалось)))
это обработка в комплексных процессах, там с помощью Сообщить() не понимаю как посмотреть тип))) (посмотрите скрин, пожалуйста)
2) документ есть всегда
через ПолучитьОбъект пробовала, процесс отрабатывает, ошибки нет, но реквизиты не заполняются (кроме состояния документа)
---
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.

Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
---
1) да, там целый список (сделала скрин)
3) да, обработка запускается регламентным заданием

УРРАААА!!!! Спасибо огромное!!!! метод Записать() - это то, чего не хватало!!!
---
Добавьте условие на проверку, что бы не сломалось неожиданно
Если ТипЗнч(Документ) = тип("НужныйТипдокумента") Тогда
//Выполняем прописанны код
КонецЕсли;
Это что бы неожиданное, не сломалось на чем нить.
---
А подскажите, пожалуйста, еще, в модуле Делопроизводство есть процедура ЗаписатьДанныеДокумента(Документ, Реквизит, Значение), я так поняла как раз хотела использовать ее для записи значений реквизитов документа

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

```1c
    Делопроизводство.ЗаписатьДанныеДокумента(ЭтотДокумент, "Комментарий", "12345");

    Делопроизводство.ЗаписатьСостояниеДокумента(
    ЭтотДокумент,
    ТекущаяДата(),
    Перечисления.СостоянияДокументов.Подписан,
    АвторДокумента);
```

Так вот обработка отрабатывает без ошибок, состояние документа меняется, а комментарий нет...

P.s. если у вас стоит Документооборот и вы можете посмотреть, конечно....
---
Название еще ни о чем не говорит. Надо перейти к данной процедуре и посмотреть описание, если в описание нет ничего, по коду посмотреть, что она записывает.
Может она изменяет только определенные реквизиты или только по определенным условиям.
---
да, извините, начала разбираться и поняла, что это процедура для записи данных документа в регистры сведений ))
---
А какой тип у Процесс.Предметы[0].Предмет ?
---
Пробовала ПолучитьОбъект() из него, успехом не увенчалось
Было Абсолютно правильной идеей!!!
И потому ройте почему у вас там это не увенчалось...
Получать объекты можно только на сервере, и потому 90% вероятности могу утверждать , что вы пытались на клиенте...
---
А также, возможно данный модуль выполняется на клиенте и все это бессмысленно :-)
---
Процедура
```1c
    Делопроизводство.ЗаписатьСостояниеДокумента()
```
 выполняется, получается, что не на клиенте все-таки?
Если пытаюсь ПолучитьОбъект из Предмета, то процесс выполняется без ошибок, процедура ЗаписатьСостояние... отрабатывает, но реквизиты документа,связанные с подписью, не заполняются...
---
Если вы работает с файловой версией, то это конечно не важно - клиент или сервер...
Ибо рельные ошибки будут только в клиент-серверном варианте!
То есть в конфигураторе синтаксический анализ даже может выдать , что ПолучитьОбъект() невозможно на клиенте, но он прекрасно получится при файловом варианте и откажется работать при серверном...
Поэтому нужно четко понимать ЧТО и ДЛЯ чего вы делаете глобально...
---
Может я ошибаюсь, но в файловом варианте клиент запускается в толстом режиме, а получитьобъект() доступно в толстом клиенте.
То есть, если запустить клиент-серверный вариант в толстом клиенте, то все также отработается.
Поправьте, если я ошибаюсь.
---
Вы правы, только толстый клиент имеет ТУЧУ минусов, не даром же сделали тонкий... ;-)
---
Ну если не брать во внимание производительность, то я о минусах не в курсе. Главное что бы клиентская машина была шустрой.
---
Ага а еще канал оптоволоконный ...
А так нормально работает ERP на толстом клиенте...
---
Не говори мне о ERP, не работал с ней и хорошо. Решил как то открыть просто конфигурацию посмотреть, вообщем пока на комп не докупил до 12Гб (хватило бы и 8, но не то) оперативы, открыть было не реально. Это тот еще монстр :-)
---
Сейчас все практически новые конфигурации становятся монстрами и потому Толстый клиент запускать просто невозможно порой.
---
у нас клиент-серверный вариант