|   |   | 
| 
 | Почему может не работать конструкция Запрос.Выполнить()..Выгрузить() ? | ☑ | ||
|---|---|---|---|---|
| 0
    
        ignorant 15.02.19✎ 15:36 | 
        Есть примитивный запрос, который _точно_ возвращает результат:
 Результат = Запрос.Выполнить(); Результат.Пустой() = Ложь Выборку по результату можно перебрать и увидеть отладчиком : Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл а= Выборка [0]; КонецЦикла; Метод Выгрузить() возвращает ПУСТУЮ таблицу значений, даже без колонок. Первый раз такое вижу. Пробовал на разных ИБ и разных компах. Куда посоветуете посмотреть? Спасибо за внимание. ПС. Платформа 8.3.11.3133, клиент-сервер | |||
| 1
    
        ДенисЧ 15.02.19✎ 15:39 | 
        Запрос под грифом три нуля?     | |||
| 2
    
        palsergeich 15.02.19✎ 15:39 | 
        Код рабочий и не рабочий целиком плз     | |||
| 3
    
        Ластик 15.02.19✎ 15:41 | 
        Выборка.Владелец().Выгрузить() что возвращает     | |||
| 4
    
        Chameleon1980 15.02.19✎ 15:41 | 
        :)     | |||
| 5
    
        Chameleon1980 15.02.19✎ 15:41 | 
        Тссс. тс пишет     | |||
| 6
    
        ignorant 15.02.19✎ 15:44 | 
        текст запроса
 ВЫБРАТЬ РАЗЛИЧНЫЕ ОстаткиТоваровКомпанииОстатки.Номенклатура, ОстаткиТоваровКомпанииОстатки.СкладКомпании, ОстаткиТоваровКомпанииОстатки.КоличествоОстаток ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки( , ) КАК ОстаткиТоваровКомпанииОстатки | |||
| 7
    
        novichok79 15.02.19✎ 15:45 | 
        может быть итоги на регистр не пересчитаны? ну это чисто предположение.     | |||
| 8
    
        novichok79 15.02.19✎ 15:46 | 
        в хохлостане кажись забанили 1С, нарушаете закон.     | |||
| 9
    
        Ёпрст гуру 15.02.19✎ 15:46 | 
        (6) больше кода.     | |||
| 10
    
        Buster007 15.02.19✎ 15:47 | 
        а РАЗЛИЧНЫЕ зачем?)     | |||
| 11
    
        Ёпрст гуру 15.02.19✎ 15:47 | 
        Любой запрос, даже если ничего нет, вернёт тз с полями.
 Автор утверждает, что полей нет. Видать, временную табличку в запросе создаёт | |||
| 12
    
        novichok79 15.02.19✎ 15:47 | 
        и да, может быть в запросе присутствует WHERE?     | |||
| 13
    
        OldCondom 15.02.19✎ 15:48 | 
        Вчера была тема ЭтаФорма.ТолькоПросмотр (не блокирует ТЧ)
 Автор писал, что у них еще 3 разраба. Один нашелся. Вкратце: у меня все правильно! Проверять не буду, отладчиком не буду, скринов не будет. Предлагайте решение. | |||
| 14
    
        ДенисЧ 15.02.19✎ 15:48 | 
        (12) поля всё равно были бы     | |||
| 15
    
        ZDenis 15.02.19✎ 15:49 | 
        (0) Пустую в отладчике? Если там, то надо подождать некоторое время после того как нажали на кнопку     | |||
| 16
    
        ignorant 15.02.19✎ 15:49 | 
        (9)
 Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ ОстаткиТоваровКомпанииОстатки.Номенклатура, ОстаткиТоваровКомпанииОстатки.СкладКомпании, ОстаткиТоваровКомпанииОстатки.КоличествоОстаток ИЗ РегистрНакопления.ОстаткиТоваровКомпании.Остатки( , ) КАК ОстаткиТоваровКомпанииОстатки"; Результат = Запрос.Выполнить(); Если Результат.Пустой() Тогда Сообщить (" Нет товаров на учете ?!!!"); Возврат; Иначе ТЗ = Результат.Выгрузить(); КонецЕсли; Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл а= Выборка [0]; КонецЦикла; так легче ? | |||
| 17
    
        semiluki 15.02.19✎ 15:50 | 
        А может просто ТЗ очень большая? Просто визуально в отладчике не видно? Что вернет Выборка.Владелец().Выгрузить().Количество()     | |||
| 18
    
        ignorant 15.02.19✎ 15:51 | 
        (17)
 Выборка.Владелец().Выгрузить().Количество() = 4908 | |||
| 19
    
        OldCondom 15.02.19✎ 15:51 | 
        А, кстати, если ТЗ проверять именно в отладчике, у меня тоже иногда глючит и не отрисовывает данные.     | |||
| 20
    
        Ластик 15.02.19✎ 15:52 | 
        (17) +1     | |||
| 21
    
        OldCondom 15.02.19✎ 15:52 | 
        Автор, ты бы так и писал, таблица в отладчике не видно, код же отрабатывает и обходит таблицу. Или не так?     | |||
| 22
    
        Buster007 15.02.19✎ 15:52 | 
        (19) такая фишка появилась относительно недавно. Раньше конфигуратор зависал, а теперь в фоне подгружаются     | |||
| 23
    
        OldCondom 15.02.19✎ 15:53 | 
        (22) точно, если подождать, отрисовка идет.     | |||
| 24
    
        kennetmccormick 15.02.19✎ 15:54 | 
        Да с ТЗ проблема есть такая. Ждать приходится. Первый раз когда столкнулся тоже не мог понять почему не работает     | |||
| 25
    
        ignorant 15.02.19✎ 15:55 | 
        (21)
 да, я плохо спросил. в ОТЛАДЧИКЕ не видно. | |||
| 26
    
        Вафель 15.02.19✎ 15:56 | 
        1совцы как обычно, сделали, но на половину. Не могли уж гифку загрузки прикрутить     | |||
| 27
    
        ZDenis 15.02.19✎ 15:58 | 
        (26) да уж лучше бы подвисало как раньше, все равно оно поверх всех окон и ничего другого не поделаешь.     | |||
| 28
    
        ignorant 15.02.19✎ 15:59 | 
        Похоже, фича платформы.
 При многократном вызове в ОТЛАДЧИКЕ Результат.Выгрузить() ТЗ отрисовывает быстрее, кэш включается. Спасибо! Сберегли мой мосх ;) | |||
| 29
    
        Tonik992 15.02.19✎ 16:00 | 
        (17) Есть такое дело, у меня такое же бывало...     | |||
| 30
    
        Puzoter 15.02.19✎ 16:14 | 
        (0) Вообще-то использование Выполнить().Выгрузить() это моветон. Лучше делать все вычисления прямо в запросе и пользоваться перебором записей.     | |||
| 31
    
        Вафель 15.02.19✎ 16:18 | 
        (30) никакой разницы нет.     | |||
| 32
    
        ignorant 15.02.19✎ 16:24 | 
        (30) и поиск вроде такого
 МассивСтрок = НайтиСтроки ( Новый Структура ( "Раздел, Точка, Оборудование", Раздел, Точка, Модель ); делать по результату запроса ? ;) | |||
| 33
    
        Ёпрст гуру 15.02.19✎ 16:25 | 
        (32) да, почему бы и нет ?     | |||
| 34
    
        Puzoter 15.02.19✎ 16:25 | 
        (31) Разница в том, что при выгрузке выборка дублируется в оперативной памяти, при переборе записей этого скорее всего удастся избежать.     | |||
| 35
    
        Ёпрст гуру 15.02.19✎ 16:26 | 
        НайтиСледующий, если что     | |||
| 36
    
        Puzoter 15.02.19✎ 16:27 | 
        (32) Можешь объяснить, зачем тебе нужна выгрузка в таблицу значений?     | |||
| 37
    
        Вафель 15.02.19✎ 16:27 | 
        выборка  таблица особой разницы не дают. ну только что слишком большая выборка сбрасывается в файл для экономи памяти | |||
| 38
    
        Puzoter 15.02.19✎ 16:29 | 
        (37)ИТС прямо рекомендует.     | |||
| 39
    
        Вафель 15.02.19✎ 16:31 | 
        (38) ИТС рекомендует партионно данные обрабатывать. типо по 1000 элементов     | |||
| 40
    
        ptiz 15.02.19✎ 16:32 | 
        (36) Иногда так код короче и читабельнее, а это бывает важно.     | |||
| 41
    
        Puzoter 15.02.19✎ 16:36 | 
        (40) Только если ты на 100% уверен, что эта выгрузка не подвесит базу когда она разрастется.     | |||
| 42
    
        ignorant 15.02.19✎ 16:38 | 
        (36) попробую кратко
 В ТЗ ищу строки, отвечающие некоторым условиям и _удаляю_ их. оставшиеся строки - сырьё для инфо юзеру или дальнейшей обработки. Делать такое _запросом_ для меня затруднительно и непродуктивно | |||
| 43
    
        Вафель 15.02.19✎ 16:39 | 
        кстати на x64 на диск не сбрасывается, поэтому по памяти выбрать  и выгрузить равны https://its.1c.ru/db/v8std#content:2149184374:hdoc | |||
| 44
    
        VladZ 15.02.19✎ 16:48 | 
        1. Все, что можно получить запросом - нужно получить запросом.
 2. Если полученная выборка небольшая - можно использовать Выполнить().Выгрузить(). С ТЗ удобнее работать в плане "Загрузить" и удобнее отлаживать. 3. Во всех остальных случаях - Выполнить() и Выборка = Результат.Выбрать(); | |||
| 45
    
        Puzoter 15.02.19✎ 16:50 | 
        (42) (44) Прав. Лучше Вам сконцентрировать усилия в этом направлении.     | |||
| 46
    
        VladZ 15.02.19✎ 16:55 | 
        Подход в стиле: "В ТЗ ищу строки, отвечающие некоторым условиям и _удаляю_ их. оставшиеся строки - сырьё для инфо юзеру или дальнейшей обработки." - это полная хрень.  Не стоит плодить такие решения. Иначе в конце концов "идеальная и божественная конфигурация" превратится в  кусок "непонятной коричневой субстанции"...     | |||
| 47
    
        Вафель 15.02.19✎ 16:55 | 
        ничуть не хуже чем запрос на пару тыщ строк     | |||
| 48
    
        ДенисЧ 15.02.19✎ 16:58 | 
        (46) А что, субстанция с запросом на 50 страниц пахнет шоколадом и ванилью?     | |||
| 49
    
        Вафель 15.02.19✎ 17:00 | 
        (48) зато никаких циклов     | |||
| 50
    
        VladZ 15.02.19✎ 17:00 | 
        (48) Запрос на 50 страниц - это показатель кривой архитектуры.     | |||
| 51
    
        VladZ 15.02.19✎ 17:01 | 
        +50 Пахнет тоже не очень.     | |||
| 52
    
        VladZ 15.02.19✎ 17:02 | 
        (42) Опиши, хотя бы коротко, что у тебя за условия. И почему их нельзя в запросе использовать.     | |||
| 53
    
        ignorant 15.02.19✎ 17:16 | 
        (52)
 Конктерно сейчас у меня есть: ТЗ - результат запроса vs некая таблица Excel. По значению ячеек _некоторых_ (не всех!) строк Excel ищу соответствующий строки в ТЗ и удаляю их. Но в принципе, это мои тараканы, тема не про это, мы _сильно_ отклонились ;) | |||
| 54
    
        H A D G E H O G s 15.02.19✎ 17:19 | 
        (0) Смотришь отладчиком, ТЗ пустая, но нет, она просто большая и выводиться асинхронно.
 Welcome to the club, men! | |||
| 55
    
        Eiffil123 15.02.19✎ 17:30 | 
        (50) казалось бы, причем тут зуп.     | |||
| 56
    
        FIXXXL 15.02.19✎ 17:31 | 
        (55) поэтому скромные разрабы типовых собирают их по кусочкам :)     | |||
| 57
    
        los_hooliganos 15.02.19✎ 17:47 | 
        (23) Надо закрыть отрисовку тз по "невидимой" кнопке и снова открыть.     | |||
| 58
    
        los_hooliganos 15.02.19✎ 17:52 | 
        (43) Это бред.
 Если ты напишешь клиента на ООП, то поймешь что Выбрать() выгоднее чем Выгрузить(). Например java работает с ms sql Класса RecordSet достаточно для Выбрать(). Для Выгрузить() придется привлекать еще класс Map. Значит памяти уйдет в 2 раза больше. | |||
| 59
    
        Вафель 15.02.19✎ 17:55 | 
        (58) не знаю как на жаве, но на 1с одинаково     | |||
| 60
    
        Вафель 15.02.19✎ 17:56 | 
        в 1с есть класс РезультатвЗапроса. его можно как выгрузить, так и выборку открыть. Оба действия полностью загружаются в память | |||
| 61
    
        los_hooliganos 15.02.19✎ 18:01 | 
        (60) Чтобы выгрузить, тебе надо открыть выборку и обойти её.
 Т.е. когда делает выгрузить, создается таблица значений, потом Выбрать(), Следущий и идет запись в таблицу значений. Но можно этого не делать а просто обойти выборку самому. Ресурсов уйдет меньше, а не одинаково. Там внутри с++ никакой умной уникальной выгрузки нету. | |||
| 62
    
        Вафель 15.02.19✎ 18:03 | 
        (61) что такое выборка по твоему? где она хранится?     | |||
| 63
    
        Вафель 15.02.19✎ 18:10 | 
        Лично я не уверен что выборка - это порт RecordSet'a. Иначе откуда всякие группировки и тд и тп? | |||
| 64
    
        hhhh 15.02.19✎ 18:14 | 
        объясните
 Пока Выборка.Следующий() Цикл а= Выборка [0]; КонецЦикла; что такое здесь Выборка[0] ?? И почему она должна быть непустая? | |||
| 65
    
        ignorant 15.02.19✎ 18:21 | 
        (64)
 Выборка [0] - это значение 1-го поля выборки. смысла - никакого, не пытайтесь его искать ;) просто иллюстрация того, что поле непустое. | |||
| 66
    
        los_hooliganos 15.02.19✎ 18:24 | 
        (63) РекордСет это обертка вокруг курсора sql
 Курсор может и по группировкам пойти | |||
| 67
    
        H A D G E H O G s 16.02.19✎ 00:13 | 
        (66) Гуманитарии способны только трендеть про угнетающее их правительство, но не способны даже замер провести
 10000 записей, 245 Кб на запись (текст в поле) Выборка 4 465048 Кб, 11 секунд ТаблицаЗначений 4 469572 Кб, 16 секунд Лишние несколько МБ тупо из за служебных данных в таблице. | |||
| 68
    
        etc 16.02.19✎ 01:38 | 
        Загляните по ссылке в (43) https://its.1c.ru/db/v8std#content:2149184374:hdoc
 Там написано что даже при Выбрать() ".. и в этом случае при выполнении запроса его результат будет СНАЧАЛА считан в память целиком". Знатоки, это случаем не client side cursor? | |||
| 69
    
        Провинциальный 1сник 16.02.19✎ 05:25 | 
        (67) (68) Тоже думал, что в случае выборки используется построчное чтение курсора sql. Действительно, получается что выгрузка и выборка одного порядка по расходу памяти. Тогда лучше вообще с выборкой не связываться, а пользоваться более удобной выгрузкой в таблицу значений..     | |||
| 70
    
        Franchiser 16.02.19✎ 11:43 | 
        Если вопрос про отладку, то теперь в новых платформах приходится иногда ждать по несколько минут пока появится ТЗ     | |||
| 71
    
        Franchiser 16.02.19✎ 11:47 | 
        (69) т.к. выборка сериализуется, а следовательно не можно передать, например, в другое фоновое задание, то она не использует курсор sql     | |||
| 72
    
        ДенисЧ 16.02.19✎ 11:48 | 
        Мне тут когда-то подсказали, что 1с ушла от курсоров ещё в 8.1     | |||
| 73
    
        Franchiser 16.02.19✎ 11:49 | 
        (69) таблица значений ест оперативную память, а выборка нет     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |