Имя: Пароль:
1C
1С v8
Регистраторы из нескольких таблиц
,
0 alexeykav
 
04.11.17
16:35
Добрый день камрады.

Ковыряю запрос на СКД.
1 alexeykav
 
04.11.17
16:35
ВЫБРАТЬ
    _РасчетыСКонтрагентами.Контрагент КАК Контрагент,
    _РасчетыСКонтрагентами.ВыбДоговор КАК Договор,
    _РасчетыСКонтрагентами.Организация КАК Организация,
    _РасчетыСКонтрагентами.Ссылка КАК СудебноеДело,
    ЕСТЬNULL(ЗаймТело.СуммаНачальныйОстаток, 0) КАК СуммаТелаНачало,
    ЕСТЬNULL(ЗаймТело.СуммаОборотКт, 0) КАК СуммаТелаУменьшение,
    ЕСТЬNULL(ЗаймТело.СуммаОборотДт, 0) КАК СуммаТелаУвличение,
    ЕСТЬNULL(ЗаймТело.СуммаКонечныйОстаток, 0) КАК СуммаТелаОкончание,
    ЕСТЬNULL(ПроцентыШтрафы.СуммаНачальныйОстаток, 0) КАК ПроцентыШтрафыНачало,
    ЕСТЬNULL(ПроцентыШтрафы.СуммаОборотКт, 0) КАК ПроцентыШтрафыУменьшение,
    ЕСТЬNULL(ПроцентыШтрафы.СуммаОборотДт, 0) КАК ПроцентыШтрафыУвличение,
    ЕСТЬNULL(ПроцентыШтрафы.СуммаКонечныйОстаток, 0) КАК ПроцентыШтрафыОкончание,
    ЕСТЬNULL(Пени.СуммаНачальныйОстаток, 0) КАК ПениНачало,
    ЕСТЬNULL(Пени.СуммаОборотКт, 0) КАК ПениУменьшение,
    ЕСТЬNULL(Пени.СуммаОборотДт, 0) КАК ПениУвличение,
    ЕСТЬNULL(Пени.СуммаКонечныйОстаток, 0) КАК ПениОкончание,
    ЕСТЬNULL(УслугиЮриста.СуммаНачальныйОстаток, 0) КАК УслугиЮристаНачало,
    ЕСТЬNULL(УслугиЮриста.СуммаОборотКт, 0) КАК УслугиЮристаУменьшение,
    ЕСТЬNULL(УслугиЮриста.СуммаОборотДт, 0) КАК УслугиЮристаУвличение,
    ЕСТЬNULL(УслугиЮриста.СуммаКонечныйОстаток, 0) КАК УслугиЮристаОкончание,
    ЕСТЬNULL(Пошлина.СуммаНачальныйОстаток, 0) КАК ПошлинаНачало,
    ЕСТЬNULL(Пошлина.СуммаОборотКт, 0) КАК ПошлинаУменьшение,
    ЕСТЬNULL(Пошлина.СуммаОборотДт, 0) КАК ПошлинаУвличение,
    ЕСТЬNULL(Пошлина.СуммаКонечныйОстаток, 0) КАК ПошлинаОкончание,
    ЕСТЬNULL(-Деопзиты.СуммаНачальныйОстаток, 0) КАК ДеопзитыНачало,
    ЕСТЬNULL(-Деопзиты.СуммаОборотКт, 0) КАК ДеопзитыУменьшение,
    ЕСТЬNULL(-Деопзиты.СуммаОборотДт, 0) КАК ДеопзитыУвличение,
    ЕСТЬNULL(-Деопзиты.СуммаКонечныйОстаток, 0) КАК ДеопзитыОкончание,
    ВЫБОР
        КОГДА НЕ ЗаймТело.Регистратор ЕСТЬ NULL
            ТОГДА ЗаймТело.Регистратор
        КОГДА НЕ ПроцентыШтрафы.Регистратор ЕСТЬ NULL
            ТОГДА ПроцентыШтрафы.Регистратор
        КОГДА НЕ Пени.Регистратор ЕСТЬ NULL
            ТОГДА Пени.Регистратор
        КОГДА НЕ УслугиЮриста.Регистратор ЕСТЬ NULL
            ТОГДА УслугиЮриста.Регистратор
        КОГДА НЕ Пошлина.Регистратор ЕСТЬ NULL
            ТОГДА Пошлина.Регистратор
        КОГДА НЕ Деопзиты.Регистратор ЕСТЬ NULL
            ТОГДА Деопзиты.Регистратор
        ИНАЧЕ
            _РасчетыСКонтрагентами.Ссылка    
    КОНЕЦ КАК Регистратор,
    ЗаймТело.ПериодСекунда
        
ИЗ
    Документ._РасчетыСКонтрагентами КАК _РасчетыСКонтрагентами
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Код = "58.03", , ) КАК ЗаймТело
        ПО _РасчетыСКонтрагентами.Контрагент = ЗаймТело.Субконто1
            И _РасчетыСКонтрагентами.ВыбДоговор = ЗаймТело.Субконто2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Код = "76.06", , ) КАК ПроцентыШтрафы
        ПО _РасчетыСКонтрагентами.Контрагент = ПроцентыШтрафы.Субконто1
            И _РасчетыСКонтрагентами.ВыбДоговор = ПроцентыШтрафы.Субконто2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Код = "76.02", , ) КАК Пени
        ПО _РасчетыСКонтрагентами.Контрагент = Пени.Субконто1
            И _РасчетыСКонтрагентами.ВыбДоговор = Пени.Субконто2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Код = "76.05", , ) КАК УслугиЮриста
        ПО _РасчетыСКонтрагентами.Контрагент = УслугиЮриста.Субконто1
            И _РасчетыСКонтрагентами.ВыбДоговор = УслугиЮриста.Субконто2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Код = "76.09", , ) КАК Пошлина
        ПО _РасчетыСКонтрагентами.Контрагент = Пошлина.Субконто1
            И _РасчетыСКонтрагентами.ВыбДоговор = Пошлина.Субконто2
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, , Счет.Код = "76.99", , ) КАК Деопзиты
        ПО _РасчетыСКонтрагентами.Контрагент = Деопзиты.Субконто1
            И _РасчетыСКонтрагентами.ВыбДоговор = Деопзиты.Субконто2
            
ГДЕ
    _РасчетыСКонтрагентами.Проведен = ИСТИНА
2 alexeykav
 
04.11.17
16:37
Не могу вывести группировку по Регистратору.

Остатки и обороты не корректные.
3 alexeykav
 
04.11.17
16:39
Добавление поля ПериодСекунда не помогает
4 alexeykav
 
04.11.17
16:43
Роли по Регистратору, Периоду выставлял
5 alexeykav
 
04.11.17
16:45
Всю голову уже сломал
6 alexeykav
 
04.11.17
16:57
Можно ли объединить регистраторы из несткольких таблиц в одну?
7 Franchiser
 
гуру
04.11.17
17:00
Зачем такие сложности в запросе, когда можно просто использовать временные таблицы. Используй ИР, посмотри макет компоновки, возможно найдешь причину. Если не ошибаюсь помимо периодичности "период секунда" для корректности нужно выбирать обороты по Дт и Кт
8 alexeykav
 
04.11.17
17:14
Попробую, отпишусь
9 mistеr
 
04.11.17
18:54
(1) Счет.Код = "76.09"... Жесть какая. Про параметры не слышал?

Данные из регистра сначала собери в ВТ по всем интересующим счетам. Намного проще станет.

По сути вопроса. Как ты представляешь СКД посчитает тебе остатки и обороты, если в полях выборки нет СЧЕТА? Без счета роли смысла на имеют.
10 mikecool
 
04.11.17
20:18
можно еще покопать в сторону нескольких источников данных
11 Franchiser
 
гуру
04.11.17
23:02
И ещё всем ты указываешь параметры для виртуальных таблиц? В СКД это не нужно, по крайней мере в данном случае, есть стандартные параметры
12 ВыборКогда Тогда
 
05.11.17
01:50
(0)

Выбери во временную таблицу нужные данные из документа (контрагент, договор и тп.)

ВЫБРАТЬ РасчетыСКонтрагентами.Контрагент,_
РасчетыСКонтрагентами.ВыбДоговор
ПОМЕСТИТЬ ВТДанныеРасчетовСКонтрагентами
ИЗ Документ._РасчетыСКонтрагентами КАК _РасчетыСКонтрагентами
ГДЕ  _РасчетыСКонтрагентами.Проведен = ИСТИНА

А вторую часть запроса переделай на запрос к одной виртуальной таблице остатки и обороты,

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

Если с каждого счета нужно брать разные поля, тогда можно через ВЫБОР КОГДА ТаблицаХозрасчетный.Счет=&ОпределенныеСчет ТОГДА ИНАЧЕ КОНЕЦ
Ошибка? Это не ошибка, это системная функция.