8.х Управляемая морда. Динамический список. ПЕРВЫЕ x записей

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем mialord, 2 июл 2014.

  1. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Дня доброго!
    Сразу к проблеме. 8.3.4.408.
    Произвольный запрос динамического списка выглядит следующим образом
    ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
    СУММА(ЕСТЬNULL(ЗапросПоДоговору.КоличествоЮрЛиц, 0)) КАК КоличествоЮрЛиц,
    Контрагенты.Ссылка КАК Ссылка,
    Контрагенты.ПометкаУдаления КАК ПометкаУдаления,
    Контрагенты.Наименование КАК Наименование,
    Контрагенты.Регион КАК Регион,
    СУММА(ЕСТЬNULL(ЗапросПоОбъекту.КоличествоОбъектов, 0)) КАК КоличествоЗданий,
    СУММА(ЕСТЬNULL(ЗапросПоОбъекту.ОбщаяПлощадь, 0)) КАК ОбщаяПлощадь,
    СУММА(ЗапросПоОбъекту.ВремяНаОбъекте) КАК ВремяНаОбъекте,
    ЗапросПоДоговору.Договор КАК Договор,
    КонтактнаяИнформацияКонтрагента.Телефон КАК Телефон,
    Контрагенты.Код КАК Код,
    Контрагенты.Ответственный КАК ОсновнойМенеджер,
    Затраты.ОбщееВремяНаОбъекте,
    Затраты.ОбщаяСуммаЗатрат,
    ЭлекстроннаяПочтаКонтрагента.ЭлектроннаяПочта,
    МАКСИМУМ(ПоследнийКонтакт.Контакт.ДатаСобытия) КАК КонтактДатаСобытия,
    ЕСТЬNULL(ПоследнийКонтакт.Контакт.СтатусКонтакта, ЗНАЧЕНИЕ(Перечисление.СтатусыКонтактов.ПустаяСсылка)) КАК КонтактСтатусКонтакта,
    МАКСИМУМ(ПоследнийКонтакт.Контакт) КАК Контакт
    {ВЫБРАТЬ
    КоличествоЮрЛиц,
    Ссылка.*,
    ПометкаУдаления,
    Наименование,
    Регион,
    КоличествоЗданий,
    ОбщаяПлощадь,
    ВремяНаОбъекте,
    Договор.*,
    Телефон,
    Код,
    ОсновнойМенеджер.*}
    ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Договоры.Владелец КАК КонтрагентПоДоговору,
    СУММА(ЗапросПоЮрЛицуВДоговоре.КоличествоЮрЛиц) КАК КоличествоЮрЛиц,
    ЗапросПоЮрЛицуВДоговоре.ЮрЛицо КАК ЮрЛицо,
    Договоры.Ссылка КАК Договор
    ИЗ
    Справочник.Договоры КАК Договоры
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ЮрЛица.Ссылка КАК ЮрЛицо,
    СУММА(1) КАК КоличествоЮрЛиц,
    ЮрЛица.Договор КАК ДоговорЮрЛица
    ИЗ
    Справочник.ЮрЛица КАК ЮрЛица

    СГРУППИРОВАТЬ ПО
    ЮрЛица.Ссылка,
    ЮрЛица.Договор) КАК ЗапросПоЮрЛицуВДоговоре
    ПО Договоры.Ссылка = ЗапросПоЮрЛицуВДоговоре.ДоговорЮрЛица

    СГРУППИРОВАТЬ ПО
    Договоры.Владелец,
    ЗапросПоЮрЛицуВДоговоре.ЮрЛицо,
    Договоры.Ссылка) КАК ЗапросПоДоговору
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Объекты.Владелец КАК ЮрЛицоОбъекта,
    СУММА(1) КАК КоличествоОбъектов,
    СУММА(Объекты.ПлощадьОбъекта) КАК ОбщаяПлощадь,
    СУММА(Объекты.ВремяНаОбъекте) КАК ВремяНаОбъекте
    ИЗ
    Справочник.Объекты КАК Объекты

    СГРУППИРОВАТЬ ПО
    Объекты.Владелец) КАК ЗапросПоОбъекту
    ПО ЗапросПоДоговору.ЮрЛицо = ЗапросПоОбъекту.ЮрЛицоОбъекта
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    ЗатратыПоДоговоруПроект.Время_НаОбъекте КАК ОбщееВремяНаОбъекте,
    ЗатратыПоДоговоруПроект.Затраты КАК ОбщаяСуммаЗатрат,
    ЗатратыПоДоговоруПроект.Ссылка.Договор КАК Договор
    ИЗ
    Справочник.ЗатратыПоДоговору.Проект КАК ЗатратыПоДоговоруПроект) КАК Затраты
    ПО ЗапросПоДоговору.Договор = Затраты.Договор
    ПО Контрагенты.Ссылка = ЗапросПоДоговору.КонтрагентПоДоговору
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    МАКСИМУМ(КонтрагентыКонтактнаяИнформация.Представление) КАК Телефон,
    КонтрагентыКонтактнаяИнформация.Ссылка КАК КонтрагентКонтактнойИнформации
    ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
    ГДЕ
    КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.КонтактныйТелефонКонтрагента)

    СГРУППИРОВАТЬ ПО
    КонтрагентыКонтактнаяИнформация.Ссылка) КАК КонтактнаяИнформацияКонтрагента
    ПО Контрагенты.Ссылка = КонтактнаяИнформацияКонтрагента.КонтрагентКонтактнойИнформации
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    КонтрагентыКонтактнаяИнформация.Ссылка КАК СсылкаКонтрагент,
    МАКСИМУМ(КонтрагентыКонтактнаяИнформация.Представление) КАК ЭлектроннаяПочта
    ИЗ
    Справочник.Контрагенты.КонтактнаяИнформация КАК КонтрагентыКонтактнаяИнформация
    ГДЕ
    КонтрагентыКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЭлектроннаяПочтаКонтрагента)

    СГРУППИРОВАТЬ ПО
    КонтрагентыКонтактнаяИнформация.Ссылка) КАК ЭлекстроннаяПочтаКонтрагента
    ПО Контрагенты.Ссылка = ЭлекстроннаяПочтаКонтрагента.СсылкаКонтрагент
    ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    Контакт.Ссылка КАК Контакт
    ИЗ
    (ВЫБРАТЬ
    Контакт.Контрагент КАК Контрагент,
    МАКСИМУМ(Контакт.ДатаСобытия) КАК ДатаСобытия
    ИЗ
    Документ.Контакт КАК Контакт
    ГДЕ
    Контакт.ПометкаУдаления = ЛОЖЬ

    СГРУППИРОВАТЬ ПО
    Контакт.Контрагент) КАК ТаблицаДатыПоследнегоКонтакта
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.Контакт КАК Контакт
    ПО ТаблицаДатыПоследнегоКонтакта.Контрагент = Контакт.Контрагент
    И ТаблицаДатыПоследнегоКонтакта.ДатаСобытия = Контакт.ДатаСобытия
    ГДЕ
    Контакт.ПометкаУдаления = ЛОЖЬ) КАК ПоследнийКонтакт
    ПО Контрагенты.Ссылка = ПоследнийКонтакт.Контакт.Контрагент
    {ГДЕ
    (ЕСТЬNULL(ЗапросПоДоговору.КоличествоЮрЛиц, 0)) КАК КоличествоЮрЛиц,
    Контрагенты.Ссылка.* КАК Контрагент,
    Контрагенты.ПометкаУдаления,
    Контрагенты.Наименование,
    Контрагенты.Регион,
    (ЕСТЬNULL(ЗапросПоОбъекту.КоличествоОбъектов, 0)) КАК КоличествоОбъектов,
    (ЕСТЬNULL(ЗапросПоОбъекту.ОбщаяПлощадь, 0)) КАК ОбщаяПлощадь,
    ЗапросПоОбъекту.ВремяНаОбъекте,
    ЗапросПоДоговору.Договор.*,
    КонтактнаяИнформацияКонтрагента.Телефон,
    Контрагенты.Код,
    Контрагенты.Ответственный.* КАК ОсновнойМенеджер}

    СГРУППИРОВАТЬ ПО
    Контрагенты.Ссылка,
    Контрагенты.ПометкаУдаления,
    Контрагенты.Наименование,
    Контрагенты.Регион,
    ЗапросПоДоговору.Договор,
    КонтактнаяИнформацияКонтрагента.Телефон,
    Контрагенты.Код,
    Контрагенты.Ответственный,
    Затраты.ОбщееВремяНаОбъекте,
    Затраты.ОбщаяСуммаЗатрат,
    ЭлекстроннаяПочтаКонтрагента.ЭлектроннаяПочта,
    ЕСТЬNULL(ПоследнийКонтакт.Контакт.СтатусКонтакта, ЗНАЧЕНИЕ(Перечисление.СтатусыКонтактов.ПустаяСсылка))
    Собственно интересна лишь первая строка запроса
    Код:
    ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
    Проверяю результат запроса в консоле запросов выводит 5 записей, динамический список вываливает все.
    Собственно вопрос в том, как этого зверя поставить на место?
  2. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    именно в 8.3.4.408 дело? а на других?
    последний 8.3.4.496, то есть уже 4-й после 8.3.4.408
  3. Persempre
    Offline

    Persempre Опытный в 1С

    Регистрация:
    18 июл 2012
    Сообщения:
    851
    Симпатии:
    3
    Баллы:
    29
    Под одним пользователем и консоль и список открываете?
    Ещё вариант в окне "Настройка списка" внизу есть динамическое считывание данных, у меня было подобное - решил вопрос убрав галочку и убрав основную таблицу... Это на вскидку по памяти
  4. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    мне нужно именно динамическое считывание
  5. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    он и на таком всё вываливает? на 8.3.5
    Код:
    ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
        Партнеры.Ссылка,
        Партнеры.Наименование,
        Партнеры.ДатаРегистрации,
        Партнеры.Клиент,
        Партнеры.НаименованиеПолное,
        Партнеры.ОсновнойМенеджер
    ИЗ
        Справочник.Партнеры КАК Партнеры
    
    --- Объединение сообщений, 2 июл 2014 ---
    да и на 8.2.19.83 так же
  6. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Единственная найденная информация по этому поводу
    ЗапросПриОткрытии.png
    Опишем полученный запрос. Мы выбираем первые 42 записи из таблицы "_Reference7". Именно в этой таблице хранятся записи для всех элементов справочника "Товары". Почему выбирается именно 42 записи? Найти что-либо, что повлияет на эту цифру я не смог (ни размер экрана, ни общее количество записей в таблице). Делаю вывод, что платформа по умолчанию выбирает 42 записи при открытии динамического списка.
  7. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.431
    Симпатии:
    372
    Баллы:
    104
    да, у списка есть такой момент, порционная выборка
  8. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    динамический список замещает выбор первых на свой собственный, потому как он не читает весь набор данных, а только необходимое для отображения окно. при этом пользуется именно top, а не fetch, который был бы быстрее для sql 2008 и 2012 и oracle
  9. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    тут подумалось - может получится таким запросом?
    Код:
    ВЫБРАТЬ
        Партнеры.Ссылка,
        Партнеры.Наименование,
        Партнеры.ДатаРегистрации,
        Партнеры.Клиент,
        Партнеры.НаименованиеПолное,
        Партнеры.ОсновнойМенеджер
    ИЗ
        Справочник.Партнеры КАК Партнеры
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (
            ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 5
                Партнеры.Ссылка,
                Партнеры.Наименование,
                Партнеры.ДатаРегистрации,
                Партнеры.Клиент,
                Партнеры.НаименованиеПолное,
                Партнеры.ОсновнойМенеджер
            ИЗ
                Справочник.Партнеры КАК Партнеры) КАК ВложенныйЗапрос
        ПО Партнеры.Ссылка=ВложенныйЗапрос.Ссылка
  10. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Посмотрю на досуге.
    Откуда выводы? Документация от 1С есть какая нить.
  11. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    выводы из трейса запросов, которые 1с посылает в базу :)

    динамический список кидает SELECT TOP N, при этом оставляя исходный запрос неизменным, кроме того самого ПЕРВЫЕ
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    --- Объединение сообщений, 17 июл 2014 ---
    mialord http://its.1c.ru/db/v8doc#content:61:1 Раздел 7.1.3. Там расписано когда можно-нельзя использовать ПЕРВЫЕ и РАЗЛИЧНЫЕ, а также стратегия считывания данных в зависимости от настроек динамического списка и того, что является основной таблицей.
  13. TopicStarter Overlay
    mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    В том то и дело написано дословно
    Но Первые не будет работать даже если не указана основная таблица, о чем нет ни слова. Вобщем опять получился головастик работающий не вполне корректно. Смысл мне вываливать в список 100 тыс. записей, если мне достаточно вывести 5 в определенной последовательности и при перемещении записи в архив обновить новых 5 записей.
    Ну, фактически ты проделал работу поста 6, вопрос в том всегда ли он автоматом формирует ПЕРВЫЕ или есть другая возможность
  14. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    судя по .журналам - всегда. ограничение объема передаваемых данных.

Поделиться этой страницей