Имя: Пароль:
1C
1С v8
Как поставить такое условие?
0 SherifSP
 
05.08.13
12:38
Вот условие запроса:
    |ГДЕ
    |    АнулированныеДокументы.Документ В(&СписокДокументов)";

    
    АнулированныеДокументы = РегистрыСведений.АнулированныеДокументы.СрезПоследних(ТекущаяДата()как поставить в этом месте в Списке из документов?);
1 chelentano
 
05.08.13
12:39
(0) рекомендую конструктор запросов
2 Cube
 
05.08.13
12:39
(0) Конструктор запросов видел? А зря...
3 Maxus43
 
05.08.13
12:41
Документ В(&СписокДокументов). Не хватает чтоли?
4 Shurjk2
 
05.08.13
12:41
Вместо &СписокДокументов Формируй запрос.
5 Godofsin
 
05.08.13
12:42
Кстати, а если в структуру отбора передать массив ссылок, отбор отработает?
6 SherifSP
 
05.08.13
12:42
И как я получу преимущество по скорости в сравнении с 1 вариантом?
7 Shurjk2
 
05.08.13
12:44
(6) Один большой запрос  лучше чем два маленьких.
8 zladenuw
 
05.08.13
12:44
(6) так сделай 2 запроса и посмотри по замеру.
9 zladenuw
 
05.08.13
12:45
АнулированныеДокументы.Документ , тут составной тип или нет ?
10 SherifSP
 
05.08.13
12:45
+(6) В первом варианте могу в параметр условие запихнуть, это даст еще не большой прирост, но второй метод на много быстрее отрабатывает когда выбрать все документы без отбора, но чем больше документов в регистре тем дольше будит отрабатывать второй метод и в конце концов когда то будит дольше отрабатывать нежели первый вариант.
11 Shurjk2
 
05.08.13
12:46
(10) Почему дольше?
12 SherifSP
 
05.08.13
12:46
(9) Нет
13 SherifSP
 
05.08.13
12:47
(11) Потому что регистр будет расти
14 zladenuw
 
05.08.13
12:47
(10) так выборку где получаешь список документов. делай в ВТ, и передавай вт в выборку в запросе будет условие
АнулированныеДокументы.Документ В (Выбрать ВТ.Д Из ВТ КАк ВТ), где ВТ твой список документов. можно вообще запрос написать. без использование ВТ. хотя после выполнения можно ВТ удалить, что уменьшит объем использованных данных
15 SherifSP
 
05.08.13
12:48
(14) Сейчас попробую
16 zladenuw
 
05.08.13
12:53
(15) примерно так.
без ВТ
ВЫБРАТЬ
    РаботникиСрезПоследних.Период
ИЗ
    РегистрСведений.Работники.СрезПоследних(
            ,
            Регистратор В
                (ВЫБРАТЬ
                    ЗаказПокупателя.Ссылка
                ИЗ
                    Документ.ЗаказПокупателя КАК ЗаказПокупателя
                ГДЕ
                    ЗаказПокупателя.Проведен)) КАК РаботникиСрезПоследних

с ВТ
                     ВЫБРАТЬ
    ЗаказПокупателя.Ссылка
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
    ЗаказПокупателя.Проведен
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    РаботникиСрезПоследних.Период
ИЗ
    РегистрСведений.Работники.СрезПоследних(
            ,
            Регистратор В
                (ВЫБРАТЬ
                    ВТ.Ссылка
                ИЗ
                    ВТ КАК ВТ)) КАК РаботникиСрезПоследних
;

////////////////////////////////////////////////////////////////////////////////
УНИЧТОЖИТЬ ВТ
17 SherifSP
 
05.08.13
12:56
АнулированныеДокументы = РегистрыСведений.АнулированныеДокументы.СрезПоследних(ТекущаяДата(),"ВЫБРАТЬ АнулированныеДокументы.Документ ИЗ РегистрСведений.АнулированныеДокументы КАК АнулированныеДокументы ГДЕ АнулированныеДокументы.Документ В(&СписокДокументов)"); эта выборка выполняется - 005,54

А запрос 028,06, можете посчитать в сколько раз быстрее первый вариант отработал, спасибо за помощь))
18 Cube
 
05.08.13
13:00
(17) Я ничего не понял, но замеры ты сделал не верно. Быстрее запроса, только свет...
19 SherifSP
 
05.08.13
13:00
+(17) при переборе строк в форме списка, это хорошая оптимизация
20 SherifSP
 
05.08.13
13:00
(18) Почему не верно?
21 Cube
 
05.08.13
13:01
(19) Это всё в цикле? Расстрелять!
22 SherifSP
 
05.08.13
13:01
(18) Не всегда запрос может дать хорошее преимущество по скорости
23 Cube
 
05.08.13
13:01
(20) Повторю, быстрее запроса, только свет.
24 Cube
 
05.08.13
13:01
(22) Сначала докажи, потом утверждай.
25 zladenuw
 
05.08.13
13:02
(19) брр. так низя так делать. лучше получать таблицу всю при открытии. а уже в ней поиск делать. у тебя же запрос в цикле при вывиде строк. на мисте где то был пример. что табличку кешируют. а потом по ней ищют
26 SherifSP
 
05.08.13
13:02
(21) Нет в событии ПриПолученииДанных  

СписокДокументов = Новый СписокЗначений;
    Для Каждого ОформлениеСтроки Из ОформленияСтрок Цикл
        ДанныеСтроки = ОформлениеСтроки.ДанныеСтроки;
        Документ = ДанныеСтроки.Ссылка;
        СписокДокументов.Добавить(Документ);
    КонецЦикла;

потом этот список передается в запрос
27 zladenuw
 
05.08.13
13:02
(25) там пример с ценами и номенклатурой.
28 Cube
 
05.08.13
13:03
(26) Ну, а дальше что? Покажи, какой кусок кода работает быстрее запроса...
29 zladenuw
 
05.08.13
13:04
(26) и потом  второй цикл где выводишь или что ты там делаешь?
30 SherifSP
 
05.08.13
13:04
Сейчас скину скрин
31 SherifSP
 
05.08.13
13:10
32 zladenuw
 
05.08.13
13:11
(31) так ты так же в 1 запросе не используешь срез последних. сделай запрос как я тебе показывал. должно быть быстрее
33 Cube
 
05.08.13
13:12
(31) Ага, молоток, сравнил попу с пальцем... А теперь перепиши запрос на виртуальную таблицу СрезПоследних и условие из конструкции ГДЕ перенеси в параметры виртуальной таблицы...
34 SherifSP
 
05.08.13
13:13
(33) Надо проверить данные, потом переписать, РС не периодический
35 Cube
 
05.08.13
13:14
(34) Да что ты говоришь.... Говоришь, говоришь... И тут же пишешь: РегистрыСведений.АнулированныеДокументы.СрезПоследних(ТекущаяДата()... Это как?
36 SherifSP
 
05.08.13
13:15
(35) хз, сейчас данные буду проверять
37 SherifSP
 
05.08.13
13:17
Да, ошибся не дочитал СП(

Примечание:
Применим только для периодических регистров сведений.
38 zladenuw
 
05.08.13
13:24
(17) тогда как ты делал замени срезпоследних, на получить. хотя не понимаю там же структуру передавать надо,А ты запрос пихаешь. это как ? фича ? :)
39 SherifSP
 
05.08.13
13:24
(38) Да)
40 zladenuw
 
05.08.13
13:30
(39) прикольно буду знать. а то в сп, что можно только на равенство передать отбор
41 SherifSP
 
05.08.13
13:39
Как тогда уважаемый Cube объяснит такую ситуацию?))
http://fotohost.kz/images/2013/08/05/cBfZ.png
42 SherifSP
 
05.08.13
13:42
Судя по (41) быстрее запроса может быть обычная выборка, а потом только свет))
43 Cube
 
05.08.13
13:46
(41) А теперь поставь второй вариант до запроса и повтори замер.
44 Cube
 
05.08.13
13:49
Я через 5 минут ухожу, давай быстрее)
45 SherifSP
 
05.08.13
13:50
46 viktor_vv
 
05.08.13
13:50
И у меня такое чувство, что РегситрСведений.Выбрать() открывает что-то типа курсора, а не полностью запрос вывролняет с выборкой всех данных.
47 viktor_vv
 
05.08.13
13:52
Ты бы еще сравнил с поиском по выборке и по результату запроса.
48 Cube
 
05.08.13
13:53
(45) Хм... Может он у тебя результат твоего кода закешировал уже? Странно как-то...
49 SherifSP
 
05.08.13
13:54
(48) Проверишь как то у себя )
50 SherifSP
 
05.08.13
13:56
(47) Как?
51 viktor_vv
 
05.08.13
14:01
(50) Р В разные переменные закинь выборку из регистра и выборка из запроса. И в цикле ищи и там и там.
52 SherifSP
 
05.08.13
14:08
(51) А по выборке поиск можно делать?
53 Полотенчик
 
05.08.13
14:10
(41) Выбрать() в объекте не получает все данные как в запросе, а отрывает выборку. Дальше когда будет Следующий() объектная выборка будет их базы выбирать по 25 записей.
54 SherifSP
 
05.08.13
14:12
(53) Прикольно)
55 viktor_vv
 
05.08.13
14:13
(53) О, ну примерно так я предполагал. Причем получать будет, по идее все поля регистра, а не только те которые нужны.
56 SherifSP
 
05.08.13
14:14
(55) Ну да
57 Полотенчик
 
05.08.13
14:25
(55) Да, все поля, реквизиты, табличные части и пр., ну и, соответственно, кешировать это все.
58 m-serg74
 
05.08.13
15:05
а что так можно делать?

АнулированныеДокументы = РегистрыСведений.АнулированныеДокументы.СрезПоследних(ТекущаяДата(),"ВЫБРАТЬ АнулированныеДокументы.Документ ИЗ РегистрСведений.АнулированныеДокументы КАК АнулированныеДокументы ГДЕ АнулированныеДокументы.Документ В(&СписокДокументов)");
59 Полотенчик
 
05.08.13
15:25
(58) Вообще-то должен ругаться что передается не структура, а строка...
60 Полотенчик
 
05.08.13
15:28
(59) Собственно да, ругается.

{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(1)}: Ошибка при вызове метода контекста (СрезПоследних)
по причине:
{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(1)}: Ошибка при вызове метода контекста (СрезПоследних)

по причине:
Несоответствие типов (параметр номер '2')
61 m-serg74
 
05.08.13
15:38
(59) да собственно, вопрос больше был с сарказмом, ибо это не просто строка, а чушь какая то... или я отстал от жизни
62 Aprobator
 
05.08.13
15:44
(60) второй параметр там действительно крутой.
63 Cube
 
06.08.13
07:33
Ладно, шутки в сторону. Начинается махач!)))

Файловая ИБ:
--------------- Выборка 1 ---------------
Время выборки 0,999 сек. Время обработки 0,093 сек. Итого время 1,092 сек.
Время выборки 0,094 сек. Время обработки 0,078 сек. Итого время 0,172 сек.
Время выборки 0,094 сек. Время обработки 0,083 сек. Итого время 0,177 сек.
Время выборки 0,093 сек. Время обработки 0,078 сек. Итого время 0,171 сек.
Время выборки 0,094 сек. Время обработки 0,078 сек. Итого время 0,172 сек.
Время выборки 0,078 сек. Время обработки 0,094 сек. Итого время 0,172 сек.
Время выборки 0,078 сек. Время обработки 0,093 сек. Итого время 0,171 сек.
Время выборки 0,078 сек. Время обработки 0,094 сек. Итого время 0,172 сек.
Время выборки 0,094 сек. Время обработки 0,078 сек. Итого время 0,172 сек.
Время выборки 0,093 сек. Время обработки 0,081 сек. Итого время 0,174 сек.
--------------- Выборка 2 ---------------
Время выборки 0,018 сек. Время обработки 13,139 сек. Итого время 13,157 сек.
Время выборки 0,000 сек. Время обработки 13,050 сек. Итого время 13,050 сек.
Время выборки 0,000 сек. Время обработки 13,087 сек. Итого время 13,087 сек.
Время выборки 0,000 сек. Время обработки 13,271 сек. Итого время 13,271 сек.
Время выборки 0,000 сек. Время обработки 13,452 сек. Итого время 13,452 сек.
Время выборки 0,000 сек. Время обработки 13,444 сек. Итого время 13,444 сек.
Время выборки 0,015 сек. Время обработки 13,472 сек. Итого время 13,487 сек.
Время выборки 0,000 сек. Время обработки 13,497 сек. Итого время 13,497 сек.
Время выборки 0,000 сек. Время обработки 13,490 сек. Итого время 13,490 сек.
Время выборки 0,000 сек. Время обработки 13,519 сек. Итого время 13,519 сек.
------------------------------
В выборках участвовало 9 634 записей.
------------------------------

Клиент-серверная ИБ:
--------------- Выборка 1 ---------------
Время выборки 0,109 сек. Время обработки 0,031 сек. Итого время 0,140 сек.
Время выборки 0,078 сек. Время обработки 0,032 сек. Итого время 0,110 сек.
Время выборки 0,078 сек. Время обработки 0,031 сек. Итого время 0,109 сек.
Время выборки 0,062 сек. Время обработки 0,031 сек. Итого время 0,093 сек.
Время выборки 0,078 сек. Время обработки 0,032 сек. Итого время 0,110 сек.
Время выборки 0,078 сек. Время обработки 0,031 сек. Итого время 0,109 сек.
Время выборки 0,078 сек. Время обработки 0,031 сек. Итого время 0,109 сек.
Время выборки 0,062 сек. Время обработки 0,047 сек. Итого время 0,109 сек.
Время выборки 0,063 сек. Время обработки 0,046 сек. Итого время 0,109 сек.
Время выборки 0,063 сек. Время обработки 0,031 сек. Итого время 0,094 сек.
--------------- Выборка 2 ---------------
Время выборки 0,046 сек. Время обработки 3,208 сек. Итого время 3,254 сек.
Время выборки 0,000 сек. Время обработки 2,490 сек. Итого время 2,490 сек.
Время выборки 0,000 сек. Время обработки 2,459 сек. Итого время 2,459 сек.
Время выборки 0,000 сек. Время обработки 2,455 сек. Итого время 2,455 сек.
Время выборки 0,000 сек. Время обработки 2,501 сек. Итого время 2,501 сек.
Время выборки 0,000 сек. Время обработки 2,475 сек. Итого время 2,475 сек.
Время выборки 0,000 сек. Время обработки 2,427 сек. Итого время 2,427 сек.
Время выборки 0,000 сек. Время обработки 2,455 сек. Итого время 2,455 сек.
Время выборки 0,000 сек. Время обработки 2,444 сек. Итого время 2,444 сек.
Время выборки 0,000 сек. Время обработки 2,470 сек. Итого время 2,470 сек.
------------------------------
В выборках участвовало 9 634 записей.
------------------------------

Исходные данные:
ИБ: УПП 1.3.41.2.
Платформа: 8.2.18.109.
Комп для фаловой ИБ: Win7 x32, Intel Core2Quad Q8200 2.33 GHz, 2Gb ОЗУ, Диск WDC WD3200AAKS-00L9A0 ATA Device
СУБД для клиент-серверной ИБ: MSSQL

Код обработки:


Процедура КнопкаВыполнитьНажатие(Кнопка)
    
    КоличествоПовторов = 10;
    
    Сообщить("--------------- Выборка 1 ---------------");
    Для Сч = 1 По КоличествоПовторов Цикл
        Точка0 = ТекущаяУниверсальнаяДатаВМиллисекундах();
        Запрос = Новый Запрос("ВЫБРАТЬ
                              |    КонтактнаяИнформация.Объект
                              |ИЗ
                              |    РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация");
        Выборка1 = Запрос.Выполнить().Выбрать();
        Точка1 = ТекущаяУниверсальнаяДатаВМиллисекундах();
        Пока Выборка1.Следующий() Цикл
            ТекОбъект1 = Выборка1.Объект;
        КонецЦикла;
        Точка2 = ТекущаяУниверсальнаяДатаВМиллисекундах();
        Сообщить("Время выборки " + Формат((Точка1 - Точка0) / 1000, "ЧДЦ=3; ЧН=; ЧГ=") + " сек. Время обработки " + Формат((Точка2 - Точка1) / 1000, "ЧДЦ=3; ЧН=; ЧГ=") + " сек. Итого время " + Формат((Точка2 - Точка0) / 1000, "ЧДЦ=3; ЧН=; ЧГ=") + " сек.");
    КонецЦикла;
    
    Сообщить("--------------- Выборка 2 ---------------");
    
    Для Сч = 1 По КоличествоПовторов Цикл
        Точка0 = ТекущаяУниверсальнаяДатаВМиллисекундах();
        Выборка2 = РегистрыСведений.КонтактнаяИнформация.Выбрать();
        Точка1 = ТекущаяУниверсальнаяДатаВМиллисекундах();
        Пока Выборка2.Следующий() Цикл
            ТекОбъект1 = Выборка2.Объект;
        КонецЦикла;
        Точка2 = ТекущаяУниверсальнаяДатаВМиллисекундах();
        Сообщить("Время выборки " + Формат((Точка1 - Точка0) / 1000, "ЧДЦ=3; ЧН=; ЧГ=") + " сек. Время обработки " + Формат((Точка2 - Точка1) / 1000, "ЧДЦ=3; ЧН=; ЧГ=") + " сек. Итого время " + Формат((Точка2 - Точка0) / 1000, "ЧДЦ=3; ЧН=; ЧГ=") + " сек.");
    КонецЦикла;
    
    Сообщить("------------------------------");
    Сообщить("В выборках участвовало " + Выборка1.Количество() + " записей.");
    Сообщить("------------------------------");
    
КонецПроцедуры //КнопкаВыполнитьНажатие()


Вывод: Запросы рулят и педалят =))
64 Aprobator
 
06.08.13
10:16
(63) ща придет Костя и прострелит тебе коленку.
65 SherifSP
 
06.08.13
10:44
(63) Обработка данных у выборки хуже, но выборка данных лучше)
66 SherifSP
 
06.08.13
10:45
(58) В 8.1 не ругается на 2 параметр, просто возвращает неопределено
67 Cube
 
06.08.13
10:47
(65) Да ты смотри на ИТОГО. А итого, запрос быстрее выборки на файловой ИБ в 78 раз, в клиент-серверной ИБ в 23 раза...
Так что, как ни крути...
68 SherifSP
 
06.08.13
10:48
(67) Время обработки, это обработка данных в цикле?
69 Cube
 
06.08.13
10:50
(68) Да, по коду видно же.
70 Cube
 
06.08.13
10:50
(64) Обоснуй.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс