Имя: Пароль:
1C
1С v8
как добавить условие в запрос?
, ,
0 UIV
 
04.09.12
13:52
Запрос.Текст = "ВЫБРАТЬ
                  |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
                  |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
                  |    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет
                  |ИЗ
                  |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&СчетаСписок), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
                  |ГДЕ
                  |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток <> 0
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Субконто1,
                  |    Субконто2,
                  |    Счет";

Как добавить в него отбор только тех записей, по которым на конец периода имеется одновременно ненулевое дебетовое и кредитовое сальдо в развороте по субконто1.
1 BigShmax
 
04.09.12
14:05
вложенный запрос в условии с параметрами виртуальной таблицы, не?
2 UIV
 
04.09.12
14:10
Это вариант. Спасибо. Попробую.
3 UIV
 
04.09.12
15:24
Мда. А счета то сворачиваются и итоговый остаток в разрезе субконто1 получается все равно либо дебетовый либо кредитовый.

Переформулирую вопрос. Имеется счет (например 60) как запросом отобрать контрагентов (субконто1) по которым имеются договора (субконто2) имеющие дебетовый остаток и договора имеющие кредитовый остаток.
4 Maxus43
 
04.09.12
15:28
>>например 60
у него тока один остаток. Развёрнутый остаток у Активно-Пассивных счетов
5 UIV
 
04.09.12
15:33
Я в курсе, что один. Мне требуется следующее:

Есть контрагент, у него два договора. По одному договору имеется кредитовый остаток по второму дебетовый.

Нужно отобрать именно таких контрагентов, и при этом не отбирать тех, по которым остатки по договорам либо только дебетовые либо только кредитовые. При этом хотелось бы все этот как то полаконичней оформить и без извращений.
6 GROOVY
 
04.09.12
15:45
(5) Развернутый остаток в итогах по субконто контрагенты даст нужные циферы.
7 UIV
 
04.09.12
15:51
(6) Как его развернуть.
8 Мыш
 
04.09.12
15:59
Предлагаю внутреннее соединение таблицы с собой по равенству контрагентов, неравенству договоров и ненулевым сальдо.
9 DUDE
 
04.09.12
16:20
(7) Груви, как я понимаю, имел в виду запрос типа:

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

Только на выходе ты получишь выборку без договоров. Если нужны договоры, то можно потом ее использовать в твоем запросе в качестве отбора в вирт. таблице.
10 DUDE
 
04.09.12
16:27
(10) или я ступил? хм
11 UIV
 
04.09.12
16:37
(9) Не катит. Не хранится по этим счетам СуммаРазвернутыйКонечныйОстатокДт и СуммаРазвернутыйКонечныйОстатокДт. Оно сворачивается ранее, соответственно одно из этих полей всегда нулевое.
12 UIV
 
04.09.12
16:39
Придется пойти несистемным путем. Запрошу все в развороте по договорам, выгружу в таблицу значений и сверну ее по контрагентам. Потом использую ее для отбора. Блин, как то это семерочно получается, хочу запрос, не хочу так онокодить. :(
13 DUDE
 
04.09.12
16:48
(11) Угу, ступил.
(12) Если тебе нужно именно контрагенты, у которых есть договоры и с + и с - остатком, то это не выход - ты ведь просто отберешь договоры, у которых есть остаток.

Может сделать по типу такого:
выбрать
      счет,
      субконто1,
      количество(субконто2),
      максимум(выбор когда СуммаКонечныйОстаток > 0 тогда истина иначе ложь конец) как ЕстьДоговорВПлюс,
      максимум(выбор когда СуммаКонечныйОстаток < 0 тогда истина иначе ложь конец) как ЕстьДоговорВМинус,
      ...
Из ...
Сгруппировать по
      счет,
      субконто1
Имеющие
      максимум(выбор когда СуммаКонечныйОстаток > 0 тогда истина иначе ложь конец)
      и максимум(выбор когда СуммаКонечныйОстаток < 0 тогда истина иначе ложь конец)

на выходе врем. таблица с контрагентами, у которых есть договоры с остатками в + и -
14 UIV
 
04.09.12
16:52
А вобще разочаровывают меня восьмерочные запросы. Обещали блекджек и разное, а в итоге банальный аналог ТЗ.Свернуть("Субконто1","Сумма1,Сумма2") и тот выполняется через одно место.
15 DUDE
 
04.09.12
16:56
(14) Ненене. Просто нужно с ними поработать, опыта набраться. Имхо, по сравнению с тем, что давала чистая 7.7 запросы на 8 просто шикарные :)
16 UIV
 
04.09.12
17:12
(15) Щасс. Вот что у меня в итоге получилось. Слабо тоже самое одним запросом?


   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
                  |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
                  |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаДт,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКт
                  |ИЗ
                  |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода, &КонПериода, , , Счет В ИЕРАРХИИ (&СчетаСписок), , Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты";                          
                 
   СчетаСписок = Новый СписокЗначений;
   СчетаСписок.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПоставщикамиИПодрядчиками);      //60
   СчетаСписок.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСПокупателямиИЗаказчиками);          //62
//    СчетаСписок.Добавить(ПланыСчетов.Хозрасчетный.РасчетыСРазнымиДебиторамиИКредиторами);   //76
   Запрос.УстановитьПараметр("НачПериода",НачПериода);        
   Запрос.УстановитьПараметр("КонПериода",КонецДня(КонПериода));    
   Запрос.УстановитьПараметр("Организация",Организация);    
   Запрос.УстановитьПараметр("СчетаСписок",СчетаСписок);    

   ТЗ = Запрос.Выполнить().Выгрузить();    
   ТЗ.Свернуть("Субконто1","СуммаДт,СуммаКт");                      
   КонтрагентыСписок = Новый СписокЗначений;
   Для каждого СтрокаТЗ из ТЗ цикл
       Если (СтрокаТз.СуммаДт > 0) и  (СтрокаТз.СуммаКт > 0) тогда
           КонтрагентыСписок.Добавить(СтрокаТЗ.Субконто1);
       КонецЕсли;    
   КонецЦикла;
   Запрос.УстановитьПараметр("КонтрагентыСписок",КонтрагентыСписок);    
   
   Запрос.Текст = "ВЫБРАТЬ
                  |    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
                  |    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаДт,
                  |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКт,
                  |    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет
                  |ИЗ
                  |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
                  |            &НачПериода,
                  |            &КонПериода,
                  |            ,
                  |            ,
                  |            Счет В ИЕРАРХИИ (&СчетаСписок),
                  |            ,
                  |            Организация = &Организация
                  |                И Субконто1 В (&КонтрагентыСписок)) КАК ХозрасчетныйОстаткиИОбороты
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Субконто1,
                  |    Субконто2,
                  |    Счет";
17 DUDE
 
04.09.12
18:00
(17) одним запросом и будет по типу как писал в (13)
что-то вроде этого:
"
|выбрать
|       счет,
|       субконто1,
|       количество(субконто2),
|       максимум(выбор когда СуммаОстаток > 0 тогда истина иначе ложь конец) как ЕстьДоговорВПлюс,
|       максимум(выбор когда СуммаОстаток < 0 тогда истина иначе ложь конец) как ЕстьДоговорВМинус,
|       СуммаКонечныйОстаток
|ПОМЕСТИТЬ ВТ_Контрагенты
|    РегистрБухгалтерии.Хозрасчетный.Остатки(&КонПериодаГраница, Счет В ИЕРАРХИИ (&СчетаСписок), &ВидыСубконто, Организация = &Организация) КАК ХозрасчетныйОстаткиИОбороты
|Сгруппировать по
|       счет,
|       субконто1
|Имеющие
|       максимум(выбор когда СуммаОстаток > 0 тогда истина иначе ложь конец)
|       и максимум(выбор когда СуммаОстаток < 0 тогда истина иначе ложь конец)
|Индексировать По субконто1 //счет, субконто1
|;
|ВЫБРАТЬ РАЗЛИЧНЫЕ Счет ПОМЕСТИТЬ ВТ_Счета ИЗ ВТ_Контрагенты;
|ВЫБРАТЬ РАЗЛИЧНЫЕ Субконто1 ПОМЕСТИТЬ ВТ_ТолькоКонтрагенты ИЗ ВТ_Контрагенты;
|;
|ВЫБРАТЬ
|    ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Субконто1,
|    ХозрасчетныйОстаткиИОбороты.Субконто2 КАК Субконто2,
|    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаДт,
|    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстатокКт КАК СуммаКт,
|    ХозрасчетныйОстаткиИОбороты.Счет КАК Счет
|ИЗ
|    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(
|            &НачПериода,
|            &КонПериода,
|            ,
|            ,
|            Счет В (ВЫбрать Счет ИЗ ВТ_Счета),
|            &ВидыСубконто,
|            Организация = &Организация
|                И Субконто1 В (ВЫбрать Субконто1 ИЗ ВТ_ТолькоКонтрагенты)) КАК ХозрасчетныйОстаткиИОбороты
// думаю, условие не лишнее на случай если по одному контрагенту будут
// на разных субсчетах остатки, но не на всех остатки по дог. и в + и в -
|ГДЕ (счет, субконто1) В (ВЫбрать Счет, Субконто1 ИЗ ВТ_Контрагенты)
|
|УПОРЯДОЧИТЬ ПО
|    Субконто1,
|    Субконто2,
|    Счет

КонПериодаГраница = новый граница(ДатаКонца, ВидГраницы.Включая) - остатки на конец указ. секунды
ВидыСубконто - массив значений ПВЗ ВидыСубконтоХозрасчетные Контрагенты, Договоры.
18 DUDE
 
04.09.12
18:01
после "|ВЫБРАТЬ РАЗЛИЧНЫЕ Субконто1 ПОМЕСТИТЬ ВТ_ТолькоКонтрагенты ИЗ ВТ_Контрагенты;" убрать ; надо
19 Ant1773
 
25.09.12
14:52
ВЫБРАТЬ
   ХозрасчетныйРФОстатки1.Субконто1 КАК Контрагент1,
   ХозрасчетныйРФОстатки1.Субконто2 КАК Договор1,
   ХозрасчетныйРФОстатки2.Субконто1 КАК Контрагент2,
   ХозрасчетныйРФОстатки2.Субконто2 КАК Договор2,
   ХозрасчетныйРФОстатки1.СуммаОстаток КАК СуммаОстаток1,
   ХозрасчетныйРФОстатки2.СуммаОстаток КАК СуммаОстаток2,
   ХозрасчетныйРФОстатки1.Счет КАК Счет1,
   ХозрасчетныйРФОстатки2.Счет КАК Счет2
ИЗ
   РегистрБухгалтерии.ХозрасчетныйРФ.Остатки(&НаДату, Счет В (&Счет61_1), , ) КАК ХозрасчетныйРФОстатки1
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.ХозрасчетныйРФ.Остатки(&НаДату, счет В (&Счет61_2), , ) КАК ХозрасчетныйРФОстатки2
       ПО ХозрасчетныйРФОстатки1.Субконто1 = ХозрасчетныйРФОстатки2.Субконто1
           И ХозрасчетныйРФОстатки1.Субконто2 = ХозрасчетныйРФОстатки2.Субконто2
20 Ant1773
 
25.09.12
14:54
&Счет61_1 - не авансовые субсчета (60.1, 60.21, 62.1, 62.21)
&Счет61_2 - авансовые субсчета (60.2, 60.22, 62.2, 62.22)
21 Ant1773
 
25.09.12
15:02
(19) Выведет некорректно закрытые договора (т.е. имеющие дебетово-кредитовые остатки по одному договору).
Убираем соединение по Субконто2, получаем контрагентов имеющих дебетово-кредитовые остатки...
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.