8.х Область видимости объектов из разных контекстов

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем philvan, 7 фев 2011.

  1. TopicStarter Overlay
    philvan
    Offline

    philvan

    Регистрация:
    7 фев 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Программирую на С Matlab PHP.
    Но не могу понять работу с объектами в 1с, как к ним обращаться в разных контекстах?
    Бывалые люди подскажите,какую статью прочитать.
    Желательно,чтобы объяснили на пальцах.
    Буду признателен.
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Что значит "в разных контекстах"? Вы конкретнее опишите, с каким объектом проблемы, что пытаетесь сделать, что не получается.
  3. TopicStarter Overlay
    philvan
    Offline

    philvan

    Регистрация:
    7 фев 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Спасибо за ответ.
    Допустим я хочу из модуля формы документа обратиться к элементу справочника,который я внес в табличную часть данного документа.
    Я не понимаю, какие объекты,кроме глобальных и объектов локального контекста, мне доступны в модуле.

    Я с удовольствием послушаю рассказ о том, как Вы видите для себя объектную модель 1с(хотя бы в общих чертах), и какие объекты доступны из модуля объекта, общего модуля,глобального модуля.

    Вот как-то так.

    Слезно прошу, объясните.Если понятно,что объяснять.
  4. TopicStarter Overlay
    philvan
    Offline

    philvan

    Регистрация:
    7 фев 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Или вот еще пример.

    &НаКлиенте
    Процедура ТабличнаяЧасть1Реквизит1ПриИзменении(Элемент)
    ЭлТб=Элементы.ТабличнаяЧасть1.ТекущиеДанные.Реквизит1.ТабличнаяЧасть1;
    КонецПроцедуры


    Хочу получить доступ из формы документа к табличной части того элемента справочника, который ввел в форму документа.
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    philvan я честно пытался сформулировать, не получилось.. :angry:

    Если совсем коротко, то в 8.2 введено разделение на клиентскую и серверную части приложения. На сервере доступны все типы данных языка 1С, а на клиенте лишь небольшая их часть. Те типы данных которыми разрешено эммм.. оперировать на клиенте не позволяют читать или записывать данные в БД. Все действия по получению-обработке данных должны выполняться на сервере. Таким образом, грубо говоря, чтобы получить какие-то данные в управляемой форме вам надо организовать вызов процедуры, выполняемой в контексте сервера (&НаСервере, &НаСервереБезКонтекста), где получить-обработать необходимые данные и вернуть их в процедуру (&НаКлиенте).

    На пальцах объяснить сложно, скажу откровенно - мне пока самому с трудом дается 8.2. В 8.1 все попроще было, не надо было смотреть где клиент, где сервер.
  6. TopicStarter Overlay
    philvan
    Offline

    philvan

    Регистрация:
    7 фев 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Хорошо.Это я как раз понимаю. А вот такой вопрос. Хочу я обратиться к справочнику.
    Пишу:

    Спр=Справочники.Справочник1;

    Делаю это в общем модуле:выскакивает ошибка-переменная Справочники не определена.

    Так как к ней обратиться?Какая у нее область видимости?
    Заранее спасибо.
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    "Справочники" - это не переменная, это свойство глобального контекста. А все свойства глобального контекста доступны в любых модулях конфигурации. В вашем случая ошибка связана с тем, что вы скорее всего вызываете этот код в процедуре "&НаКлиенте", а свойство "Справочники" доступно только на "Сервере, в толстом клиенте, и во внешнем соединении". Вам надо написать функцию, с директивой &НаСервере, в которой получаете и обрабатываете нужным образом данные из Справочники.Справочник1, и соответственно возвращаете результат обработки, и вызвать эту функцию из процедуры &НаКлиенте.
  8. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Например:
    Код:
    &НаКлиенте
    Процедура МояПроцедура(Команда)
    ЭлТб=Элементы.ТабличнаяЧасть1.ТекущиеДанные;
    ЗначениеРеквизита = ПолучитьЗначениеСервер(ЭлТб);
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ПолучитьЗначениеСервер(ТекущиеДанные)
    //Поскольку эта процедура выполняется на сервере, в ней уже можно работать
    //со свойством Справочники, т.е. писать Спр = Справочники.Справочник1;
    
    //Ну или так например, получение значения реквизита
    Возврат ТекущиеДанные.РеквизитТЧ.Реквизит1;
    КонецФункции
    
    
    
    
  9. TODD22
    Offline

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.759
    Симпатии:
    147
    Баллы:
    104
    Кстати можете нажать ctrl+пробел и система подскажет доступные свойства, методы, объекты в конкретной точке кода.
  10. TopicStarter Overlay
    philvan
    Offline

    philvan

    Регистрация:
    7 фев 2011
    Сообщения:
    14
    Симпатии:
    0
    Баллы:
    1
    Братцы.Благодарю Вас. Ибо с этими мыслями по поводу Клиента и Сервера я заснул. И понял что тупил там. А Вы сейчас подтвердили. Еще раз благодарю Вас shurikvz(за то,что открыли глаза на отношения Клиент-Сервер) и TODD22(особенно полезно про просмотр доступных св-в и детодов).

Поделиться этой страницей