8.х Переменная в модуле формы документа (управляемое приложение)

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем cplusmax, 4 мар 2014.

  1. TopicStarter Overlay
    cplusmax
    Offline

    cplusmax Опытный в 1С

    Регистрация:
    7 сен 2010
    Сообщения:
    154
    Симпатии:
    2
    Баллы:
    29
    Здравствуйте. Подскажите как в управляемом приложении (платформа 8.3) в модуле документа нужно создать переменную (пускай она будет доступна только в серверных процедурах) чтобы она была доступна во всех процедурах и не обнулялась после выхода из них.
    Пробовал вот так:
    Код:
    &НаСервере
    Перем  СписСН;
    
    Во всех серверных процедурах она доступна НО после выхода из них она обнуляется :( а нужно чтобы информация в ней сохранялась...
    Подскажите как это можно решить?
  2. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    В константу пишите.
    А вы где располагаете свою переменную, в модуле формы или объекта ?
    И хотите чтобы при закрытии формы/документа или справочника переменная сохранялась? Если так - то через параметры сеанса.
  3. TopicStarter Overlay
    cplusmax
    Offline

    cplusmax Опытный в 1С

    Регистрация:
    7 сен 2010
    Сообщения:
    154
    Симпатии:
    2
    Баллы:
    29
    Постараюсь немного подробнее описать ситуацию:
    Открывается форма документа (у документа есть реквизит тип-строка) в этот реквизит "упакована" при помощи ЗначениеВСтрокуВнутр(ТЗ) таблица значений... При открытии формы мне нужно извлечь из строки (ЗначениеИзСтрокиВнутр()) таблицу значений сохраненную там в переменную о которой я писал выше. Чтобы эта переменная была доступна (желательно в серверных процедурах) пока будет открыта форма документа.. в переменную (ТЗ) будут добавляться данные и при записи документа она будет "упакована" обратно в реквизит документа тип-строка.
  4. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Если учесть что
    то пишите переменную в модуле формы, она будет жить, пока существует (открыта) форма.
  5. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Нее, Саня, в управляемой форме серверные переменные живут не дольше одного серверного вызова. Т.е. вызываешь ты серверную процедуру, после того, как она отработала, переменная умирает.
    Думаю, надо создать реквизит формы с типом "ТаблицаЗначений". В форме он будет представлен типом "ДанныеФормыКоллекция".
    cplusmax нравится это.
  6. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Я почему-то думал что глобальная переменная, описанная в модуле формы живет ровно столько, сколько живет сама открытая форма. По поводу объекта - то же самое.
    Андрей, ваша мысль верна, если переменную публиковать в процедуре/функции.
    Поправьте меня, если я не прав :)
  7. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    МЫ, Его Величество, Николай II, обязательно поправим :)
    (это я к тому, что можно на "Ты") :)

    Все верно. В обычных формах так и есть.
    А вот в управляемых формах есть особенность. Серверные переменные модуля формы
    Код:
    &НаСервере
    Перем МояПеременная;
    
    //Если директива компиляции не указана, это также будет означать "НаСервере"
    , точнее их значения, живут только во время одного серверного вызова. Когда серверный вызов завершается, значение переменной сбрасывается.
    Можешь поэкспериментировать. Создай кнопку, процедуру-обработчик, оттуда вызови серверную процедуру, там установи значение переменной. Поставь точку останова. При следующем нажатии на кнопку, твое значение (которое ты установил переменной) потеряется.

    А вот клиентские переменные, - да, живут на протяжении всей жизни формы. Все как обычно.
    alexburn нравится это.
  8. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.750
    Симпатии:
    509
    Баллы:
    204
    Ок, спасибо большое, Андрей, что-то я позабыл вообще про управляемый режим. Еще раз спасибо, пойду покурю матчасть, освежу память :)
    Еще раз спасибо!!!
  9. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Не за что )
  10. TopicStarter Overlay
    cplusmax
    Offline

    cplusmax Опытный в 1С

    Регистрация:
    7 сен 2010
    Сообщения:
    154
    Симпатии:
    2
    Баллы:
    29
    Так и сделал, но есть один нюанс... В реквизите "ТаблицаЗначений" нужно сразу (в конфигураторе) или программно (изменяя реквизит) указывать количество колонок и их тип.. иначе если не указав структуру ТЗ выполнить ЗначениеВДанныеФормы(ТЗНаСервере) и если структуры этих таблиц не совпадут, реквизит формы не заполнится значением из ТЗНаСервере. Это не совсем удобно, но приходится с этим мириться)
  11. TopicStarter Overlay
    cplusmax
    Offline

    cplusmax Опытный в 1С

    Регистрация:
    7 сен 2010
    Сообщения:
    154
    Симпатии:
    2
    Баллы:
    29
    И еще один вопросик: Есть реквизит формы с типом ТаблицаЗначений. В процедуре (НаКлиенте можно ли к нему обращаться как к таблице значений? Ну т.е. добавлять данные, сворачивать и т.д. (использовать те же методы что и с таблицей значения). Другими словами как его превратить из "ДанныеФормыКоллекция" в "ТаблицаЗначений"?:rolleyes:
  12. 1cUserAndrew
    Offline

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

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Верно, структура таблиц должна совпадать. Но бывает, что структура таблицы заранее неизвестна (колонки, например, создаются динамически, программно...). В этом случае необходимо так же программно формировать и колонки реквизита формы. О чем Вы, собственно, сами и сказали ).

    Превратить из "ДанныеФормыКоллекция" в "ТаблицаЗначений" можно только на сервере соответствующими методами (РеквизитФормыВЗначение(), ДанныеФормыВЗначение()). На клиенте нельзя.
    Но работать с этой коллекцией на клиенте можно. Почитайте в Синтакс-помощнике про ДанныеФормыКоллекция. У нее есть большинство методов, схожих с таблицей значений (добавление, удаление строк и т.д.). Со многими из них можно работать на клиенте.
    cplusmax нравится это.

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