Имя: Пароль:
1C
1С v8
Объясните зачем такой запрос нужен?
,
0 YF
 
13.05.13
11:17
Есть типовая конфигурация: Учет в управляющих компаниях ЖКХ, ТСЖ и ЖСК.

В ней процедура:

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


Выбираем данные, складываем в виртуальную таблицу, затем выбираем уже из нее ...

Зачем складывать в виртуальную таблицу?
1 mikecool
 
13.05.13
11:18
я против этого
2 YF
 
13.05.13
11:19
(1) Я тоже, вот ищу сакральный смысл действа
3 1Сергей
 
13.05.13
11:20
задел на будующее
4 NewManIn1C
 
13.05.13
11:20
а дальше нигде нет запроса, который выбирает данные по месяцу начисления из виртуальной таблицы?
5 ptiz
 
13.05.13
11:20
Либо сначала задумывали группировку по МесяцНачисления, либо... фиг знает.
6 viktor_vv
 
13.05.13
11:23
(4) Насколько я понимаю, для использования этой временной таблицы в других запросах надо было бы определить МенеджерВременныхТаблиц.
Тут вроде его нету.
7 YF
 
13.05.13
11:24
Выложил полностью текст процедуры
8 acsent
 
13.05.13
11:26
это последствия использования рекомендаций от 1с: используйте временные таблицы.
...Заставь дурака богу молиться ...
9 YF
 
13.05.13
11:29
Вот есть там условие в ГДЕ по полю, которого во втором запросе уже нет, т.е. МесяцНачисления


Может Где нельзя использовать по полям не в ходящим в группировки ... Но вроде же нет ...

блин, чешу репу
10 Лефмихалыч
 
13.05.13
11:33
(0)  а чо, других проблем нет что ли? ИЛи этот запрос тебе блокирует все, включая двер в серверную?
11 YF
 
13.05.13
11:46
(10) Нет, просто переписываю эту процедуру, вот и обратил внимание
12 fisher
 
13.05.13
11:57
(0) Да что угодно могло быть. Например, итоговый запрос изначально был сложнее. Позже кастрировали. Да мало ли...
Вроде ж уже не мальчик, подобной фигней заморачиваться.
13 Bober
 
13.05.13
11:59
(0) исправить текст на

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


и спать спокойно
14 Aprobator
 
13.05.13
12:00
(0) ужас, а не запрос.
15 zahar140382
 
13.05.13
12:00
Это не виртуальная таблица, а временная(врОстатки
)
Закон Брукера: Даже маленькая практика стоит большой теории.