Поле объекта недоступно для записи

1. blandinko 11.12.18 14:40 Сейчас в теме
Всем привет,
знаю, что тема уже избита, но не могу разобраться сама, прошу помощи

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

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

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

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

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


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


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

Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. oleg-x 26 11.12.18 14:50 Сейчас в теме
(1) Воз эта строчка:
ЭтотДокумент = Процесс.Предметы[0].Предмет;
Тут много вопросов:
1) Какой тип документа возвращает: Процесс.Предметы[0].Предмет
2) Всегда ли там есть документ?
Если там всегда есть документ, то правильно будет так:
ЭтотДокумент = Процесс.Предметы[0].Предмет.ПолучитьОбъект();
Но что бы быть уверенным, можно написать так:
Сообщить(ТипЗнч(Процесс.Предметы[0].Предмет)); И все станет ясно
blandinko; +1 Ответить
7. blandinko 11.12.18 15:06 Сейчас в теме
(4)
1) не уверена, должен быть объект, как мне казалось)))
это обработка в комплексных процессах, там с помощью Сообщить() не понимаю как посмотреть тип))) (посмотрите скрин, пожалуйста)
2) документ есть всегда
через ПолучитьОбъект пробовала, процесс отрабатывает, ошибки нет, но реквизиты не заполняются (кроме состояния документа)
Прикрепленные файлы:
9. oleg-x 26 11.12.18 15:19 Сейчас в теме
(7)
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.

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


УРРАААА!!!! Спасибо огромное!!!! метод Записать() - это то, чего не хватало!!!
Прикрепленные файлы:
13. oleg-x 26 11.12.18 15:43 Сейчас в теме
(12) Добавьте условие на проверку, что бы не сломалось неожиданно
Если ТипЗнч(Документ) = тип("НужныйТипдокумента") Тогда
//Выполняем прописанны код
КонецЕсли;
Это что бы неожиданное, не сломалось на чем нить.
blandinko; +1 Ответить
14. blandinko 11.12.18 15:51 Сейчас в теме
(9)
А подскажите, пожалуйста, еще, в модуле Делопроизводство есть процедура ЗаписатьДанныеДокумента(Документ, Реквизит, Значение), я так поняла как раз хотела использовать ее для записи значений реквизитов документа

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

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

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


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

P.s. если у вас стоит Документооборот и вы можете посмотреть, конечно....
15. oleg-x 26 11.12.18 15:56 Сейчас в теме
(14) Название еще ни о чем не говорит. Надо перейти к данной процедуре и посмотреть описание, если в описание нет ничего, по коду посмотреть, что она записывает.
Может она изменяет только определенные реквизиты или только по определенным условиям.
blandinko; +1 Ответить
16. blandinko 11.12.18 16:04 Сейчас в теме
(15) да, извините, начала разбираться и поняла, что это процедура для записи данных документа в регистры сведений ))
2. bad_wag 48 11.12.18 14:48 Сейчас в теме
А какой тип у Процесс.Предметы[0].Предмет ?
3. YannikAlx 43 11.12.18 14:49 Сейчас в теме
Пробовала ПолучитьОбъект() из него, успехом не увенчалось

Было Абсолютно правильной идеей!!!
И потому ройте почему у вас там это не увенчалось...
Получать объекты можно только на сервере, и потому 90% вероятности могу утверждать , что вы пытались на клиенте...
blandinko; +1 Ответить
5. oleg-x 26 11.12.18 14:51 Сейчас в теме
А также, возможно данный модуль выполняется на клиенте и все это бессмысленно :-)
6. blandinko 11.12.18 14:57 Сейчас в теме
(5)
Процедура
 Делопроизводство.ЗаписатьСостояниеДокумента()
выполняется, получается, что не на клиенте все-таки?
Если пытаюсь ПолучитьОбъект из Предмета, то процесс выполняется без ошибок, процедура ЗаписатьСостояние... отрабатывает, но реквизиты документа,связанные с подписью, не заполняются...
8. YannikAlx 43 11.12.18 15:17 Сейчас в теме
Если вы работает с файловой версией, то это конечно не важно - клиент или сервер...
Ибо рельные ошибки будут только в клиент-серверном варианте!
То есть в конфигураторе синтаксический анализ даже может выдать , что ПолучитьОбъект() невозможно на клиенте, но он прекрасно получится при файловом варианте и откажется работать при серверном...
Поэтому нужно четко понимать ЧТО и ДЛЯ чего вы делаете глобально...
10. oleg-x 26 11.12.18 15:22 Сейчас в теме
(8) Может я ошибаюсь, но в файловом варианте клиент запускается в толстом режиме, а получитьобъект() доступно в толстом клиенте.
То есть, если запустить клиент-серверный вариант в толстом клиенте, то все также отработается.
Поправьте, если я ошибаюсь.
17. YannikAlx 43 11.12.18 16:35 Сейчас в теме
(10) Вы правы, только толстый клиент имеет ТУЧУ минусов, не даром же сделали тонкий... ;-)
18. oleg-x 26 11.12.18 16:49 Сейчас в теме
(17) Ну если не брать во внимание производительность, то я о минусах не в курсе. Главное что бы клиентская машина была шустрой.
19. YannikAlx 43 11.12.18 17:09 Сейчас в теме
(18) Ага а еще канал оптоволоконный ...
А так нормально работает ERP на толстом клиенте...
20. oleg-x 26 11.12.18 17:19 Сейчас в теме
(19) Не говори мне о ERP, не работал с ней и хорошо. Решил как то открыть просто конфигурацию посмотреть, вообщем пока на комп не докупил до 12Гб (хватило бы и 8, но не то) оперативы, открыть было не реально. Это тот еще монстр :-)
21. YannikAlx 43 11.12.18 17:21 Сейчас в теме
(20) Сейчас все практически новые конфигурации становятся монстрами и потому Толстый клиент запускать просто невозможно порой.
11. blandinko 11.12.18 15:26 Сейчас в теме
(8) у нас клиент-серверный вариант
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот