| 
    
            
         
         | 
    
    
  | 
Как в управляемых формах хранить соединения? ftp и т.п. | ☑ | ||
|---|---|---|---|---|
| 
    0
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:06 
 | 
         
        Есть функция в общем модуле. Выполняется на клиенте. Функция создает управляему форму и вызывает метод для создания FTPСоединение. Затем это соединение нужно использовать в остальных функция в этой форме. 
 
        Вопрос. Как сохранить подключение, чтобы не создавать его по 100 раз? Объявить через Перем не получается. После выхода из функции создающей подключение переменная становится неопределенной (хотя форма еще живая). В параметрах формы создать не получится - нет такого типа. Передать его в параметре метода не получается - не сериализуется. Задача несколько извращенная (пытаюсь сделать некое подобие ООП на упр формах), но решить как-то надо.  | 
|||
| 
    1
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:12 
 | 
         
        Ничего не понял.     
         | 
|||
| 
    2
    
        ДенисЧ    
     07.11.13 
            ✎
    14:13 
 | 
         
        Временное хранилищие     
         | 
|||
| 
    3
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:14 
 | 
         
        Когда говорят "ничего не понял" обычно и не пытаются понять. По себе знаю.     
         | 
|||
| 
    4
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:14 
 | 
         
        Передать его в форму, не в составе <Параметры> 
 
        НоваяФорма=ПолучитьФорму(<ИмяФормы>, <Параметры>, <Владелец>, <Уникальность>, <Окно>) чтобы оно не пошло гулять на сервер, а уже потом. НоваяФорма.Соединение=  | 
|||
| 
    5
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:14 
 | 
         
        Ну или временное хранилище     
         | 
|||
| 
    6
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:15 
 | 
         
        (3) Этим я обозначил щок и трепет от того, что ты ниосилил.
 
        Ладно, кто то другой.  | 
|||
| 
    7
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:16 
 | 
         
        &НаКлиенте
 
        Перем Соединение Экспорт;  | 
|||
| 
    8
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:17 
 | 
         
        как интересно временное хранилище поможет мне сохранить ПОДКЛЮЧЕННОЕ соединение?     
         | 
|||
| 
    9
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:17 
 | 
         
        (7) вот это я могу написать в создавемой форме? чтобы записать туда соединение?     
         | 
|||
| 
    10
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:18 
 | 
         
        щя попробую ...     
         | 
|||
| 
    11
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:23 
 | 
         
        если коротко
 
        Подключение = ПолучитьФорму("Обработка.Подключение.Форма.Форма"); Подключение.СоздатьПодключение(); смотрим Подключение.Соединение равно Неопределено. хотя СоздатьПодключение было Соединение = Новый FTPСоединение() все это на клиенте  | 
|||
| 
    12
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:23 
 | 
         
        Мы с Денисч. надавали советом.
 
        Причем я уверен в 2 вариантах, но на практике не использовал и не один из них.  | 
|||
| 
    13
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:24 
 | 
         
        щас проверим     
         | 
|||
| 
    14
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:28 
 | 
         
        временное хранилище не вариант. даже если каким-то чудом 1С будет из хранилища брать соединение и восстанавливать его - это какая-то бредятина     
         | 
|||
| 
    15
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:28 
 | 
         
        Дайте адрес какого нибудь ftp-шника.     
         | 
|||
| 
    16
    
        dimm7310    
     07.11.13 
            ✎
    14:39 
 | 
         
        в модуле управляемого приложения создай экспортную переменную
 
        Я так подключение к телефонии сохраняю Перем Телефония Экспорт;  | 
|||
| 
    17
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:41 
 | 
         
        (16) мысль. спасибо.     
         | 
|||
| 
    18
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:41 
 | 
         
        а имеет значение если у меня у метода СоздатьПодключение не написано &НаКлиенте?
 
        сейчас вот написал и метод перестал быть видимым  | 
|||
| 
    19
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:42 
 | 
         
        не понятно ...     
         | 
|||
| 
    20
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:43 
 | 
         
        у меня вызов СоздатьПодключение идет в процедуре общего модуля. общий модуль с галкой только Клиент (упр приложение).     
         | 
|||
| 
    21
    
        dimm7310    
     07.11.13 
            ✎
    14:44 
 | 
         
        (18) если не указывать явно директиву то выполняется на сервере     
         | 
|||
| 
    22
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:45 
 | 
         
        (20) Ничего не мешает ему вызвать сервер.     
         | 
|||
| 
    23
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:45 
 | 
         
        тьфу зараза ...     
         | 
|||
| 
    24
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:46 
 | 
         
        И получилось 2 переменные Соедиенние     
         | 
|||
| 
    25
    
        dimm7310    
     07.11.13 
            ✎
    14:51 
 | 
         
        (23) Оставь надежду всяк на УФ переходящий     
         | 
|||
| 
    26
    
        Зойч    
     07.11.13 
            ✎
    14:53 
 | 
         
        Реквизит формы произвольного типа     
         | 
|||
| 
    27
    
        Ksandr    
     07.11.13 
            ✎
    14:53 
 | 
         
        Если есть вариант делать это на сервере то нужно использовать модуль с повторным использованием     
         | 
|||
| 
    28
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:54 
 | 
         
        (26) не уверен
 
        (27) это что за штука?  | 
|||
| 
    29
    
        Ksandr    
     07.11.13 
            ✎
    14:54 
 | 
         
        хотя без разницы, на сервере или клиенте. Делай модуль поторного использования (на время сеанса) и все - задача решена     
         | 
|||
| 
    30
    
        Зойч    
     07.11.13 
            ✎
    14:56 
 | 
         
        (28) Так тебя еще и уверить нужно     
         | 
|||
| 
    31
    
        toypaul    
     гуру 
    07.11.13 
            ✎
    14:57 
 | 
         
        ошибка была в том что метод создания подключения отрабатывал на сервере. ну и переменная была объявлена тоже на сервере. как поставил везде &НаКлиенет все заработало.
 
        спасибо всем :)  | 
|||
| 
    32
    
        H A D G E H O G s    
     07.11.13 
            ✎
    14:59 
 | 
         
        (31) Тотоже, МарьИвановна.
 
        Респект, а то бы пошел по пути кондовых Волоходских погромистов через переменную модуля приложения.  | 
|||
| 
    33
    
        H A D G E H O G s    
     07.11.13 
            ✎
    15:09 
 | 
         
        Мне, чтобы это проверить, пришлось идти в Германию за ftp-серваком.
 
        toypaul, рекомендую тебе поэкспериментировать с временных хранилищем, настоятельно. Это тебе пригодиться. А то будешь в глобальные переменные пихать.  | 
|||
| 
    34
    
        wPa    
     07.11.13 
            ✎
    15:29 
 | 
         
        (33)  какая гадость эта ваша заливная форма )     
         | 
|||
| 
    35
    
        H A D G E H O G s    
     07.11.13 
            ✎
    15:30 
 | 
         
        (34) Она прекрасна.
 
        Вот счаст у toypaul идет просветление и разделение сред Клиент-Сервер.  | 
|||
| 
    36
    
        wPa    
     07.11.13 
            ✎
    15:46 
 | 
         
        (35) с сохранением локальных переменных в бинарики )     
         | 
|||
| 
    37
    
        dimm7310    
     07.11.13 
            ✎
    16:50 
 | 
         
        (32) Сам ты кондовый маасквич в первом поколении     
         | 
|||
| 
    38
    
        serffer    
     07.11.13 
            ✎
    17:07 
 | 
         
        во временное хранилище нельзя помещать несериализуемые объекты в 8.3. в 8.2 они могут вести себя непредсказуемо(убиваться через 2-6 минут например).     
         | 
|||
| 
    39
    
        Infsams654    
     07.11.13 
            ✎
    17:21 
 | 
         
        (38)+ и реквизит произвольного типа "Зойч" не сереализуешь     
         | 
|||
| 
    40
    
        wPa    
     07.11.13 
            ✎
    17:25 
 | 
         
        (38) красота. Сейчас просветление найдет уже на Ежова )     
         | 
|||
| 
    41
    
        Ksandr    
     07.11.13 
            ✎
    17:27 
 | 
         
        (35) Я с этим сталкивался, только хранить нужно было COM-соединение. Повторное использование единственный стабильный вариант.     
         | 
|||
| 
    42
    
        H A D G E H O G s    
     07.11.13 
            ✎
    17:35 
 | 
         
        (38) Может что то и поменялось, мне фиолетово, у меня обработчик обновления каждую минуту дергает хранилище на всякий пожарный. Раньше 20 минут хранилось.
 
        В 8.3 - да, так уже по похранишь. Ежова без хрена не съешь, wPa  | 
|||
| 
    43
    
        wPa    
     07.11.13 
            ✎
    17:37 
 | 
         
        (42) хитер     
         | 
|||
| 
    44
    
        serffer    
     07.11.13 
            ✎
    18:16 
 | 
         
        (42) в нашем тиражном решении тоже было "раз в минуту". Тоже нестабильно оказалось(когда мало памяти на сервере вроде). Обошли по другому, но в этом случае так не прокатит.
 
        ЕМНИП: сервер не должен хранить состояния между 2мя вызовами клиента, ну или чтото типа того(типа религия веба что ли) Автору может попробовать через регл.задания организовать постоянное подключение.  | 
|||
| 
    45
    
        H A D G E H O G s    
     07.11.13 
            ✎
    18:21 
 | 
         
        (44) 
 
        1. У нас работает. 2. Автор уже проблему решил. 3. 8.3 заставляет чаще биться наши сердца.  | 
|||
| 
    46
    
        dimm7310    
     07.11.13 
            ✎
    21:10 
 | 
         
        (45) " 8.3 заставляет чаще биться наши сердца." - хорошо сказал. Но это не повод устраивать лишний геморрой ради спортивного интереса.     
         | 
|||
| 
    47
    
        dimm7310    
     07.11.13 
            ✎
    21:21 
 | 
         
        +(46) я понимаю что мой вариант - не лучшее решение. Ищу новые.     
         | 
|||
| 
    48
    
        banco    
     07.11.13 
            ✎
    21:25 
 | 
         
        (0)  а зачем вообще хранить ftp соединение?     
         | 
|||
| 
    49
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:40 
 | 
         
        Подниму тему ... 
 
        Подключени-то создается и подключается, но при передаче формы (которая хранит это подключение) как параметра функции в другой метод подключение теряется. Если вызывать затем метод формы, который обращается к созданному подключению, выдается ошибка. Сначала думал какая-то проблема с подключением. Оказалось нет. Если созданное подключение использовать сразу (не передавать в составе формы дальше), то все нормально отрабатывает. Вот и получается что "обернуть" такое подключение в какую-то обертку (которой у меня была форма) не выходит. Придется по другому изворачиваться ...  | 
|||
| 
    50
    
        H A D G E H O G s    
     13.11.13 
            ✎
    11:42 
 | 
         
        (49) Покажи кодом! (как трудно ты объясняешь словами)     
         | 
|||
| 
    51
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:43 
 | 
         
        Функция ПолучитьПодключение(ПараметрПодключения) Экспорт
 
        ИмяФормы = РаботаСВнешнимиФайламиСервер.ИмяФормыПодключения(ПараметрПодключения); Подключение = ПолучитьФорму(ИмяФормы,Новый Структура("ПараметрПодключения",ПараметрПодключения)); Возврат Подключение; КонецФункции // ПолучитьПодключение() эта функция создает "мое" подключение в виде формы  | 
|||
| 
    52
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:44 
 | 
         
        внутри формы
 
        &НаКлиенте Перем ftp Экспорт; ftp = Новый FTPСоединение(ПараметрыПодключения.Адрес,,ПараметрыПодключения.Логин,ПараметрыПодключения.Пароль,,Истина);  | 
|||
| 
    53
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:45 
 | 
         
        потом вызываю функцию формы из общего модуля
 
        Если Подключение.СоздатьКаталогПодключения(Параметры) Тогда Подключение.СкопироватьФайл(ФайлНаКлиенте,Параметры); КонецЕсли;  | 
|||
| 
    54
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:45 
 | 
         
        функция в форме
 
        &НаКлиенте Функция СоздатьКаталогПодключения(СтрокаФайла) Экспорт Ошибка = ""; Каталог = СтрЗаменить(СтрокаФайла.Путь,"\","/"); Массив = ftp.НайтиФайлы(Каталог); Если Массив.Количество() = 0 Тогда Попытка ftp.СоздатьКаталог(Каталог); Исключение Ошибка = ОписаниеОшибки(); Возврат Ложь; КонецПопытки; КонецЕсли; Возврат Истина; КонецФункции // СоздатьКаталог()  | 
|||
| 
    55
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:47 
 | 
         
        на этой строке
 
        Массив = ftp.НайтиФайлы(Каталог); выдает ошибку, что нет доступа. смотрю параметры ftp - все установлено. написал обработку для проверки ftp = Новый FTPСоединение("****",,"****","****",,Истина); Файлы = ftp.НайтиФайлы("*.*"); Для каждого файл Из Файлы Цикл Сообщить(файл.Имя); КонецЦикла; она отрабатывает нормально  | 
|||
| 
    56
    
        H A D G E H O G s    
     13.11.13 
            ✎
    11:48 
 | 
         
        ftp не может разрывать соединение по таймауту?     
         | 
|||
| 
    57
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:48 
 | 
         
        отсюда сделал вывод, что ftp при передачи в составе формы что-то "внутри" такое теряет ...
 
        да и хер с ним. надоело уже ковыряться. по другому буду делать - чтобы метод отрабатывал без передачи подключения.  | 
|||
| 
    58
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:49 
 | 
         
        (56) не понял. подключение создается без ошибок. может что-то там и отключается при передаче. сие мне не ведомо.     
         | 
|||
| 
    59
    
        olegves    
     13.11.13 
            ✎
    11:55 
 | 
         
        (0) Повторное использование (в свойствах модуля) тебе поможет     
         | 
|||
| 
    60
    
        H A D G E H O G s    
     13.11.13 
            ✎
    11:56 
 | 
         
        (58) 
 
        "потом вызываю функцию формы из общего модуля Если Подключение.СоздатьКаталогПодключения(Параметры) Тогда Подключение.СкопироватьФайл(ФайлНаКлиенте,Параметры); КонецЕсли;" Потом - это когда? Через сколько секунд?  | 
|||
| 
    61
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    11:57 
 | 
         
        сразу же     
         | 
|||
| 
    62
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    12:02 
 | 
         
        (59) не помогло :)     
         | 
|||
| 
    63
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    12:04 
 | 
         
        + к (62) может если бы я фтп соединение создавал непосредственно в функции этого модуля, тогда бы помогло. но мне так не подходит.
 
        на самом деле не хватает хотя бы минимума ООП в данном случае :)  | 
|||
| 
    64
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    13:39 
 | 
         
        и снова подниму. оказывается причина в другом была.
 
        почему-то ftp.НайтиФайлы() выдает ошибку доступа при поиске каталога ftp.НайтиФайлы("2013/11/13") ftp.НайтиФайлы("/2013/11/13") оба вызова выдают ошибку  | 
|||
| 
    65
    
        H A D G E H O G s    
     13.11.13 
            ✎
    13:41 
 | 
         
        А так?
 
        ftp.НайтиФайлы("2013\11\13") ftp.НайтиФайлы("\2013\11\13")  | 
|||
| 
    66
    
        zladenuw    
     13.11.13 
            ✎
    13:43 
 | 
         
        (65) в сп как раз как в (64)     
         | 
|||
| 
    67
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    13:43 
 | 
         
        в документации написано "При использовании этой схемы в адресах необходимо указывать прямые слеши '/', а не обратные '\'.
 
        "  | 
|||
| 
    68
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    13:43 
 | 
         
        не пойму как проверить существования каталога ...     
         | 
|||
| 
    69
    
        zladenuw    
     13.11.13 
            ✎
    13:45 
 | 
         
        (68) УстановитьТекущийКаталог  ?     
         | 
|||
| 
    70
    
        Serginio1    
     13.11.13 
            ✎
    13:50 
 | 
         
        (64) Ну можно рекурсивно
 
        Файлы=Фтп.НайтиФайлы(фтп.ТекущийКаталог(),"*.*");  | 
|||
| 
    71
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    13:54 
 | 
         
        (70) файлов дофига может быть. зачем мне все выгребать?     
         | 
|||
| 
    72
    
        Serginio1    
     13.11.13 
            ✎
    13:56 
 | 
         
        (71) Ну во первых проверить написание Файл.ПолноеИмя     
         | 
|||
| 
    73
    
        Serginio1    
     13.11.13 
            ✎
    13:57 
 | 
         
        или рекурсивно  Файлы=Фтп.НайтиФайлы(фтп.ТекущийКаталог(),"2013");     
         | 
|||
| 
    74
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    13:58 
 | 
         
        (72) не понял. что проверить?
 
        какой-то фтп странный создал папку Файлы = ftp.НайтиФайлы("2013/11/12"); - ее находить если папки нет Файлы = ftp.НайтиФайлы("2013/11/13"); выдает ошибку доступа. вместо того чтобы просто ничего не возвращать ...  | 
|||
| 
    75
    
        Serginio1    
     13.11.13 
            ✎
    14:00 
 | 
         
        Файлы=Фтп.НайтиФайлы("2013/11","12");     
         | 
|||
| 
    76
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    14:02 
 | 
         
        (75) с папкой, которая существует, проблем нет. проблема с папкой которой нет ...     
         | 
|||
| 
    77
    
        Serginio1    
     13.11.13 
            ✎
    14:03 
 | 
         
        (76) Ну тогда Попытка исключение     
         | 
|||
| 
    78
    
        toypaul    
     гуру 
    13.11.13 
            ✎
    15:05 
 | 
         
        Пришлось рекурсивно устанавливать каталог и создавать новый если не вышло. Для оптимизации сначала устанавливается каталог по полному пути.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |