#0
by Полька
По результатам запроса получилась выборка, которую в цикле Пока Выборка.Следующий Цикл обошли. Теперь нужно ее еще раз обойти. Как встать на начало? Ибо, если еще раз пишу Пока Выборка.Следующий Цикл, то он делает вид, "что уже все сделал, пятница и пошли все на фик"
#9
by Chai Nic
Что такое повторный обход выборки? Это по сути переоткрытие курсора на sql-сервере и повторная передача всего объема данных. Уж лучше 1 раз загрузить в ТЗ и дальше с ней работать.
#12
by Chai Nic
Есть другая инфа, т.е. вы считаете, что выборка полностью кэшируется 1с? Чем тогда выгрузка в ТЗ хуже?
#13
by GROOVY
Ну а так конечно прикольно сразу ТЗ на сервер предприятия передавать, вдруг памяти хватит и она не засвопится. Делов то... Выборка получается порционно с скуля.
#16
by H A D G E H O G s
А может даже она на клиент передается, не проверял. Но выгрузка в ТЗ ничем не хуже.
#17
by Chai Nic
Ну разумеется, надо без фанатизма.. С другой стороны, если в результате запроса получается нечто огромное - скорее всего, запрос составлен неправильно или неправильно поставлена задача.. А с нормальными выборками никаких проблем с выгрузкой в ТЗ нет.
#18
by H A D G E H O G s
Не надо таких выборок. Мы сами может плоскую ТЗ отсортировать по ключам иерархии и обойти иерархически. На Клиенте. Весь мир бьется за распределенные вычисления, децентарилизацию, а товарищи советуют на Сервер все тащить.
#21
by Chai Nic
А что, разве нет? Выборка - это способ обращения к курсору, полученному при выполнении запроса. Фактически это морально устаревший навигационный подход к обработке результатов запроса. Выгрузка в ТЗ и то более соответствует реляционной модели.
#25
by GROOVY
> чем нехорош > > по сравнению с > Запрос.Выполнить.Выбрать; Запрос.Выполнить.Выгрузить возвращает объект ТаблицаЗначений или ДеревоЗначений. Запрос.Выполнить.Выбрать возвращает объект ВыборкаИзРезультатаЗапроса. Разработка любых механизмов платформы ведется исходя из некоторой типовой методики их использования. Типовая методика работы с запросами предполагает, что основным, «естественным» методом работы является получение выборки из результата запроса и ее обход. То есть так надо поступать в подавляющем большинстве случаев. Также типовая методика работы с запросами допускает вспомогательный, «противоестественный» если хотите, метод работы, когда результат запроса выгружается в таблицу значений и там дополнительно обрабатывается или анализируется. Как уже говорилось выше, второй способ обычно используется в тех случаях, когда данные, полученные запросом, нужно показать пользователю в форме (сразу же выгрузить в реквизит формы такого типа) или в редких случаях, когда требуется дополнительная обработка результата запроса, которую трудоемко выполнить в самом запросе. Такой сценарий работы имеют в виду разработчики платформы. По этой причине объект ВыборкаИзРезультатаЗапроса «заточен» только под быстрый перебор записей, полученных в результате запроса, и не содержит ничего лишнего. В числе прочего осуществляется кэширование выборок очень большого размера на диске. Объект ТаблицаЗначений гораздо «тяжелее» и заточен совершенно под другие задачи. Например, он содержит специальные механизмы, ориентированные на быстрый поиск данных , расчет итогов, свертку и т.д. Выгрузка результата запроса в таблицу значений это «отдельное упражнение» для системы, требующее затрат ресурсов. Поэтому если вы разрабатываете простую программу для себя, то, наверное, нет разницы, что использовать. Но особенность разработки в 1С:Предприятии заключается в том, что никогда не знаешь, в какой момент твоя «программа для себя» превратится в тиражное прикладное решение и будет работать под серьезной нагрузкой. Поэтому лучше сразу же писать методически правильно, чтобы потом не пришлось переписывать все заново, т.к. исправление уже существующих «неправильных» запросов может быть сравнимо по трудоемкости с написанием всей программы заново.
#26
by Chai Nic
Попробовал сейчас sql-профайлером отследить, что происходит при получении выборки. Это не курсор. Курсор - это изнанка объекта РезультатЗапроса. А выборка - это еще хуже. При создании выборки создается временная таблица с результатами запроса. А каждое выполнение метода Выборка.Следующая вызывает "запросик" к этой временной таблице, который возвращает ОДНУ запись.. "exec sp_executesql N'SELECTT1._IDRRef,T1._DescriptionFROM _Reference84 T1 WITH(NOLOCK)WHERE T1._IDRRef = ',N' varbinary',0x84220015175FB50811DD75916EA35E0B Дергать sql-сервер такими запросиками - извращение.
#33
by Зойч
>> vi0 И для метода Выборка.Следующий профайлер молчит Потому что данные уже на сервере 1С
#35
by Chai Nic
Вот с выборкой Вариант 1: А вот с таблицей значений Вариант 2: В случае варианта 1 sql-сервер задрачивается мелкими запросиками. В случае варианта 2 - выдает данные одним селектом. Что лучше?
#37
by H A D G E H O G s
Для 2 варианта, Табличка скорее всего кэширует Представление для сортировки.
#41
by dmpl
Да что разработчики знают о масштабируемых решениях? Они даже нагрузочное тестирование типовых конфигураций произвести не могут...
#48
by Asmody
концептуально Выборка — это неизменяемая коллекция. оно по определению должно быть легче для сервера, чем ТЗ
#49
by dmpl
А если надо результаты запроса обработать и вычислить дополнительные значения, при этом надо обращаться к предыдущим и/или последующим записям?
#50
by Asmody
да кто мешает? речь не об этом. Выборка неизменяемая (immutable по-научному). А ТЗ - изменяемый (мутабельный) объект. immutable-объекты легче и проще в реализации. это аксиома. т.е. если не нужно изменять саму коллекцию, то и не нужно загонять ее в изменяемый объект.
#51
by dmpl
Дык очевидно, что использовать Выборка.Следующий или Выборка.Выгрузить определяется тем, что и как мы в дальнейшем будет делать с данными. Если в дальнейшем мы все равно будем обрабатывать данные в таблице значений - то не логичнее ли сразу выгрузить их туда, чем пихать по 1 строке в цикле Выборка.Следующий?
#52
by kumena
>>> Если в дальнейшем мы все равно будем обрабатывать данные в таблице значений - а зачем таблица значений вообще нужна? делай запрос, выбирай сразу представления и обходи как надо.
#57
by dmpl
Ну, например, надо выйти на родителя по цепочке до корня. Организуй запросом. Или надо обратиться к предыдущей/следующей строке. Или надо поменять тип поля. Да и многие более простые задачи требуют либо открытия нескольких выборок (и головняка с их синхронизацией), либо выгрузку в ТЗ и ее обработку. По времени разработки второй вариант может оказаться меньше - ну а скорость работы... лучше плохая, но работающая программа, чем идеальная, но несуществующая. За первую заплатят, за вторую - нет. Даже авторы типовых используют выгрузку в ТЗ в некоторых случаях. Т.е. лучше потратить в 2 раза больше памяти копируя одну коллекцию в другую? Вообще-то, изменение состава коллекции - самая затратная по ресурсам вещь, а вот изменение элементов коллекции - уже гораздо менее затратная. А в случае Выборка.Следующий и создания ТЗ изменение состава будет при каждой итерации цикла.
#59
by Сниф
>> Или надо обратиться к предыдущей/следующей строке НайтиСледующий(<СтруктураПоиска>) СледующийПоЗначениюПоля(<ИмяПоля>) У Выборки, кроме Следующий еще и такие методы есть.
#60
by PR
Пролетел гордый орел, плавно машущий крыльями, с высоты обкакав фирму 1С. Орел чуть стушевался, но пока настаивает на том, что он орел. Орел не орел :)) Штатный дворник фирмы 1С привычными движениями флегматично подметает крышу фирмы :))
#61
by dmpl
Ну не нужно мне менять позицию в выборке. Мне надо получить данные из другой строки, и продолжить с текущей с учетом этих данных.
#62
by Chai Nic
Ну и зачем весь этот словесный понос? Форум для обсуждения 1с, а не его участников.. Ошибку же я признал. Тем не менее, поведение 1с в данном аспекте весьма неочевидно.
#63
by Chai Nic
Москвичи.. всё-таки крайне неприятные субъекты в 90% случаев) Обхами ближнего и пройди по головам - вот их лозунг.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Определить при открытии Обработки нужно ли запускать авторегистрацию обработки
- Второй запрос не видит временную таблицу
- Как обновить список компьютеров в сети
- УФ, Стандартный период в отчетах СКД - уменьшение вариантов выбора
- Ошибка при закрытии месяца (Расчет себестоимости) УПП
- 1C 82 Управляемая форма с двумя связанными табличными частями
- трафик в локалке и 139 порт
- как правильно отразить возвратные отходы в 1С УПП
- БП3.0 или БП2.0 ставить теперь?
- СКД:убрать строки по условию
- 1c 8.2 ЗУП 2- ндфл нулевая
- Управление торговлей 10.3 Себестоимость списания с розничного склада
- 1c 7.7 и SQL 2012
- ввод остатков по 19 счету в БП 2.0
- 1с "Розница" акция-подарок , печать в кассовом чеке номенклатуры подарка
- [При выборе номенклатуры в табличной части,Автоматически ставится Единица изм.]?
- 1с 8.3 Множественный выбор в форме списка
- Запрос к табличной части текущего документа. Какой в этом смысл?
- Версия сервера отличается от версии клиента
- не загружаются валюты в бухгалтерии 3.0 ???