Имя: Пароль:
1C
1С v8
Получить дату последней реализации каждого контрагента
0 yur4egg
 
22.12.15
12:18
v8: v8: выборка последних документов по контрагентам
Тема рассмотрена здесь, но у меня вопрос о быстродействии: на базе (длительность ведения около 1 года) отрабатывает 2 минуты. Говорят, что это слишком долго. Можно ли как-то оптимизировать ? Так и хочется привести здесь какую-то манипуляцию с ВЫБРАТЬ ПЕРВЫЕ 1 только не могу догнать как ))
1 mehfk
 
22.12.15
12:21
Выкинь пентиум 3 1999 года и купи нормальный сервер.
2 salvator
 
22.12.15
12:25
Условия поставь дополнительные, например, по дате.
3 senior
 
22.12.15
12:28
(0) запрос напиши, думаю неск секунд
4 salvator
 
22.12.15
12:30
(0) Покажи свой запрос.
5 sash-ml
 
22.12.15
12:42
по ссылке в (0) не даты а последние документы, оттого такая печаль
6 Мимохожий Однако
 
22.12.15
12:45
Получить дату последней реализации - это скорее всего только начало задачи. Когда озвучена задача полностью, то может оказаться, что уже есть готовый регистр для решения.
7 Web00001
 
22.12.15
12:51
(0)Дык это, запрос покажи.
ХЗ чо там,

ВЫБРАТЬ
    Продажи.Контрагент,
    МАКСИМУМ(Продажи.Период) КАК Период
ИЗ
    РегистрНакопления.Продажи КАК Продажи

СГРУППИРОВАТЬ ПО
    Продажи.Контрагент

Но вроде отрабатывает шустро и данные похожи на правду.
8 yur4egg
 
22.12.15
12:52
"ВЫБРАТЬ
    |    МАКСИМУМ(ЗаказНаряд.Дата) КАК Дата,
    |    ЗаказНаряд.Контрагент КАК Контрагент
    |ИЗ
    |    Документ.ЗаказНаряд КАК ЗаказНаряд
    |ГДЕ
    |    ЗаказНаряд.Проведен
    |    И ЗаказНаряд.СтатусЗН = &СтатусЗН
    |
    |СГРУППИРОВАТЬ ПО
    |    ЗаказНаряд.Контрагент");

Даже такой отдельный запрос работает 2 мин. Сервер не Пентиум 2 ))

Еще наваял такой запрос:
"ВЫБРАТЬ
    |    ВложенныйЗапрос.Дата КАК Дата,
    |    Контрагенты.Ссылка КАК Контрагент
    |ИЗ
    |    Справочник.Контрагенты КАК Контрагенты
    |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1
    |            ЗаказНаряд.Контрагент КАК Контрагент,
    |            ЗаказНаряд.Дата КАК Дата
    |        ИЗ
    |            Документ.ЗаказНаряд КАК ЗаказНаряд
    |        
    |        УПОРЯДОЧИТЬ ПО
    |            Дата УБЫВ) КАК ВложенныйЗапрос
    |        ПО Контрагенты.Ссылка = ВложенныйЗапрос.Контрагент");

Но это вообще я недождался )) Если бы был в движении периодический регистр сведений, я бы через срезу без проблем взял бы последнюю дату.
9 itlikbez
 
22.12.15
12:54
(8) Думаешь - срез не через запрос работает?
10 salvator
 
22.12.15
12:58
(8) Что за бредятина во втором запросе?
Тебе надо получить максимальную дату на каждого контрагента, используй первый запрос и не городи ерунды.
11 YAGolova
 
22.12.15
13:01
(8) замени вложенный запрос на временную таблицу
12 sash-ml
 
22.12.15
13:08
контрагент небось нескольких типов может быть?
тогда надо его выразить
13 mehfk
 
22.12.15
13:08
(8) А если сделать только так?
ВЫБРАТЬ
    |    МАКСИМУМ(ЗаказНаряд.Дата) КАК Дата,
    |    ЗаказНаряд.Контрагент КАК Контрагент
    |ИЗ
    |    Документ.ЗаказНаряд КАК ЗаказНаряд
    |ГДЕ
    |    ЗаказНаряд.Проведен
    |
    |СГРУППИРОВАТЬ ПО
    |    ЗаказНаряд.Контрагент");
14 yur4egg
 
22.12.15
13:37
Остановился на последнем варианте (13). Работает 75 сек. Всем спасибо за советы!
15 mehfk
 
22.12.15
15:21
(14) А что за конфигурация и какой режим работы, сколько документов данного вида в базе?
16 hhhh
 
22.12.15
15:25
(14) а статусЗН значит не нужен?
17 mehfk
 
22.12.15
15:45
(16) По словам ТС запрос из (13) выполняется 75 секунд, а с условием на статусЗН - две минуты.
Это ужас. Не удивлюсь, что там и документы по пять минут проводятся.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн