Базовый курс. МГ сессия от 21.07.2011

Рассматриваем свежие вопросы по базовому курсу по программированию.

1. Компиляция модуля приложения.
После просмотра решения ДЗ №5, я решил подправить огрехи в своей конфигурации, до этого у меня использовалась передача параметров в общие модули, что было переделано на экспортные переменные модуля управляемого приложения, которые опрашивались в клиентском общем модуле, но вся эта конструкция не взлетела – при запуске происходит падение с ошибкой, что переменная не определена.
Скачал Вашу конфигурацию, различий принципиальных не нашел, но Ваша конфа работает, а моя нет. Во вложении собственно выгрузка, в которой происходит ошибка (в клиентском общем модуле в функции “ВходЗапрещен”).
Проясните, что я делаю не так?

2. Опасность отладчика.
В блоке про “Изменение значения переменной” в табло было бы хорошо сказать, что кроме вызова функций там можно вызывать и методы, причем не всегда это прозрачно и иногда ведет к нехорошим последствиям.
Я про случайное (или намеренное) занесение в табло или вычисление выражения методов перебора выборки, установки фильтров и пр.  Просто эти “грабли” лучше сразу обозначить — особенно для начинающих.

3. Хранение констант.
Пересмотрел блок по константам и физическим таблицам в СУДБ и так и не понял одну вещь. Константы реально хранятся так, что для каждой из них заводится в таблице колонка?
Зачем это сделано, вроде как историю для них хранить нет необходимости? 
Получается что если пишешь константу, то блокируется вся строка и по сути нельзя их изменять одновременно нескольким пользователям?
Может есть какой то скрытый смысл в этом?

К сожалению, у Вас недостаточно прав для просмотра этой записи. Если Вы еще не залогинены на сайте — залогиньтесь.

Если не активировали токен — посмотрите видео-инструкцию (видео N5)

Если вы залогинены, у Вас активирован токен доступа, но вы все равно видите эту запись — напишите нам на e-mail поддержки.

комментариев 11 на “Базовый курс. МГ сессия от 21.07.2011”

  1. Евгений, спасибо огромное! Понял что к чему с компиляцией. Т.о. моя проблема решалась элементарно, можно вынести функцию, вызов которой происходит в теле основной программы, в отдельный клиентский общий модуль, главное чтобы в ней не было получения переменных или вызова процедур и функций “недокомпиленного” модуля приложения.

    • Пожалуйста, также можно было разместить вызов функции в событии ПриНачалеРаботыСистемы().

      • Так и было с момента появления проблемы до сегодняшнего дня :)

  2. а я чото наоборот подвис после объяснения в п1.: “…. пока модуль объекта не скомпилирован полностью – недоступны его экспортные свойства…” а скоко ждать когда он будет скомпилирован  ПОЛНОСТЬЮ и как на это повлиять? МО компилируется при первом обращения к такому объекту? а обращение к его свойству не считается обращением чтоб его полностью скомпилировать?

    • >а скоко ждать когда он будет скомпилирован ПОЛНОСТЬЮ и как на это повлиять
      Ждать не нужно.
      Важно понимать, что в момент выполнения раздела основной программы модуль еще не скомпилирован.
      Это единственный нюанс, который нужно учитывать.

      • а когда он все-таки становица скомпилированным?

        • Сразу после обращения к соответствующему объекту.
          Например,
          СправочникОбъект = Справочники.Контрагенты.СоздатьЭлемент();

          после выполнения этой команды модуль объекта будет скомпилирован.

          • спасибо. мож где есть написан порядок компиляции:
            1. модуль сеанса
            2. модуль приложения (упр или обыч)
            3. общие модули с глобальным признаком
            4. …
            5. простые общие модули при обращении к любой их процедуре
            6. модули объектов при .ПолучитьОбъект() или СоздатьЭлемент() а при работе с сылкой нет?
            7. …

            • Все верно пишите.

              >а при работе с сылкой нет?
              У ссылки нет модуля. Модуль объекта при работе со ссылкой не компилируется.

              К пункту 6 можно отнести модули набора записей для регистров, модуль менеджера значения для констант.

              К пункту 5 можно добавить модули менеджеров.

              К пункту 4 можно отнести модуль внешнего соединения. При внешнем соединение компилируется вместо модуля приложения.