Нужно это для того, чтобы была возможность поменять дату подчиненного документа при проведении документа-основания. Поскольку дату уже проведенного система менять не дает с выдачей ошибки "Невозможно изменение даты проведенного документа!", нужно отменить проведение, поменять дату и реквизиты, и перепровести.
Про лайфхак с открытием формы с передачей контекста документа и команды в качестве параметра, с проверкой параметра в ПриОткрытии документа и выполнении нужных действий там - знаю. С проведением это работает. А с отменой проведения - не.
Если делать в ПриОткрытии Конт.СделатьНеПроведенным() - то не выдает никаких ошибок, но документ так и остается проведенным. Если через Док=СоздатьОбъект("Документ") с поиском текущего документа контекста и потом делать Док.СделатьНеПроведенным() - выдает ошибку "Данная операция недоступна при проведении документа".
Через глобальную процедуру ОбработкаОжидания() - в ней крутится диспетчер, который в зависимости от полученных параметров (опять же через глобальную переменную-список значений) выполняет то или иное действо.
(0) У меня сделано через Formex В журнале добавляешь процедуру
Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
Если Событие = "СделатьНепроведенным" Тогда
Док = СоздатьОбъект("Документ");
Док.НайтиДокумент(ТекущийДокумент);
Док.СделатьНеПроведенным();
Форма.Обновить();
КонецЕсли;
КонецПроцедуры // ОбработкаВнешнегоСобытия()
а в модуле проведения вызываешь
Сервис = СоздатьОбъект("Сервис");
Сервис.ВнешнееСобытие(Вид(),"СделатьНепроведенным","Форма");
Возврат;
Да, наверное, можно всё это будет сделать асинхронно, из обработки ожидания, куда передали нужные параметры через глобальную переменную, уже после того, как основная обработка проведения завершилась.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший