|
Автоматическое чтение движений документа при его открытии в обычном приложении | ☑ | ||
---|---|---|---|---|
0
kabanoff
03.02.16
✎
16:01
|
Всем привет!
Помогите решить проблему. Есть не типовой документ, который предназначен для корректировки движений регистров сведений (подчиненных регистратору), регистров накопления и бухгалтерии. На форме документа автоматически создаются страницы с движениями по регистрам, которые есть у документа (состав вкладок настраивается пользователем). Задача: запретить пользователям просмотр тех регистров, к которым они не имеют доступа на просмотр. Т.е. скрыть с формы те вкладки, к которым доступа нет. При этом доступ к остальным вкладкам документа должен сохраняться. У документа есть обычная форма. При открытии формы существующего документа платформа производит автоматическое чтение движений документа. Вот тут происходит платформенное исключение - "Нарушение прав доступа!". В управляемой форме проблема обходится снятием у коллекции "Объект.Движения" флажка "Использовать всегда" на форме. В обычной форме - никак не получается. Если принудительно прочитать движения документа при создании объекта документа, то движения автоматически считываться платформой не будут. Но здесь есть другая проблема - привилегированный режим. В клиент-серверной ИБ привилегированный режим на клиенте не работает. Поэтому пользователь так или иначе получит исключение. Если использовать привилегированный режим в серверном общем модуле, то здесь встает проблема с передачей движений документа на сервер. Как известно, объект документа и его движения передать в чистом виде нельзя из-за "мутабельности". Пробовали разные способы передачи: - через временное хранилище - нельзя; - через ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр() - тоже нельзя; - через сериализатор XDTO - при передаче самого объекта происходит зацикливание (т.к. сама сериализация происходит при создании объекта документа); передавать движения документа - нельзя. Какие еще есть варианты? |
|||
1
lxs
03.02.16
✎
16:06
|
Через попытку никак?
|
|||
2
Лефмихалыч
03.02.16
✎
16:12
|
(0) ИМХО, единственный вариант - это сделать обычную форму произвольной. То есть грохнуть в ней реквизит ДокументОбъект или сделать его не основным. Ты потеряешь все расширения формы документа и будешь вынужден их эмулировать кодом, но зато исключений выпадать не будет.
|
|||
3
lxs
03.02.16
✎
16:15
|
(0) Покажи кусок кода, который рисует форму
|
|||
4
kabanoff
03.02.16
✎
16:16
|
(1) Сейчас попробуем, спасибо.
(2) Не хотелось бы к этому прибегнуть. Но если не останется других вариантов, то, видимо, придется идти по этому пути. Спасибо, Лев! Мне вот интересно, есть ли возможность сериализовать объект или его движения для передачи с клиента на сервер и обратно? |
|||
5
lxs
03.02.16
✎
16:16
|
(2) Сдается мне, этот документ срисован с обработки Корректировка движений или Операция.
|
|||
6
Карупян
03.02.16
✎
16:16
|
чтение оставь, отбери просмотр
|
|||
7
DmitrO
03.02.16
✎
16:17
|
(0)А зачем тебе вообще обычная форма, пусть управляемая и работает всегда?
|
|||
8
Лефмихалыч
03.02.16
✎
16:22
|
(5) это что-то меняет?
|
|||
9
kabanoff
03.02.16
✎
16:23
|
(3) Проблема не в рисовании формы, а в коде, который расположен в модуле документа в разделе объявления переменных. Да и сам код рисования выложить не могу - он перегружен спецификой бизнеса и слишком большой.
(6) Есть ряд регистров, к которым пользователи не должны иметь доступа даже на чтение - требование бизнеса. (7) Использование обычной формы - необходимость, обусловленная текущей бизнес-логикой. Пока отказываться от нее нельзя. |
|||
10
Лефмихалыч
03.02.16
✎
16:27
|
А вы XMLСтрока() и XMLЗначение() пробовали попробовать?
|
|||
11
Лефмихалыч
03.02.16
✎
16:27
|
"он перегружен спецификой бизнеса" экий высокий слог :)
|
|||
12
kabanoff
03.02.16
✎
16:28
|
(11) Ну что поделать, если так оно и есть :)
(10) Щас попробуем, спасибо. |
|||
13
kabanoff
03.02.16
✎
17:00
|
(1) Вы не поверите, но чтение движений в Попытке решило проблему! lxs, спасибо! :)
(10) Лев, XMLСтрока() выдала "Ошибку преобразования данных XML". Думаю, можно остановиться на варианте обработки исключения.) Всем спасибо за участие!!! |
|||
14
Serg_1960
03.02.16
✎
17:17
|
(поздно тему увидел) Я так и не понял почему никто не предложил читать движения документа запросом ВЫБРАТЬ РАЗРЕШЕННЫЕ...документ и его форма - не типовые - "что хочу, то и делаю"(цы)
|
|||
15
kabanoff
03.02.16
✎
17:25
|
(14) А как бы это спасло от автоматического чтения платформой движений при открытии документа?
|
|||
16
Serg_1960
03.02.16
✎
17:27
|
Ну, ты же сам сказал в (0) "Если принудительно прочитать движения документа при создании объекта документа, то движения автоматически считываться платформой не будут"
|
|||
17
lxs
04.02.16
✎
08:35
|
(9) Ну так вот тебе начало:
Перем МассивНедоступных; ... Процедура .... Для Каждого НаборЗаписейРегистра Из Движения Цикл Попытка НаборЗаписейРегистра.Прочитать(); Исключение МассивНедоступных.Добавить(<Тут имя регистра или любой другой признак, однозначно идентифицирующийнабор>); КонецПопытки; КонецЦикла; ... А дальше, используя полученный массив, переписываешь отрисовку формы. |
|||
18
kabanoff
05.02.16
✎
09:47
|
(16) Это произойдет только в случае, если читаем из коллекции Объект.Движения. Если их просто прочитать запросом или через набор записей менеджера регистра, то платформу это не остановит.
(17) У нас делается немного иначе. Но спасибо за совет! |
|||
19
Tateossian
05.02.16
✎
09:51
|
(18) В (17), только используй не Попытка Исключение, а ПравоДоступа.
Еще есть вариант сделать форму произвольной и полностью программно реализовать логику. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |