Имя: Пароль:
1C
1С v8
Вывод результатов запроса в файл (1C:Предприятие 8.2)
0 dp118m
 
08.08.11
17:20
Здравствуйте!

Мне нужно сделать запрос (все элементы справочника), а потом пройтись по результатам и каждый из них выписать в файл.

Насколько я понимаю, выполнение запроса происходит на сервере, а запись в файл - на клиенте.

Вот это не работает:

НАЧАЛО КОДА

&НаКлиенте
Процедура ExportToDot(Команда)    
    // Когда пользователь нажимает на кнопку, вызывается процедура ExportToDot
    Цели = КонцепцияДляЭкспортаВДот();

    // Здесь будет цикл для вывода результатов запроса (переменная Цели) в текстовый файл.
КонецПроцедуры

&НаСервереБезКонтекста
Функция КонцепцияДляЭкспортаВДот()
    Результат = Справочники.Концепция.Выбрать();
    Возврат Результат; // Здесь вылетает ошибка - неправильный тип данных (непригоден для передачи на клиент)
КонецФункции

КОНЕЦ КОДА

Вопрос: Как мне сделать запрос типа "SELECT * FROM Справочник" таким образом, чтобы результаты запроса можно было передать на клиент?

Заранее благодарен

Дмитрий Писаренко
1 mikecool
 
08.08.11
17:22
выведи в табличный документ, а его сохрани в файл
2 asady
 
08.08.11
17:26
(0) ключевое слово: Хранилище
3 dp118m
 
08.08.11
19:59
> ключевое слово: Хранилище

Спасибо.

Я сделал вот так:

&НаСервере
Процедура КонцепцияДляЭкспортаВДот(Адрес)
   Перем СодержимоеФайла;
   
   Выборка = Справочники.Концепция.Выбрать();    
   СодержимоеФайла = "digraph G фвыа";
   
   Пока Выборка.Следующий() Цикл
       СодержимоеФайла = СодержимоеФайла + Выборка.Код;
   КонецЦикла;    
   
   ПоместитьВоВременноеХранилище(СодержимоеФайла, Адрес);
КонецПроцедуры

&НаКлиенте
Процедура ExportToDot(Команда)
   Перем Адрес;
   
   КонцепцияДляЭкспортаВДот(Адрес);
   
   Сообщить("Адрес: " + Адрес);
   
   ТекстФайла = ПолучитьИзВременногоХранилища(Адрес);
   
   Сообщить("Текст: " + ТекстФайла);
КонецПроцедуры


При вызове

ТекстФайла = ПолучитьИзВременногоХранилища(Адрес);

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

Как ее устранить?

Спасибо

Дмитрий
4 dp118m
 
08.08.11
21:03
Изменил код на

&НаСервере
Функция КонцепцияДляЭкспортаВДот(Адрес)
   Перем СодержимоеФайла;
   
   Выборка = Справочники.Концепция.Выбрать();    
   СодержимоеФайла = "digraph G фвыа";
   
   Пока Выборка.Следующий() Цикл
       СодержимоеФайла = СодержимоеФайла + Выборка.Код;
   КонецЦикла;    
   
   Файл = Новый ОписаниеПередаваемогоФайла(СодержимоеФайла, );
   
   Возврат ПоместитьВоВременноеХранилище(Файл, Адрес);
КонецФункции

&НаКлиенте
Процедура ExportToDot(Команда)
   Перем Адрес;
   
   Адрес = КонцепцияДляЭкспортаВДот(Адрес);
   
   Сообщить("Адрес: " + Адрес);
   
    Файл = ПолучитьИзВременногоХранилища(Адрес);
   
   Сообщить("Это тест: " + Файл);    
КонецПроцедуры


Теперь на клиент поступает ОписаниеПередаваемогоФайла.

Осталось только вычитать текст из него.
5 dp118m
 
08.08.11
22:41
Если кому интересно, вот окончательный вариант:



&НаСервере
Функция КонцепцияДляЭкспортаВДот(Адрес)
   Перем СодержимоеФайла;
   
   Выборка = Справочники.Концепция.Выбрать();    
   СодержимоеФайла = "digraph G {";
   
   Пока Выборка.Следующий() Цикл
       СодержимоеФайла = СодержимоеФайла + Выборка.Код;
   КонецЦикла;    
   
   СодержимоеФайла = СодержимоеФайла + "}";
   Файл = Новый ОписаниеПередаваемогоФайла(СодержимоеФайла, );
   
   Возврат ПоместитьВоВременноеХранилище(СодержимоеФайла, Адрес);
КонецФункции

&НаКлиенте
Процедура ExportToDot(Команда)
   Перем Адрес;
   
   Адрес = КонцепцияДляЭкспортаВДот(Адрес);
   
   ТекстФайла = ПолучитьИзВременногоХранилища(Адрес);    
   Текст = Новый ТекстовыйДокумент;
   Текст.УстановитьТекст(ТекстФайла);
   Текст.Записать("C:\Users\DP118M\Desktop\daily stuff\dottest.txt",КодировкаТекста.UTF8);
КонецПроцедуры
6 Лефмихалыч
 
08.08.11
22:46
зачем изобретать велосипед при наличии XML-сериализации?.. жить скучно?
7 dp118m
 
08.08.11
22:49
XML-сериализация бесполезна, если мне надо сделать диаграмму (graphviz) из данных справочника.
8 Buster007
 
08.08.11
23:24
а зачем помещать в хранилище текстовые данные? или не ищем легких путей?
9 dp118m
 
08.08.11
23:43
> а зачем помещать в хранилище текстовые данные?

Я уже говорил выше, что мне надо сделать из строк справочника текстовый файл в неком формате. asady предложил использовать для этого временное хранилище, что я сделал и теперь это работает.

> или не ищем легких путей?

А у Вас есть лучшее решение, чем то, что здесь приведено? Если есть, код в студию.
10 Buster007
 
08.08.11
23:48
&НаСервере
Функция КонцепцияДляЭкспортаВДот()
   Перем СодержимоеФайла;
   
   Выборка = Справочники.Концепция.Выбрать();    
   СодержимоеФайла = "digraph G {";
   
   Пока Выборка.Следующий() Цикл
       СодержимоеФайла = СодержимоеФайла + Выборка.Код;
   КонецЦикла;    
   
   СодержимоеФайла = СодержимоеФайла + "}";
       
   Возврат СодержимоеФайла;
КонецФункции

&НаКлиенте
Процедура ExportToDot(Команда)

   Текст = Новый ТекстовыйДокумент;
   Текст.УстановитьТекст(КонцепцияДляЭкспортаВДот());
    Текст.Записать("C:\Users\DP118M\Desktop\daily stuff\dottest.txt",КодировкаТекста.UTF8);
КонецПроцедуры

не?
11 Dethmont
 
09.08.11
01:08
А почему на сервере то не получилось записать?
&НаКлиенте
Процедура Команда(Команда)
   
   ПолучитьВыборкуВТекст();
   
КонецПроцедуры

&НаСерверебезКонтекста
Функция ПолучитьВыборкуВТекст()

   Текст = новый ЗаписьТекста("d:\win.txt", КодировкаТекста.ANSI);
   Выборка = Справочники.Организации.Выбрать();
   Пока Выборка.Следующий() цикл
       Текст.ЗаписатьСтроку(Выборка.Код);
   КонецЦикла;    

КонецФункции // ПолучитьВыборкуВТекст()
12 Buster007
 
09.08.11
09:13
(11) пробовал?
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан