Имя: Пароль:
1C
1С v8
Выбрать тех у кого перечисления каждый месяц. РегистрБух. Направьте на мысль.
,
0 Oleg_ka
 
18.12.14
07:55
Бухгалтерия предприятия. Регистр Хозрасчетный.
Необходимо выбрать только тех контрагентов, которые делали каждый месяц перечисления на рублевые расчетные счета организации за определенный период и, используя СКД, вывести результат в виде таблицы.

Есть ДатаНачала и  ДатаОкончания. Необходимо запросом по РегистрБухгалтерии.Хозрасчетный.Обороты вытащить только тех КорСубконто1 у которых есть ежемесячное не нулевое СуммаОборотДт по счету ПланСчетов.Хозрасчетный.РасчетныеСчета.


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

Задача решается на уровне запроса?
Задача решается на уровне СКД?

Подтолкните к мысли
1 butterbean
 
18.12.14
07:58
ежемесячное это типа чтобы обязательно каждый месяц платил? типа 1 месяц пропустил и уже не надо?
2 Oleg_ka
 
18.12.14
08:01
(1) Да. Именно так.
3 anaed
 
18.12.14
08:06
(2)
1) построй таблицу месячных оборотов.
2) построй таблицу месяцев входящих в период
3) внутреннее соединение таблиц по месяцу
4 grate
 
18.12.14
08:09
(0) получи количество месяцев в периоде
получи обороты в разрезе контрагентов помесячно
сверни обороты по контрагентам, КОЛИЧЕСТВО() по периодам - получишь количество периодов, в которые были обороты у контрагентов
отбери обороты по контрагентам, у которых количество периодов оборотов равно количеству месяцев
5 ASV
 
18.12.14
08:18

ВЫБРАТЬ
    ВложенныйЗапрос.КорСубконто1,
    ВложенныйЗапрос.СуммаОборотДт
ИЗ
    (ВЫБРАТЬ
        СУММА(ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаОборотДт,
        СУММА(РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)) КАК Поле1,
        СУММА(1) КАК Поле2,
        ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1
    ИЗ
        РегистрБухгалтерии.Хозрасчетный.Обороты(, , Месяц, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , , , ) КАК ХозрасчетныйОбороты
    
    СГРУППИРОВАТЬ ПО
        ХозрасчетныйОбороты.КорСубконто1) КАК ВложенныйЗапрос
ГДЕ
    ВложенныйЗапрос.Поле2 = РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)
6 Oleg_ka
 
18.12.14
12:44
"Изобрел крокодила". Как оптимизировать?
ВЫБРАТЬ
    ХозрасчетныйОбороты1.ПериодМесяц,
    ХозрасчетныйОбороты1.СуммаОборотДт,
    ХозрасчетныйОбороты1.КорСубконто1
ИЗ
    (ВЫБРАТЬ
        КонтрМесяцев.КорСубконто1 КАК Контрагент
    ИЗ
        (ВЫБРАТЬ
            ХозрасчетныйОбороты.КорСубконто1 КАК КорСубконто1,
            КОЛИЧЕСТВО(ХозрасчетныйОбороты.ПериодМесяц) КАК МесяцевСПлатежами
        ИЗ
            РегистрБухгалтерии.Хозрасчетный.Обороты(, , Авто, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , , , ) КАК ХозрасчетныйОбороты
        ГДЕ
            ХозрасчетныйОбороты.СуммаОборотДт > 0
        
        СГРУППИРОВАТЬ ПО
            ХозрасчетныйОбороты.КорСубконто1) КАК КонтрМесяцев
            ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                КОЛИЧЕСТВО(МесяцевВПериоде.ПериодМесяц) КАК КолвоМесяцев
            ИЗ
                РегистрБухгалтерии.Хозрасчетный.Обороты(, , Авто, , , , , ) КАК МесяцевВПериоде) КАК КолвоМесяцевВПериоде
            ПО (КолвоМесяцевВПериоде.КолвоМесяцев = КонтрМесяцев.МесяцевСПлатежами)) КАК ВложенныйЗапрос
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Авто, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , , , ) КАК ХозрасчетныйОбороты1
        ПО ВложенныйЗапрос.Контрагент = ХозрасчетныйОбороты1.КорСубконто1
7 Oleg_ka
 
18.12.14
12:49
1)Выбрал кол-во месяцев в периоде
ВЫБРАТЬ
    КОЛИЧЕСТВО(МесяцевВПериоде.ПериодМесяц) КАК КолвоМесяцев
            ИЗ
    РегистрБухгалтерии.Хозрасчетный.Обороты(, , Авто, , , , , ) КАК МесяцевВПериод


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

3) ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПО (КолвоМесяцевВПериоде.КолвоМесяцев = КонтрМесяцев.МесяцевСПлатежами)
Отобрал контрагентов которые перечисляли платежи каждый месяц.

4) Снова обращаюсь к регистру бухгалтерии и отбираю данные по этим контрагентам.

Понимаю что НЕ оптимально.
8 Oleg_ka
 
18.12.14
12:52
вот в этом месте не оптимально:
ЛЕВОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Авто, Счет В ИЕРАРХИИ (ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетныеСчета)), , , , ) КАК ХозрасчетныйОбороты1
ПО ВложенныйЗапрос.Контрагент = ХозрасчетныйОбороты1.КорСубконто1

Надо ставить в параметры виртуальной таблицы РегистрБухгалтерии.Хозрасчетный.Обороты так ведь?
2 + 2 = 3.9999999999999999999999999999999...