Поле объекта недоступно для записи
Всем привет,
знаю, что тема уже избита, но не могу разобраться сама, прошу помощи
Хочу сделать обработку в комплексном процессе, которая бы выполняла программное "подписание" документа в случае, если автором документа является тот, кто должен его подписывать.
При запуске ошибка
Я так понимаю, что неправильно обращаюсь к объекту ЭтотДокумент и его реквизитам
Пробовала ПолучитьОбъект() из него, успехом не увенчалось
Я новичок и с этими объектами у меня пока полная каша в голове)))
знаю, что тема уже избита, но не могу разобраться сама, прошу помощи
Хочу сделать обработку в комплексном процессе, которая бы выполняла программное "подписание" документа в случае, если автором документа является тот, кто должен его подписывать.
ЭтотДокумент = Процесс.Предметы[0].Предмет;
АвторДокумента = ЭтотДокумент.Подписал;
ЭтотДокумент.РезультатПодписания = Перечисления.РезультатыПодписания.Подписан;
ЭтотДокумент.Подписал = АвторДокумента;
ЭтотДокумент.ДатаПодписания = ТекущаяДата();
ЭтотДокумент.КомментарийПодписи = "Документ был подписан автоматически (автор документа является его подписантом)";
ЭтотДокумент.УстановилПодпись = АвторДокумента;
ЭтотДокумент.ДатаУстановкиПодписи = ТекущаяДата();
Делопроизводство.ЗаписатьСостояниеДокумента(
ЭтотДокумент,
ТекущаяДата(),
Перечисления.СостоянияДокументов.Подписан,
АвторДокумента);
ПоказатьПри запуске ошибка
Во время старта этого процесса произошла ошибка:
{ОбщийМодуль.СтартПроцессовСервер.Модуль(179)}: Ошибка при вызове метода контекста (Старт)
БизнесПроцесс.Старт();
по причине:
Ошибка при выполнении обработчика - 'ВыполнитьПроцессБезДействийОбработка'
по причине:
{(5)}: Поле объекта недоступно для записи (РезультатПодписания)
ЭтотДокумент.РезультатПодписания = Перечисления.РезультатыПодписания.Подписан;
Попробуйте стартовать процесс еще раз.
{ОбщийМодуль.СтартПроцессовСервер.Модуль(179)}: Ошибка при вызове метода контекста (Старт)
БизнесПроцесс.Старт();
по причине:
Ошибка при выполнении обработчика - 'ВыполнитьПроцессБезДействийОбработка'
по причине:
{(5)}: Поле объекта недоступно для записи (РезультатПодписания)
ЭтотДокумент.РезультатПодписания = Перечисления.РезультатыПодписания.Подписан;
Попробуйте стартовать процесс еще раз.
Я так понимаю, что неправильно обращаюсь к объекту ЭтотДокумент и его реквизитам
Пробовала ПолучитьОбъект() из него, успехом не увенчалось
Я новичок и с этими объектами у меня пока полная каша в голове)))
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
(7)
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.
Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.
Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(1) Воз эта строчка:
ЭтотДокумент = Процесс.Предметы[0].Предмет;
Тут много вопросов:
1) Какой тип документа возвращает: Процесс.Предметы[0].Предмет
2) Всегда ли там есть документ?
Если там всегда есть документ, то правильно будет так:
ЭтотДокумент = Процесс.Предметы[0].Предмет.ПолучитьОбъект();
Но что бы быть уверенным, можно написать так:
Сообщить(ТипЗнч(Процесс.Предметы[0].Предмет)); И все станет ясно
ЭтотДокумент = Процесс.Предметы[0].Предмет;
Тут много вопросов:
1) Какой тип документа возвращает: Процесс.Предметы[0].Предмет
2) Всегда ли там есть документ?
Если там всегда есть документ, то правильно будет так:
ЭтотДокумент = Процесс.Предметы[0].Предмет.ПолучитьОбъект();
Но что бы быть уверенным, можно написать так:
Сообщить(ТипЗнч(Процесс.Предметы[0].Предмет)); И все станет ясно
(4)
1) не уверена, должен быть объект, как мне казалось)))
это обработка в комплексных процессах, там с помощью Сообщить() не понимаю как посмотреть тип))) (посмотрите скрин, пожалуйста)
2) документ есть всегда
через ПолучитьОбъект пробовала, процесс отрабатывает, ошибки нет, но реквизиты не заполняются (кроме состояния документа)
1) не уверена, должен быть объект, как мне казалось)))
это обработка в комплексных процессах, там с помощью Сообщить() не понимаю как посмотреть тип))) (посмотрите скрин, пожалуйста)
2) документ есть всегда
через ПолучитьОбъект пробовала, процесс отрабатывает, ошибки нет, но реквизиты не заполняются (кроме состояния документа)
Прикрепленные файлы:
(7)
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.
Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
1) Не совсем видно, но видимо там может быть разные типы, не только документ: Тема, контрагент и т.д.
2) На клиенте может выполнятся не эта процедура Делопроизводство.ЗаписатьСостояниеДокумента(), а весь модуль, где пишется данный код. Но если Получитьобъект() отрабатывал, то значит все ок, выполняется на сервере.
3) Сообщение работает так, при выполнение, выдает в служебные сообщения текст, то есть нужно запустить процесс и выдаст сообщение, конечно, если только запускается не регламентным заданием. Тогда сообщение некому выдавать.
Возможно в процедуре Делопроизводство.ЗаписатьСостояниеДокумента() не записываются сделанные изменения.
После присвоения реквизитов добавьте такую строчку: ЭтотДокументОбъект.Записать()
(9)
А подскажите, пожалуйста, еще, в модуле Делопроизводство есть процедура ЗаписатьДанныеДокумента(Документ, Реквизит, Значение), я так поняла как раз хотела использовать ее для записи значений реквизитов документа
То есть обработка выглядит например так:
Так вот обработка отрабатывает без ошибок, состояние документа меняется, а комментарий нет...
P.s. если у вас стоит Документооборот и вы можете посмотреть, конечно....
А подскажите, пожалуйста, еще, в модуле Делопроизводство есть процедура ЗаписатьДанныеДокумента(Документ, Реквизит, Значение), я так поняла как раз хотела использовать ее для записи значений реквизитов документа
То есть обработка выглядит например так:
Делопроизводство.ЗаписатьДанныеДокумента(ЭтотДокумент, "Комментарий", "12345");
Делопроизводство.ЗаписатьСостояниеДокумента(
ЭтотДокумент,
ТекущаяДата(),
Перечисления.СостоянияДокументов.Подписан,
АвторДокумента);
Так вот обработка отрабатывает без ошибок, состояние документа меняется, а комментарий нет...
P.s. если у вас стоит Документооборот и вы можете посмотреть, конечно....
Пробовала ПолучитьОбъект() из него, успехом не увенчалось
Было Абсолютно правильной идеей!!!
И потому ройте почему у вас там это не увенчалось...
Получать объекты можно только на сервере, и потому 90% вероятности могу утверждать , что вы пытались на клиенте...
(5)
Процедура выполняется, получается, что не на клиенте все-таки?
Если пытаюсь ПолучитьОбъект из Предмета, то процесс выполняется без ошибок, процедура ЗаписатьСостояние... отрабатывает, но реквизиты документа,связанные с подписью, не заполняются...
Процедура
Делопроизводство.ЗаписатьСостояниеДокумента()
Если пытаюсь ПолучитьОбъект из Предмета, то процесс выполняется без ошибок, процедура ЗаписатьСостояние... отрабатывает, но реквизиты документа,связанные с подписью, не заполняются...
Если вы работает с файловой версией, то это конечно не важно - клиент или сервер...
Ибо рельные ошибки будут только в клиент-серверном варианте!
То есть в конфигураторе синтаксический анализ даже может выдать , что ПолучитьОбъект() невозможно на клиенте, но он прекрасно получится при файловом варианте и откажется работать при серверном...
Поэтому нужно четко понимать ЧТО и ДЛЯ чего вы делаете глобально...
Ибо рельные ошибки будут только в клиент-серверном варианте!
То есть в конфигураторе синтаксический анализ даже может выдать , что ПолучитьОбъект() невозможно на клиенте, но он прекрасно получится при файловом варианте и откажется работать при серверном...
Поэтому нужно четко понимать ЧТО и ДЛЯ чего вы делаете глобально...