| 
    
            
         
         | 
    
  | 
УФ: Переменные &НаСервере | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        Полотенчик    
     14.01.13 
            ✎
    13:03 
 | 
         
        Ситуация:
  
        В обычных формах было описание переменных, например, в модуле формы, из которых потом читается/пишется из разных процедур и функций. Так использовалось, допустим, чтобы хранить в описанной переменной Запрос сам запрос. В одной процедуре запрос создавался, в нем создавались какие-то временные таблицы, потом пользователь что-то мог выбрать/сделать, в других процедурах читалась эта переменная Запрос (т.к. в ней уже есть нужные временные таблицы), создавались, например новые таблицы, и т.д.: чтобы в каждой процедуре не выбирать заново данные использовалась единая переменная с запросом. Как что-то подобное реализовать в УФ если переменная, объявленная &НаСервере уничтожается при завершении серверного вызова?  | 
|||
| 
    1
    
        Wobland    
     14.01.13 
            ✎
    13:09 
 | 
         
        за собой таскать? реквизит завести?     
         | 
|||
| 
    2
    
        SUA    
     14.01.13 
            ✎
    13:13 
 | 
         
        не перескакивать на клиент лишний раз?     
         | 
|||
| 
    3
    
        Полотенчик    
     14.01.13 
            ✎
    13:16 
 | 
         
        (2) В том и соль что клиент во время работы с формой может что-то изменить, после чего надо что-то пересчитать и чтобы каждый раз не выбирать данные из БД они выбирались один раз и хранились во временных таблицах.
  
        Например, есть какая-то пошаговая обработка данных...  | 
|||
| 
    4
    
        LAAry    
     14.01.13 
            ✎
    13:17 
 | 
         
        Никак. На клиенте не может быть запроса. Из одной серверной процедуры вызывать другую. 
  
        Правила хорошего тона говорят, что количества обращений на сервер должно быть минимальным. Значит все что нужно на сервере лучше делать за 1 раз.  | 
|||
| 
    5
    
        LAAry    
     14.01.13 
            ✎
    13:19 
 | 
         
        (3) если у тебя к-с вариант, то данные и так закешируются. повторный запрос выполнится в разы быстрее.     
         | 
|||
| 
    6
    
        Полотенчик    
     14.01.13 
            ✎
    13:21 
 | 
         
        (5) на кэш надейся, а сам не плошай - поэтому используется один раз выбор данных из БД, а далее уже временные таблицы     
         | 
|||
| 
    7
    
        SUA    
     14.01.13 
            ✎
    13:23 
 | 
         
        (3) еще вариант:
  
        - вытащить все из ВТ и утянуть на клиента - (вытащить все из ВТ - наверное все же нужно) использовать временное хранилище между вызовами  | 
|||
| 
    8
    
        Defender aka LINN    
     14.01.13 
            ✎
    13:24 
 | 
         
        Временное хранилище кто мешает использовать?     
         | 
|||
| 
    9
    
        lefthander    
     14.01.13 
            ✎
    13:33 
 | 
         
        ДанныеФормыВЗначение - делаешь все что нужно на сервере и ЗначениеВданныеФормы.     
         | 
|||
| 
    10
    
        LAAry    
     14.01.13 
            ✎
    13:34 
 | 
         
        (9)И что за данные формы, которые хранят запрос или его результат?     
         | 
|||
| 
    11
    
        Полотенчик    
     14.01.13 
            ✎
    13:35 
 | 
         
        (8) а если там десяток временных таблиц с десятком тысяч строк в каждой? каждый раз выгружать все таблицы, сохранять во временном, читать из временного, загружать таблицы в запрос?
  
        оптимальнее бы сохранять/передавать Запрос или МенеджерВременныхТаблиц  | 
|||
| 
    12
    
        lefthander    
     14.01.13 
            ✎
    13:36 
 | 
         
        Правила хорошего тона говорят что если не нужны данные формы для запроса то &НаСервереБезКонтента, если в запрос нужны данные из формы то &НаСервере     
         | 
|||
| 
    13
    
        olegves    
     14.01.13 
            ✎
    13:36 
 | 
         
        (0) реквизит формы пользуй - доступен и на клиенте и на сервере     
         | 
|||
| 
    14
    
        LAAry    
     14.01.13 
            ✎
    13:36 
 | 
         
        Во временном можно хранить не обязательно результат.     
         | 
|||
| 
    15
    
        lefthander    
     14.01.13 
            ✎
    13:36 
 | 
         
        (10) Странный вопрос, может начнете с того что такое УФ?     
         | 
|||
| 
    16
    
        LAAry    
     14.01.13 
            ✎
    13:43 
 | 
         
        (15) У Вас пожалуй поостерегусь спрашивать.     
         | 
|||
| 
    17
    
        lefthander    
     14.01.13 
            ✎
    13:54 
 | 
         
        (16) Согласен, но можете в синтакс помошник заглянуть при случае. 
  
        в (3) автор топика спрашивает, как быть если юзер данные изменил во время работы с формой? Для того что бы исключить потерю измененных, но не записанных данных и используют выше названные методы.  | 
|||
| 
    18
    
        lefthander    
     14.01.13 
            ✎
    13:56 
 | 
         
        Вопрос в другом, есть ли смысл на сервере хранить результаты запроса в переменной, не проще ли снова выполнить запрос, когда понадобятся данные. Ведь их может изменить и другой юзер.     
         | 
|||
| 
    19
    
        Defender aka LINN    
     14.01.13 
            ✎
    13:59 
 | 
         
        (11) А кто сказал, что будет легко?     
         | 
|||
| 
    20
    
        Полотенчик    
     14.01.13 
            ✎
    14:03 
 | 
         
        (20) ужас. есть же МенеджерВременныхТаблиц. почему нельзя где-то его сохранить чтобы использовать в других процедурах? это же так очевидно!     
         | 
|||
| 
    21
    
        Defender aka LINN    
     14.01.13 
            ✎
    14:07 
 | 
         
        (20) Таков путь 1С     
         | 
|||
| 
    22
    
        lefthander    
     14.01.13 
            ✎
    14:08 
 | 
         
        (3) Может это спасет - переменная в модуле управляемого приложения, экспортная? Будет доступна из любого модуля.
  
        Перем (Var) Синтаксис: Перем <Имя переменной 1> [Экспорт] [, <Имя переменной 2> [Экспорт], …] Англоязычный синтаксис: Var <Имя переменной 1> [Export] [, <Имя переменной 2> [Export], …] Параметры: <Имя переменной 1>[, <Имя переменной 2>, …] Задается имя или имена объявляемых переменных. Экспорт Необязательное ключевое слово. Указывает, что данная переменная доступна при обращении к контексту этого модуля из других модулей. Не имеет смысла при объявлении переменных отдельных процедур или функций. Описание: Позволяет в явном виде объявить переменную.  | 
|||
| 
    23
    
        Reset    
     14.01.13 
            ✎
    14:18 
 | 
         
        (22) Она же не будет видна на сервере?     
         | 
|||
| 
    24
    
        lefthander    
     14.01.13 
            ✎
    14:20 
 | 
         
        (20) Почему нельзя? Можно.
  
        Вот из того же Синтакс Помошника Предназначен для хранения временных таблиц. При уничтожении или закрытии объекта временные таблицы, находящиеся в нем, удаляются. Если временная таблица создается, используется и уничтожается в рамках одного пакета запросов, менеджер временных таблиц создавать не нужно. Доступность: Сервер, толстый клиент, внешнее соединение. Пример: МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц; Запрос.Выполнить(); Запрос.Текст="ВЫБРАТЬ * из ВременнаяОсновная"; ТзПередано=Запрос.Выполнить().Выгрузить();  | 
|||
| 
    25
    
        Defender aka LINN    
     14.01.13 
            ✎
    14:21 
 | 
         
        (24) Между серверными вызовами его сохрани, продемонстрируй мастер-класс.     
         | 
|||
| 
    26
    
        lefthander    
     14.01.13 
            ✎
    14:22 
 | 
         
        (23) Это почему же? 
  
        ОбъектМетаданныхКонфигурация (ConfigurationMetadataObject) МодульУправляемогоПриложения (ManagedApplicationModule) Использование: Только чтение. Описание: Тип: Неопределено. Доступность: Сервер, толстый клиент, внешнее соединение.  | 
|||
| 
    27
    
        Reset    
     14.01.13 
            ✎
    14:23 
 | 
         
        Еще есть серверные модули с повторным использованием значений, возможно можно использовать     
         | 
|||
| 
    28
    
        Полотенчик    
     14.01.13 
            ✎
    14:25 
 | 
         
        (22) для каждой задачи где надо ради оптимизации выбирать данные из БД 1 раз, а не 100 создавать переменную в модуле управляемого приложения? О_о     
         | 
|||
| 
    29
    
        lefthander    
     14.01.13 
            ✎
    14:28 
 | 
         
        (25) Мне это не надо, я не сторонник сохранять данные запроса между разными вызовами. Так как следить за актуальностью данных в переменной нет смысла, особенно если в переменную могут попасть десятки тысяч строк. Проще заново сделать запрос. Вот оптимизировать запрос, что бы туда не попадали ненужные данные, это более интересно.     
         | 
|||
| 
    30
    
        MSII    
     14.01.13 
            ✎
    14:28 
 | 
         
        (28) Если данные нужно извлечь один раз, то хранить их можно и нужно в реквизитах формы, в параметрах сеанса либо используя упомянутое в (27). Выбор конкретного варианта - в зависимости от задачи.     
         | 
|||
| 
    31
    
        Reset    
     14.01.13 
            ✎
    14:29 
 | 
         
        (26) Насколько я понимаю, процитированное не имеет отношения к видимости переменных     
         | 
|||
| 
    32
    
        lefthander    
     14.01.13 
            ✎
    14:29 
 | 
         
        (28) А что вы так боитесь переменных? Если локальная переменная, то время ее жизни не превышает время жизни локального контекста.     
         | 
|||
| 
    33
    
        LAAry    
     14.01.13 
            ✎
    14:29 
 | 
         
        Такое чувство, что леворукий тролит в этом топике.     
         | 
|||
| 
    34
    
        Defender aka LINN    
     14.01.13 
            ✎
    14:30 
 | 
         
        (29) Ты же сказал, что "Можно" и "Легко". так что пруф или GTFO     
         | 
|||
| 
    35
    
        lefthander    
     14.01.13 
            ✎
    14:33 
 | 
         
        (31) Это было к вопросу доступности переменных на сервере.
  
        (34) GTFO, и можно, и легко ... удачи.  | 
|||
| 
    36
    
        Reset    
     14.01.13 
            ✎
    14:34 
 | 
         
        (35) Именно к вопросу доступности переменных (а также процедур и функциий) процитированное не имеет отношения     
         | 
|||
| 
    37
    
        LAAry    
     14.01.13 
            ✎
    14:36 
 | 
         
        (27) Это, кстати, мысль. Нужно погонять повторное использование - что можно, а что нельзя вернуть. Спасибо.     
         | 
|||
| 
    38
    
        lefthander    
     14.01.13 
            ✎
    14:58 
 | 
         
        (36) Экспортная переменная объявленная в этом модуле будет видна для серверных вызовов.     
         | 
|||
| 
    39
    
        Defender aka LINN    
     14.01.13 
            ✎
    14:58 
 | 
         
        (38) Ну закинь туда Менеджер, вперед.     
         | 
|||
| 
    40
    
        Reset    
     14.01.13 
            ✎
    14:59 
 | 
         
        (38) Не будет.     
         | 
|||
| 
    41
    
        lefthander    
     14.01.13 
            ✎
    15:03 
 | 
         
        (40) Будет, но доказывать не буду. :)     
         | 
|||
| 
    42
    
        Reset    
     14.01.13 
            ✎
    15:07 
 | 
         
        (40) На твоей стороне а) то я почти полный ноль в УП и знания эпизодически/теоретические, то есть могу ошибаться.
  
        б)Также на твоей стороне интересная цитата из справки: "В модуле управляемого приложения возможно объявление переменных, а также объявление и описание процедур и функций, которые будут доступны в любом модуле конфигурации (кроме модуля внешнего соединения)." На моей стороне - что переменная не видна. И все тут :)  | 
|||
| 
    43
    
        Reset    
     14.01.13 
            ✎
    15:11 
 | 
         
        (41) Почему не будешь? Сделай (39).
  
        Объяви такую пременную и занесив нее, к примеру, объект который процитировал в (26).  | 
|||
| 
    44
    
        Defender aka LINN    
     14.01.13 
            ✎
    15:15 
 | 
         
        (41) Идешь по стопам Петрика?     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |