Имя: Пароль:
1C
1С v8
Запрос в цикле.
, ,
0 goleaff2006
 
06.09.13
06:30
Есть запрос который получает список документов,контрагентов и договор.
Далее в зависимости от вида договора необходимо получать данные из разных регистров на дату документа.Как можно без цикла по провывать составить запрос.
1 skunk
 
06.09.13
06:34
джоинами
2 goleaff2006
 
06.09.13
06:36
а как даты то привязывать?
3 Ненавижу 1С
 
гуру
06.09.13
06:41
(2) надо себя заставить
4 SeraFim
 
06.09.13
06:42
5 echo77
 
06.09.13
06:42
Используй таблицу остаткииобороты
6 goleaff2006
 
06.09.13
06:44
(5)в том то и дело что нужно не из остатков и оборотов получать.
7 Ненавижу 1С
 
гуру
06.09.13
06:44
(6) мы должны догадаться?
8 goleaff2006
 
06.09.13
06:45
Основной запрос
ВЫБРАТЬ
    ЗаявкаНаРасходованиеСредств.Ссылка КАК РасшифровкаДокумент,
    ЗаявкаНаРасходованиеСредств.Организация КАК Организация,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредств.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            ТОГДА ЗаявкаНаРасходованиеСредств.Получатель
        ИНАЧЕ ЗаявкаНаРасходованиеСредств.Контрагент
    КОНЕЦ КАК Контрагент,
    ЗаявкаНаРасходованиеСредств.БанковскийСчетКасса КАК БанковскийСчетКасса,
    ЗаявкаНаРасходованиеСредств.СтатьяОборотов КАК СтатьяОборотов,
    ЗаявкаНаРасходованиеСредств.ЦФО КАК ЦФО,
    ЗаявкаНаРасходованиеСредств.Ответственный КАК Ответственный,
    ЗаявкаНаРасходованиеСредств.СуммаДокумента КАК СуммаДокумента,
    ВЫРАЗИТЬ(ЗаявкаНаРасходованиеСредств.Описание КАК СТРОКА(100)) КАК Описание,
    ВЫБОР
        КОГДА ЗаявкаНаРасходованиеСредств.Контрагент = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
            ТОГДА НЕОПРЕДЕЛЕНО
        ИНАЧЕ ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.ДоговорКонтрагента
    КОНЕЦ КАК ДоговорКонтрагента,
    ВЫРАЗИТЬ(ЗаявкаНаРасходованиеСредств.Комментарий КАК СТРОКА(100)) КАК Комментарий,
    ЗаявкаНаРасходованиеСредств.Дата КАК Дата,
    ЗаявкаНаРасходованиеСредств.ДатаРасхода
ИЗ
    Документ.ЗаявкаНаРасходованиеСредств.РасшифровкаПлатежа КАК ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаРасходованиеСредств КАК ЗаявкаНаРасходованиеСредств
        ПО ЗаявкаНаРасходованиеСредствРасшифровкаПлатежа.Ссылка = ЗаявкаНаРасходованиеСредств.Ссылка
ГДЕ
    ЗаявкаНаРасходованиеСредств.Проведен
{ГДЕ
    ЗаявкаНаРасходованиеСредств.Организация.*,
    ЗаявкаНаРасходованиеСредств.Ответственный,
    ЗаявкаНаРасходованиеСредств.ФормаОплаты,
    ЗаявкаНаРасходованиеСредств.БанковскийСчетКасса.*,
    ЗаявкаНаРасходованиеСредств.Дата,
    ЗаявкаНаРасходованиеСредств.ДатаРасхода,
    ЗаявкаНаРасходованиеСредств.СуммаДокумента КАК СуммаЗаявки}

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

УПОРЯДОЧИТЬ ПО
    Организация,
    Дата
9 goleaff2006
 
06.09.13
06:46
получение данных из регистра для одного из видов договора, для другого совсем другой запрос

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

СГРУППИРОВАТЬ ПО
    ВТ_Подокументам.ФизЛицо,
    ВТ_Подокументам.Организация
10 goleaff2006
 
06.09.13
06:47
И как же без цикла?
11 saaken
 
06.09.13
08:35
сделай объединение с условием по типу договора
12 goleaff2006
 
06.09.13
08:41
какое объединение,может соединение? а как же мне параметр ПериодКон заполнять который для каждой записи из первго запроса будет свой?
13 saaken
 
06.09.13
08:49
можно тело запроса формировать в цикле
14 goleaff2006
 
06.09.13
09:53
(13)читаем название темы=)
15 Sabbath
 
06.09.13
10:05
(2) Возможно, метод туповат и прямолинеен, но выскажу идею. В теории можно получить даты документов, обойти их в цикле, собирая подзапросы и устанавливая параметры в цикле. К примеру

ТекстЗАпроса = "..."
Номер = 1;

Пока ВыборкаПоДатам.Слудующий() Цикл

ТекстЗапроса = ТекстЗапроса + "ОБЪЕДИНИТЬ... некий подапрос...&Дата" + Номер

Запрос.УстановитьПараметр("Дата" + Номер, ВыборкаПоДатам.Дата);

КонецЦикла

Ну и дальше либо в таблицу загнать, либо сразу вставить в запрос. Не знаю, как будет на большом объеме данных работать, с небольшим будет все ок.

(0) А если в зависимости от реквизитов договора нужно присоединять разное, так это просто условие (ВЫБОР УОГДА) в соединении надо.
16 Sabbath
 
06.09.13
10:06
+(15) вместо метода Слудующий() рекомендую Следующий() таки))
17 Sabbath
 
06.09.13
10:15
Сосбтвенно (15) отвечает на (12) и разворачивает (13)
18 Sabbath
 
06.09.13
10:17
+(15) Забыл

Номер = Номер + 1;

А в подзапросе, естественно, после + Номер, может быть дальше текст запроса