Ситуация: обычные формы, клиент-серверный вариант базы. Пользователь без прав на создание документа работает в документе и может возникнуть ситуацию, когда пользователю надо создать копию документа и записать туда его текущее состояние. Документ в котором он работает ему создает другой пользователь с достаточными правами.
Пользователю выведена кнопка - сохранить копию документа.
Кнопка вызывает СоздатьДокумент() и дальше по тексту в новый документ складывается весь контекст формы и так далее.
Очевидно, что в момент вызова СоздатьДокумент() проверка прав говорит что галочка на создание документов не стоит и НАРУШЕНИЕ ПРАВ ДОСТУПА!11. Вызов привилегированного режима на клиенте (в модуле обычной формы или в модуле объекта документа на обычных формах), естественно, не дает никаких результатов, потому что имеет силу только на сервере.
Выходит, надо создавать документ на сервере. Но как туда попасть, если я не хочу весь контекст формы переть на сервер? Как мне заставить обычную форму работать на сервере?)
Из решений я вижу два варианта:
1) разрешить пользователю создание документа и отбить в форме списка документов событие добавления нового объекта;
2) тащить в привилегированный модуль весь контекст объекта в его текущем состоянии как пользователь наредактировал.
А может я могу как-то заставить модуль обычной формы или модуль объекта документа работать на сервере?
(1) да, это второй вариант решения, но он дорогой потому что надо паковать все пожитки и тащить в серверный модуль чтобы там распаковать и разложить в копию документа. Дорого, а я ленивый. Хочется в 2 строчки кода или типа того.
Еще я тут видел историю товарища (Обычное приложение, модуль объекта который подсунул основную форму документу управляемую и контекст модуля объекта вроде как тоже на сервере компилится. Но это тоже какой-то стремный способ.
(0) выйди на серверный модуль, там под привилегиями СоздатьДокумент(), заполнить его копированием по ссылке, записать(), вернули ссылку.
вернулся в форму документа с кнопкой, по ссылке получить форму, докинул то, что изменилось в текущей версии, показал форму
(4) Отлично. Это то что я искал, спасибо. Сам уперся и никак не мог продумать путь.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший