Имя: Пароль:
1C
1С v8
Ерунда с очетом
0 koketka
 
30.11.12
16:17
Написала отчет в отчете сначало выбираю в запросе1 ос по нужному парамтру, а потом в другом запросе2  выбираю всех ос кроме из запроса1,
Может криво звучит но только так получилось сделать так как мне надо.
Вопрос на своем компе отчет делается минуту. На сервер от 1 минуты до 1 часа и всегда поразному один и тот же отчет за один и тот же промежуток времени! Подсккажите почему так?
1 ДенисЧ
 
30.11.12
16:19
gdb dna
2 narayanan
 
30.11.12
16:20
код запроса в студию
3 koketka
 
30.11.12
16:22
ЗапросСписок = Новый Запрос;
   ЗапросСписок.Текст =
   "ВЫБРАТЬ
    |    ЗалогOCСрезПоследних.ОсновноеСредство.Ссылка КАК ОС
    |ИЗ
    |    РегистрСведений.ЗалогOC.СрезПоследних(&датаКон, ) КАК ЗалогOCСрезПоследних
    |ГДЕ
    |    ЗалогOCСрезПоследних.НаходитсяВЗалогеОС = ИСТИНА";
    ЗапросСписок.УстановитьПараметр("ДатаКон",Новый Граница(КонецДня(ДатаКон)));
   
    Выборка = ЗапросСписок.Выполнить().Выгрузить();
   
   СписокОС = Выборка.ВыгрузитьКолонку("ОС");
   ОС=Новый СписокЗначений;
   ОС.ЗагрузитьЗначения(СписокОС);
   ОС.СортироватьПоЗначению();

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

   Запрос.УстановитьПараметр("ДатаКон",Новый Граница(КонецДня(ДатаКон)));
   Запрос.УстановитьПараметр("Список", ОС);
   Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("01.01"));
   Запрос.УстановитьПараметр("Счет1", ПланыСчетов.Хозрасчетный.НайтиПоКоду("02.01"));

   Результат = Запрос.Выполнить();
4 НЕА123
 
30.11.12
16:25
мдя. (с)
5 koketka
 
30.11.12
16:26
что скажите?
6 koketka
 
30.11.12
16:27
вы скажите почему на в одном запросе - у меня там терялись данные а так все выводится
7 koketka
 
30.11.12
16:28
я думаю что дело в списке , но почему такие тормоза и всегда разное время выполнения отчета
8 narayanan
 
30.11.12
16:31
По идее вложенный запрос нужно делать или временную таблицу, но как не знаю. Потому что во воторой запрос идет список из таблицы значений, вот там и проблема мне кажется
9 koketka
 
30.11.12
16:35
я тоже примерное на это грешу  - но не понятно почему так?
10 narayanan
 
30.11.12
16:35
(9) да я не знаю, может кто-нить ответит
11 learn1c
 
30.11.12
16:41
Может быть убрать:
|ГДЕ
|    (НЕ ХозрасчетныйОстатки.Субконто1.Ссылка В (&Список))

и сделать фильтр сразу в виртуальной таблице:
|    РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаКон, Счет = &Счет, ,Субоконто1 НЕ В (&Список)) КАК ХозрасчетныйОстатки
12 koketka
 
30.11.12
16:43
попробую
13 palpetrovich
 
30.11.12
16:44
(0) "от 1 минуты до 1 часа" - наверное надо таки сделать замер производительности
и ВЫБОР... может заменить лучше на такое?
(ХозрасчетныйОстатки.СуммаОстатокДт - ЕСТЬNULL(ХозрасчетныйОстатки1.СуммаОстатокКт,0)) КАК Поле1
14 narayanan
 
30.11.12
16:46
Функция ЕСТЬNULL является свернутым ВЫБОР…КОНЕЦ, но ЕСТЬNULL предпочтительнее, не должен сильно влиять на скорость
15 palpetrovich
 
30.11.12
16:47
(14) а кто спорит? (13) - читабельнее по любому :)
16 koketka
 
30.11.12
16:48
(13) хорошо попробую просто сейчас на сервере опять 1 минуту выполняется в понедельник поэксперементирую когда будет много пользователей
Если у кого будут мысли пишите я попробую
18 Vladal
 
30.11.12
16:56
А что значит "на своём компе"? В файловой базе локально, файловой по сети или клиент-сервер?
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой