Имя: Пароль:
1C
1С v8
Вопрос к Гуру. Передать данные с Сервера к клиенту
,
0 Zender911
 
25.04.14
17:01
Приветствую. Никак не получается решить следующую задачу. Работа через веб интерфейс в браузере. Т.е. есть сервак находится в одном городе. Есть клиент, который находится
в другом городе и через веб интерфейс коннектится к 1С.

Есть Процедура выполняется на сервере, примерный код ниже:

&НаСервере
Процедура СосНаСервере()

Соединение = Новый COMОбъект("ADODB.Connection");
    ConnectionString ="DRIVER={MySQL ODBC 5.3 ANSI Driver};Server=http://www.ttt-ppp.com;
    |Port=3306;Database=test;User=****; Password=*******;
    |Option=3;" ;
    
    Попытка
        Соединение.Open(ConnectionString);
        Сообщить("Соединение осуществлено в "+ТекущаяДата());
    Исключение
        сообщить("Невозможно установить соединение");
        Возврат;
    КонецПопытки;
    ТекстЗапроса = "select login,suma,kolvo,name,price from oldzakaz where numberzak='"+сокрЛП(Объект.НомерЗаказа)+"'  ";
    тзсайт= новый таблицазначений;
    тзсайт.Колонки.Добавить("Логин");
    тзсайт.Колонки.Добавить("сумма");
    тзсайт.Колонки.Добавить("Колво");
    тзсайт.Колонки.Добавить("Наим");
    тзсайт.Колонки.Добавить("Цена");
    
    ТЗдок= новый таблицазначений ;
    ТзДок.Колонки.Добавить("Логин");

        
    НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
    Сет2 = Новый COMОбъект("ADODB.RecordSet");  
    Сет3 = Новый COMОбъект("ADODB.RecordSet");

    НаборЗаписей.ActiveConnection = Соединение;
    НаборЗаписей.Open(ТекстЗапроса);
    

    Пока не НаборЗаписей.Eof() Цикл
        

                Попытка
                    Текст = Новый ТекстовыйДокумент;
                    Текст.Прочитать("C:\temp.txt");
                    текст.Очистить();                                        
                Исключение
                    Текст = Новый ТекстовыйДокумент;
                    Текст.Записать("C:\temp.txt");
                КонецПопытки;

        
        Для каждого СТТ ИЗ ТзСайт ЦИКЛ
            СН=справочники.Номенклатура;
            Нс=СН.НайтиПоРеквизиту("НаимДляСайта",СТТ.Наим);
            если Нс=СН.ПустаяСсылка() тогда
                сообщить("Товар не найден "+ строка(СТТ.Наим));
                

                Попытка
                    текст.ДобавитьСтроку("Товар не найден "+ строка(СТТ.Наим));
                Исключение
                КонецПопытки;

                        конецЕсли;    
            

                Попытка
                    текст.Записать("С:\temp.txt");
                Исключение
                КонецПопытки;


Как-то так, привел только основной код. Вообщем файлик temp.txt Создается на сервере. А мне нужно чтобы он создавался на клиентской машине. Как это можно реализовать ?
1 Wobland
 
25.04.14
17:05
поместить файл во временное хранилище, получить файл из временного хранилища
2 Aswed
 
25.04.14
17:06
(0) Как и при подборе только в обратную сторону.
Временное хранилище.
3 Wobland
 
25.04.14
17:06
гыыы

&НаКлиенте
Процедура Показать(Команда)
    #Если ВебКлиент Тогда
        Предупреждение("Не доделано, не додумано");
    #Иначе
        Если НЕ ЭтоАдресВременногоХранилища(АдресФайла) Тогда
            Возврат;
        КонецЕсли;
        ВременноеИмя=ПолучитьИмяВременногоФайла(РасширениеФайла);
        ПолучитьФайл(АдресФайла, ВременноеИмя, Ложь);
        ЗапуститьПриложение(ВременноеИмя);
    #КонецЕсли
КонецПроцедуры
4 H A D G E H O G s
 
25.04.14
17:09
(3) Зачем Веб-клиента обидел?
5 Zender911
 
25.04.14
17:11
Не совсем понял как это реализовать. Есть кнопка при нажатии на которую срабатывает эта процедура. Т.е. если я напишу, что-то типа
ПоместитьВоВременноеХранилище(текст, УникальныйИдентификатор);
А дальше, что ? как заставить в этой же процедуре отдать файл клиенту ?
6 ДенисЧ
 
25.04.14
17:12
(5) Отдать клиенту результат этой функции, а на клиенте ПолучитьИзВременногоХРанилища()
7 Wobland
 
25.04.14
17:13
(4) хм.. а чо это я действительно?

Доступность:

Тонкий клиент, веб-клиент
8 Zender911
 
25.04.14
17:18
Отдать клиенту результат этой функции, а на клиенте ПолучитьИзВременногоХРанилища()

У меня не функция, а процедура, которую я привел. И все нужно реализовать в ней. Или это невозможно ?
9 ДенисЧ
 
25.04.14
17:19
(8) Синтаксис:

ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)
.....
Возвращаемое значение:

Тип: Строка.


ЗЫ. И эти люди обижаются, когда их назывют тупыми....
10 Zender911
 
25.04.14
17:23
&НаСервере
Процедура Сос()

------+---------------------

Попытка
                    текст.ДобавитьСтроку("Товар не найден "+ строка(СТТ.Наим));
                Исключение
                КонецПопытки;

                        конецЕсли;    
            

                Попытка
                    текст.Записать("С:\temp.txt");
                Исключение
                КонецПопытки;

ПоместитьВоВременноеХранилище(текст, уникальныйИдентификатор);


Конецпроцедуры

ну поместил а дальше, что о, кладезь мудрости  ?
11 H A D G E H O G s
 
25.04.14
17:26
АдресВХ=ПоместитьВоВременноеХранилище(текст, уникальныйИдентификатор);

Возврат АдресВХ;
13 ДенисЧ
 
25.04.14
17:26
&НаСервере
Процедура Сос(ать)
...
ать=ПоместитьВоВременноеХранилище(текст, уникальныйИдентификатор);
КонецПроцедуры

&НаКлиенте
Процедура Сделать()
ать = "";
Сос(ать);
файл = ПолучиьтИзВременногоХранилища(ать);
14 H A D G E H O G s
 
25.04.14
17:27
&НаКлиенте
Процедура Показать(Команда)

АдресВХ=Сос();

ПолучитьФайл(АдресВХ,, ИСТИНА);


Все.
15 H A D G E H O G s
 
25.04.14
17:27
(13) Еще один аленистый.
16 H A D G E H O G s
 
25.04.14
17:29
ДенисЧ, тыбы на курсы сходил штоле.

Потом после тебя наплачуться погроммисты и понапрокленают тебя.

Оно вроде и работает, но чуется стиль.
17 ДенисЧ
 
25.04.14
17:32
(16) Стиль. Единственный. Неповторимый. Мой.
Что могут дать курсы, на которых преподают люди, которые пешком под стол ходили, когда я в первый раз взял в руки клаву?
18 H A D G E H O G s
 
25.04.14
17:32
(17) Твой код кстати, бесполезен автору.
19 H A D G E H O G s
 
25.04.14
17:35
Попытка
текст.Записать("С:\temp.txt");
Двоичное=Новый ДвоичныеДанные("С:\temp.txt");
Исключение
КонецПопытки;
АдресВХ=ПоместитьВоВременноеХранилище(Двоичное, уникальныйИдентификатор);

Возврат АдресВХ;
20 ДенисЧ
 
25.04.14
17:42
(19) Это тем более, если он на сервере выполняется
21 Zender911
 
25.04.14
17:47
Возврат АдресВХ; У меня процедура, а не функция. Возврат не прокатит.

Да туплю малость, конец дня...
Вроде что-то вырисовывается, спасибо за советы...
22 H A D G E H O G s
 
25.04.14
17:51
(21) Какая разница, переделай на функцию.

Вообще у тебя идеальней сделать внеконтекстный вызов, а имя временного файла на сервере доверить формировать 1С через

ПолучитьИмяВременногоФайла()

и Двоичные помещать на 1 вызов, через

АдресВХ=ПоместитьВоВременноеХранилище(Двоичное);

чтобы потом он зачистился, если тебе не нужен.
23 DexterMorgan
 
25.04.14
17:56
Мда..про ПоместитьФайл никто и не слышал походу
24 H A D G E H O G s
 
25.04.14
17:58
(23) Еще один из лесу вышел.
25 Зойч
 
25.04.14
18:03
По задаче из (0) нужно лог создавать на сервере а потом по окончании передать на клиента файл
26 Fragster
 
гуру
25.04.14
19:52
вы все такие милые тут :)
27 Torquader
 
25.04.14
20:10
Вопрос - а что мешает с сервера на клиента просто передать строку - ведь текстовый файл - это набор строк.
Если целый файл не пролазит, то массив строк пролезет на ура без всяких временных файлов и хранилищ.
P.S. у меня несколько листов Excel превращаются в массив и улетают на клиента, где впихиваются по OLE в Excel и никаких "танцев с бубнами".
28 H A D G E H O G s
 
25.04.14
21:16
(27) Иногда не пролазит :-)
(26) Ооо, привет, ты вернулся!
29 Torquader
 
25.04.14
22:33
(28) Верю, что одна строка большой длины не пролезет, а вот почему может не пролезть массив коротких строк ? (Если, конечно, общее число символов в них за 1 миллион не перевалит).