| 
    
            
         
         | 
    
  | 
Как обойти ограничение фреш в запросе динамического списка? | ☑ | ||
|---|---|---|---|---|
| 
    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) Бред сивой кобылы. От начала и до конца. Ну, как обычно.     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |