Пятница, 03.05.2024, 06:29
Приветствую Вас Гость | RSS
Главная Оптимизация запросов по бух. итогам - Форум Регистрация Вход
[Новые сообщенияУчастникиПравила форумаПоискRSS ]

Если форум не содержит интересующего Вас раздела, пожалуйста напишите мне об этом.
Активным пользователям я буду активно повышать рейтинги, так что это Ваш реальный шанс стать модератором или даже администратором проекта.

  • Страница 1 из 1
  • 1
Модератор форума: MainGuru  
Форум » Раздел для разработчиков и внедренцев продуктов 1С » Язык запросов 1С:Предприятие 8 » Оптимизация запросов по бух. итогам
Оптимизация запросов по бух. итогам
MainGuruДата: Вторник, 14.04.2009, 11:53 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 17
Репутация: 0
Статус: Offline
Можно ли оптимизировать ЗАПРОС:

ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Счет,
ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Контрагент,
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК НачДт,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт КАК НачКт,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК ОБДт,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК ОБКт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК КонДт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК КонКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
&ДатаНач,
&ДатаКон,
,
,
Счет = &Сч_62_1
ИЛИ Счет = &Сч_62_2,
,
) КАК ХозрасчетныйОстаткиИОбороты
УПОРЯДОЧИТЬ ПО ХозрасчетныйОстаткиИОбороты.Субконто1.Наименование

 
ИгорёхаДата: Вторник, 14.04.2009, 15:19 | Сообщение # 2
Полковник
Группа: Администраторы
Сообщений: 3
Репутация: 0
Статус: Offline
Оптимизировать можно, но как ни странно, основная проблема здесь не с выборкой, а с сортировкой!

Поле "ХозрасчетныйОстаткиИОбороты.Субконто1" скорее всего имеет составной тип, поэтому для того чтобы собрать представления объектов
в запрос включается поле вида:
CASE
WHEN #V8TmpTable2_Q_000_T_001._Value1_TYPE = 0x08 AND #V8TmpTable2_Q_000_T_001._Value1_RTRef = 0x000021DB
THEN CAST(_Reference8667._Description AS NVARCHAR(150))
WHEN #V8TmpTable2_Q_000_T_001._Value1_TYPE = 0x08 AND #V8TmpTable2_Q_000_T_001._Value1_RTRef = 0x0000092A
THEN CAST(_Reference2346._Description AS NVARCHAR(150))
.
.
.
WHEN #V8TmpTable2_Q_000_T_001._Value1_TYPE = 0x08 AND #V8TmpTable2_Q_000_T_001._Value1_RTRef = 0x00000004
THEN _Reference4._Description
WHEN #V8TmpTable2_Q_000_T_001._Value1_TYPE = 0x08 AND #V8TmpTable2_Q_000_T_001._Value1_RTRef = 0x0000000A
THEN CAST(_Reference10._Description AS NVARCHAR(150))
ELSE CAST(NULL AS NVARCHAR(150))
END _sf_1

(_sf_1 - sort field 1)

Значительно улучшить ситуацию можно преобразовав поле "Субконто1" (составного типа) к одному типу (Справочник.Контрагенты). После этого можно производить сортировку.

Новый текст запроса будет выглядеть так:
ВЫБРАТЬ
ВложенныйЗапрос.Счет,
ВложенныйЗапрос.Контрагент,
ВложенныйЗапрос.Договор,
ВложенныйЗапрос.НачДт,
ВложенныйЗапрос.НачКт,
В ложенныйЗапрос.ОБДт,
ВложенныйЗапрос.ОБКт,
ВложенныйЗапрос.КонДт,
ВложенныйЗапрос.КонКт
ИЗ
(ВЫБРАТЬ
ХозрасчетныйОстаткиИОбороты.Счет КАК Счет,
ВЫРАЗИТЬ(ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Справочник.Контрагенты) КАК Контрагент,
ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Договор,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокДт КАК НачДт,
ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстатокКт КАК НачКт,
ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК ОБДт,
ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК ОБКт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК КонДт,
ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК КонКт
ИЗ
РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
&ДатаНач,
&ДатаКон,
,
,
Счет = &Сч_62_1
ИЛИ Счет = &Сч_62_2,
,
) КАК ХозрасчетныйОстаткиИОбороты) КАК ВложенныйЗапрос

УПОРЯДОЧИТЬ ПО
ВложенныйЗапрос.Контрагент.Наименование

В результате:
На большой базе первый запрос за 2008 год (итоги рассчитаны на 01.08.2008) выполнялся 12,634 секунды;
второй вариант в тех-же условиях - 6,845 сек., что почти в 2 раза лучше.

P.S.
Запрос можно оптимизировать и дальше, но это уже ловля блох. Значительный прирост производительности даст только уход от выборки средствами 1С и обращение к данным на низком уровне.

 
kamar821Дата: Воскресенье, 15.08.2010, 16:54 | Сообщение # 3
Рядовой
Группа: Пользователи
Сообщений: 1
Репутация: 0
Статус: Offline
подскажите, пожалуйста (в процессе изучения языка нахожусь, не могу найти ответ на свой вопрос в книжках), как из регистра бухгалтерии выбрать остатки и обороты по определенным счетам?
я чтоб рашить этот вопрос намудрила вот чего:
ЗапросИтоги=Новый Запрос;
ЗапросИтоги.Текст="ВЫБРАТЬ
|Бухгалтерский.Код,
|Бухгалтерский.Наименование,
|РегистрБухгалтерии1ОстаткиИОбороты.СуммаНачальныйОстатокДт,
|РегистрБухгалтерии1ОстаткиИОбороты.СуммаНа чальныйОстатокКт,
|РегистрБухгалтерии1ОстаткиИОбороты.СуммаКонечныйОстатокДт,
|РегистрБухгалтерии1ОстаткиИОбороты.СуммаКонечныйОстатокКт ,
|РегистрБухгалтерии1ОстаткиИОбороты.СуммаОборотДт,
|РегистрБухгалтерии1ОстаткиИОбороты.СуммаОборотКт
|ИЗ
|РегистрБухгалтерии.РегистрБухгалтерии1.ОстаткиИОбороты(&ДатаНач,&ДатаОконч) КАК РегистрБухгалтерии1ОстаткиИОбороты
| ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Бухгалтерский КАК Бухгалтерский
|ПО РегистрБухгалтерии1ОстаткиИОбороты.Счет = Бухгалтерский.Ссылка
| УПОРЯДОЧИТЬ ПО
| Код";
Результат запроса выгрузила в таблицу значений, далбше там намудрила, уже из таблицы значений выбираю данные по кассе и по счету. Все правильно считает в отчет выдает правильно. Вот только Есть наверняка другой способ чтоб выбрать начальный и конечный остаток по определенному счету.

Добавлено (15.08.2010, 16:52)
---------------------------------------------
Как написать условие, которое будет выбирать данные по счету и как его расположить в тексте запроса?

Добавлено (15.08.2010, 16:54)
---------------------------------------------
заранее спасибо... Не могу найти книжку, где досконально это все бы описывалось, в книжках по конфигурированию поверхностно, основы поняла..

 
Форум » Раздел для разработчиков и внедренцев продуктов 1С » Язык запросов 1С:Предприятие 8 » Оптимизация запросов по бух. итогам
  • Страница 1 из 1
  • 1
Поиск:

Copyright MyCorp © 2024 Конструктор сайтов - uCoz