Имя: Пароль:
1C
1C 7.7
v7: Выборка подчиненных документов в запросе
0 1С-ница
 
11.11.14
13:11
Платформа 7.70.027
Можно ли в одном запросе получить документ и его подчиненные?
Текст запроса:
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(НайтиРазмещения)
    |Период с НачДата по КонДата;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |Размещение = Документ.Размещение.ТекущийДокумент;
//    |ДопУслуги = Документ.ДополнительныеУслугиПоФакту.Основание;
    |Гость = Документ.Размещение.Гость;
    |Тариф = Документ.Размещение.Тариф;
    |ДатаДок = Документ.Размещение.ДатаДок;
    |ДатаР = Документ.Размещение.Гость.ДатаРождения;
    |Группировка Гость упорядочить по Гость.Наименование;
    |Условие(Гость.Город.Наименование В (Города));
    |Условие((ТекущаяДата()-ДатаР)>6570);
    //|Условие(ДопУслугиПоФакту.ДокументОснование=Размещение);
    |"//}}ЗАПРОС

Основной документ - Размещение, соответственно ДопУслуги  - подчиненные. Если их выбрать (допУслуги),то почему то при выполнении отчета валится ошибка что "Значение не представляет агрегатный объект (Город):2"
1 1С-ница
 
11.11.14
13:12
Пыталась искать подчиненные Выборкой, но почему то зациклилось на 1 документе, причем не нужного типа:

ДопУслуги = СоздатьОбъект("Документ");
    
    Пока Запрос.Группировка() = 1 Цикл
        Если Запрос.Гость.этогруппа() = 0 Тогда
            //Ищем подчиненные доп услуги
            Пока ДопУслуги.ВыбратьПодчиненныеДокументы(НачДата,КонДата,Запрос.Размещение) = 1 Цикл
                // Заполнение полей НайтиРазмещения
                Таб.ВывестиСекцию("НайтиРазмещения");                                                
            КонецЦикла;
        КонецЕсли;
        
    КонецЦикла;
2 Ёпрст
 
11.11.14
13:13
// Пока ДопУслуги.ВыбратьПодчиненныеДокументы(НачДата,КонДата,Запрос.Размещение) = 1 Цикл
                // Заполнение полей НайтиРазмещения
ДопУслуги.ВыбратьПодчиненныеДокументы(НачДата,КонДата,Запрос.Размещение);
Пока ДопУслуги.ПолучитьДокумент()=1 Цикл

                Таб.ВывестиСекцию("НайтиРазмещения");                                                
            КонецЦикла;
3 Ёпрст
 
11.11.14
13:16
(0)
>>>Можно ли в одном запросе получить документ и его подчиненные?

Можно, в прямом запросе.
4 Злопчинский
 
11.11.14
13:17
Инженер минус программист смайл
Запросом не получится
5 1С-ница
 
11.11.14
13:17
(2) Спасибо,
(3) А у меня какой?
6 Ёпрст
 
11.11.14
13:18
(5) а у тебя обычный, чорный
7 1С-ница
 
11.11.14
13:19
(6) Подскажите как мой переделать
8 Ёпрст
 
11.11.14
13:20
(7) открыть для себя мир 1cpp(1sqlite) и прямых запросов к данным
9 Ёпрст
 
11.11.14
13:21
Ну, для староверов, можно и через ado лепить.
10 Злопчинский
 
11.11.14
13:21
К прямому запросу нужно один эс плюс плюс вк загрузить
11 1С-ница
 
11.11.14
13:21
Переделала выборку:
Пока Запрос.Группировка() = 1 Цикл
        Если Запрос.Гость.этогруппа() = 0 Тогда
            //Ищем подчиненные доп услуги
            ДопУслуги.ВыбратьПодчиненныеДокументы(НачДата,КонДата,Запрос.Размещение);
            Пока ДопУслуги.ПолучитьДокумент()=1 Цикл
                Если ДопУслуги.Вид() = "ДополнительныеУслугиПоФакту" Тогда
                    // Заполнение полей НайтиРазмещения
                    Таб.ВывестиСекцию("НайтиРазмещения");                  
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
        //Сообщить("" + Запрос.Гость + "  " + Запрос.Размещение);
    КонецЦикла;

Почему то выводит не все подчиненные документы нужного вида
12 Злопчинский
 
11.11.14
13:22
Перст а можно текст такого запроса с выбором подчиненных определенного вида вопрос
13 Злопчинский
 
11.11.14
13:22
период смотри
14 Злопчинский
 
11.11.14
13:23
для проверки в журнале стань на родителя пкм подчиненные документы и сверяй
15 1С-ница
 
11.11.14
13:25
(13) спасибо. За 1 день быстро отрабатывает, за год будет наверное долго.
16 1С-ница
 
11.11.14
13:26
Да и в подчиненных нужно табчасть отрабатывать и группировать, так что очень надо в запросе получать все данные
17 VoditelKobyly
 
11.11.14
13:27
Тебе быстрее будет в выборке чем 1срр изучить
18 Злопчинский
 
11.11.14
13:28
16 сделай запросом извлечение допуслуг с извлечением из допуслуг дока основания выгрузи итог запроса в из отсортируй по основанию плюс допуслуга
19 1С-ница
 
11.11.14
13:30
(18) не получилось так
20 1С-ница
 
11.11.14
13:31
|Период с НачДата по КонДата;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Без итогов;
    |Размещение = Документ.ДополнительныеУслугиПоФакту.Основание;
    |ДопУслуги = Документ.ДополнительныеУслугиПоФакту.ТекущийДокумент;

    |Гость = Документ.Размещение.Гость;
    |Тариф = Документ.Размещение.Тариф;
    |ДатаДок = Документ.Размещение.ДатаДок;
    |ДатаР = Документ.Размещение.Гость.ДатаРождения;
    |Группировка Гость упорядочить по Гость.Наименование;
    |Условие(Гость.Город.Наименование В (Города));
    |Условие((ТекущаяДата()-ДатаР)>6570);
    //|Условие(ДопУслугиПоФакту.ДокументОснование=Размещение);

    |"//}}ЗАПРОС
21 1С-ница
 
11.11.14
13:32
Ругается на Город
22 VoditelKobyly
 
11.11.14
13:33
(12) Там два варианта: либо выборка сразу подчиненных со связкой по parenval, либо выбока основных со связкой по CHILDID. Сразу даже не угадаешь что быстрее будет работать.
23 Ёпрст
 
11.11.14
13:40
(11) период выборки подч. документов расширь
24 1С-ница
 
11.11.14
13:41
(23) уже починила
25 Злопчинский
 
11.11.14
14:57
|Период с НачДата по КонДата;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|Размещение = Документ.ДополнительныеУслугиПоФакту.Основание;
|ДопУслуги = Документ.ДополнительныеУслугиПоФакту.ТекущийДокумент;

    |Гость = Документ.ДополнительныеУслугиПоФакту.Основание.Гость;
    |Тариф = окумент.ДополнительныеУслугиПоФакту.Основание.Тариф;
    |ДатаДок = окумент.ДополнительныеУслугиПоФакту.Основание.ДатаДок;
    |ДатаР = окумент.ДополнительныеУслугиПоФакту.Основание.Гость.ДатаРождения;
    |Группировка Гость упорядочить по Гость.Наименование;
    |Условие(Гость.Город В Города);
    |Условие((ТекущаяДата()-ДатаР)>6570);
    |"//}}ЗАПРОС
26 Злопчинский
 
11.11.14
14:59
Попробуй так.
.
И что это за бредовое условие
1. НАИМЕНОВАНИЯ городов в списке? ты уверена что обезъяны манагеры тольятти и таллинн напишут без ошибок в одном месте и это будет совпадать с какимито сторками введенными в другом месте?
2. Условие(ДопУслугиПоФакту.ДокументОснование=Размещение);
- это что за фигня? ограничение для ОДНОГО КОНКРЕТНОГО дока размещение? - нафейхоа?
27 Злопчинский
 
11.11.14
16:39
И вообще - группировка гость - какая то фигня
.
мну кажется логичнее использовать
|Группировка Гость
|Группировка Размещение
|Группировка ДопУслуги
.
???