Версия для печати темы (https://pro1c.org.ua/index.php?showtopic=19341)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Менеджер временных таблиц. Проблема при аварийном завершении

Автор: Zlyukka 14.08.14, 10:53

При написании отчета была необходимость в использовании менеджера временных таблиц. И вот отчет написан, все работает, но есть как обычно «НО» при аварийном закрытии 1с при запущенном отчете , SQL виснет. Помогите пожалуйста.

Автор: Kashemir 14.08.14, 11:17

Очевидно SQL залипает на выполнении запроса. Аварийный срыв клиента в данной ситуации не играет роли - поскольку управление до завершения запроса будет оставаться на сервере.
Так что скорее всего проблема в запросе.

Автор: Zlyukka 14.08.14, 11:26

Согласен запрос тяжёлый, но проблема в том, что прервать запрос, если пользователь ошибся, к примеру с датой я не знаю как.

Автор: Kashemir 14.08.14, 11:32

Цитата(Zlyukka @ 14.08.14, 12:26) *
Согласен запрос тяжёлый, но проблема в том, что прервать запрос, если пользователь ошибся, к примеру с датой я не знаю как.


Если на SQL то остается только ждать. Лучше не допускать ситуации с выполнение таких неподъемных запросов.

Автор: Zlyukka 14.08.14, 11:36

Спасибо Вам. Значит будим ограничивать периоды.

Автор: Kashemir 14.08.14, 11:44

Возможно стоит поработать над вопросом оптмизации запроса.

Автор: Zlyukka 14.08.14, 11:58

Давайте попробуем

МТ=Новый МенеджерВременныхТаблиц;
    Условие="";
    Если не ВыбЗавод.Пустая() Тогда
            Условие="
            |    И Товары.Завод = &Завод";
    КонецЕсли;
    МВТЗапрос=Новый Запрос("ВЫБРАТЬ
                           |    ТЗ.Период
                           |ПОМЕСТИТЬ Дни
                           |ИЗ
                           |    &ТЗ КАК ТЗ
                           |;
                           |
                           |////////////////////////////////////////////////////////////////////////////////
                           |ВЫБРАТЬ
                           |    ДНИ.Период КАК Период,
                           |    СУММА(ВЫБОР
                           |            КОГДА Движения.Период = &ДатаС
                           |                ТОГДА Движения.КолКонечныйОстаток - ВЫБОР
                           |                        КОГДА РезервыТоваровОстаткиИОбороты.КолКонечныйОстаток ЕСТЬ NULL
                           |                            ТОГДА 0
                           |                        ИНАЧЕ РезервыТоваровОстаткиИОбороты.КолКонечныйОстаток
                           |                    КОНЕЦ
                           |            ИНАЧЕ ВЫБОР
                           |                    КОГДА Движения.Период <= ДНИ.Период
                           |                        ТОГДА Движения.КолОборот
                           |                    ИНАЧЕ 0
                           |                КОНЕЦ
                           |        КОНЕЦ) КАК Кол,
                           |    Товары.Ссылка КАК Товар,
                           |    Товары.Код,
                           |    ВложенныйЗапрос.ДатаСозд КАК ДатаСозд,
                           |    МАКСИМУМ(Серии.Ссылка) КАК Ссылка1
                           |ИЗ
                           |    Дни КАК ДНИ,
                           |    Справочник.Серии КАК Серии
                           |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                           |            Серии.Владелец КАК Владелец,
                           |            МАКСИМУМ(Серии.ДатаСозд) КАК ДатаСозд
                           |        ИЗ
                           |            Справочник.Серии КАК Серии
                           |        ГДЕ
                           |            Серии.Опт1 > 0
                           |            И Серии.РознЦена > 0
                           |        
                           |        СГРУППИРОВАТЬ ПО
                           |            Серии.Владелец) КАК ВложенныйЗапрос
                           |            ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
                           |                ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.ОстаткиИОбороты(&ДатаС, &ДатаПо, День, , ) КАК Движения
                           |                    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.РезервыТоваров.ОстаткиИОбороты(&ДатаС, &ДатаПо, День, , ) КАК РезервыТоваровОстаткиИОбороты
                           |                    ПО Движения.Товар = РезервыТоваровОстаткиИОбороты.Товар
                           |                        И Движения.Период = РезервыТоваровОстаткиИОбороты.Период
                           |                ПО (Движения.Товар = Товары.Ссылка)
                           |            ПО (Товары.Ссылка = ВложенныйЗапрос.Владелец)
                           |        ПО (ВложенныйЗапрос.ДатаСозд = Серии.ДатаСозд)
                           |            И (ВложенныйЗапрос.Владелец = Серии.Владелец)
                           |ГДЕ
                           |    Серии.Опт1 > 0
                           |    И Серии.РознЦена > 0
                           |    И Товары.ПометкаУдаления <> ИСТИНА  "+Условие+"
                          
                           |
                           |СГРУППИРОВАТЬ ПО
                           |    ДНИ.Период,
                           |    Товары.Ссылка,
                           |    Товары.Код,
                           |    ВложенныйЗапрос.ДатаСозд
                           |
                           |УПОРЯДОЧИТЬ ПО
                           |    Товары.Наименование
                           |ИТОГИ
                           |    СУММА(ВЫБОР
                           |            КОГДА Кол > 0
                           |                ТОГДА 0
                           |            ИНАЧЕ 1
                           |        КОНЕЦ) КАК Кол,
                           |    МАКСИМУМ(ДатаСозд),
                           |    МАКСИМУМ(Ссылка1)
                           |ПО
                           |    Товар");
    МВТЗапрос.УстановитьПараметр("ТЗ", ТЗ);
    МВТЗапрос.УстановитьПараметр("ДатаС", НачалоДня(ДатаС));
    МВТЗапрос.УстановитьПараметр("ДатаПо", КонецДня(ДатаПо));
    МВТЗапрос.УстановитьПараметр("Завод", ВыбЗавод);
    МВТЗапрос.МенеджерВременныхТаблиц=МТ;

Коротко о задаче: Отчет должен вернуть количество дней, когда чистый остаток на складе был =0. Также в отчет выводятся Закупочная цена и оптовая цена

 ! 

Правила п.6
 

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua