По теме из базы знаний
- Выразить строку как дату в запросе
- Соединение таблиц в запросе по условию "В иерархии" с использованием Nested Sets
- Универсальный отчет для сравнения записей регистров накопления между базами по COM-соединению, для обычных форм
- Нестандартные блокировки при работе с OLAP-нагрузкой
- Запрос всей номенклатуры с характеристиками
Найденные решения
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
С работать как раз перегруз, скинули на меня несколько задач с сжатыми сроками. Опыт еще не большой, про выразить знаю что оптимизирует если использовать составной реквизит, но не знал работает это ли, если указать это в соединении. Просто запрос для отчета сложный, там куча полей с составными типами, а задача сделать это оптимально, т.к. объем данных очень большой, да и вообще. Задавать такие вопросы на форуме люблю т.к. заметил в процессе обсуждения во первых лучше лично для меня запоминается тема, а во вторых могут вылезти дополнительные ньюансы, о которых при самостоятельном тестировании не узнал бы. Да и не успевал уже тестировать, а офис закрывали уже. Всем выгода, помогающим активность, плюсики и т.д., мне доп опыт и запоминание темы после обсуждения)
ВТ1.ДокРегистратор при создании временной таблицы я тоже это поле с помощью выразить(......КАК Документ.скДопсДСП) сделал.
И как писал выше часть текста запроса будет ли это оптимизировано.
С работать как раз перегруз, скинули на меня несколько задач с сжатыми сроками. Опыт еще не большой, про выразить знаю что оптимизирует если использовать составной реквизит, но не знал работает это ли, если указать это в соединении. Просто запрос для отчета сложный, там куча полей с составными типами, а задача сделать это оптимально, т.к. объем данных очень большой, да и вообще. Задавать такие вопросы на форуме люблю т.к. заметил в процессе обсуждения во первых лучше лично для меня запоминается тема, а во вторых могут вылезти дополнительные ньюансы, о которых при самостоятельном тестировании не узнал бы. Да и не успевал уже тестировать, а офис закрывали уже. Всем выгода, помогающим активность, плюсики и т.д., мне доп опыт и запоминание темы после обсуждения)
ИЗ ВТ1 КАК ВТ1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ПО ВТ1.ДокРегистратор = ВЫРАЗИТЬ(СписаниеСРасчетногоСчета.ДокументОснование КАК Документ.скДопсДСП)
ВТ1.ДокРегистратор при создании временной таблицы я тоже это поле с помощью выразить(......КАК Документ.скДопсДСП) сделал.
И как писал выше часть текста запроса будет ли это оптимизировано.
(13) так там уже понятно же какой тип. На мой взгляд ВЫРАЗИТЬ в данном случае бесполезный, только лишние символы в тексте запроса
В плане запроса всё одинаково, что с ВЫРАЗИТЬ, что без него
Предполагаю, что для самой платформы функция ВЫРАЗИТЬ - это лишнее действие (хоть и незначительное)
В плане запроса всё одинаково, что с ВЫРАЗИТЬ, что без него
Предполагаю, что для самой платформы функция ВЫРАЗИТЬ - это лишнее действие (хоть и незначительное)
ВЫБРАТЬ ПЕРВЫЕ 1
Регистр.Активность КАК Активность
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Регистр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет КАК Документ
ПО Регистр.Регистратор = ВЫРАЗИТЬ(Документ.Ссылка КАК Документ.АвансовыйОтчет)
SEL ECT TOP 1
T1._Active
FR OM
dbo._AccRg960 T1
INNER JOIN dbo._Document299 T2
ON (T1._RecorderTRef = 0x0000012B AND T1._RecorderRRef = (T2._IDRRef))
WHERE
((T1._Fld947 = ?)) AND (T2._Fld947 = ?)
////////////////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ ПЕРВЫЕ 1
Регистр.Активность КАК Активность
ИЗ
РегистрБухгалтерии.Хозрасчетный КАК Регистр
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.АвансовыйОтчет КАК Документ
ПО Регистр.Регистратор = Документ.Ссылка
SELECT TOP 1
T1._Active
FR OM
dbo._AccRg960 T1
INNER JOIN dbo._Document299 T2
ON (T1._RecorderTRef = 0x0000012B AND T1._RecorderRRef = T2._IDRRef)
WH ERE
((T1._Fld947 = ?)) AND (T2._Fld947 = ?)
Показать
(3)С работать как раз перегруз, скинули на меня несколько задач с сжатыми сроками. Опыт еще не большой, про выразить знаю что оптимизирует если использовать составной реквизит, но не знал работает это ли, если указать это в соединении. Просто запрос для отчета сложный, там куча полей с составными типами, а задача сделать это оптимально, т.к. объем данных очень большой, да и вообще. Задавать такие вопросы на форуме люблю т.к. заметил в процессе обсуждения во первых лучше лично для меня запоминается тема, а во вторых могут вылезти дополнительные ньюансы, о которых при самостоятельном тестировании не узнал бы. Да и не успевал уже тестировать, а офис закрывали уже. Всем выгода, помогающим активность, плюсики и т.д., мне доп опыт и запоминание темы после обсуждения)
ВТ1.ДокРегистратор при создании временной таблицы я тоже это поле с помощью выразить(......КАК Документ.скДопсДСП) сделал.
И как писал выше часть текста запроса будет ли это оптимизировано.
ИЗ ВТ1 КАК ВТ1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ПО ВТ1.ДокРегистратор = ВЫРАЗИТЬ(СписаниеСРасчетногоСчета.ДокументОснование КАК Документ.скДопсДСП)
ВТ1.ДокРегистратор при создании временной таблицы я тоже это поле с помощью выразить(......КАК Документ.скДопсДСП) сделал.
И как писал выше часть текста запроса будет ли это оптимизировано.
(7)допустим вы сравниваете
Рег.Регистратор = Док.Ссылка
регистратор составной тип
после Выразить() у вас все равно идет сравнение с ссылкой документа
смысл выражать?
или делать двойное сравнение
Рег.Регистратор Ссылка Документ.<НужныйДокумента>.
и Рег.Регистратор = Док.Ссылка
в этом случае если не нужный тип, дальше проверка не выполняется
но что-то сомнительная оптимизация (замеров не делал)
Рег.Регистратор = Док.Ссылка
регистратор составной тип
после Выразить() у вас все равно идет сравнение с ссылкой документа
смысл выражать?
или делать двойное сравнение
Рег.Регистратор Ссылка Документ.<НужныйДокумента>.
и Рег.Регистратор = Док.Ссылка
в этом случае если не нужный тип, дальше проверка не выполняется
но что-то сомнительная оптимизация (замеров не делал)
(16) До сих пор не могу понять смысла этого оператора.
Хорошо, когда мы отбираем по одному типу регистра, а если, например, регистр двигает 12 документов, а нам нужно отобрать по двум? Отсечение не сработает.
А выражение (Выразить ... КАК Строка(100)) - неявное преобразование типов?
А Левое соединение, хоть и левое, но всегда понятное и однозначное)). Как и Подстрока(....,1,100)
Хорошо, когда мы отбираем по одному типу регистра, а если, например, регистр двигает 12 документов, а нам нужно отобрать по двум? Отсечение не сработает.
А выражение (Выразить ... КАК Строка(100)) - неявное преобразование типов?
А Левое соединение, хоть и левое, но всегда понятное и однозначное)). Как и Подстрока(....,1,100)
(21)
Да ладно:
В данном случае оптимизатор поймет и сделает необходимое левое соединение за нас.
Когда соединения сложные трехэтажные, при добавлении самим дополнительных соединений можно ошибиться. Оптимизатор не ошибается.
Код получается более наглядным.
Это как с циклами. "Зачем придумали столько вариантов синтаксиса циклов? Ведь можно обходиться одним Пока ... Цикл."
Так и тут.
Как раз явное. Но в 1С это скорее ограничение типа.
И более наглядно работает с цифрами/числами.
Хорошо, когда мы отбираем по одному типу регистра, а если, например, регистр двигает 12 документов, а нам нужно отобрать по двум? Отсечение не сработает.
Да ладно:
ВЫРАЗИТЬ(Рег.Регистратор КАК Документ.НужныйДокумент1).Номер = ВТ.Номер
ИЛИ ВЫРАЗИТЬ(Рег.Регистратор КАК Документ.НужныйДокумент2).Номер = ВТ.Номер
До сих пор не могу понять смысла этого оператора
А Левое соединение, хоть и левое, но всегда понятное и однозначное)). Как и Подстрока(....,1,100)
В данном случае оптимизатор поймет и сделает необходимое левое соединение за нас.
Когда соединения сложные трехэтажные, при добавлении самим дополнительных соединений можно ошибиться. Оптимизатор не ошибается.
Код получается более наглядным.
Это как с циклами. "Зачем придумали столько вариантов синтаксиса циклов? Ведь можно обходиться одним Пока ... Цикл."
Так и тут.
А выражение (Выразить ... КАК Строка(100)) - неявное преобразование типов?
Как раз явное. Но в 1С это скорее ограничение типа.
И более наглядно работает с цифрами/числами.
(22)
...оптимизатор поймет и сделает...
...Оптимизатор не ошибается...
Угу. Конечно! Всенепременно! Не ошибётся! Поэтому нам нужна консоль, показывающая текст запроса, который выполнит СКД. Т.е. мы пишем один запрос, в консоли он работает, всё правильно, вставляем в СКД: опа, соптимизировался))) И не всегда правильно!
Программирование - вещь точная. И при определении функции не должно быть слов "скорее", "похоже", "вроде как", "возможно".
А тут либо по типам фильтрует, либо явно значения преобразовывает. Оно "ВЫРАЗИТЬ" может и безопасное, но пусть за ним следят.
...оптимизатор поймет и сделает...
...Оптимизатор не ошибается...
Угу. Конечно! Всенепременно! Не ошибётся! Поэтому нам нужна консоль, показывающая текст запроса, который выполнит СКД. Т.е. мы пишем один запрос, в консоли он работает, всё правильно, вставляем в СКД: опа, соптимизировался))) И не всегда правильно!
...Но в 1С это скорее ограничение типа...
Программирование - вещь точная. И при определении функции не должно быть слов "скорее", "похоже", "вроде как", "возможно".
А тут либо по типам фильтрует, либо явно значения преобразовывает. Оно "ВЫРАЗИТЬ" может и безопасное, но пусть за ним следят.
(26)
Мда.. тяжелый случай. Причем тут оптимизатор плана запроса и СКД?
Я наверно новое для вас открою, но вот это (описанное выше) делает сама СКД. Оптимизатор тут совсем не причем. Он уже обрабатывает измененный запрос.
Угу. Конечно! Всенепременно! Не ошибётся! Поэтому нам нужна консоль, показывающая текст запроса, который выполнит СКД. Т.е. мы пишем один запрос, в консоли он работает, всё правильно, вставляем в СКД: опа, соптимизировался))) И не всегда правильно!
Мда.. тяжелый случай. Причем тут оптимизатор плана запроса и СКД?
Я наверно новое для вас открою, но вот это (описанное выше) делает сама СКД. Оптимизатор тут совсем не причем. Он уже обрабатывает измененный запрос.
(17) Нет. Такое поведение будет только если ты разыменовываешь составной тип регистратора, получая от него значение через точку. Например, получаешь контрагента и джойнишь по этому контрагенту. При использовании самого регистратора составного типа при джоине по равенству будет все хорошо.
Вот при джоине по неравенству/больше/меньше будут проблемы, это общая беда сравнений составных типов.
Учите и понимайте матчасть перед тем как поучать. Для вас же вон даже ИТС онлайн сделали.
Вот при джоине по неравенству/больше/меньше будут проблемы, это общая беда сравнений составных типов.
Учите и понимайте матчасть перед тем как поучать. Для вас же вон даже ИТС онлайн сделали.
самый оптимальным вариантом будет проверка на ссылку в условии. все остальные манипуляции с полями при соединении таблиц только замедляют работу.
ИЗ ВТ1 КАК ВТ1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ПО ВТ1.ДокРегистратор = СписаниеСРасчетногоСчета.ДокументОснование
ГДЕ
СписаниеСРасчетногоСчета.ДокументОснование ССЫЛКА Документ.скДопсДСП
ИЗ ВТ1 КАК ВТ1
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.СписаниеСРасчетногоСчета КАК СписаниеСРасчетногоСчета
ПО ВТ1.ДокРегистратор = СписаниеСРасчетногоСчета.ДокументОснование
ГДЕ
СписаниеСРасчетногоСчета.ДокументОснование ССЫЛКА Документ.скДопсДСП
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот