Базовый курс. МГ сессия от 21.07.2011
Рассматриваем свежие вопросы по базовому курсу по программированию.
1. Компиляция модуля приложения.
После просмотра решения ДЗ №5, я решил подправить огрехи в своей конфигурации, до этого у меня использовалась передача параметров в общие модули, что было переделано на экспортные переменные модуля управляемого приложения, которые опрашивались в клиентском общем модуле, но вся эта конструкция не взлетела – при запуске происходит падение с ошибкой, что переменная не определена.
Скачал Вашу конфигурацию, различий принципиальных не нашел, но Ваша конфа работает, а моя нет.Во вложении собственно выгрузка, в которой происходит ошибка (в клиентском общем модуле в функции “ВходЗапрещен”).
Проясните, что я делаю не так?
2. Опасность отладчика.
В блоке про “Изменение значения переменной” в табло было бы хорошо сказать, что кроме вызова функций там можно вызывать и методы, причем не всегда это прозрачно и иногда ведет к нехорошим последствиям.
Я про случайное (или намеренное) занесение в табло или вычисление выражения методов перебора выборки, установки фильтров и пр. Просто эти “грабли” лучше сразу обозначить — особенно для начинающих.
3. Хранение констант.
Пересмотрел блок по константам и физическим таблицам в СУДБ и так и не понял одну вещь.Константы реально хранятся так, что для каждой из них заводится в таблице колонка?
Зачем это сделано, вроде как историю для них хранить нет необходимости?
Получается что если пишешь константу, то блокируется вся строка и по сути нельзя их изменять одновременно нескольким пользователям?
Может есть какой то скрытый смысл в этом?
Если не активировали токен — посмотрите видео-инструкцию (видео N5)
Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.
Евгений, спасибо огромное! Понял что к чему с компиляцией. Т.о. моя проблема решалась элементарно, можно вынести функцию, вызов которой происходит в теле основной программы, в отдельный клиентский общий модуль, главное чтобы в ней не было получения переменных или вызова процедур и функций “недокомпиленного” модуля приложения.
Пожалуйста, также можно было разместить вызов функции в событии ПриНачалеРаботыСистемы().
Так и было с момента появления проблемы до сегодняшнего дня :)
Важно было понять почему так происходит, а не как обойти.
Ок.
а я чото наоборот подвис после объяснения в п1.: “…. пока модуль объекта не скомпилирован полностью – недоступны его экспортные свойства…” а скоко ждать когда он будет скомпилирован ПОЛНОСТЬЮ и как на это повлиять? МО компилируется при первом обращения к такому объекту? а обращение к его свойству не считается обращением чтоб его полностью скомпилировать?
>а скоко ждать когда он будет скомпилирован ПОЛНОСТЬЮ и как на это повлиять
Ждать не нужно.
Важно понимать, что в момент выполнения раздела основной программы модуль еще не скомпилирован.
Это единственный нюанс, который нужно учитывать.
а когда он все-таки становица скомпилированным?
Сразу после обращения к соответствующему объекту.
Например,
СправочникОбъект = Справочники.Контрагенты.СоздатьЭлемент();
после выполнения этой команды модуль объекта будет скомпилирован.
спасибо. мож где есть написан порядок компиляции:
1. модуль сеанса
2. модуль приложения (упр или обыч)
3. общие модули с глобальным признаком
4. …
5. простые общие модули при обращении к любой их процедуре
6. модули объектов при .ПолучитьОбъект() или СоздатьЭлемент() а при работе с сылкой нет?
7. …
Все верно пишите.
>а при работе с сылкой нет?
У ссылки нет модуля. Модуль объекта при работе со ссылкой не компилируется.
К пункту 6 можно отнести модули набора записей для регистров, модуль менеджера значения для констант.
К пункту 5 можно добавить модули менеджеров.
К пункту 4 можно отнести модуль внешнего соединения. При внешнем соединение компилируется вместо модуля приложения.