Имя: Пароль:
1C
1С v8
v8: 1С 8.2 Ошибка в создании запроса на сервере
,
0 KuJIT
 
27.11.13
12:45
Такое дело:
&НаСервере
Функция ЗапросВыполнить(фОрганизация, фНачПериода, фКонПериода) Экспорт
    Запрос = Новый Запрос;
    
    Если НЕ ПустаяСтрока(фОрганизация) Тогда    
        Запрос.УстановитьПараметр("Организация", фОрганизация);
        СравнитьОрг = " И ПКО.Организация = &Организация ";
    КонецЕсли;
    Запрос.УстановитьПараметр("ДатаН", фНачПериода);
    Запрос.УстановитьПараметр("ДатаК", КонецДня(фКонПериода));
    
    Запрос.Текст = "ВЫБРАТЬ
    |    ПКО.Ссылка
    |ИЗ
    |    Документ." + СокрЛП(ТипДокумента) + " КАК ПКО
    |ГДЕ
    |    ПКО.Проведен = ИСТИНА
    |    И ПКО.Дата МЕЖДУ &ДатаН И &ДатаК
    |   " + СравнитьОрг + "
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПКО.Дата";
    Выборка = Запрос.Выполнить().Выбрать();
    Возврат Выборка;
КонецФункции;

Запускаю из:
&НаКлиенте
Процедура Выполн(Команда)
      Выборка = ЗапросВыполнить(Организация, НачПериода, КонПериода);
//...
КонецПроцедуры

При выполнении ЗапросВыполнить,
Выборка = Запрос.Выполнить().Выбрать(); имеет ошибку чтения значения (в "вычислить выражение" посмотрел) и после попытки выполнения
Выборка = ЗапросВыполнить(Организация, НачПериода, КонПериода);
Вылетает ошибка "Ошибка отображения типов: Отсутствует отображение для типа ВыборкаИзРезультатовЗапроса"
Я так подозреваю, что дело в неправильной выборке. Что я делаю не так?
1 Euguln
 
27.11.13
12:47
Ну низзя передавать выборку с сервера на клиента.
2 Wobland
 
27.11.13
12:47
выборку на клиенте хочешь
3 vicof
 
27.11.13
12:47
Выборка на клиенте не существет
4 Wobland
 
27.11.13
12:48
(3) это от ширины зависит
5 vicof
 
27.11.13
12:48
(0) (1) (2) (3) Д'Артаньян и три мушкетера :)
6 Euguln
 
27.11.13
12:48
тому как:
ВыборкаИзРезультатаЗапроса (QueryResultSelection)

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

Сервер, толстый клиент, внешнее соединение.
7 KuJIT
 
27.11.13
12:49
Я же вроде как на сервере выполняю функцию? оО Специально для этого перенес. Как, в таком случае, вытащить информацию как из запроса?
8 Euguln
 
27.11.13
12:50
(7) передавай простые типы, структуру например.
9 vicof
 
27.11.13
12:50
(4)(6) Ну понятно, что здесь тонкий клиент имеется ввиду. Иначе бы у автора ошибки не возникло.
10 KuJIT
 
27.11.13
12:52
Выборка = Запрос.Выполнить().Выбрать(); - это впринципе и не должно работать? Даже учитывая, что функция &НаСервере?
11 Wobland
 
27.11.13
12:52
(7) в куда?
12 Wobland
 
27.11.13
12:52
(10) Возврат Выборка;
вот это у тебя не работает
13 dj_serega
 
27.11.13
12:53
(10) на тонком клиенте нет Запроса, а значит и нет его результата.
Таблицы значений также нет.

Вывод один. И он (8)
14 KuJIT
 
27.11.13
12:54
Т.е. создаю структуру, потом в цикле по одному из Выборка = Запрос.Выполнить().Выбрать(); записываю в эту структуру, и возвращаю. Так будет работать?
15 Wobland
 
27.11.13
12:55
держу пари, все фокусы можно на сервере провернуть
16 KuJIT
 
27.11.13
12:58
(15)  Я вам верю. Не подскажете как? =)
17 Wobland
 
27.11.13
12:59
(16) а что ты хочешь юзеру показать?
18 dj_serega
 
27.11.13
13:00
(14) Если уж очень нужно тебе данные иметь на тонком клиенте (учти (15) ) тогда должно получиться где-то так:

Процедура ТонкийКлиент()
    
    СтруктураСтрок = Новый Структура;
    МахинацииНаСервере(СтруктураСтрок);
    
КонецПроцедуры

Процедура МахинацииНаСервере(СтруктураСтрок)
    
    Запрос = Новый Запрос;
    Результат = Запрос.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
        
        СтруктураСтроки = Новый Структура();
        СтруктураСтроки.Вставить(ИмяКолонки, ЗначениеКолонки);
        
        СтруктураСтрок.Вставить(ИндексСтроки, СтруктураСтрок);
        
    КонецЦикла;
    
КонецПроцедуры
19 dj_serega
 
27.11.13
13:00
СтруктураСтрок.Вставить(ИндексСтроки, СтруктураСтроки);
20 dj_serega
 
27.11.13
13:01
(17) видимо ему нужно показать список ПКО'шек.
21 Wobland
 
27.11.13
13:02
(20) логическое ударение на слове "показать" ;)
22 hhhh
 
27.11.13
13:02
(13) таблица значений есть на форме. ПОэтому можно в таблицу значений выгрузить прямо на сервере, а на клиенте, она у вас сама появится в табличном поле.
23 Wobland
 
27.11.13
13:05
(22) реквизит формы только придётся под это дело завести
24 KuJIT
 
27.11.13
13:07
(17) Я ничего не хочу показывать, я хочу обработать документы. Те, которые получил из запроса.
25 hhhh
 
27.11.13
13:07
(23) ну, естественно.
26 hhhh
 
27.11.13
13:08
(24) тогда обрабатывай на сервере.
27 dj_serega
 
27.11.13
13:08
(24) Ну так и обрабатывай на сервере. Зачем передавать на клиент?
28 dj_serega
 
27.11.13
13:09
(26) =))
29 KuJIT
 
27.11.13
13:13
Хм.. Логично. Большое спасибо, сенпаи =)
30 Wobland
 
27.11.13
13:18
Программа должна быть светлой и проворной, её подпрограммы должны переплетаться, как нити жемчуга. Дух и сила программы должны распространяться повсюду. Она не должна быть ни слишком маленькой, ни слишком большой, в ней не должно быть ненужных циклов и неиспользуемых переменных, она не должна терять своей структуры и гибкости.
31 KuJIT
 
27.11.13
13:18
&НаСервере
Функция ЗапросВыполнить(фОрганизация, фНачПериода, фКонПериода) Экспорт
    Запрос = Новый Запрос;
    
    Если НЕ ПустаяСтрока(фОрганизация) Тогда    
        Запрос.УстановитьПараметр("Организация", фОрганизация);
        СравнитьОрг = " И ПКО.Организация = &Организация ";
    КонецЕсли;
    Запрос.УстановитьПараметр("ДатаН", фНачПериода);
    Запрос.УстановитьПараметр("ДатаК", КонецДня(фКонПериода));
    
    Запрос.Текст = "ВЫБРАТЬ
    |    ПКО.Ссылка КАК Док
    |ИЗ
//    |    Документ.ПриходныйКассовыйОрдер КАК ПКО
    |    Документ." + СокрЛП(ТипДокумента) + " КАК ПКО
    |ГДЕ
    |    ПКО.Проведен = ИСТИНА
    |    И ПКО.Дата МЕЖДУ &ДатаН И &ДатаК
    |   " + СравнитьОрг + "
    |
    |УПОРЯДОЧИТЬ ПО
    |    ПКО.Дата";
    Выборка = Запрос.Выполнить().Выбрать();
    СтуктураДляВозврата = Новый Массив;
    Пока Выборка.Следующий() Цикл
        СтуктураДляВозврата.Добавить(Выборка.Док);
    КонецЦикла;


В строке
Пока Выборка.Следующий() Цикл
Условие сразу ложное, и цикл игнорится. Следовательно-таки не правильно работает Выборка =/
32 KuJIT
 
27.11.13
13:19
(30) Я только учусь. Мне бы хоть как-то сделать =|
33 Wobland
 
27.11.13
13:21
(31) выборка правильно сразу проскакивает пустой результат запроса
34 Wobland
 
27.11.13
13:21
(32) Ученик спросил Учителя: “У меня есть программа, которая когда запускается, а когда и нет. Я следовал правилам программирования, но она всё равно не работает. Зачем же нужны эти правила?”
Учитель ответил: “Ты не получил желаемого, потому что ты не постиг Дао. Только дурак ожидает рационального поведения от людей. Почему ты ожидаешь его от машины, которая разработана людьми? Компьютеры только симулируют детерминизм, одно лишь Дао совершенно.
Правила программирования преходящи, только Дао вечно. Таким образом, ты должен созерцать Дао перед тем как достигнешь просветления”.
“Но как узнаю, что я достиг просветления?”, — спросил ученик.
“Твои программы начнут работать правильно”, — ответил Учитель.
35 KuJIT
 
27.11.13
13:27
(33) Не понял. Как мне извлечь из этого запроса необходимую информацию, подскажите пожалуйста. В чем проблема?
36 Wobland
 
27.11.13
13:29
(35) в запросе никого нет
37 KuJIT
 
27.11.13
13:30
(36) Хотите сказать, что все правильно, вот только запрос не находит ничего подходящего?
38 Wobland
 
27.11.13
13:32
(37) бинго!
39 KuJIT
 
27.11.13
13:33
Хм.. Действительно, составил отчет с этим запросом - а он пустой. Благодарю за советы.