|
Получить Из Временного Хранилища | ☑ | ||
---|---|---|---|---|
0
Zmitrok62
05.02.15
✎
14:13
|
Приветствую! Создаю обработку, хочу передать данные с сервера на клиент, но говорит следующее:
{Обработка.ЗаписьФайла.Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (ПолучитьИзВременногоХранилища) Выборка = ПолучитьИзВременногоХранилища(ВыборкаВХ); по причине: Ошибка получения значения из временного хранилища по причине: Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа. по причине: Ошибка преобразования данных XDTO: НачалоСвойства: {http://v8.1c.ru/8.2/mngsrv/ws}response Форма: Элемент Тип: {http://v8.1c.ru/8.1/data/core}ValueTable по причине: Ошибка отображения типов: Отсутствует отображение для типа '{http://v8.1c.ru/8.1/data/core}ValueTable' &НаСервере Функция ПолучитьСписокТоваров() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Наименование |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.ЭтоГруппа = Ложь"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить(); АдресВХ = Новый УникальныйИдентификатор; Результат = ПоместитьВоВременноеХранилище(ВыборкаДетальныеЗаписи, АдресВХ); Возврат Результат; КонецФункции &НаКлиенте Процедура Старт(Команда) ВыборкаВХ = ПолучитьСписокТоваров(); Выборка = ПолучитьИзВременногоХранилища(ВыборкаВХ); Текст = Новый ТекстовыйДокумент; Для Каждого Стов Из Выборка Цикл Текст.Прочитать("/home/dmitry/nomenklatura.txt"); Текст.ДобавитьСтроку(Выборка); Текст.Записать("/home/dmitry/nomenklatura.txt"); КонецЦикла; КонецПроцедуры |
|||
1
H A D G E H O G s
05.02.15
✎
14:27
|
(0) Таблицу значений нельзя передавать на клиент
|
|||
2
eklmn
гуру
05.02.15
✎
14:28
|
охрень, чуть мозг не вывехнул от кода
|
|||
3
GROOVY
05.02.15
✎
14:37
|
А чего бы на сервере все не сделать?
|
|||
4
Zmitrok62
05.02.15
✎
14:42
|
Да можно и на сервере, это просто эксперимент и больше всего интересно почему не удается получить из ВХ.
|
|||
5
GROOVY
05.02.15
✎
14:43
|
Потому-что (1).
ТЗ не модет существовать на клиенте, ТЗ на клиенте - это сконвертированные в данные формы записи. |
|||
6
Zmitrok62
05.02.15
✎
15:02
|
Вот чувак предлагает решение: http://infostart.ru/public/240022/
|
|||
7
GROOVY
05.02.15
✎
15:14
|
(6) Вот это полная бредятина. Еще можно массив многомерный сделать. А зачем? Зачем передавать на клиент данные, которые там нафиг ненужны?
|
|||
8
H A D G E H O G s
05.02.15
✎
15:19
|
(7) Прекрасное решение.
|
|||
9
H A D G E H O G s
05.02.15
✎
15:21
|
(7) Программист должен сам решать, какие данные нужны на клиенте, а какие- на сервере. Без всяких контекстных вызовов по каждому чиху - которые шарашаться в большинстве методичек от "именнитых авторов" УФ.
|
|||
10
Гёдза
05.02.15
✎
15:29
|
(7) Мы сами знаем что вам нужно, а что нет (с) 1С
|
|||
11
GROOVY
05.02.15
✎
15:31
|
Ну давайте на старенький планшет ТЗ передадим с овер 9000 строк и колонок. Ну-ну... Это нам так надо.
|
|||
12
H A D G E H O G s
05.02.15
✎
15:37
|
(11) Хреновый пример.
Точно также на планшет можно передать 9000 строк и колонок в составе ДанныеФормыКоллекция |
|||
13
GROOVY
05.02.15
✎
15:37
|
ДанныеФормы целиком на клиент не передаются.
|
|||
14
GROOVY
05.02.15
✎
15:38
|
Тут срабатывает правило (10)
|
|||
15
H A D G E H O G s
05.02.15
✎
15:43
|
(12) Причем где-то на 10-12 пользователе, работающем с такой таблицей, сервер 1С двинет кони.
|
|||
16
H A D G E H O G s
05.02.15
✎
15:44
|
(13) Это не помешает пользователю отскроллить таблицу, поимев ее полностью на клиенте + нехилые тормоза сервера 1С
|
|||
17
H A D G E H O G s
05.02.15
✎
15:46
|
Точно также можно зашарашить в ДанныеФормы 100000 строк и дождаться 1-ого скролла около минуты.
|
|||
18
Demetres
05.02.15
✎
15:53
|
(4) Типа такого на клиенте нет
|
|||
19
Zmitrok62
05.02.15
✎
16:12
|
(18) м?
|
|||
20
H A D G E H O G s
05.02.15
✎
16:14
|
Это я к чему, GROOVY , говорю.
Это я говорю к тому, что не всегда правило (10) работает, и иногда надо мыслить головой, а не наборами правил и идеи типа (7) - отлично работают, когда данных мало и большое количество не предвидется. Вот и в своей методичке ты отработал по шаблонам, не умудрившись подумать. Рекомендую поправить: http://1c.chistov.pro/2010/06/1-82.html |
|||
21
Demetres
05.02.15
✎
16:17
|
(19)у!
|
|||
22
Zmitrok62
05.02.15
✎
16:35
|
(21) д
|
|||
23
ам794123
05.02.15
✎
16:46
|
(0) Вместо временного хранилища используй ЗначениеВСтрокуВнутр() и ЗначениеИзСтрокиВнутр()
|
|||
24
Zmitrok62
05.02.15
✎
16:48
|
(23) Спасибо, попробую!
|
|||
25
H A D G E H O G s
05.02.15
✎
16:48
|
(23) Класс!
|
|||
26
Гёдза
05.02.15
✎
16:50
|
И что на клиенте появится ТЗ?
|
|||
27
ShoGUN
05.02.15
✎
16:52
|
(23) Голь на выдумку хитра...
|
|||
28
Гёдза
05.02.15
✎
16:54
|
На кллиенте нет такого метода (((
|
|||
29
ам794123
05.02.15
✎
16:57
|
(28) Не все клиенты одинаково полезны. Клиент должен быть толстым)
|
|||
30
GROOVY
05.02.15
✎
17:23
|
(20) Вот тебе методика по шаблонам с объяснениями: http://1c.chistov.pro/2013/07/blog-post_25.html специально еще раз написал.
|
|||
31
H A D G E H O G s
05.02.15
✎
17:37
|
(30) Хехе, шутник.
|
|||
32
H A D G E H O G s
05.02.15
✎
17:46
|
(30) В первой статье первый запрос говорит о том, что вы не понимаете механизьма регистра остатков.
Правильный запрос выглядит примерно так: ВЫБРАТЬ РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, РеализацияТоваровУслугТовары.Количество ПОМЕСТИТЬ Товары ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Товары.Номенклатура, Товары.Количество, ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток ИЗ Товары КАК Товары ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ПО Товары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура И (ТоварыНаСкладахОстатки.Склад = &Склад) |
|||
33
H A D G E H O G s
05.02.15
✎
17:48
|
(32) Конечно, на экзамене по Спецу любой получит двойку.
|
|||
34
Гёдза
05.02.15
✎
17:48
|
(32) несущественное улучшение.
|
|||
35
H A D G E H O G s
05.02.15
✎
17:50
|
(34) Пфф.
Улучшение, которое убирает 1- внешний цикл. Улучшение, которое позволяет сократить на порядок обращение к таблице остатков. По шаблону количество обращений будет n^2, где n-число строк ТЧ товары. По варианту - всего n обращений. |
|||
36
GROOVY
05.02.15
✎
17:53
|
(35) Ну если это где-то документировано, то я признаю что полный даун в запросах.
|
|||
37
Гёдза
05.02.15
✎
17:53
|
(35) какой внешний цикл?
|
|||
38
Гёдза
05.02.15
✎
17:53
|
Ты какой метод соединения предполагешь?
|
|||
39
GROOVY
05.02.15
✎
17:54
|
(37) Это он про план запроса на sql-сервере в который мутирует запрос 1С.
|
|||
40
H A D G E H O G s
05.02.15
✎
17:54
|
(37) nestep loops
|
|||
41
Гёдза
05.02.15
✎
17:56
|
Единственное что на вложенной выборке нет индекса, но если меньше 100 записей то ваще не влияет
|
|||
42
GROOVY
05.02.15
✎
17:56
|
Только вот перед соединением, не на оперативный момент, нужно еще остатки как бы рассчитать.
|
|||
43
Гёдза
05.02.15
✎
17:57
|
(42) А где неоперативный то момент? в этом то и суть хоть и несущественная
|
|||
44
H A D G E H O G s
05.02.15
✎
17:58
|
(41) Шта?
(42) У тебя - на оперативный. Счаст вся типовота считает остатки на оперативный, насколько я помню (могу и ошибаться) |
|||
45
H A D G E H O G s
05.02.15
✎
17:58
|
Счаст ради "Высшей справедливости" найду док с 1000 строк
|
|||
46
GROOVY
05.02.15
✎
17:59
|
(44) И чего, мне в методической статье описывать все варианты с точки зрения оптимальности на сервере sql?
Тема - не эксперт по технологическим вопросам. |
|||
47
Гёдза
05.02.15
✎
17:59
|
сделай замер. эти выигрышные микросекунды не суть
|
|||
48
GROOVY
05.02.15
✎
18:00
|
Это как разбирать механизм сцепления у автомобиля и доказывать всем, что припаять намертво было бы быстрее, надежнее и дешевле!
|
|||
49
H A D G E H O G s
05.02.15
✎
18:03
|
(46) По твоим стопам пойдут тысячи юнных программистов, которые будут мыслить щаблонами и не пытаться "подергать".
|
|||
50
ДенисЧ
05.02.15
✎
18:04
|
Казалось бы,, элементарный вопрос...
Но нет... Пришёл Ёжик и всё свёл к нестед лупам и прочей нечисти... |
|||
51
ShoGUN
05.02.15
✎
18:07
|
(50) Нестед луп - это вложенный цикл. Что в нём такого нечестивого?
|
|||
52
GROOVY
05.02.15
✎
18:07
|
(49) Я был бы рад, если тысячи мыслили по рекомендациям 1С, а де делали запросы в циклах, получение представления отдельно и предупреждений при проведении.
|
|||
53
H A D G E H O G s
05.02.15
✎
18:12
|
(51) На 1021 строке nestep loops превращается в mergejoin
По шаблону - 2 mergejoin-а, у меня - один. Да, вот теперь выигрыш не такой критичный. |
|||
54
GROOVY
05.02.15
✎
18:21
|
(53) Ты мне лучше скажи, почему условие (А,Б) в (ВЫБРАТЬ А,Б Из Х) выполняется медленнее чем А = Х.А и Б = Х.Б?
Я понимаю что медленнее, но почему?! |
|||
55
К_Дач
05.02.15
✎
18:25
|
(54) это особенности самой СУБД. Оператор in () - вообще довольно медленная штука. К тому же, по сути, оптимизатор запросов превращает in в join.
А по поводу холивара с тов. Ежовым - я не гуру, но у вас, имхо, у обоих неоптимально. Надо бы сначала поместить выборку из виртуальной таблицы во временную и потом по соединяться с ней. Полностью согласен с книжкой "эксперт по технологическим вопросам, цитирую "виртуальные таблицы.... могут разворачиваться в подзапросы при трансляции в язык СУБД...." |
|||
56
Serginio1
05.02.15
✎
18:27
|
(54) На опыте во многих сценариях Left Join предочтительнее EXISTS и In
|
|||
57
К_Дач
05.02.15
✎
18:31
|
(56) это потому что при джойне вместо нестед лупс может и мердж использоваться, а для В (...) наверняка всегда только циклы, хотя могу ошибаться
|
|||
58
Wern
05.02.15
✎
18:33
|
(0) Сделай текстовый документ на сервере, а не на клиенте и передавай на клиент его.
|
|||
59
Serginio1
05.02.15
✎
18:39
|
(57) Весьма вероятно и оптимизатор берет неправильный план. Вот один из примеров которых огромное множество
v8: Подзапросы с Выбрать Первые |
|||
60
Serginio1
05.02.15
✎
18:44
|
||||
61
К_Дач
05.02.15
✎
18:54
|
Когда 1С наконец-таки прикрутит в язык запросов инструкцию для того КАК соединять (аналог ключевых слов sql) - это будет радость и веселье
|
|||
62
GROOVY
05.02.15
✎
18:58
|
(61) Ну это будет в версии 10.3.12.5987375.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |