Имя: Пароль:
1C
1С v8
Помогите с запросом.
,
0 ВотОнЯ
 
12.03.12
10:31
Запрос выбирает все поступления по банку и кассе за период с возможностью фильтрации.
В запросе отрабатывает все, кроме "В ИЕРАРХИИ" Не могу понять что не так делаю.
В переменные &СчетБанк и &СчетКасса и &СчетПодотчет передаю значения типа ПланыСчетов.Хозрасчетный.ТакойТоСчет(Корень).Ссылка
Вот сам запрос


ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |    ПриходБанк.СубконтоДт2 КАК СтатьяДДС,
                  |    ПриходБанк.СубконтоДт3 КАК Литер,
                  |    ПриходБанк.Организация КАК Организация,
                  |    ПриходБанк.ПодразделениеДт КАК Подразделение,
                  |    СУММА(ПриходБанк.Сумма) КАК Сумма,
                  |    ПриходБанк.Содержание КАК Содержание
                  |ИЗ
                  |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ПриходБанк
                  |ГДЕ
              |    ПриходБанк.СчетДт В ИЕРАРХИИ (&СчетБанк)
              |    И ПриходБанк.СчетКт НЕ В ИЕРАРХИИ (&СчетКасса)
              |    И ПриходБанк.СчетКт НЕ В ИЕРАРХИИ (&СчетБанк)
              |    И ПриходБанк.СчетКт НЕ В ИЕРАРХИИ (&СчетПодотчет)
              |    И (&ОтбиратьПоОрганизациям = ИСТИНА
              |                И ПриходБанк.Организация В ИЕРАРХИИ (&СписокОрганизаций)
              |            ИЛИ &ОтбиратьПоОрганизациям = ЛОЖЬ)
              |    И (&ОтбиратьПоЛитерам = ИСТИНА
              |                И ПриходБанк.Организация В ИЕРАРХИИ (&СписокЛитеров)
              |            ИЛИ &ОтбиратьПоЛитерам = ЛОЖЬ)
              |    И (&ОтбиратьПоСтатьямДДС = ИСТИНА
              |                И ПриходБанк.Организация В ИЕРАРХИИ (&СписокСтатейДДС)
              |            ИЛИ &ОтбиратьПоСтатьямДДС = ЛОЖЬ)
                  |    И ПриходБанк.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    ПриходБанк.Организация,
                  |    ПриходБанк.ПодразделениеДт,
                  |    ПриходБанк.СубконтоДт2,
                  |    ПриходБанк.СубконтоДт3,
                  |    ПриходБанк.Содержание
                  |
              |ОБЪЕДИНИТЬ ВСЕ
              |
              |ВЫБРАТЬ
              |    ПриходКасса.СубконтоДт1,
              |    ПриходКасса.СубконтоДт3,
              |    ПриходКасса.Организация,
              |    ПриходКасса.ПодразделениеДт,
              |    ПриходКасса.Сумма,
              |    ПриходКасса.Содержание
              |ИЗ
              |    РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ПриходКасса
              |ГДЕ
              |    ПриходКасса.СчетДт В ИЕРАРХИИ (&СчетКасса)
              |    И ПриходКасса.СчетКт НЕ В ИЕРАРХИИ (&СчетКасса)
              |    И ПриходКасса.СчетКт НЕ В ИЕРАРХИИ (&СчетБанк)
              |    И ПриходКасса.СчетКт НЕ В ИЕРАРХИИ (&СчетПодотчет)
              |    И (&ОтбиратьПоОрганизациям = ИСТИНА
              |                И ПриходКасса.Организация В ИЕРАРХИИ (&СписокОрганизаций)
              |            ИЛИ &ОтбиратьПоОрганизациям = ЛОЖЬ)
              |    И (&ОтбиратьПоЛитерам = ИСТИНА
              |                И ПриходКасса.Организация В ИЕРАРХИИ (&СписокЛитеров)
              |            ИЛИ &ОтбиратьПоЛитерам = ЛОЖЬ)
              |    И (&ОтбиратьПоСтатьямДДС = ИСТИНА
              |                И ПриходКасса.Организация В ИЕРАРХИИ (&СписокСтатейДДС)
              |            ИЛИ &ОтбиратьПоСтатьямДДС = ЛОЖЬ)
              |    И ПриходКасса.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
              |
              |СГРУППИРОВАТЬ ПО
              |    ПриходКасса.Организация,
              |    ПриходКасса.ПодразделениеДт,
              |    ПриходКасса.СубконтоДт1,
              |    ПриходКасса.СубконтоДт3,
              |    ПриходКасса.Сумма,
              |    ПриходКасса.Содержание
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Организация,
                  |    Подразделение,
                  |    СтатьяДДС,
                  |    Литер,
                  |    Содержание
                  |ИТОГИ
                  |    СУММА(Сумма)
                  |ПО
                  |    Организация,
                  |    Подразделение,
                  |    СтатьяДДС,
                  |    Литер,
                  |    Содержание
1 Кроха
 
12.03.12
10:34
давай конкретные примеры, чему равны переменные
2 vicof
 
12.03.12
10:44
есть такой прием отладки - комментировать все условия, а потом их по одному добавлять
3 ВотОнЯ
 
12.03.12
10:46
(1)

   Если ТипЗнч(МассивОрганизаций) = Тип("Массив") Тогда
       Запрос.УстановитьПараметр("ОтбиратьПоОрганизациям", (МассивОрганизаций.Количество() > 0));
       Запрос.УстановитьПараметр("СписокОрганизаций",МассивОрганизаций);
   КонецЕсли;              
   Если ТипЗнч(МассивЛитеров) = Тип("Массив") Тогда
       Запрос.УстановитьПараметр("ОтбиратьПоЛитерам", (МассивЛитеров.Количество() > 0));
       Запрос.УстановитьПараметр("СписокЛитеров",МассивЛитеров);
   КонецЕсли;              
   Если ТипЗнч(МассивСтатейДДС) = Тип("Массив") Тогда
       Запрос.УстановитьПараметр("ОтбиратьПоСтатьямДДС", (МассивСтатейДДС.Количество() > 0));
       Запрос.УстановитьПараметр("СписокСтатейДДС",МассивСтатейДДС);
   КонецЕсли;
   
   Запрос.УстановитьПараметр("СчетБанк",ПланыСчетов.Хозрасчетный.РасчетныеСчета.Ссылка);
   Запрос.УстановитьПараметр("СчетКасса",ПланыСчетов.Хозрасчетный.Касса.Ссылка);
   Запрос.УстановитьПараметр("СчетПодотчет",ПланыСчетов.Хозрасчетный.РасчетыСПодотчетнымиЛицами_.Ссылка);
   
   Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала));
   Запрос.УстановитьПараметр("ДатаОкончания",КонецДня(ДатаОкончания));

(2) я так и узнал, что проблема в условии содержащем "В ИЕРАРХИИ"
4 ВотОнЯ
 
12.03.12
10:56
апну
5 vicof
 
12.03.12
10:57
|    И (&ОтбиратьПоСтатьямДДС = ИСТИНА
|                И ПриходКасса.Организация В ИЕРАРХИИ (&СписокСтатейДДС)
|            ИЛИ &ОтбиратьПоСтатьямДДС = ЛОЖЬ)

интересное условие.
Проще было написать так:
|ПриходКасса.Организация В ИЕРАРХИИ (&СписокСтатейДДС)
6 Ненавижу 1С
 
гуру
12.03.12
10:58
ПриходКасса.Организация В ИЕРАРХИИ (&СписокСтатейДДС)

это клево само по себе
7 ВотОнЯ
 
12.03.12
10:59
(5)Не проще, мне нужно именно так

(6)как наприкалываетесь, если вас не затруднит,напишите что именно вас прикололо.
8 vicof
 
12.03.12
11:00
(7) читай внимательно
9 ВотОнЯ
 
12.03.12
11:00
(6) аааа....
Это я поправил, проблема уже не в этом
10 vmv
 
12.03.12
11:01
подозроеваю, что взаимоисключающие В ИЕРАРХИИ

зачем вообще писать запросы в таком стиле, неужели нельзя все это структурировать, создать вложенные, пакетные или хотябы шаблоны, чтобы такой профан как я читал запрос как безхитросную песню Кати Лель "Я не права")

"фигня какая-то"
11 ВотОнЯ
 
12.03.12
11:06
(10)нет, взаимоисключающего ничего нет, прочтите внимательнее
12 МихаилМ
 
12.03.12
11:09
на мс скл этот запрос может вызвать дед лок (2005) или тайм оут (2008)

Объединение таблицы с сабой  дурной тон поектирования запросов
т.к. на чтение тоже блокировки есть.


если очень хочется - отбирайте в врем.таб. и потом над ней надругайтесь.
на врем таб - блокировки минимальные


"ПриходБанк.Организация В ИЕРАРХИИ (&СписокОрганизаций)
              |            ИЛИ &ОтбиратьПоОрганизациям = ЛОЖЬ)"

решение собирайте текст запроса динамически.
13 vicof
 
12.03.12
11:09
(0) давай нормальный запрос сюда
>>В запросе отрабатывает все, кроме "В ИЕРАРХИИ" Не могу понять что не так делаю.
в чем конкретно выражается, что в иерархии не отрабатывает, при каких условиях?
14 ВотОнЯ
 
12.03.12
11:48
(13) комментирую это условие - запрос содержит значения, не комментирую - запрос пустой.
15 ВотОнЯ
 
12.03.12
11:48
Весь запрос я выдал ранее, параметры к нему тоже
16 ВотОнЯ
 
12.03.12
12:07
Я так и не понял как мне отфильтровать движения по вхождению Субсчета движения в иерархию указаного в параметрах счета
17 ВотОнЯ
 
12.03.12
12:15
Или формировать список субсчетов в массив и в параметре передавать его?
18 ВотОнЯ
 
12.03.12
12:15
как то это.... по семерочному
19 ВотОнЯ
 
12.03.12
12:22
Сейчас смотрю примеры... блин! Да должно же это отрабатывать!!!!!!!!
20 ВотОнЯ
 
12.03.12
12:31
ребят, ну помогите, как нормально сделать без кучи уровней вложенности с рекурсиями?
21 Ненавижу 1С
 
гуру
12.03.12
12:33
(15) нет ты выложи исходный вариант, а то "Это я поправил, проблема уже не в этом"
22 ВотОнЯ
 
12.03.12
12:39
ВЫБРАТЬ РАЗРЕШЕННЫЕ
   ПриходБанк.СубконтоДт2 КАК СтатьяДДС,
   ПриходБанк.СубконтоДт3 КАК Литер,
   ПриходБанк.Организация КАК Организация,
   ПриходБанк.ПодразделениеДт КАК Подразделение,
   СУММА(ПриходБанк.Сумма) КАК Сумма,
   ПриходБанк.Содержание КАК Содержание
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ПриходБанк
ГДЕ
   ПриходБанк.СчетДт В ИЕРАРХИИ(&СчетБанк)
   И НЕ ПриходБанк.СчетКт В ИЕРАРХИИ (&СчетКасса)
   И НЕ ПриходБанк.СчетКт В ИЕРАРХИИ (&СчетБанк)
   И НЕ ПриходБанк.СчетКт В ИЕРАРХИИ (&СчетПодотчет)
   И (&ОтбиратьПоОрганизациям = ИСТИНА
               И ПриходБанк.Организация В ИЕРАРХИИ (&СписокОрганизаций)
           ИЛИ &ОтбиратьПоОрганизациям = ЛОЖЬ)
   И (&ОтбиратьПоЛитерам = ИСТИНА
               И ПриходБанк.Организация В ИЕРАРХИИ (&СписокЛитеров)
           ИЛИ &ОтбиратьПоЛитерам = ЛОЖЬ)
   И (&ОтбиратьПоСтатьямДДС = ИСТИНА
               И ПриходБанк.СубконтоДт2 В ИЕРАРХИИ (&СписокСтатейДДС)
           ИЛИ &ОтбиратьПоСтатьямДДС = ЛОЖЬ)
   И ПриходБанк.Период МЕЖДУ &ДатаНачала И &ДатаОкончания

СГРУППИРОВАТЬ ПО
   ПриходБанк.Организация,
   ПриходБанк.ПодразделениеДт,
   ПриходБанк.СубконтоДт2,
   ПриходБанк.СубконтоДт3,
   ПриходБанк.Содержание

ОБЪЕДИНИТЬ ВСЕ

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

СГРУППИРОВАТЬ ПО
   ПриходКасса.Организация,
   ПриходКасса.ПодразделениеДт,
   ПриходКасса.СубконтоДт1,
   ПриходКасса.СубконтоДт3,
   ПриходКасса.Сумма,
   ПриходКасса.Содержание

УПОРЯДОЧИТЬ ПО
   Организация,
   Подразделение,
   СтатьяДДС,
   Литер,
   Содержание
ИТОГИ
   СУММА(Сумма)
ПО
   Организация,
   Подразделение,
   СтатьяДДС,
   Литер,
   Содержание
23 vmv
 
12.03.12
12:39
(20) под полными правами без всяких РАЗРЕШЕННЫЕ пашет, если да, то В Иерархии глючит на ограничениях, т.е. параметр запроса не видит родителей.

да и вообще, как я писало, такой стиль запроса вызываем у меня тошноту, наверно я слишком глуп и пишу вложенные
24 ArtKzn
 
12.03.12
13:03
Попробуй в этом (и остальных подобных) выражении поменять местами условия. Было:


(&ОтбиратьПоОрганизациям = ИСТИНА
               И ПриходКасса.Организация В ИЕРАРХИИ (&СписокОрганизаций)
           ИЛИ &ОтбиратьПоОрганизациям = ЛОЖЬ)

Сделай:

(&ОтбиратьПоОрганизациям = ЛОЖЬ ИЛИ &ОтбиратьПоОрганизациям = ИСТИНА
               И ПриходКасса.Организация В ИЕРАРХИИ (&СписокОрганизаций))
25 ВотОнЯ
 
12.03.12
13:13
(23) это построитель.
Просто я всегда там делаю рабочий вариант, отлаживаю, а потом оптимизирую..
26 ВотОнЯ
 
12.03.12
13:14
(24)я эти куски уже комментил, проблема не в них
27 ВотОнЯ
 
12.03.12
13:15
(23) под полными правами без всяких разрешенные не пашет тоже, уже пробовал
28 ArtKzn
 
12.03.12
13:37
(26) У тебя в (0) сказано
>В запросе отрабатывает все, кроме "В ИЕРАРХИИ"
Какое конкретно "В ИЕРАРХИИ" не отрабатывает?
29 hhhh
 
12.03.12
13:39
а эту фигню тоже комментил?

ПриходКасса.Организация В ИЕРАРХИИ (&СписокЛитеров)
30 ВотОнЯ
 
12.03.12
14:31
(29)
1) см (22)
2) Комментил
31 ВотОнЯ
 
12.03.12
14:33
(28)
Вот это не работает
ВЫБРАТЬ
   ПриходБанк.СубконтоДт2 КАК СтатьяДДС,
   ПриходБанк.СубконтоДт3 КАК Литер,
   ПриходБанк.Организация КАК Организация,
   ПриходБанк.ПодразделениеДт КАК Подразделение,
   СУММА(ПриходБанк.Сумма) КАК Сумма,
   ПриходБанк.Содержание КАК Содержание
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ПриходБанк
ГДЕ
   ПриходБанк.СчетДт В ИЕРАРХИИ(&СчетБанк)

СГРУППИРОВАТЬ ПО
   ПриходБанк.Организация,
   ПриходБанк.ПодразделениеДт,
   ПриходБанк.СубконтоДт2,
   ПриходБанк.СубконтоДт3,
   ПриходБанк.Содержание

УПОРЯДОЧИТЬ ПО
   Организация,
   Подразделение,
   СтатьяДДС,
   Литер,
   Содержание
ИТОГИ
   СУММА(Сумма)
ПО
   Организация,
   Подразделение,
   СтатьяДДС,
   Литер,
   Содержание



А вот это работает
ВЫБРАТЬ
   ПриходБанк.СубконтоДт2 КАК СтатьяДДС,
   ПриходБанк.СубконтоДт3 КАК Литер,
   ПриходБанк.Организация КАК Организация,
   ПриходБанк.ПодразделениеДт КАК Подразделение,
   СУММА(ПриходБанк.Сумма) КАК Сумма,
   ПриходБанк.Содержание КАК Содержание
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ДвиженияССубконто КАК ПриходБанк
//ГДЕ
//    ПриходБанк.СчетДт В ИЕРАРХИИ(&СчетБанк)

СГРУППИРОВАТЬ ПО
   ПриходБанк.Организация,
   ПриходБанк.ПодразделениеДт,
   ПриходБанк.СубконтоДт2,
   ПриходБанк.СубконтоДт3,
   ПриходБанк.Содержание

УПОРЯДОЧИТЬ ПО
   Организация,
   Подразделение,
   СтатьяДДС,
   Литер,
   Содержание
ИТОГИ
   СУММА(Сумма)
ПО
   Организация,
   Подразделение,
   СтатьяДДС,
   Литер,
   Содержание
32 ВотОнЯ
 
12.03.12
15:03
Опачки... Кажись понял почему не отрабатывает

Значение ПриходБанк.СчетДт в запросе = Null
33 ВотОнЯ
 
12.03.12
15:04
Блин, а почему же Null? (((
34 Ненавижу 1С
 
гуру
12.03.12
15:05
(33) потому что он такой
35 ВотОнЯ
 
12.03.12
15:21
(34) в проводках задан вполне себе конкретный счет из плана счетов, в запросе почему Null?
36 ArtKzn
 
12.03.12
15:32
(35) у тебя ИТОГИ стоят.
Null в детальных записях видишь или в итоговых?
37 ВотОнЯ
 
12.03.12
15:43
везде..
делаю Запрос.Выполнить.Выгрузить()
получаю ТЗ, открываю в отладчике, а там колонка счет вообще не заполнена.
38 Ненавижу 1С
 
гуру
12.03.12
15:44
(37) получаешь ТЗ "плоской" выборки, а у тебя итоги
посмотри что в детальных записях
39 ArtKzn
 
12.03.12
15:55
(37),в дополнение к (38): либо выгружай в дерево (.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам)) и обходи как дерево, либо убери ИТОГИ из запроса.
40 ВотОнЯ
 
12.03.12
16:16
Убрал итоги, в плоской выборке все нормализовалось
41 ВотОнЯ
 
12.03.12
16:30
Все отлично, поправил по советам (38) + (39), все получилось,
Ребята, спасибо вам огромное! =)
2 + 2 = 3.9999999999999999999999999999999...