Имя: Пароль:
1C
1С v8
с сервера на клиент неправильно передается результат запроса
0 Neznayka_5
 
17.08.12
11:13
У меня запрос выполняется на сервере, и результатом функции передается на клиент. При передаче видимо что-то не то происходит, и, хотя сервер выполняет запрос правильно, на клиенте он принимается уже не таким, какой должен быть. Может кто знает, как избежать этого?
1 Капитан О
 
17.08.12
11:14
а что передаётся? тонкий с ТЗ не знаком
2 Neznayka_5
 
17.08.12
11:15
(1) на сервере пишу так:
Возврат Запрос.Выполнить();
3 Капитан О
 
17.08.12
11:18
(2) тоже на тонком недоступен... что ты хочешь от клиента? запрос - серверная вещь
4 andrewks
 
17.08.12
11:19
происки Нуралиева, инфа 146%.

давай больше инфы
5 Жан Пердежон
 
17.08.12
11:21
РезультатЗапроса (QueryResult)

...

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

Сервер, толстый клиент, внешнее соединение.
Возможен обмен с сервером. Сериализуется.
6 Neznayka_5
 
17.08.12
11:21
наверное не так написала. я в общем модуле, привилегированном пишу функцию (2 параметра - структурой передаю параметры запроса, а вторым параметром, строкой - текст запроса) Там заполняю параметры, выполняю запрос.
Функция ВернутьРезультатЗапроса(СтруктураПараметров,ТекстЗапроса) Экспорт
   
   Запрос = Новый Запрос;
   Для каждого Параметр Из СтруктураПараметров Цикл
       Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
   КонецЦикла;
   Запрос.Текст = ТекстЗапроса;
   
   Возврат Запрос.Выполнить();
КонецФункции

в потом во внешнем отчете ее использую.
7 Wobland
 
17.08.12
11:22
(6) логику меняй. спросил же: чего ты хочешь от клиента?
8 Neznayka_5
 
17.08.12
11:23
(7)
ВыборкаДетали = ДополнительныйМодульПривилегированный.ВернутьРезультатЗапроса(СтруктураПараметров,Текст);    
   Пока ВыборкаДетали.Следующий() Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);
       ТабДокумент.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
   КонецЦикла;
   ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
   ТабДокумент.ПоказатьУровеньГруппировокСтрок(0);                      
   ТабДокумент.ОтображатьСетку = Ложь;
   ТабДокумент.Защита = Истина;
   ТабДокумент.ТолькоПросмотр = Истина;
   Возврат ТабДокумент;

Хочу чтоб по группировкам выдавался результат запроса
9 Wobland
 
17.08.12
11:25
(8) Выбрать() забыла, но это неважно
10 UnAmerican
 
17.08.12
11:26
Итоги делай, будут группировки.
11 Wobland
 
17.08.12
11:26
(8) заполняй свой ТабДок на сервере весь и отдавай уже готовый клиенту
12 Neznayka_5
 
17.08.12
11:29
(11) сейчас так и хочу сделать. получается следующее:
в функции на клиенте пишу: Возврат Запрос.Выполнить().Выгрузить();
в отчете:
ВыборкаДетали = ДополнительныйМодульПривилегированный.ВернутьРезультатЗапроса(СтруктураПараметров,Текст);    
   Для каждого Строка Из ВыборкаДетали Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);        
       ТабДокумент.Вывести(ОбластьСтрока);
   КонецЦикла;
   ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
   ТабДокумент.ПоказатьУровеньГруппировокСтрок(0);                      
   ТабДокумент.ОтображатьСетку = Ложь;
   ТабДокумент.Защита = Истина;
   ТабДокумент.ТолькоПросмотр = Истина;
   Возврат ТабДокумент;

Выводит пустую таблицу
13 Wobland
 
17.08.12
11:32
(12) ещё раз: заполняй свой ТабДок на сервере весь и отдавай уже готовый клиенту
14 Neznayka_5
 
17.08.12
11:36
(13) это же не универсально? я нашла, почему таблица пустая. в цикле
Для каждого Строка Из ВыборкаДетали Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);        
       ТабДокумент.Вывести(ОбластьСтрока);
   КонецЦикла;
нужно написать ...Запролнить(Строка)
Сейчас все выводит, но без возможности свернуть таблицу. Есть способы это реализовать?
15 Wobland
 
17.08.12
11:36
начать автогруппировку, вывести на нужном уровне...
16 Neznayka_5
 
17.08.12
11:38
(15)
ТабДокумент.НачатьАвтогруппировкуСтрок();    
   ВыборкаДетали = ДополнительныйМодульПривилегированный.ВернутьРезультатЗапроса(СтруктураПараметров,Текст);    
   Для каждого Строка Из ВыборкаДетали Цикл
       ОбластьСтрока.Параметры.Заполнить(Строка);
       ТабДокумент.Вывести(ОбластьСтрока), !!! а что здесь написать вместо: ВыборкаДетали.Уровень());  ???
   КонецЦикла;
   ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
   ТабДокумент.ПоказатьУровеньГруппировокСтрок(0);
17 Wobland
 
17.08.12
11:39
(16) некое число
18 Wobland
 
17.08.12
11:40
за умеренную плату могу даже подсказать, где это в СП написано, пока ДенисЧ не прибежал
19 UnAmerican
 
17.08.12
11:41
Или делай так:
ВыборкаДетали = ДополнительныйМодульПривилегированный.ВернутьРезультатЗапроса(СтруктураПараметров,Текст).выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаДетали.Следующий() Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);
       ТабДокумент.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
       Выборка...=выбрать(ОбходРезультатаЗапроса.ПоГруппировкам
 Пока Выборка...Следующий() Цикл
 КонецЦикла;
   КонецЦикла;
20 Neznayka_5
 
17.08.12
11:43
(19) это мне не подходит, тк нужно на сервере выгружать запрос иначе он каверкается.
(18) , (17) это я ввожу число, но плюсиков слева не получается.
21 Wobland
 
17.08.12
11:52
Уровень используется для автоматической группировки строк табличного документа. Соседние строки с одинаковым уровнем будут отнесены к одной группе. Строки с минимальным уровнем в группу не объединяются.

боюсь соврать, но, наверное, нужно шапку на одном уровне выводить, а строки на другом
22 Neznayka_5
 
17.08.12
11:57
(21) не совсем поняла как это
23 Wobland
 
17.08.12
12:05
(22) смысла не вижу в ТабДоке, в котором вся таблица сворачивается в плюсик...
шапку выводишь на 1м уровне, строки - на 2м. как-то так
24 Neznayka_5
 
17.08.12
12:06
все бы ничего, но у меня 4 уровня)
25 Wobland
 
17.08.12
12:08
(24) и плюсика нет? не верю
26 Wobland
 
17.08.12
12:09
код покажи. надо обходить результат запроса по группировкам
27 Neznayka_5
 
17.08.12
12:10
если я буду по группировкам, то это дерево значений, а оно не передается с сервера на клиент
(26) какой именно?
28 Wobland
 
17.08.12
12:10
(27) я тебе что сказал? марш всё делать на сервер!
29 Neznayka_5
 
17.08.12
12:13
(28) эхх.. видимо придется(
30 Wobland
 
17.08.12
12:14
(29) 47 минут. неплохой результат
31 Neznayka_5
 
17.08.12
12:14
(30) я кстати сейчас еще столкнусь с одной проблемой..
32 Neznayka_5
 
17.08.12
12:16
(30) вот) теперь так на сервере выглядит.

Функция ВернутьРезультатЗапроса(СтруктураПараметров,ТекстЗапроса) Экспорт
   
   Запрос = Новый Запрос;
   Для каждого Параметр Из СтруктураПараметров Цикл
       Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
   КонецЦикла;
   Запрос.Текст = ТекстЗапроса;
       
   ТабДокумент = Новый ТабличныйДокумент;
   ТабДокумент.НачатьАвтогруппировкуСтрок();    
   ВыборкаДетали = Запрос.Выполнить().Выбрать();    
   Пока ВыборкаДетали.Следующий() Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);
       ТабДокумент.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
   КонецЦикла;
   ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
   ТабДокумент.ПоказатьУровеньГруппировокСтрок(0);                      
   Возврат ТабДокумент;
КонецФункции

а что делать с : ОбластьСтрока?? Можно вместо нее написать ТабДокумент?
33 Wobland
 
17.08.12
12:17
(32) ТабДокумент=Новый ТабличныйДокумент и всё прочее тоже на сервере сделай
34 Wobland
 
17.08.12
12:18
(33) тфу, не заметил. ОбластьСтрока=ТабДок.ПолучитьОбласть(). а ты что думала?
35 sanja26
 
17.08.12
12:19
(31) все на сервере делай, правильно тебе говорят. С клиента параметры передавай и ТабДок.Показать()
36 Neznayka_5
 
17.08.12
12:20
(34) ага, это сделала. на клиенте нужно это вывести в макет (в котором, помимо этого ТабДок-та есть еще данные)
37 sanja26
 
17.08.12
12:21
так ты ТабДок с предваиртельными данными тоже на сервер передавай вначале
38 sanja26
 
17.08.12
12:22
ТабДокумент придется таскать по всем процедурам как параметр, так как переменные модуля объекта засада та еще
39 Neznayka_5
 
17.08.12
12:25
ой ппц, как все сложно..
40 Wobland
 
17.08.12
12:25
(36) не нужно тебе на клиенте всё в макет выводить, у клиента простая задача: работать интерфейсом
41 UnAmerican
 
17.08.12
12:29
(40) На клиенте только вывести(). Обходить все группировки и вывод в макет на сервере.
42 Neznayka_5
 
17.08.12
12:29
(40) у меня все на Слава Богу..

{ВнешнийОтчет.ОтчетМатериалыВЭксплуатацию.МодульОбъекта(101)}: Ошибка при вызове метода контекста (ВернутьРезультатЗапроса)
   Результат = ДополнительныйМодульПривилегированный.ВернутьРезультатЗапроса(СтруктураПараметров,Текст,ТабДокумент);
по причине:
Попытка передачи с клиента на сервер мутабельного значения 3-го параметра метода ВернутьРезультатЗапроса ().
43 Neznayka_5
 
17.08.12
12:29
такая функция:
Функция ВернутьРезультатЗапроса(СтруктураПараметров,ТекстЗапроса,ТабДокумент) Экспорт
   
   Запрос = Новый Запрос;
   Для каждого Параметр Из СтруктураПараметров Цикл
       Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
   КонецЦикла;
   Запрос.Текст = ТекстЗапроса;
   
   ТабДокумент.НачатьАвтогруппировкуСтрок();    
   ВыборкаДетали = Запрос.Выполнить().Выбрать();
   
   ОбластьСтрока=ТабДокумент.ПолучитьОбласть();
   
   Пока ВыборкаДетали.Следующий() Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);
       ТабДокумент.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
   КонецЦикла;
   ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
   ТабДокумент.ПоказатьУровеньГруппировокСтрок(0);                      
   ТабДокумент.ОтображатьСетку = Ложь;
   ТабДокумент.Защита = Истина;
   ТабДокумент.ТолькоПросмотр = Истина;
   Возврат ТабДокумент;

КонецФункции
44 Wobland
 
17.08.12
12:31
(42) как вызываешь? сдаётся мне, какую-то ересь хочешь
45 Wobland
 
17.08.12
12:32
плюсики-то появились? а то .Выбрать(ОбходРезультата...) бы ещё
46 UnAmerican
 
17.08.12
12:32
ТабДокумент где создаешь? Он походу не типизирован.
47 UnAmerican
 
17.08.12
12:32
(45) Ошибка при передачи на клиент, какие плюсики :-)
48 Neznayka_5
 
17.08.12
12:32
ну я кажется поняла.
так вызываю:
Результат = ДополнительныйМодульПривилегированный.ВернутьТабличныйДокумент(СтруктураПараметров, Текст, ТабДокумент);

а на клиенте до этого:
ТабДокумент = Новый ТабличныйДокумент;
   ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Отчет";
   Макет = ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   ТабДокумент.Вывести(ОбластьШапка);

Видимо я область ОбластьСтрока дважды создаю, да?
49 Wobland
 
17.08.12
12:33
(48) нет, это разные переменные.
на зачем ТабДок на клиенте?
50 UnAmerican
 
17.08.12
12:34
(48) Не передавай ты табдок, а создавай на сервере и возвращай в клиент.
51 UnAmerican
 
17.08.12
12:35
А так понятно, пришла ересь на сервер, обрабатывается как табдок, а вот при возврате получаем мутабельный типзнч.
52 Wobland
 
17.08.12
12:36
(50) ничего, скоро она достигнет просветления, и следующие темы станут более серьёзными ;)
53 sanja26
 
17.08.12
12:37
Макет = ПолучитьМакет("Макет");
это работает на клиенте?
54 Neznayka_5
 
17.08.12
12:38
(53) я хочу, чтоб это работало на клиенте
55 UnAmerican
 
17.08.12
12:38
(53)
Доступность:
Сервер, толстый клиент, внешнее соединение.
56 UnAmerican
 
17.08.12
12:39
(53) Тонкого нет.
57 sanja26
 
17.08.12
12:40
(56) так и я о том же)
(54) хоти, но такого неттт
58 sanja26
 
17.08.12
12:41
(54)это все на сервер

ТабДокумент = Новый ТабличныйДокумент;
   ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Отчет";
   Макет = ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   ТабДокумент.Вывести(ОбластьШапка);
59 Wobland
 
17.08.12
12:42
(54) повторить?
60 Neznayka_5
 
17.08.12
12:42
{ОбщийМодуль.ДополнительныйМодульПривилегированный.Модуль(14,10)}: Процедура или функция с указанным именем не определена (ПолучитьМакет)
   Макет = <<?>>ПолучитьМакет("Макет"); (Проверка: Толстый клиент (обычное приложение))

Макет параметром передать7??
61 Лоботряс
 
17.08.12
12:43
(54) Если человек чего-то действительно хочет, то он обязательно этого добьется. Вариант - написать Б.Н. 100 000 писем "Я хочу чтобы ПолучитьМакет("Макет") работало в тонком клиенте. Сделайте,пожалуйста".
62 sanja26
 
17.08.12
12:45
(60)так у тебя обычное приложение? и чего мозги тогда пудрить??
63 Neznayka_5
 
17.08.12
12:47
(62) а я это знала?)
64 Neznayka_5
 
17.08.12
12:47
(62) что тогда делать?
65 sanja26
 
17.08.12
12:48
(42) а это откуда тогда выплыло?

Попытка передачи с клиента на сервер мутабельного значения 3-го параметра метода ВернутьРезультатЗапроса ().
66 sanja26
 
17.08.12
12:48
какая конфигурация?
67 Wobland
 
17.08.12
12:48
Клиент: о могучий сервер! молю тебя, дай мне ТабДок! /*ТабДок=СервернаяФункцияФормированияТабДока()*/
Сервер: возьми его! /*Возврат ТабДок*/
Клиент: благодарю тебя, великий сервер! сейчас я его покажу юзеру /*ТабДок.Показать()*/
68 Neznayka_5
 
17.08.12
12:48
упп 1.3. и сейчас тоже такое было
69 sanja26
 
17.08.12
12:50
тогда забей на такое слово как сервер))
старайся делать запросы и расчеты в модуле объекта и все
70 Wobland
 
17.08.12
12:50
что, уже внезапно обычное приложение? вот коварная женщина!
71 sanja26
 
17.08.12
12:51
выкладывай код весь, без лишних расчетов
72 Neznayka_5
 
17.08.12
12:52
да нееет, вы не поняли. мне надо  привилигерованном режиме обязательно
73 Neznayka_5
 
17.08.12
12:52
Функция ВернутьТабличныйДокумент(СтруктураПараметров,ТекстЗапроса) Экспорт
   
   Запрос = Новый Запрос;
   Для каждого Параметр Из СтруктураПараметров Цикл
       Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
   КонецЦикла;
   Запрос.Текст = ТекстЗапроса;
   
   //Возврат Запрос.Выполнить().Выбрать();
   
   ТабДокумент = Новый ТабличныйДокумент;
   ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Отчет";
   Макет = ПолучитьМакет("Макет");
   ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьСтрока = Макет.ПолучитьОбласть("Строка");
   ТабДокумент.Вывести(ОбластьШапка);
   
   ТабДокумент.НачатьАвтогруппировкуСтрок();    
   ВыборкаДетали = Запрос.Выполнить().Выбрать();
   
   ОбластьСтрока=ТабДокумент.ПолучитьОбласть();
   
   Пока ВыборкаДетали.Следующий() Цикл
       ОбластьСтрока.Параметры.Заполнить(ВыборкаДетали);
       ТабДокумент.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
   КонецЦикла;
   ТабДокумент.ЗакончитьАвтогруппировкуСтрок();
   ТабДокумент.ПоказатьУровеньГруппировокСтрок(0);                      
   ТабДокумент.ОтображатьСетку = Ложь;
   ТабДокумент.Защита = Истина;
   ТабДокумент.ТолькоПросмотр = Истина;
   Возврат ТабДокумент;


КонецФункции

это на сервере
74 Wobland
 
17.08.12
12:53
что такое привелигированный режим?
75 Wobland
 
17.08.12
12:53
(74) виле, конечно
76 sanja26
 
17.08.12
12:55
(73) каком нафик сервере?!!! не путай людей
какая ошибка?
77 Лоботряс
 
17.08.12
12:55
(75) это когда на мерсе с мигалкой по встречке
78 sanja26
 
17.08.12
12:57
(73) это функция модуля объекта?
79 Neznayka_5
 
17.08.12
12:57
{ВнешнийОтчет.ОтчетМатериалыВЭксплуатацию.МодульОбъекта(101)}: Ошибка при вызове метода контекста (ВернутьТабличныйДокумент)
   Результат = ДополнительныйМодульПривилегированный.ВернутьТабличныйДокумент(СтруктураПараметров, Текст);
по причине:
Попытка передачи мутабельного значения результата метода ВернутьТабличныйДокумент ().
80 Wobland
 
17.08.12
12:57
(78) имхается мне, она сервером называет общий модуль
81 Neznayka_5
 
17.08.12
12:58
(80) да!)
82 sanja26
 
17.08.12
12:58
(78) + если вызываешь в каком общем модуле, то надо

ТвойДокИлиОтчет.ПолучитьМакет("Макет")
83 Wobland
 
17.08.12
12:59
(81) отличная пятница получается!
84 Neznayka_5
 
17.08.12
13:00
(82) Он внешний мой отчет. это ничего?
85 Wobland
 
17.08.12
13:01
(79) плин, не вижу никакой мутабельности..
86 Wobland
 
17.08.12
13:01
(84) ну получи макет в "клиенте" и передай параметром...
87 sanja26
 
17.08.12
13:04
(84)у внешнего отчета есть модуль объекта, в нем и делай епт
(85) пятница!!!111
88 Neznayka_5
 
17.08.12
13:04
(86) {ВнешнийОтчет.ОтчетМатериалыВЭксплуатацию.МодульОбъекта(101)}: Ошибка при вызове метода контекста (ВернутьТабличныйДокумент)
   Результат = ДополнительныйМодульПривилегированный.ВернутьТабличныйДокумент(СтруктураПараметров, Текст, Макет);
по причине:
Попытка передачи с клиента на сервер мутабельного значения 3-го параметра метода ВернутьТабличныйДокумент ().
89 sanja26
 
17.08.12
13:06
(88) пистец...

Функция ВернутьТабличныйДокумент(СтруктураПараметров,ТекстЗапроса) Экспорт

там 2 параметра
зачем при вызове пихать три
90 Wobland
 
17.08.12
13:06
плин, а на хрена общий модуль напрягать? ваще зачем эта функция там? вынеси всё в модуль объекта
91 Neznayka_5
 
17.08.12
13:06
(89) так макет же..
92 Wobland
 
17.08.12
13:07
понаделают кучу функций, потом сами разобраться не могут
93 Neznayka_5
 
17.08.12
13:07
(91) потому что у пользователя нет прав.
94 UnAmerican
 
17.08.12
13:10
А РЛС причем тут?
95 sanja26
 
17.08.12
13:10
(91) Функция ВернутьТабличныйДокумент(СтруктураПараметров,ТекстЗапроса, мойМакет) Экспорт
   
 
   ТабДокумент = Новый ТабличныйДокумент;
   ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Отчет";
   Макет = МойМакет;
96 UnAmerican
 
17.08.12
13:11
Я вообще думал о теме отчета на веб-морде.
97 Wobland
 
17.08.12
13:12
(96) Незнайка нас всех налюбила ;)
98 Neznayka_5
 
17.08.12
13:13
что за вообще эти мутабельные значения?
99 Wobland
 
17.08.12
13:14
(98) могущие принимать значения разных типов
100 sanja26
 
17.08.12
13:14
для данного случая - парметр передаешь, которого не должно быть
101 Neznayka_5
 
17.08.12
13:15
странно. вроде таб. документ можно передавать..
102 Wobland
 
17.08.12
13:20
эх, сотню про..пустили

СТО ДВА!