Продвинутый курс. МГ сессия от 01.11.10
Новые видео-ответы на вопросы участников продвинутого курса.
Сегодня рассмотрены следующие вопросы.
1. Чтение файла хмл последовательно обусловлено прицепом его хранения, то есть в текстовом виде.
Имеет ли практический смысл (а смысл в скорости) читать весь файл в некую структуру или дерево значений, а только потом обрабатывать применяя те же рекурсивные вызовы или циклы?
2. Флажок «Вызов сервера» ОМ позволяет вызвать метод из внешней обработки, которая может быть написана злоумышленником для получения недоступных по правам доступа данных в клиент/серверном варианте работы ИБ.
А разве отсутствие такого флага у ОМ является ограничением для вызова метода этого ОМ? Ведь у внешней обработки также есть модуль, который выполняется на сервере, разве не так?
Кроме того, у формы такой обработки также могут быть методы с директивой компиляции &НаСервере, и они могут вызывать методы серверных ОМ без флага «Вызов сервера», верно?
3. До конца неясно, как работает этот режим – что, если у функции ОМ есть параметры и они другие по сравнению с прежним вызовом функции?
Кеш сохраняет наряду с возвращаемым значением еще и значение параметров, при которых оно было получено?
А если внутри тела функции есть условия, результат которых изменился с предыдущего вызова этой функции? Пока больше вопросов об этом режиме, чем понимания его назначения…
4. В уроке 11 объясняется назначение термов Клиент, Сервер в инструкциях препроцессора.
Но при рассмотрении справки обнаруживаются также термы НаКлиенте, НаСервере. В чем отличия термов Клиент и НаКлиенте, Сервер и НаСервере?
Простой дубляж для совместимости с 8.1 или нечто большее?
5. Создаю в ОМ экспортную процедуру Тест() без указания директивы компиляции. В теле процедуры описываю следующий код:
#Если Клиент Тогда
ПоказатьОповещениеПользователя(“Это клиент!”);
#ИначеЕсли Сервер Тогда
Сообщить(“Это сервер!”);
#КонецЕсли
Процедура Тест() будет скомпилирована и на клиенте, и на сервере. А инструкции препроцессора «вырежут» для каждой стороны соответствующий код. НО! Оба раза вызывается Оповещение! Как серверу удалось вызвать код, предназначенный для клиента???
Дальше – больше. Убираем у нашего ОМ флажок «Клиент». Теперь, по идее, процедуры Тест() на клиенте вообще не должно быть и при нажатии на кнопку «Ордер» появится ошибка… Ан нет! Снова появляется оповещение!!! Тем временем, как код, вызывающий оповещение, при таких настройках ОМ вообще никогда не должен был бы выполняться.
Что это все такое?
6. В уроке 24 говорится о возможности передачи между клиентом и сервером списка значений. Но ведь элементами списка могут быть не только примитивные типы данных!
Например, элементом списка будет ДокументОбъект. Передача такого списка в 8.1 приводила к ошибке передачи мутабельного значения, и насколько я понимаю, в 8.2 будет тот же эффект.
Хорошо, что будет тогда, если наоборот, передавать с сервера на клиент список, элементом которого будет являться, скажем, таблица значений? Тоже мутабельное значение или здесь возникнет уже другая проблема?
В ответе 4 есть оговорка “директивы компиляции”, однако речь идет лишь об инструкциях препроцессору. Потому-то и возник такой вопрос, что инструкция препроцессора “НаКлиенте” уж очень походит на директиву компиляции “&НаКлиенте”. Подозревал в этом возможные подводные камни…
Все равно остается загадкой, зачем нужно было придумывать директивы с приставкой “На”, ведь даже новые директивы, которых не было в 8.1, такой приставки не имеют. Например: “ВебКлиент”, а не “НаВебКлиенте”, “ТонкийКлиент”, а не “НаТонкомКлиенте”…
Хороший вопрос.
Подводный камень действительно был сегодня обнаружен. Опубликуем на этот счет отдельное видео..