8.х Нужна помощь в оптимизации запроса

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Tanush, 21 окт 2010.

  1. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Работает очень долго. Внешняя печатная форма во вложении. Запрос:
    Код:
    "ВЫБРАТЬ
    ДокШапка.Номер,
    ДокШапка.Дата,
    ДокШапка.Организация.НаименованиеПолное КАК НазваниеОрганизации,
    ДокШапка.Организация КАК Организация,
    ДокШапка.Организация.ИНН КАК ИНН,
    ТЧРаботники.Сотрудник,
    ТЧРаботники.ПодразделениеОрганизации.Наименование КАК Подразделение,
    ПодразделениеАнгл.Значение КАК ПодразделениеАнгл,
    ТЧРаботники.Должность КАК Должность,
    ДолжностьАнгл.Значение КАК ДолжностьАнгл,
    ТЧРаботники.ДатаПриема,
    ТЧРаботники.ДатаУвольнения,
    ТЧРаботники.ИспытательныйСрок,
    ТЧРаботники.ГрафикРаботы КАК ВидГрафикаСсылка,
    ТЧРаботники.ГрафикРаботы.ДлительностьРабочейНедели КАК ДлительностьРабочейНедели,
    Гражданство.Страна КАК Гражданство,
    АдресФизЛица.Представление КАК АдресФизЛица,
    Паспорт.ДокументВид КАК ВидДокумента,
    ВЫРАЗИТЬ(ЕСТЬNULL(ФИОФизЛиц.Фамилия, "") + " " + ЕСТЬNULL(ФИОФизЛиц.Имя, "") + " " + ЕСТЬNULL(ФИОФизЛиц.Отчество, "") КАК СТРОКА) КАК ФИОРаботника,
    АдресОрганизации.Представление КАК АдресОрганизации,
    ТелефонОрганизации.Представление КАК ТелефонОрганизации,
    ВЫРАЗИТЬ(" " + ЕСТЬNULL(Паспорт.ДокументСерия, "") + " № " + ЕСТЬNULL(Паспорт.ДокументНомер, "") КАК СТРОКА) КАК СерияНомер,
    Паспорт.ДокументДатаВыдачи,
    Паспорт.ДокументКемВыдан КАК ДокументКемВыдан,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "основной работой"
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятости,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "principal place of business."
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятостиАнгл,
    ОтвЛица.ФизическоеЛицо КАК Руководитель,
    ГражданствоАнгл.Значение КАК ГражданствоАнгл,
    АдресФизЛица.Поле1 КАК АдресФЛИндекс,
    АдресФизЛица.Поле2 КАК АдресФЛРегион,
    АдресФизЛица.Поле3 КАК АдресФЛРайон,
    АдресФизЛица.Поле4 КАК АдресФЛГород,
    АдресФизЛица.Поле5 КАК АдресФЛНасПункт,
    АдресФизЛица.Поле6 КАК АдресФЛУлица,
    АдресФизЛица.Поле7 КАК АдресФЛДом,
    АдресФизЛица.Поле8 КАК АдресФЛКорпус,
    АдресФизЛица.Поле9 КАК АдресФЛКвартира,
    ТЧРаботники.ГрафикРаботы.Наименование КАК ВидГрафика,
    ТЧРаботники.Сотрудник.ТарифнаяСтавка КАК ТарифнаяСтавка,
    Константы.ВалютаРегламентированногоУчета КАК ВалютаТарифнойСтавки,
    АдресОрганизации.Поле1 КАК АдресОргИндекс,
    АдресОрганизации.Поле2 КАК АдресОргРегион,
    АдресОрганизации.Поле3 КАК АдресОргРайон,
    АдресОрганизации.Поле4 КАК АдресОргГород,
    АдресОрганизации.Поле5 КАК АдресОргНасПункт,
    АдресОрганизации.Поле6 КАК АдресОргУлица,
    АдресОрганизации.Поле7 КАК АдресОргДом,
    АдресОрганизации.Поле8 КАК АдресОргКорпус,
    АдресОрганизации.Поле9 КАК АдресОргКвартира
    ИЗ
    Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТЧРаботники
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриемНаРаботуВОрганизацию КАК ДокШапка
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресОрганизации
    ПО ДокШапка.Организация = АдресОрганизации.Объект
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонОрганизации
    ПО ДокШапка.Организация = ТелефонОрганизации.Объект
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(
    &ДатаДок,
    ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
    И СтруктурнаяЕдиница = &Организация) КАК ОтвЛица
    ПО ДокШапка.Организация = ОтвЛица.СтруктурнаяЕдиница
    ПО ТЧРаботники.Ссылка = ДокШапка.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&ДатаДок, ФизЛицо В (&СписокФизЛиц)) КАК Гражданство
    ЛЕВОЕ СОЕДИНЕНИЕ РегСведений КАК ГражданствоАнгл
    ПО Гражданство.Страна = ГражданствоАнгл.Объект.Ссылка
    ПО ТЧРаботники.Сотрудник.Физлицо = Гражданство.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресФизЛица
    ПО ТЧРаботники.Сотрудник.Физлицо = АдресФизЛица.Объект
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(&ДатаДок, ФизЛицо В (&СписокФизЛиц)) КАК Паспорт
    ПО ТЧРаботники.Сотрудник.Физлицо = Паспорт.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДок, ФизЛицо В (&СписокФизЛиц)) КАК ФИОФизЛиц
    ПО ТЧРаботники.Сотрудник.Физлицо = ФИОФизЛиц.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегСведений КАК ПодразделениеАнгл
    ПО ТЧРаботники.ПодразделениеОрганизации = ПодразделениеАнгл.Объект.Ссылка
    ЛЕВОЕ СОЕДИНЕНИЕ РегСведений КАК ДолжностьАнгл
    ПО ТЧРаботники.Должность = ДолжностьАнгл.Объект.Ссылка,
    Константы КАК Константы
    ГДЕ
    ДокШапка.Ссылка = &Ссылка
    И АдресФизЛица.Вид = &ВидАдресаФЛ
    И ПодразделениеАнгл.Свойство = &СвойствоАнглПодразделение
    И ДолжностьАнгл.Свойство = &СвойствоАнглДолжность
    И АдресОрганизации.Вид = &ВидАдресаОрганизации
    И ТелефонОрганизации.Вид = &ТелефонОрганизации
    И ГражданствоАнгл.Свойство = &СвойствоАнгл"
    

    Вложения:

  2. PavelBaryshev
    Offline

    PavelBaryshev Опытный в 1С

    Регистрация:
    9 сен 2008
    Сообщения:
    316
    Симпатии:
    0
    Баллы:
    26
    а если перебирать не документы а записи в регистре "Работники организации"

    какая конфигурация?
  3. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Самый обыкновенный ЗУП.
  4. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Пакетный запрос для начала попробуйте. Параметры использовать в виртуальных таблицах
  5. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Если вы обратили внимание, то именно так я и делаю - все возможные параметры в вирт.таблицах заданы
  6. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Используйте временные таблицы с нужными условиями, потом соединяйте их
  7. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Временные таблицы использую. Я в них не мастер пока, поэтому если оцените качество применения врем.таблиц у меня - буду очень признательна
  8. has
    Offline

    has Опытный в 1С

    Регистрация:
    18 июн 2009
    Сообщения:
    708
    Симпатии:
    0
    Баллы:
    26
    Почитайте про пакетный запрос, его и используйте
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    1. Зачем делать соединение с док шапкой? В данном случае лучше через точку обратиться.
    2. Все срезы вынести во временные таблицы с соответствующими условиями
    3. По документам искать - проблематично. Там индексы не оптимизированы для этого - поэтому тоже замедление
    4. Фактически, у вас сначала все соединения делаются и только потом отбор. Поэтому используйте, как уже сказали, пакетный запрос.
  10. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Я кое что переделал (уж простите наспех, в отчет не вставлял правильность не проверял).
    Вобщем на словах скажу: самый главный тормоз у вас идет когда вы полностью выбираете РС "СвойстваОбъектов" во временную таблицу. Там же нет никакого отбора! Убирайте эту ВТ из отчета!!! (вообще убирайте) (в примере я убрал, и прям в запросе сделал левое соединение к этому РС).
    И далее, как уже сказал BabySG, "4. Фактически, у вас сначала все соединения делаются и только потом отбор", это тоже поправил, т.е. для каждого левого соединения перенес отбор из "ГДЕ" в условия соединения. Еще раз скажу, может что в спешке напутал (я поменял местами ТЧ в выражении "ИЗ"), но в консоли запросов у меня данный запрос выполняется мнгновенно.
    Код:
    "ВЫБРАТЬ
    ТЧРаботники.Ссылка.Номер,
    ТЧРаботники.Ссылка.Дата,
    ТЧРаботники.Ссылка.Организация.НаименованиеПолное КАК НазваниеОрганизации,
    ТЧРаботники.Ссылка.Организация КАК Организация,
    ТЧРаботники.Ссылка.Организация.ИНН КАК ИНН,
    ТЧРаботники.Сотрудник,
    ТЧРаботники.ПодразделениеОрганизации.Наименование КАК Подразделение,
    ПодразделениеАнгл.Значение КАК ПодразделениеАнгл,
    ТЧРаботники.Должность КАК Должность,
    ДолжностьАнгл.Значение КАК ДолжностьАнгл,
    ТЧРаботники.ДатаПриема,
    ТЧРаботники.ДатаУвольнения,
    ТЧРаботники.ИспытательныйСрок,
    ТЧРаботники.ГрафикРаботы.ВидГрафика КАК ВидГрафика,
    ТЧРаботники.ГрафикРаботы.ДлительностьРабочейНедели КАК ДлительностьРабочейНедели,
    ТЧНачисления.Сотрудник.ТарифнаяСтавка КАК ТарифнаяСтавка,
    ТЧНачисления.Сотрудник.ВалютаТарифнойСтавки КАК ВалютаТарифнойСтавки,
    Гражданство.Страна КАК Гражданство,
    АдресФизЛица.Представление КАК АдресФизЛица,
    Паспорт.ДокументВид.Наименование КАК ВидДокумента,
    ВЫРАЗИТЬ(ЕСТЬNULL(ФИОФизЛиц.Фамилия, "") + " " + ЕСТЬNULL(ФИОФизЛиц.Имя, "") + " " + ЕСТЬNULL(ФИОФизЛиц.Отчество, "") КАК СТРОКА) КАК ФИОРаботника,
    АдресОрганизации.Представление КАК АдресОрганизации,
    ТелефонОрганизации.Представление КАК ТелефонОрганизации,
    ВЫРАЗИТЬ(" " + ЕСТЬNULL(Паспорт.ДокументСерия, "") + " № " + ЕСТЬNULL(Паспорт.ДокументНомер, "") КАК СТРОКА) КАК СерияНомер,
    Паспорт.ДокументДатаВыдачи,
    Паспорт.ДокументКемВыдан КАК ДокументКемВыдан,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "основной работой"
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятости,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "principal place of business."
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятостиАнгл,
    ОтвЛица.ФизическоеЛицо КАК Руководитель,
    ГражданствоАнгл.Значение КАК ГражданствоАнгл,
    ВидДокументаАнгл.Значение КАК ВидДокументаАнгл,
    АдресФизЛица.Поле1 КАК АдресФЛИндекс,
    АдресФизЛица.Поле2 КАК АдресФЛРегион,
    АдресФизЛица.Поле3 КАК АдресФЛРайон,
    АдресФизЛица.Поле4 КАК АдресФЛГород,
    АдресФизЛица.Поле5 КАК АдресФЛНасПункт,
    АдресФизЛица.Поле6 КАК АдресФЛУлица,
    АдресФизЛица.Поле7 КАК АдресФЛДом,
    АдресФизЛица.Поле8 КАК АдресФЛКорпус,
    АдресФизЛица.Поле9 КАК АдресФЛКвартира
    ИЗ
    Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТЧРаботники
    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриемНаРаботуВОрганизацию.ОсновныеНачисления КАК ТЧНачисления
    ПО ТЧРаботники.Сотрудник = ТЧНачисления.Сотрудник
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресОрганизации
    ПО ТЧРаботники.Ссылка.Организация = АдресОрганизации.Объект
    И (АдресОрганизации.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации))
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонОрганизации
    ПО ТЧРаботники.Ссылка.Организация = ТелефонОрганизации.Объект
    И (ТелефонОрганизации.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ТелефонОрганизации))
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(
    &ДатаДок,
    ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
    И СтруктурнаяЕдиница = &Организация) КАК ОтвЛица
    ПО ТЧРаботники.Ссылка.Организация = ОтвЛица.СтруктурнаяЕдиница
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&ДатаДок, ФизЛицо В (&СписокФизЛиц)) КАК Гражданство
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ГражданствоАнгл
    ПО Гражданство.Страна = ГражданствоАнгл.Объект
    И (ГражданствоАнгл.Свойство = &СвойствоАнгл)
    ПО ТЧРаботники.Сотрудник.Физлицо = Гражданство.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресФизЛица
    ПО ТЧРаботники.Сотрудник.Физлицо = АдресФизЛица.Объект
    И (АдресФизЛица.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресФизЛица))
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(&ДатаДок, ФизЛицо В (&СписокФизЛиц)) КАК Паспорт
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ВидДокументаАнгл
    ПО Паспорт.ДокументВид = ВидДокументаАнгл.Объект
    И (ВидДокументаАнгл.Свойство = &ВидДокументаАнгл)
    ПО ТЧРаботники.Сотрудник.Физлицо = Паспорт.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДок, ФизЛицо В (&СписокФизЛиц)) КАК ФИОФизЛиц
    ПО ТЧРаботники.Сотрудник.Физлицо = ФИОФизЛиц.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ПодразделениеАнгл
    ПО ТЧРаботники.ПодразделениеОрганизации = ПодразделениеАнгл.Объект
    И (ПодразделениеАнгл.Свойство = &СвойствоАнглПодразделение)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ДолжностьАнгл
    ПО ТЧРаботники.Должность = ДолжностьАнгл.Объект
    И (ДолжностьАнгл.Свойство = &СвойствоАнглДолжность)
    ГДЕ
    ТЧРаботники.Ссылка.Ссылка = &Ссылка"
    
    
    

    Но думаю, что даже просто если убрать из отчета запрос выбора во ВТ из регистра СвойстваОбъектов - уже почуствуете значительную разницу.
  11. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Ой, запутали меня окончательно. Я сначал и делала все в соединении, а не в условиях - посоветовали (не на этом форуме) все сделать в условиях через ГДЕ. Хотя тоже читала, что лучше все в соединения выносить. Поверьте, скорость в общем от переноса в условия или соединения у меня не изменилась. Что тормозит именно соединение с РгистромСвойст.ЗначенияСвойствОбъектов, я тоже заметила - как только добавила 2 таких соединения - все, повисло.


    Не поняла, можно на примере показать?
  12. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Tanush, у вас тормоз идет не в том запросе, который привели в 1-м посте, а в вашей обработке, в том запросе который выбирает данные из РС "СвойстваНоменклатуры" во ВТ. Вы понимаете, в том запросе вы копируете ВСЁ содержимое РС в память (во ВТ), там же у вас нет ни отбора, ничего. Смысла в таком действие абсолютно нет никакого.

    Смотрите мой запрос. Там это учтено.
  13. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Спасибо, увидела теперь. Наверное так даже лучше.
    По поводу ВТ пока думаю. Спасибо, буду разбираться
  14. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Tanush, просто вставьте мой запрос в консоль запросов и посмотрите результат. Проверьте так все или нет.
  15. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Было без ВТ (ВТ это уже во вторую очередь пришло), эффект тот же. Ну или разница небольшая.
  16. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    Итог трудов:

    Код:
     ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТЧДок.Сотрудник.Физлицо КАК ФизЛицо
    ПОМЕСТИТЬ СписокФизЛиц
    ИЗ
    Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТЧДок
    ГДЕ
    ТЧДок.Ссылка = &Ссылка;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ОтвЛица.СтруктурнаяЕдиница,
    ОтвЛица.ОтветственноеЛицо,
    ОтвЛица.ФизическоеЛицо
    ПОМЕСТИТЬ ВТ_ОтвЛица
    ИЗ
    РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(
    &ДатаДок,
    ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/и')">				И СтруктурнаяЕдиница = &Организация) КАК ОтвЛица;</span>
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Гражданство.ФизЛицо,
    Гражданство.Страна
    ПОМЕСТИТЬ ВТ_Гражданство
    ИЗ
    СписокФизЛиц КАК СписокФизЛиц
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&ДатаДок, ) КАК Гражданство
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/по')">		ПО СписокФизЛиц.ФизЛицо = Гражданство.ФизЛицо;</span>
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Паспорт.ФизЛицо,
    Паспорт.ДокументВид,
    Паспорт.ДокументСерия,
    Паспорт.ДокументНомер,
    Паспорт.ДокументДатаВыдачи,
    Паспорт.ДокументКемВыдан,
    Паспорт.ДатаРегистрацииПоМестуЖительства
    ПОМЕСТИТЬ ВТ_Паспорт
    ИЗ
    СписокФизЛиц КАК СписокФизЛиц
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(&ДатаДок, ) КАК Паспорт
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/по')">		ПО СписокФизЛиц.ФизЛицо = Паспорт.ФизЛицо;</span>
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ФИОФизЛиц.ФизЛицо,
    ФИОФизЛиц.Фамилия,
    ФИОФизЛиц.Имя,
    ФИОФизЛиц.Отчество
    ПОМЕСТИТЬ ВТ_ФИОФизЛиц
    ИЗ
    СписокФизЛиц КАК СписокФизЛиц
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДок, ) КАК ФИОФизЛиц
    <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/по')">		ПО СписокФизЛиц.ФизЛицо = ФИОФизЛиц.ФизЛицо;</span>
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ТЧРаботники.Ссылка.Номер,
    ТЧРаботники.Ссылка.Дата,
    ТЧРаботники.Ссылка.Организация.НаименованиеПолное КАК НазваниеОрганизации,
    ТЧРаботники.Ссылка.Организация КАК Организация,
    ТЧРаботники.Ссылка.Организация.ИНН КАК ИНН,
    ТЧРаботники.Сотрудник,
    ТЧРаботники.Сотрудник.ТарифнаяСтавка КАК ТарифнаяСтавка,
    ТЧРаботники.Сотрудник.ВалютаТарифнойСтавки КАК ВалютаТарифнойСтавки,
    ТЧРаботники.ПодразделениеОрганизации.Наименование КАК Подразделение,
    ТЧРаботники.Должность КАК Должность,
    ТЧРаботники.ДатаПриема,
    ТЧРаботники.ДатаУвольнения,
    ТЧРаботники.ИспытательныйСрок,
    ТЧРаботники.ГрафикРаботы.ВидГрафика КАК ВидГрафика,
    ТЧРаботники.ГрафикРаботы.ДлительностьРабочейНедели КАК ДлительностьРабочейНедели,
    ДолжностьАнгл.Значение КАК ДолжностьАнгл,
    ВТ_Гражданство.Страна КАК Гражданство,
    ПодразделениеАнгл.Значение КАК ПодразделениеАнгл,
    АдресФизЛица.Представление КАК АдресФизЛица,
    ВТ_Паспорт.ДокументВид КАК ДокументВид,
    ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_ФИОФизЛиц.Фамилия, "") + " " + ЕСТЬNULL(ВТ_ФИОФизЛиц.Имя, "") + " " + ЕСТЬNULL(ВТ_ФИОФизЛиц.Отчество, "") КАК СТРОКА) КАК ФИОРаботника,
    АдресОрганизации.Представление КАК АдресОрганизации,
    ТелефонОрганизации.Представление КАК ТелефонОрганизации,
    ВЫРАЗИТЬ(" " + ЕСТЬNULL(ВТ_Паспорт.ДокументСерия, "") + " № " + ЕСТЬNULL(ВТ_Паспорт.ДокументНомер, "") КАК СТРОКА) КАК СерияНомер,
    ВТ_Паспорт.ДокументДатаВыдачи,
    ВТ_Паспорт.ДокументКемВыдан КАК ДокументКемВыдан,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "основной работой"
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятости,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "principal place of business."
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятостиАнгл,
    ВТ_ОтвЛица.ФизическоеЛицо КАК Руководитель,
    ГражданствоАнгл.Значение КАК ГражданствоАнгл,
    ВидДокументаАнгл.Значение КАК ВидДокументаАнгл,
    АдресФизЛица.Поле1 КАК АдресФЛИндекс,
    АдресФизЛица.Поле2 КАК АдресФЛРегион,
    АдресФизЛица.Поле3 КАК АдресФЛРайон,
    АдресФизЛица.Поле4 КАК АдресФЛГород,
    АдресФизЛица.Поле5 КАК АдресФЛНасПункт,
    АдресФизЛица.Поле6 КАК АдресФЛУлица,
    АдресФизЛица.Поле7 КАК АдресФЛДом,
    АдресФизЛица.Поле8 КАК АдресФЛКорпус,
    АдресФизЛица.Поле9 КАК АдресФЛКвартира
    ИЗ
    Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТЧРаботники
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресОрганизации
    ПО ТЧРаботники.Ссылка.Организация = АдресОрганизации.Объект
    И (АдресОрганизации.Вид = &ВидАдресаОрганизации)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонОрганизации
    ПО ТЧРаботники.Ссылка.Организация = ТелефонОрганизации.Объект
    И (ТелефонОрганизации.Вид = &ТелефонОрганизации)
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтвЛица КАК ВТ_ОтвЛица
    ПО ТЧРаботники.Ссылка.Организация = ВТ_ОтвЛица.СтруктурнаяЕдиница
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Гражданство КАК ВТ_Гражданство
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ГражданствоАнгл
    ПО ВТ_Гражданство.Страна = ГражданствоАнгл.Объект.Ссылка
    И (ГражданствоАнгл.Свойство = &СвойствоАнгл)
    ПО ТЧРаботники.Сотрудник.Физлицо = ВТ_Гражданство.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресФизЛица
    ПО ТЧРаботники.Сотрудник.Физлицо = АдресФизЛица.Объект
    И (АдресФизЛица.Вид = &ВидАдресаФЛ)
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Паспорт КАК ВТ_Паспорт
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ВидДокументаАнгл
    ПО ВТ_Паспорт.ДокументВид = ВидДокументаАнгл.Объект.Ссылка
    И (ВидДокументаАнгл.Свойство = &СвойствоАнгл)
    ПО ТЧРаботники.Сотрудник.Физлицо = ВТ_Паспорт.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ФИОФизЛиц КАК ВТ_ФИОФизЛиц
    ПО ТЧРаботники.Сотрудник.Физлицо = ВТ_ФИОФизЛиц.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ПодразделениеАнгл
    ПО ТЧРаботники.ПодразделениеОрганизации = ПодразделениеАнгл.Объект.Ссылка
    И (ПодразделениеАнгл.Свойство = &СвойствоАнглПодразделение)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ДолжностьАнгл
    ПО ТЧРаботники.Должность = ДолжностьАнгл.Объект.Ссылка
    И (ДолжностьАнгл.Свойство = &СвойствоАнглДолжность)
    ГДЕ
    ТЧРаботники.Ссылка = &Ссылка
    
    Скорость прибавилась не значительно - на пару секунд (было 21 стало 19)

    Буду признательна, если посмотрите
  17. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Tanush, уберите получение Ссылки!!!
    Т.е. когда делаете соединение с регистром свойств объектов, измерение "Объект" и так имеет вид "Справочник.Ссылка", не надо оттуда еще раз ссылку получать. Например "ПодразделениеАнгл.Объект.Ссылка" перепишите как "ПодразделениеАнгл.Объект", и проверьте скорость!


    Вот, проверяйте:
    Код:
    "ВЫБРАТЬ РАЗЛИЧНЫЕ
    ТЧДок.Сотрудник.Физлицо КАК ФизЛицо
    ПОМЕСТИТЬ СписокФизЛиц
    ИЗ
    Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТЧДок
    ГДЕ
    ТЧДок.Ссылка = &Ссылка;
    </span>
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ОтвЛица.СтруктурнаяЕдиница,
    ОтвЛица.ОтветственноеЛицо,
    ОтвЛица.ФизическоеЛицо
    ПОМЕСТИТЬ ВТ_ОтвЛица
    ИЗ
    РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(
    &ДатаДок,
    ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)
    И СтруктурнаяЕдиница = &Организация) КАК ОтвЛица;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Гражданство.ФизЛицо,
    Гражданство.Страна
    ПОМЕСТИТЬ ВТ_Гражданство
    ИЗ
    СписокФизЛиц КАК СписокФизЛиц
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&ДатаДок, ) КАК Гражданство
    ПО СписокФизЛиц.ФизЛицо = Гражданство.ФизЛицо;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    Паспорт.ФизЛицо,
    Паспорт.ДокументВид,
    Паспорт.ДокументСерия,
    Паспорт.ДокументНомер,
    Паспорт.ДокументДатаВыдачи,
    Паспорт.ДокументКемВыдан,
    Паспорт.ДатаРегистрацииПоМестуЖительства
    ПОМЕСТИТЬ ВТ_Паспорт
    ИЗ
    СписокФизЛиц КАК СписокФизЛиц
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(&ДатаДок, ) КАК Паспорт
    ПО СписокФизЛиц.ФизЛицо = Паспорт.ФизЛицо;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ФИОФизЛиц.ФизЛицо,
    ФИОФизЛиц.Фамилия,
    ФИОФизЛиц.Имя,
    ФИОФизЛиц.Отчество
    ПОМЕСТИТЬ ВТ_ФИОФизЛиц
    ИЗ
    СписокФизЛиц КАК СписокФизЛиц
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДок, ) КАК ФИОФизЛиц
    ПО СписокФизЛиц.ФизЛицо = ФИОФизЛиц.ФизЛицо;
    
    ////////////////////////////////////////////////////////////////////////////////
    ВЫБРАТЬ
    ТЧРаботники.Ссылка.Номер,
    ТЧРаботники.Ссылка.Дата,
    ТЧРаботники.Ссылка.Организация.НаименованиеПолное КАК НазваниеОрганизации,
    ТЧРаботники.Ссылка.Организация КАК Организация,
    ТЧРаботники.Ссылка.Организация.ИНН КАК ИНН,
    ТЧРаботники.Сотрудник,
    ТЧРаботники.Сотрудник.ТарифнаяСтавка КАК ТарифнаяСтавка,
    ТЧРаботники.Сотрудник.ВалютаТарифнойСтавки КАК ВалютаТарифнойСтавки,
    ТЧРаботники.ПодразделениеОрганизации.Наименование КАК Подразделение,
    ТЧРаботники.Должность КАК Должность,
    ТЧРаботники.ДатаПриема,
    ТЧРаботники.ДатаУвольнения,
    ТЧРаботники.ИспытательныйСрок,
    ТЧРаботники.ГрафикРаботы.ВидГрафика КАК ВидГрафика,
    ТЧРаботники.ГрафикРаботы.ДлительностьРабочейНедели КАК ДлительностьРабочейНедели,
    ДолжностьАнгл.Значение КАК ДолжностьАнгл,
    ВТ_Гражданство.Страна КАК Гражданство,
    ПодразделениеАнгл.Значение КАК ПодразделениеАнгл,
    АдресФизЛица.Представление КАК АдресФизЛица,
    ВТ_Паспорт.ДокументВид КАК ДокументВид,
    ВЫРАЗИТЬ(ЕСТЬNULL(ВТ_ФИОФизЛиц.Фамилия, "") + " " + ЕСТЬNULL(ВТ_ФИОФизЛиц.Имя, "") + " " + ЕСТЬNULL(ВТ_ФИОФизЛиц.Отчество, "") КАК СТРОКА) КАК ФИОРаботника,
    АдресОрганизации.Представление КАК АдресОрганизации,
    ТелефонОрганизации.Представление КАК ТелефонОрганизации,
    ВЫРАЗИТЬ(" " + ЕСТЬNULL(ВТ_Паспорт.ДокументСерия, "") + " № " + ЕСТЬNULL(ВТ_Паспорт.ДокументНомер, "") КАК СТРОКА) КАК СерияНомер,
    ВТ_Паспорт.ДокументДатаВыдачи,
    ВТ_Паспорт.ДокументКемВыдан КАК ДокументКемВыдан,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "основной работой"
    ИНАЧЕ "работой <span style='cursor: pointer; color:red' Onclick="window.open('http://www.1c-pro.ru/wiki/index.php/по')">по совместительству"
    КОНЕЦ КАК ВидЗанятости,
    ВЫБОР
    КОГДА ТЧРаботники.Сотрудник.ВидЗанятости = ЗНАЧЕНИЕ(Перечисление.ВидыЗанятостиВОрганизации.ОсновноеМестоРаботы)
    ТОГДА "principal place of business."
    ИНАЧЕ "работой по совместительству"
    КОНЕЦ КАК ВидЗанятостиАнгл,
    ВТ_ОтвЛица.ФизическоеЛицо КАК Руководитель,
    ГражданствоАнгл.Значение КАК ГражданствоАнгл,
    ВидДокументаАнгл.Значение КАК ВидДокументаАнгл,
    АдресФизЛица.Поле1 КАК АдресФЛИндекс,
    АдресФизЛица.Поле2 КАК АдресФЛРегион,
    АдресФизЛица.Поле3 КАК АдресФЛРайон,
    АдресФизЛица.Поле4 КАК АдресФЛГород,
    АдресФизЛица.Поле5 КАК АдресФЛНасПункт,
    АдресФизЛица.Поле6 КАК АдресФЛУлица,
    АдресФизЛица.Поле7 КАК АдресФЛДом,
    АдресФизЛица.Поле8 КАК АдресФЛКорпус,
    АдресФизЛица.Поле9 КАК АдресФЛКвартира
    ИЗ
    Документ.ПриемНаРаботуВОрганизацию.РаботникиОрганизации КАК ТЧРаботники
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресОрганизации
    ПО ТЧРаботники.Ссылка.Организация = АдресОрганизации.Объект
    И (АдресОрганизации.Вид = &ВидАдресаОрганизации)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК ТелефонОрганизации
    ПО ТЧРаботники.Ссылка.Организация = ТелефонОрганизации.Объект
    И (ТелефонОрганизации.Вид = &ТелефонОрганизации)
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ОтвЛица КАК ВТ_ОтвЛица
    ПО ТЧРаботники.Ссылка.Организация = ВТ_ОтвЛица.СтруктурнаяЕдиница
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Гражданство КАК ВТ_Гражданство
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ГражданствоАнгл
    ПО ВТ_Гражданство.Страна = ГражданствоАнгл.Объект
    И (ГражданствоАнгл.Свойство = &СвойствоАнгл)
    ПО ТЧРаботники.Сотрудник.Физлицо = ВТ_Гражданство.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК АдресФизЛица
    ПО ТЧРаботники.Сотрудник.Физлицо = АдресФизЛица.Объект
    И (АдресФизЛица.Вид = &ВидАдресаФЛ)
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_Паспорт КАК ВТ_Паспорт
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ВидДокументаАнгл
    ПО ВТ_Паспорт.ДокументВид = ВидДокументаАнгл.Объект
    И (ВидДокументаАнгл.Свойство = &СвойствоАнгл)
    ПО ТЧРаботники.Сотрудник.Физлицо = ВТ_Паспорт.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ ВТ_ФИОФизЛиц КАК ВТ_ФИОФизЛиц
    ПО ТЧРаботники.Сотрудник.Физлицо = ВТ_ФИОФизЛиц.ФизЛицо
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ПодразделениеАнгл
    ПО ТЧРаботники.ПодразделениеОрганизации = ПодразделениеАнгл.Объект
    И (ПодразделениеАнгл.Свойство = &СвойствоАнглПодразделение)
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ДолжностьАнгл
    ПО ТЧРаботники.Должность = ДолжностьАнгл.Объект
    И (ДолжностьАнгл.Свойство = &СвойствоАнглДолжность)
    ГДЕ
    ТЧРаботники.Ссылка = &Ссылка"
    
  18. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Комментарий к предыдущему посту.
    Не поленился, кое-что проделал, чтобы было с примерами, теперь объясняю на конкретном примере для интересующихся почему так:
    Возьмем 2 запроса:
    Запрос 1:
    Код:
    "ВЫБРАТЬ
    Контрагенты.Ссылка,
    ЗначенияСвойствОбъектов.Значение
    ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ПО Контрагенты.Ссылка = ЗначенияСвойствОбъектов.Объект
    И (ЗначенияСвойствОбъектов.Свойство = &Свойство)"
    
    Запрос 2:
    Код:
    "ВЫБРАТЬ
    Контрагенты.Ссылка,
    ЗначенияСвойствОбъектов.Значение
    ИЗ
    Справочник.Контрагенты КАК Контрагенты
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
    ПО Контрагенты.Ссылка = ЗначенияСвойствОбъектов.Объект.Ссылка
    И (ЗначенияСвойствОбъектов.Свойство = &Свойство)"
    
    Второй запрос будет работать намного дольше первого, а все почему? Потому что Измерение "Объект" РС имеет поле составного типа. Конкретно, запрос к базе данных будет генерироваться следующий (у меня файловая БД, естественно на других типах БД может отличаться). Итак смотрим:
    Для запроса 1:
    Код:
    'SELECT
    Q_000_T_001.ID,
    Q_000_T_002.Fld15156
    FROM
    Reference106 Q_000_T_001 INNER JOIN InfoRg15153 Q_000_T_002 ON ((Q_000_T_001.ID = Q_000_T_002.Fld15154) AND (Q_000_T_002.Fld15155 = 921:8489001cc0184cd811df3af30b45ec75))'
    Для запроса 2:
    Посмотреть вложение 5610

    Как говорится зацените разницу. Таким образом будьте внимательны в написании запросов и обращении с полями составного типа.

    З.Ы. BabySG, я хотел для показа результата использовать тег [ codebox ], для первого (короткого) он сработал, а вот для второго (этого огромного) - нет. Поэтому пришлось использовать тэг [ quote ], получилась такая вот простыня. :(

    Переделал на внешний файл. Судя по всему - при таком длинном сообщении парсер отказывается обрабатывать.

    Вложения:

    • query2.txt
      Размер файла:
      48,8 КБ
      Просмотров:
      24
  19. TopicStarter Overlay
    Tanush
    Offline

    Tanush Опытный в 1С

    Регистрация:
    24 апр 2008
    Сообщения:
    96
    Симпатии:
    0
    Баллы:
    26
    shurikvz,спасибо, что все так подробно мне объяснили. Я поняла разницу. А еще вопрос: а как вы потом узнали как выполняется запрос (ну вот та простыня, которую вы привели)?

    Действительно - запрос полетел!!!! В смысле стал так быстро срабатывать!!! Ура!!!
  20. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Для этого необходимо настроить и включить технологический журнал. В его логах и будет видно все обращения к БД.
    Подробнее о нем, его настройках можно прочитать на диске ИТС. Также на диске ИТС есть обработка "Редактор файла конфигурации технологического журнала" (необязательная в принципе можно при желании и вручную настройки написать, но с ней конечно удобнее).

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