При написании отчета была необходимость в использовании менеджера временных таблиц. И вот отчет написан, все работает, но есть как обычно «НО» при аварийном закрытии 1с при запущенном отчете , SQL виснет. Помогите пожалуйста.
Очевидно SQL залипает на выполнении запроса. Аварийный срыв клиента в данной ситуации не играет роли - поскольку управление до завершения запроса будет оставаться на сервере.
Так что скорее всего проблема в запросе.
Согласен запрос тяжёлый, но проблема в том, что прервать запрос, если пользователь ошибся, к примеру с датой я не знаю как.
Спасибо Вам. Значит будим ограничивать периоды.
Возможно стоит поработать над вопросом оптмизации запроса.
Давайте попробуем
МТ=Новый МенеджерВременныхТаблиц;
Условие="";
Если не ВыбЗавод.Пустая() Тогда
Условие="
| И Товары.Завод = &Завод";
КонецЕсли;
МВТЗапрос=Новый Запрос("ВЫБРАТЬ
| ТЗ.Период
|ПОМЕСТИТЬ Дни
|ИЗ
| &ТЗ КАК ТЗ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ДНИ.Период КАК Период,
| СУММА(ВЫБОР
| КОГДА Движения.Период = &ДатаС
| ТОГДА Движения.КолКонечныйОстаток - ВЫБОР
| КОГДА РезервыТоваровОстаткиИОбороты.КолКонечныйОстаток ЕСТЬ NULL
| ТОГДА 0
| ИНАЧЕ РезервыТоваровОстаткиИОбороты.КолКонечныйОстаток
| КОНЕЦ
| ИНАЧЕ ВЫБОР
| КОГДА Движения.Период <= ДНИ.Период
| ТОГДА Движения.КолОборот
| ИНАЧЕ 0
| КОНЕЦ
| КОНЕЦ) КАК Кол,
| Товары.Ссылка КАК Товар,
| Товары.Код,
| ВложенныйЗапрос.ДатаСозд КАК ДатаСозд,
| МАКСИМУМ(Серии.Ссылка) КАК Ссылка1
|ИЗ
| Дни КАК ДНИ,
| Справочник.Серии КАК Серии
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| Серии.Владелец КАК Владелец,
| МАКСИМУМ(Серии.ДатаСозд) КАК ДатаСозд
| ИЗ
| Справочник.Серии КАК Серии
| ГДЕ
| Серии.Опт1 > 0
| И Серии.РознЦена > 0
|
| СГРУППИРОВАТЬ ПО
| Серии.Владелец) КАК ВложенныйЗапрос
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&ДатаС, &ДатаПо, День, , ) КАК Движения
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РезервыТоваров.ОстаткиИОбороты(&ДатаС, &ДатаПо, День, , ) КАК РезервыТоваровОстаткиИОбороты
| ПО Движения.Товар = РезервыТоваровОстаткиИОбороты.Товар
| И Движения.Период = РезервыТоваровОстаткиИОбороты.Период
| ПО (Движения.Товар = Товары.Ссылка)
| ПО (Товары.Ссылка = ВложенныйЗапрос.Владелец)
| ПО (ВложенныйЗапрос.ДатаСозд = Серии.ДатаСозд)
| И (ВложенныйЗапрос.Владелец = Серии.Владелец)
|ГДЕ
| Серии.Опт1 > 0
| И Серии.РознЦена > 0
| И Товары.ПометкаУдаления <> ИСТИНА "+Условие+"
|
|СГРУППИРОВАТЬ ПО
| ДНИ.Период,
| Товары.Ссылка,
| Товары.Код,
| ВложенныйЗапрос.ДатаСозд
|
|УПОРЯДОЧИТЬ ПО
| Товары.Наименование
|ИТОГИ
| СУММА(ВЫБОР
| КОГДА Кол > 0
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ) КАК Кол,
| МАКСИМУМ(ДатаСозд),
| МАКСИМУМ(Ссылка1)
|ПО
| Товар");
МВТЗапрос.УстановитьПараметр("ТЗ", ТЗ);
МВТЗапрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
МВТЗапрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
МВТЗапрос.УстановитьПараметр("Завод", ВыбЗавод);
МВТЗапрос.МенеджерВременныхТаблиц=МТ;
! | Правила п.6 |
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua