|   |   | 
| 
 | Автоматическое чтение движений документа при его открытии в обычном приложении | ☑ | ||
|---|---|---|---|---|
| 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), только используй не Попытка Исключение, а ПравоДоступа.
 Еще есть вариант сделать форму произвольной и полностью программно реализовать логику. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |