IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Очередной вопрос к Чемберле.. то есть, к знатокам, Результаты в список значений
Quan
сообщение Feb 15 2006, 13:36
Сообщение #1


Продвинутый
***

Группа: Пользователи
Сообщений: 234
Регистрация: 6-December 05
Пользователь №: 5839



Источник проблемы:
Ряд "родных" методов 1С принимает в качестве параметра только список значений - видимо, как исторически более древнюю структуру.
Соответственно, регулярно возникает вполне естественное желание загнать результат SQL-запроса в какой-нибудь 1Совский список.

В принципе вроде есть подходящий метод
GetValuesInSV(PosNamesCol) / ПолучитьЗначенияСЗ()
но (поправьте, если я ошибаюсь) он ориентирован на несколько устаревшую методику работы с открытием выборки.
В то же время, рекомендуемый метод
ExecuteStatement() / ВыполнитьИнструкцию() соглашается выгружать результат исключительно в таблицу значений. Во всяком случае, при
ВозврСписок=СоздатьОбъект("СписокЗначений");
Запр.ВыполнитьИнструкцию(,ВозврСписок);
получаем недвусмысленное ругательство насчет неправильного типа параметра.

Сейчас я действую примерно так:
ВозврСписок=СоздатьОбъект("СписокЗначений");
Запр.ВыполнитьИнструкцию().Выгрузить(ВозврСписок);
но возникают смутные подозрения, что такая технология, мягко говоря, неоптимальна; как минимум, производится одна паразитная пересылка в памяти клиента.

Соответственно, вопрос к знатокам:
Можно ли выгрузить результаты метода ВыполнитьИнструкцию непосредственно в объект типа "СписокЗначений"?
Иле же это - сразу в Предложения по развитию?


--------------------
...а для тех, кто не хотел изучать SQL, Господь сотворил курсоры.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АЛьФ
сообщение Feb 15 2006, 13:59
Сообщение #2


Продвинутый
***

Группа: Пользователи
Сообщений: 767
Регистрация: 25-July 03
Из: Санкт-Петербург
Пользователь №: 45



Мне кажется, что это необходимо в очень специфических случаях, когда таблица, возвращаемая запросом, содержит только одну колонку. Из-за это не стоит заморачиваться в самой компоненте. ИМХО достаточно и того решения, которое ты используешь.


--------------------
1c++ developer :: www.1cpp.ru
FormEx developer :: www.dorex.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
tav13
сообщение Feb 15 2006, 14:00
Сообщение #3


Продвинутый
***

Группа: Пользователи
Сообщений: 150
Регистрация: 27-January 06
Пользователь №: 6285



Позвольте расширить вопрос, "ВыполнитьИнструкцию" не понимает ИндексированнаяТаблица sad.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
АЛьФ
сообщение Feb 15 2006, 14:06
Сообщение #4


Продвинутый
***

Группа: Пользователи
Сообщений: 767
Регистрация: 25-July 03
Из: Санкт-Петербург
Пользователь №: 45



Цитата(tav13 @ Feb 15 2006, 14:00)
Позвольте расширить вопрос, "ВыполнитьИнструкцию" не понимает ИндексированнаяТаблица  sad.gif

А с чего это он должен ее понимать? Об этом где-то сказано?


--------------------
1c++ developer :: www.1cpp.ru
FormEx developer :: www.dorex.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
trad
сообщение Feb 15 2006, 14:07
Сообщение #5


Продвинутый
***

Группа: Пользователи
Сообщений: 709
Регистрация: 25-July 03
Из: Киров
Пользователь №: 27



Цитата(Quan @ Feb 15 2006, 14:36)
ВозврСписок=СоздатьОбъект("СписокЗначений");
Запр.ВыполнитьИнструкцию(,ВозврСписок);

тоже была такая потребность.
теперь у меня есть 1.8.1.7 + реализация этой штуки.
могу поделиться пока это не включено в официальный релиз
если надо - стукнись в асю
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Quan
сообщение Feb 15 2006, 14:17
Сообщение #6


Продвинутый
***

Группа: Пользователи
Сообщений: 234
Регистрация: 6-December 05
Пользователь №: 5839



Цитата(АЛьФ @ Feb 15 2006, 13:59)
Мне кажется, что это необходимо в очень специфических случаях, когда таблица, возвращаемая запросом, содержит только одну колонку.

гм... попробую еще раз, более детально
Такие "специфические" случаи неизбежно создаются искусственно, поскольку - как я отмечал выше - многие методы 1С требуют именно список значений.
То есть речь не о случайном и редком событии - возврате запросом всего одной колонки, а о целенаправленном создании запросов, возвращающих одну колонку.
Цитата(АЛьФ @ Feb 15 2006, 13:59)
Из-за это не стоит заморачиваться в самой компоненте. ИМХО достаточно и того решения, которое ты используешь.

ну, собственно, именно это я и делаю.
Т.е проблема отнюдь не в безысходности ситуации, а только в оптимизации. Дополнительный "штрафной круг" с созданием промежуточной таблицы и последующей перекачкой данных в список вряд ли можно считать оптимальным решением. В то же время, "зуб на мясо", запросу должно быть достаточно безразлично, выгружать ли данные в таблицу, в список или иную схожую структуру.


--------------------
...а для тех, кто не хотел изучать SQL, Господь сотворил курсоры.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Quan
сообщение Feb 15 2006, 14:21
Сообщение #7


Продвинутый
***

Группа: Пользователи
Сообщений: 234
Регистрация: 6-December 05
Пользователь №: 5839



Цитата(trad @ Feb 15 2006, 14:07)
тоже была такая потребность.
теперь у меня есть 1.8.1.7 + реализация этой штуки.
могу поделиться пока это не включено в официальный релиз
если надо - стукнись в асю

Спасибо.
Только я уже переполз на 2.0.1.2
Причем уже не помню, почему - помню только, что в связи с устранением там какого-то глюка.
Так что, наверное, буду ждать релиза и почем зря гонять байтики туда-сюда rolleyes.gif


--------------------
...а для тех, кто не хотел изучать SQL, Господь сотворил курсоры.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kms
сообщение Feb 15 2006, 14:40
Сообщение #8


Продвинутый
***

Группа: Пользователи
Сообщений: 521
Регистрация: 28-September 05
Пользователь №: 5238



А если честно, разве потери велики на загрузку из тз в сп или IndexedTable в общем контексте выполнения?


--------------------
осторожно, открывается вовнутрь!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Quan
сообщение Feb 15 2006, 14:56
Сообщение #9


Продвинутый
***

Группа: Пользователи
Сообщений: 234
Регистрация: 6-December 05
Пользователь №: 5839



Цитата(kms @ Feb 15 2006, 14:40)
А если честно, разве потери велики на загрузку из тз в сп или IndexedTable в общем контексте выполнения?

ннууу..... если честно, то существует много моментов, где потери невелики.
И, кстати, наиболее эффективный код по сей день пишется на ASMе и FORTе, но почему-то более выразительные языки, как правило, оказываются более предпочтительными.

А в моем случае в единицу времени происходит дофига идентичных запросов, причем возвращается от 1 до неск.тыс.строк. И похоже, что как раз в случае 1-2 строк потери наиболее ощутимы.


--------------------
...а для тех, кто не хотел изучать SQL, Господь сотворил курсоры.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kms
сообщение Feb 15 2006, 15:03
Сообщение #10


Продвинутый
***

Группа: Пользователи
Сообщений: 521
Регистрация: 28-September 05
Пользователь №: 5238



А если таблицу в ВыполнитьИнструкцию() передавать параметром, а след. строкой выгружать в сп, быстрее не будет?


--------------------
осторожно, открывается вовнутрь!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
tav13
сообщение Feb 15 2006, 15:08
Сообщение #11


Продвинутый
***

Группа: Пользователи
Сообщений: 150
Регистрация: 27-January 06
Пользователь №: 6285



Цитата(АЛьФ @ Feb 15 2006, 14:06)
А с чего это он должен ее понимать? Об этом где-то сказано?

Я лишь хочу сказать что это было бы хорошо
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
Quan
сообщение Feb 15 2006, 15:09
Сообщение #12


Продвинутый
***

Группа: Пользователи
Сообщений: 234
Регистрация: 6-December 05
Пользователь №: 5839



Цитата(kms @ Feb 15 2006, 15:03)
А если таблицу в ВыполнитьИнструкцию() передавать параметром, а след. строкой выгружать в сп, быстрее не будет?

Не пробовал, но теоретически - не должно (потому и не пробовал).
Ибо, поскольку ВыполнитьИнструкцию(), согласно докам, в любом случае всегда возвращает результат в виде таблицы, непонятно, как может ускорить дело выгрузка результатов куда-то еще


--------------------
...а для тех, кто не хотел изучать SQL, Господь сотворил курсоры.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
kms
сообщение Feb 15 2006, 20:57
Сообщение #13


Продвинутый
***

Группа: Пользователи
Сообщений: 521
Регистрация: 28-September 05
Пользователь №: 5238



Ну, в общем, согласен, здравое пожелание насчет перегрузки ВыполнитьИнструкцию() с возвратом в сп и ит.
Причем, если результат возвращается в параметре, то дубль в возвращаемом значении ИМХО не нужен.

Вопрос только в том, что на эту тему думает DmitrO.
И какие волшебные слова сказать, чтобы эта трезвая мысль не затерялась rolleyes.gif


--------------------
осторожно, открывается вовнутрь!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему

 



RSS Текстовая версия Сейчас: 7th June 2020 - 10:11