|   |   | 
| 
 | Как обойти ограничение фреш в запросе динамического списка? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Гений 1С гуру 16.02.23✎ 11:31 | 
        Есть динамический список, в нем я меняю запрос (в конце):
 
Фреш отклонил, прислал замечание: Расширение не должно приводить к чрезмерной нагрузке на компоненты сервиса или клиентское приложение. В расширении используется соединение с подзапросом. Не рекомендуется использовать соединения с подзапросами. Поместите результат подзапроса во временную таблицу и проиндексируйте поля по которым будут соединения. Подробнее с причинами неоптимальной работы запросов и их оптимизацией можно ознакомиться здесь https://its.1c.ru/db/v8std#browse:13:-1:26:28 Можно конечно сделать доп. поле и в него прописывать этот заказ при записи расходной. Но может есть другие решения? | |||
| 1
    
        Kassern 16.02.23✎ 11:34 | 
        (0) Вам даже по русски написали, что нужно сделать, вы ж гений - действуйте.     | |||
| 2
    
        Kassern 16.02.23✎ 11:34 | 
        ВЫБРАТЬ
 Т.Ссылка КАК Ссылка, МАКСИМУМ(НАЧАЛОПЕРИОДА(Т.Заказ.Дата, ДЕНЬ)) КАК ДатаЗаказа ИЗ Документ.РасходнаяНакладная.Запасы КАК Т Вот это что по вашему? | |||
| 3
    
        Гений 1С гуру 16.02.23✎ 12:06 | 
        (2) максимальная дата заказа. Какие временные таблицы в запросе динамического списка, окститесь. мне проще реквизит в расходную добавить и при записи его проставлять.     | |||
| 4
    
        TormozIT гуру 16.02.23✎ 12:10 | 
        А В 1С:Аналитика просят наоборот - не делать временных таблиц и делать соединения с подзапросами =)
 http://devtool1c.ucoz.ru/forum/3-2247-1 | |||
| 5
    
        Donkey_hot 16.02.23✎ 12:13 | ||||
| 6
    
        H A D G E H O G s 16.02.23✎ 12:18 | 
        Ну хоть Фреш будет попинывать лупоглазых.
 (0) Радуйся, Г1С, просвещайся. | |||
| 7
    
        H A D G E H O G s 16.02.23✎ 12:20 | 
        (1) Так то Г1С прав, нельзя в ВТ ОсновнуюТаблицу помещать, а это ОСНОВНАЯ причина, по которой хотелось ВТ в ДинСписке.     | |||
| 8
    
        H A D G E H O G s 16.02.23✎ 12:20 | 
        (7) Но 1С захерили идею.     | |||
| 9
    
        H A D G E H O G s 16.02.23✎ 12:22 | 
        И теперь у Г1С 2 пути, гыгыгы.
 1) Реализовать коррелированный подзапрос и доказать 1С, что он - совсем не то, что обычный подзапрос и не просаживает производительность. 2) Просить реализацию ВТ для основных таблиц динсписка. | |||
| 10
    
        Гений 1С гуру 16.02.23✎ 12:46 | 
        (9) отнюдь. я просто добавил реквизит Заказ и проставляю его в реализации перед записью:
 
Бороться с идиотизмом не входит в мои планы. | |||
| 11
    
        Гений 1С гуру 16.02.23✎ 12:47 | 
        но уаще то я впечатлен, это где-то 6-е обновление доработки и разглядели таки этом момент, ай молодцы. ;-)     | |||
| 12
    
        H A D G E H O G s 16.02.23✎ 13:21 | 
        (10) Я не сомневался.     | |||
| 13
    
        H A D G E H O G s 16.02.23✎ 13:22 | 
        (10) Че там насчет ОбменДанными.Загрузка ?
 Я бы на месте модераторов 1С настроил бы робота на ключевое слово "Осипов" | |||
| 14
    
        mistеr 16.02.23✎ 13:26 | 
        (7) Но тогда список перестает быть динамическим, не так ли? :)     | |||
| 15
    
        H A D G E H O G s 16.02.23✎ 13:28 | 
        (14) С чего бы?     | |||
| 16
    
        mistеr 16.02.23✎ 13:41 | 
        (15) Потому что исчезает понятие основной таблицы и пейджинга.     | |||
| 17
    
        H A D G E H O G s 16.02.23✎ 14:39 | 
        (16) Никуда не исчезает.
 Просто выбираем по 45 строк не в результатзапроса, а во временную таблицу. И дальше уже с этими 45 строками ВТ можно делать что угодно - засовывать в параметры ВТ Остатки, СрезПоследних, и.т.д. | |||
| 18
    
        Kassern 16.02.23✎ 14:53 | 
        (7) "нельзя в ВТ ОсновнуюТаблицу помещать" - а где ТС это делает?
 ему сказали, что нефиг делать подзапрос в дин списке. Мол оберните во временную таблицу, а потом уже ее цепляйте к основной. | |||
| 20
    
        H A D G E H O G s 16.02.23✎ 15:06 | ||||
| 21
    
        mistеr 16.02.23✎ 15:14 | 
        (17) Так не прокатит. В ВТ можно напихать чего угодно, да еще с учетом составных типов. Нет гарантии, что по ней можно будет нормально пейджиться. Нет гарантии наличия нужных индексов.
 То, что ты хочешь, в принципе имеет право на жизнь. Но если делать по уму, то нужно дать хук при открытии ДС. Туда передается менеджер ВТ, ты заполняешь ВТ нужными данными, дальше используешь в основном запросе. | |||
| 22
    
        Kassern 16.02.23✎ 15:18 | 
        (21) "дать хук при открытии ДС" - так вроде есть такой "хук". Мы же можем передать параметры в дин список при создании на сервере и все корректно отработает.     | |||
| 23
    
        mistеr 16.02.23✎ 15:25 | 
        (22) Параметры можно, ВТ нельзя. ВТ, которая будет заполняться один раз, а не при каждом листании.     | |||
| 24
    
        Kassern 16.02.23✎ 15:28 | 
        (23) Я в курсе, что ВТ нельзя). Прост "при создании на сервере" 1 раз и отработает. По идее, ничего не мешало, дать возможность впихнуть ВТ. Хотя, может ДС создается еще раньше, хз.     | |||
| 25
    
        H A D G E H O G s 16.02.23✎ 15:37 | 
        Вот это жесть. Удачи вам, че.     | |||
| 26
    
        H A D G E H O G s 16.02.23✎ 15:40 | 
        Иногда, когда я встречаю воот такое (21), я думаю - а правильно про 1С ников говорят     | |||
| 27
    
        mistеr 16.02.23✎ 15:43 | 
        (25) "Удачи" в каком смысле? Типа, разрешаешь закоммитить в 8.3.24? :)     | |||
| 28
    
        H A D G E H O G s 16.02.23✎ 15:45 | 
        (27) Типа, ты не пытаешься вкурить в смысл.
 Чем отличается вывод 45 строк из многомиллионной таблицы на экран от того же вывода во временную таблицу? | |||
| 29
    
        H A D G E H O G s 16.02.23✎ 15:45 | 
        (27) Че ты там пейджить собрался то?     | |||
| 30
    
        mistеr 16.02.23✎ 15:47 | 
        (28) Ну видимо да, не вкурил. Можешь попытаться еще раз, другими словами.     | |||
| 31
    
        H A D G E H O G s 16.02.23✎ 15:54 | 
        Но я понимаю, почему 1С это не делают - лениво. Потому что муторно.
 Ибо, когда мы работаем с выводом на экран - мы всегда получим на выходе именно эти 45 строк. И из последней строки мы получим ключевые поля, чтобы получить следующую порцию данных, по условию - больше этих полей. Классический порционный запрос (на самом деле, там есть хитрости, которые смотрят, в начале вы таблицы мотаете или в середине или в конце). Но как только мы помещаем результат в ВТ - все становится сложнее. Мы можем урезать результат ВНУТРЕННИМ соединением и на выходе получить не 45 строк, а 2. И 1С должна это учитывать и допилить цикличное продолжение выполнения запроса, пока на выходе не будет 45 строк или не кончится таблица. + 1С должна получать последнюю запись ключевых поля Основной таблицы. Тут она должна сказать Пользователю- программисту 1С - давай пробрасывать через ПакетыЗапросов ключевые поля, либо сама неявно их должна пробрасывать, добавляя в пакетыЗапросов поля основной таблицы, либо Перед помещением ОсновнойТаблицы в ВТ впилить промежуточный запрос, выбирающий эти Ключевые поля. | |||
| 32
    
        Конструктор1С 16.02.23✎ 16:00 | 
        (10) ты сам родитель идиотизма и говнокода     | |||
| 33
    
        H A D G E H O G s 16.02.23✎ 16:01 | 
        Что я предлагаю:
 ВЫБРАТЬ ПЕРВЫЕ 45 ОхеренноБольшаяТаблицаТоваров.Ссылка Из Справочник.ОхеренноБольшаяТаблицаТоваров как ОхеренноБольшаяТаблицаТоваров Поместить ВТСовсемНебольшаяТаблица ГДЕ ОхеренноБольшаяТаблица.Ссылка>&ПредыдущаяСсылка; ВЫБРАТЬ Остатки.Товар, Остатки.Количество Из РегистрНакопления.Остатки(&ВчерашнийДень, Остатки.Товар В (Выбрать ВТСовсемНебольшаяТаблица.Ссылка Из ВТСовсемНебольшаяТаблица)) Поместить ВТОстатки; ВЫБРАТЬ ВТСовсемНебольшаяТаблица.Ссылка, isnull(ВТОстатки.Количество,0) и ЛевоеСоединение | |||
| 34
    
        Kassern 16.02.23✎ 16:05 | 
        (33) Так ведь динамический список сам на уровне платформы обходить определенный кусок таблицы и отображает его нам динамически.
 Вы хотите сами рулить логикой отображения дин списка, или я вас не так понял? | |||
| 35
    
        H A D G E H O G s 16.02.23✎ 16:07 | 
        (34) Я логику описал, что должно происходить     | |||
| 36
    
        mistеr 16.02.23✎ 16:10 | 
        (33) Теперь я кажется понял     | |||
| 37
    
        H A D G E H O G s 16.02.23✎ 16:17 | 
        (36) Это хорошо. Странно, что это сходу никто вкурить не может.     | |||
| 38
    
        Гений 1С гуру 16.02.23✎ 16:41 | 
        (37) Мы тупые 1сники, размышлять о системных вещах не желаем. Нас аудит послал в сад, мы нашли дырку в заборе и обошли. ггг     | |||
| 39
    
        Гений 1С гуру 16.02.23✎ 19:06 | 
        (13) чорд. Ты был прав. они отклонили из-за этого. Поэтому за Фреш надо брать в 3 раза дороже.     | |||
| 40
    
        ДедМорроз 16.02.23✎ 19:17 | 
        Просто,в нормальных sql это запрос с открытым курсором,когда вылетает порция данных в буфер,а потом мы из этого буфера подтягиваем,и запрос продолжает выполняться.
 С временной таблицей проблема в том,что мы должны,сначала,выполнить запрос для временной таблицы,причем весь,потом его проиндексировать (а для этого мы и создавали временную таблицу,чтобы добавить индекс),а уже после этого пойти выполнять второй запрос. Да и за временной таблицей можно и не ходить,можно просто упорядочивание сделать по неиндексированному полю,и для выбора порции также нужно будет выполнить весь запрос,а только потом получить первую порцию. На самом деле,у 1с разбиение на страницы немного по-другому - выполняется весь запрос и его результат пихается в кеш,а уже из последнего выводятся порции. Выполнять запрос еще раз нельзя,так как или мы должны открыть транзакцию и сделать версию состояния таблицы на момент запуска или мы получим не совсем консистентные данные. | |||
| 41
    
        H A D G E H O G s 16.02.23✎ 20:46 | 
        (40) Бред сивой кобылы. От начала и до конца. Ну, как обычно.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |