Имя: Пароль:
1C
1С v8
Помогите оптимизировать запрос.
0 MiniMuk
 
21.11.13
06:27
Много людей пишут с такой же просьбой, может и мне поможете.
Есть база, в ней есть номеклатура. По номеклатуре ведется учет по сериям.
Причем учет хитрый, есть номеклатура с серийником если ее(энту номенклатуру) подшаманить она вроде та же, с тем

же отпечатанным серийником, но чтобы их отличить в новый сертийник (как вариан старый серийник) добавляем циферку

1, или 2 если второй раз шаминим
в итоге получаем изделение 1 с сериником 3456, подшаминили стало 13456.
Теперь народ хочет знать а какой документ по этому серийнику последний, продажа, премещение или еще какая беда.
Был запрос

"ВЫБРАТЬ
|    СерииНоменклатуры.Ссылка
|ПОМЕСТИТЬ всесерии
|ИЗ
|    Справочник.СерииНоменклатуры КАК СерииНоменклатуры
|ГДЕ
|    СерииНоменклатуры.Наименование ПОДОБНО ""%"" + &всесерии
|    И СерииНоменклатуры.ПометкаУдаления = ЛОЖЬ
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
|    Реализация.Ссылка.Ссылка КАК Документ,
|    Реализация.Канал,
|    Реализация.Дата КАК Дата,
|    Реализация.СерияНоменклатуры,
|    Реализация.Куда
|ИЗ
|    (ВЫБРАТЬ ПЕРВЫЕ 1
|        РеализацияТоваровУслугТовары.Ссылка КАК Ссылка,
|        ""Оптовая продажа"" КАК Канал,
|        РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата,
|        РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Куда,
|        РеализацияТоваровУслугТовары.СерияНоменклатуры КАК СерияНоменклатуры
|    ИЗ
|        Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|    ГДЕ
|        РеализацияТоваровУслугТовары.СерияНоменклатуры В
|                (ВЫБРАТЬ
|                    всесерии.Ссылка
|                ИЗ
|                    всесерии)
|        И РеализацияТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
|        И НЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент В (&Контрагенты)
|        И РеализацияТоваровУслугТовары.Ссылка.Дата < &Дата
|    
|    СГРУППИРОВАТЬ ПО
|        РеализацияТоваровУслугТовары.Ссылка,
|        РеализацияТоваровУслугТовары.Ссылка.Дата,
|        РеализацияТоваровУслугТовары.Ссылка.Контрагент,
|        РеализацияТоваровУслугТовары.СерияНоменклатуры
|    
|    УПОРЯДОЧИТЬ ПО
|        Дата УБЫВ) КАК Реализация
|
|ОБЪЕДИНИТЬ ВСЕ
...и так далее
[\1c]
выбирающий для серийника документы по определенному списку. Беда в том что это в цикле для каждого серийника, при

числе более тысчи около 3-4 часов. Загрузить несколько потому что отбор идет по дате и нужен первый документ, при

загруке 2 сериников, надетеся только 1 докумет для последнего сериника.
Ну почесал  я репу, значит и изваял следующее

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

(&Контрагенты)
|                            ТОГДА ЛОЖЬ
|                        ИНАЧЕ ""Оптовая продажа""
|                    КОНЕЦ
.... тут идет ужасный список нужных документов
|        КОНЕЦ КАК Канал
|    ИЗ
|        РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(
|                ,
|                &Дата,
|                Регистратор,
|                Движения,
|                СерияНоменклатуры.Наименование ПОДОБНО ""%"" + &всесерии
|                    И СерияНоменклатуры.ПометкаУдаления = ЛОЖЬ) КАК

ТоварыНаСкладахОстаткиИОбороты) КАК ВложенныйЗапрос
|ГДЕ
|    ВложенныйЗапрос.Канал <> ЛОЖЬ";
[\1c]
Так вот, дочитавшие товарищи, беду у меня, нифига это не быстрее. Ну как, бы если взять к примеру 600 серий
первый цикл отрабо
тал за 1315 сек а второй за 1224
Вот как бы умные люди, мож че подскажите?
1 Лаврентий Берия
 
21.11.13
07:20
.... тут идет ужасный список нужных документов
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Снизить степень ужаса. Возможно, заменить ужас на обычный страх, простой стрём или на лёгонькую паранойю.
2 Ярус
 
21.11.13
07:22
нах в цикле? формируешь тз серийников передаешь в запрос, дальшеообъединяешь с реализациями
3 MiniMuk
 
21.11.13
07:22
(1) хм, может напивсать список ужасно нужных документов?
4 Noob_Of_1C
 
21.11.13
07:24
может сделать журнал ужасных документов и запрос вести к журналу?
5 MiniMuk
 
21.11.13
07:25
(2) я писал между двумя запросами но повторяю. мне надо найти последний документ для серийника 2222, 3333, 4444
в цикле нахожу для 2222 потом для 3333 и тд.
если в запросе я ищу выбрать

ВЫБРАТЬ ПЕРВЫЕ 1
из
списокдокументов
где серийник в (&списоксериников)

то нахожу 1 документ
6 MiniMuk
 
21.11.13
07:26
(4) мне уже кажется эта идея здравой
7 Ярус
 
21.11.13
07:31
(5) ты не понимаешь разницу того что я тебе написал, и того что тв придумал в (5) ?
8 Ярус
 
21.11.13
07:33
если ты делаешь по левлму соед. с серийниками и находишь макс по дате то это будет на каждую строку, а в твлем случае это на всю таблицу
9 MiniMuk
 
21.11.13
07:33
(7) про тз понял, про как сделать запрос не понял
10 MiniMuk
 
21.11.13
07:36
(8) хорошо, вспоминаем про модифицированную номеклатур
нашел документ возврат постащику 01.04.13 с сериником 222 иперемещение на точку сериник 1222 от 01.05.15
как отобрать втрой документ?
11 Ярус
 
21.11.13
07:38
(10) а в тз серийников то оба надо загнать
12 MiniMuk
 
21.11.13
07:38
чтото типа
выбрать
*
из
возвратытовары,
продажитовары,
перемещениятовары
левое соединение по тзсериники
13 MiniMuk
 
21.11.13
07:39
(11) оба занал, по обоим получил документ. а нужен 1 документ
14 MiniMuk
 
21.11.13
07:40
(11) поясню, это симки, вовращаю опратору на перепрошивку получаю другую номеклатур, совем но с тем же сериником, тоесть для опратора это один и тот же сериник для нас новый.
надо оследить движение по серинику оператора
15 Ярус
 
21.11.13
07:40
(13) вот в 10 ты говоришь 2 надо а в 13 тебе уже 1
16 MiniMuk
 
21.11.13
07:41
(15) а 10 говорил что надо отобрать второй документ, тобишь один, первый не нужен
17 Noob_Of_1C
 
21.11.13
07:44
хз, может прокатит что то типа этого

ВЫБРАТЬ
    Журнал.Ссылка КАК Ссылка,
    Журнал.Товары.(Серийник КАК Серийник) КАК Товары
ПОМЕСТИТЬ
    ВременнаяВсеДоки
ИЗ
    ЖурналДокументов.Журнал1 КАК Журнал
;
ВЫБРАТЬ
    ТЧТовары.Ссылка КАК Ссылка
ИЗ
    ВременнаяСерийники КАК Серийники    
    ЛЕВОЕ СОЕДИНЕНИЕ
        ВременнаяВсеДоки.Товары КАК ТЧТовары
    ПО
        ТЧТовары.Серийник = Серийники.Серийник
18 MiniMuk
 
21.11.13
07:50
туплю
это как
    Журнал.Товары.(Серийник КАК Серийник) КАК Товары
19 Noob_Of_1C
 
21.11.13
07:52
(18) уже никак....здесь журналы не прокатят вроде так как к ТЧ обращаться нужно =(
20 MiniMuk
 
21.11.13
07:53
а вообще это что за конструкция?
21 Noob_Of_1C
 
21.11.13
07:56
(20) получение табчасти
22 asady
 
21.11.13
09:47
(0)тебе нужно найти последние регистраторы по каждому каналу?
или вообще по серийнику???
23 MiniMuk
 
21.11.13
11:58
(22) не совсем понял, по каждому серинику причем 222 и 1222 считать за один серийник
24 viktor_vv
 
21.11.13
12:22
Получи во временную таблицу список всех регитсраторов из регистра по всем твоим сериям, а потом

http://kb.mista.ru/article.php?id=92
25 viktor_vv
 
21.11.13
12:28
Временная таблица с полями

СсылкаНаДокумент ,
ДатаДокумента,
Серия

Потом что-то типа

Выбрать
   ВремСерияИДокументы.Серия КАК Серия,
   Макисмум(ВремСерияИДокументы.СсылкаНаДокумент) КАК Документ,
ИЗ
  ВремСерияИДокументы КАК ВремСерияИДокументы
  Вунтреннее соединение
    (Выбрать
       ВремСерияИДокументы2.Серия КАК Серия,
       Максимум(ВремСерияИДокументы2.ДатаДокумента) КАК ДатаДокумента
     ИЗ
     ВремСерияИДокументы КАК ВремСерияИДокументы2
     Сгруппировать ПО ВремСерияИДокументы2.Серия
    ) КАК Вложенный
     ПО Вложенный.Серия = ВремСерияИДокументы.Серия
        И Вложенный.ДатаДокумента = ВремСерияИДокументы.ДатаДокумента

Сгруппировать ПО ВремСерияИДокументы.Серия
26 viktor_vv
 
21.11.13
12:30
(25)+ Сразу одним запросом по всем сериям необходимым.