Имя: Пароль:
1C
1С v8
Выборка Документов
,
0 ВежливаяТварь
 
05.10.11
15:26
Доброе время суток. Поставили передо мной такую задачу. Нужно в печатную форму вывести все номера расходных накладных(РеализациятоваровУслуг) и долги по ним по определённому контрагенту. Решил что вытяну все его документы "РеализациятоваровУслуг" и вытяну все введённые на основании документы.
И дальше просто буду сверять если введено на основании платёжное поручение входящие или возврат товаров и суммы совпадают то долга нет. И тут возникла проблема. Документы РеализацияТоваровУслуг и введённые на основании их документы вытягиваются, но уж слишком долго, порядка 30- 60 секунд. Подскажите пожалуйста есть ли способ уменьшить затрачиваемое время.
Код:
ЗапросЗадолженности=Новый Запрос ("ВЫБРАТЬ
                                     |    ВзаиморасчетыСКонтрагентамиОбороты.Контрагент,
                                     |    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот,
                                     |    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор КАК Регистратор
                                     |ИЗ
                                     |    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&ДатаНач, &ДатаКон, Регистратор, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиОбороты
                                     |ГДЕ
                                     |    ВзаиморасчетыСКонтрагентамиОбороты.СуммаВзаиморасчетовОборот > 0
                                     |
                                     |УПОРЯДОЧИТЬ ПО
                                     |    Регистратор");
                                     
   ЗапросЗадолженности.УстановитьПараметр("Контрагент",СсылкаНаОбъект.Контрагент);
   ДатаКон=СсылкаНаОбъект.Дата;
   ДатаНач=ДобавитьМесяц(ДатаКон,-12);
   ЗапросЗадолженности.УстановитьПараметр("ДатаНач",ДатаНач);
   ЗапросЗадолженности.УстановитьПараметр("ДатаКон",ДатаКон);

   ДокРеализацияТоваровИУслуг=Документы.РеализацияТоваровУслуг;
   РезультатЗапроса=ЗапросЗадолженности.Выполнить().Выбрать();
   Пока РезультатЗапроса.Следующий() Цикл
       ДокРеализацияТоваровИУслуг=РезультатЗапроса.Регистратор;
       ЗаспроСвязанныхДокументов=Новый Запрос ("ВЫБРАТЬ
           |    СвязанныеДокументы.Ссылка КАК СвязанныеДокументы
           |ИЗ
           |    КритерийОтбора.СвязанныеДокументы(&ДокРеализацияТоваровУслуг) КАК СвязанныеДокументы");
       ЗаспроСвязанныхДокументов.УстановитьПараметр("ДокРеализацияТоваровУслуг",ДокРеализацияТоваровИУслуг);
       РезультатСвязанныхДоков=ЗаспроСвязанныхДокументов.Выполнить().Выбрать();
       Сообщить(Строка(ДокРеализацияТоваровИУслуг)+"  ---Реализация товаров и услуг");
       Пока РезультатСвязанныхДоков.Следующий() Цикл
           Сообщить(Строка(РезультатСвязанныхДоков.СвязанныеДокументы)+"----------------------------связанный документ");
       КонецЦикла;
       Сообщить("====================================================================");
   КонецЦикла;
1 Господин ПЖ
 
05.10.11
15:27
ппц...
2 Господин ПЖ
 
05.10.11
15:27
уволицо нахрен еще задачу не поставили?
3 ВежливаяТварь
 
05.10.11
15:27
Всё так плохо?
4 Нуф-Нуф
 
05.10.11
15:28
взаиморасчеты по документам расчетов вас спасут
5 Нуф-Нуф
 
05.10.11
15:28
Поставь чайник на плиту!
6 ВежливаяТварь
 
05.10.11
15:29
(5)Намек на то что всё на самом делается легко а я изобретаю велосипед причем через попу?
7 Ненавижу 1С
 
гуру
05.10.11
15:29
(0) нет, всё ещё хуже
(4) а если не ведутся? ))
8 Нуф-Нуф
 
05.10.11
15:30
(7) тогда начать вести :)
9 Нуф-Нуф
 
05.10.11
15:30
(6) не, просто фраза и песни прикольная
10 ВежливаяТварь
 
05.10.11
15:31
Узнал взаиморасчеты ведутся. А можно чуть по подробней про них, пожалуйста?
11 Ненавижу 1С
 
гуру
05.10.11
15:32
(10)

ВЫБРАТЬ
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДоговорКонтрагента КАК ДоговорКонтрагента,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом,
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
ИЗ
   РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Остатки(, Контрагент = &Контрагент) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки

УПОРЯДОЧИТЬ ПО
   ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОстатки.ДокументРасчетовСКонтрагентом.МоментВремени
ИТОГИ
   СУММА(СуммаВзаиморасчетовОстаток)
ПО
   ДоговорКонтрагента
12 ВежливаяТварь
 
05.10.11
15:33
Огромное спасибо, сейчас попробую.
13 Ненавижу 1С
 
гуру
05.10.11
15:34
(12) там конечно не все реализации, но как-то так
14 Sheldon
 
05.10.11
15:36
Но в результате этих махинаций получишь только остатки по реализациям, а судя по постановке "и вытяну все введённые на основании документы", то человеку нужны не остатки, а и обороты, чтобы видеть что было оплачено, в полном ли объеме и какими документами
или я не прав?
15 ВежливаяТварь
 
05.10.11
15:42
Нет всё именно так как нужно, там я не совсем корректно выразился. Проверил всё с калькулятором все сходится причем так как надо. Ещё раз спасибо.
16 cViper
 
05.10.11
15:45
(15) Постарайся в будущем запросы в цикле не писать. не правильно это.
17 ВежливаяТварь
 
05.10.11
15:56
(16) Спасибо.Учту.