Имя: Пароль:
1C
1С v8
Запрос к регистру накопления
0 Shmidt
 
07.04.14
16:45
Из регистра накопления "ПродажиОбороты" необходимо выбрать записи только по тем Контрагентам, записи по которым есть в каждом месяце периода. Пол дня голову ломаю (((
1 Господин ПЖ
 
07.04.14
16:47
над чем... вроде несложно, особенно при живом произв. календаре
2 shuhard
 
07.04.14
16:48
(0) делай раз, привести в запросе движения к началу месяца, делай два сгруппировать по началу месяца, делай три сосчитать число группировок, делай четыре сравнить с числом месяцев в периоде, что несложно получить путем определения разницы дат в месяцах
3 Shmidt
 
07.04.14
16:49
Ну запрос я написал. Делается все, кроме отбора "в каждом месяце"
4 Maxus43
 
07.04.14
16:49
(1) зачем календарь? в той задачке излишен он имхо
5 Зойч
 
07.04.14
16:50
таблица по периодам, соединение с таблицей данных. Если NULL то оборот = -1.
Группировка по контрагентам, где минимум (оборот) > -1
6 Shmidt
 
07.04.14
16:50
Просто не соображу как устроить проверку, что по измерению Контрагент есть запись в каждом месяце?
7 Shmidt
 
07.04.14
16:52
(5) таблица по периодам - тупо из Регистра выбрать поле период и все?
Если NULL то оборот = -1 это условие куда сунуть?
8 Господин ПЖ
 
07.04.14
16:54
(4) ну можно как в (2), закладываться на число записей
9 shuhard
 
07.04.14
16:57
(3)[Ну запрос я написал. Делается все, кроме отбора "в каждом месяце"]
т.е. ты ни фига не сделал
10 Classic
 
07.04.14
16:57
(6)

Лениво в (2) посмотреть?

ВЫБРАТЬ
   РН.Контрагент
ИЗ РН.Продажи.Обороты(&НачПер, &КонПер,Месяц) КАК РН
СГРУППИРОВАТЬ ПО
   РН.Контрагент
ИМЕЮЩИЕ КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РН.Период) = РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&НачПер, МЕСЯЦ), НАЧАЛОПЕРИОДА(&КонПер, МЕСЯЦ), МЕСЯЦ)
11 Shmidt
 
07.04.14
17:08
Что-то я похоже устал, вообще не соображаю.
Вот запрос:
ВЫБРАТЬ
    ПродажиОбороты.СтоимостьОборот КАК Стоимость,
    ПродажиОбороты.ПериодМесяц КАК Месяц,
    ПродажиОбороты.Контрагент.ЮрФизЛицо.Ссылка КАК ЮрФизЛицо,
    ПродажиОбороты.Регистратор.Ссылка
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты
ГДЕ
    ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
12 Shmidt
 
07.04.14
17:08
И куда внедрить (10) ? Или это во временной таблице должно быть
13 Shmidt
 
07.04.14
17:15
Ну блин, помогите пожалуйста! Все уже есть только выборку эту доделать и со спокойной душой можно домой идти!
14 Wobland
 
07.04.14
17:17
(13) сделай раз
15 Shmidt
 
07.04.14
17:21
(14) сделал раз

ВЫБРАТЬ
    ПродажиОбороты.СтоимостьОборот КАК Стоимость,
    НАЧАЛОПЕРИОДА(ПродажиОбороты.ПериодМесяц, МЕСЯЦ) КАК Месяц,
    ПродажиОбороты.Контрагент.ЮрФизЛицо.Ссылка КАК ЮрФизЛицо,
    ПродажиОбороты.Регистратор.Ссылка
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиОбороты
ГДЕ
    ПродажиОбороты.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
16 Wobland
 
07.04.14
17:24
теперь два
17 Shmidt
 
07.04.14
17:28
Ну 2 понятно, 3 и 4 в каком месте делать, вот вопрос
18 Wobland
 
07.04.14
17:34
сумма(1) + разностьдат
19 shuhard
 
07.04.14
17:41
(10) а пофиг 1С-ке в определении дельты
ВЫБРАТЬ
    &ДатаНач,
    &ДатаФин,
    РАЗНОСТЬДАТ(&ДатаНач, &ДатаФин, МЕСЯЦ) КАК ДельтаМЕсяцы

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

ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(&ДатаНач),
    &ДатаФин,
    РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ), &ДатаФин, МЕСЯЦ)
    
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ),
    КонецПериода(&ДатаФин,Месяц),
    РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ),КонецПериода(&ДатаФин,Месяц), МЕСЯЦ)
    
ОБЪЕДИНИТЬ ВСЕ
                                                        
ВЫБРАТЬ
    НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ),
    НАЧАЛОПЕРИОДА(&ДатаФин,Месяц),
    РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&ДатаНач, МЕСЯЦ),НАЧАЛОПЕРИОДА(&ДатаФин,Месяц), МЕСЯЦ)
    
    ДатаНач    ДатаФин    ДельтаМЕсяцы
31.01.2010 0:00:00    31.12.2014 23:59:59    59
31.01.2010 0:00:00    31.12.2014 23:59:59    59
01.01.2010 0:00:00    31.12.2014 23:59:59    59
01.01.2010 0:00:00    01.12.2014 0:00:00    59
20 shuhard
 
07.04.14
17:42
(10) итого:
ВЫБРАТЬ
    ПродажиОбороты.Контрагент
ИЗ
    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаФин, Месяц, ) КАК ПродажиОбороты

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Контрагент
Имеющие
КОЛИЧЕСТВО(ПродажиОбороты.Период)=РАЗНОСТЬДАТ(&ДатаНач,&ДатаФин, Месяц)
21 Classic
 
07.04.14
18:28
(20)
Я перестраховался:)
22 shuhard
 
07.04.14
19:44
(21) =)
23 Shmidt
 
08.04.14
16:37
Не вышла шкатулка малахитовая (((
24 toypaul
 
гуру
08.04.14
16:42
что-то типа

select f from t
where f in
(select f,count(d)
from (select f,d from t) t
gropy by f
having count(d) = тут кол-во месяцев за период)
25 toypaul
 
гуру
08.04.14
16:43
вот так правильней

select f from t

where f in
(select f,count(d)

from (select f,d from t group by f,d) t
gropy by f
having count(d) = тут кол-во месяцев за период)
26 toypaul
 
гуру
08.04.14
16:44
вот так ЕЩЕ правильней :)

select f from t

where f in
(select f
from (select f,d from t group by f,d) t
gropy by f
having count(d) = тут кол-во месяцев за период)
27 Shmidt
 
10.04.14
10:56
(20) не заработал, тема до сих пор открыта...
Поправка:
Из РН "ПродажиОбороты" необходимо получить количество Клиентов, которые покупали товары в каждом месяце периода с группировкой по периоду и по признаку Юр/Физ.

Очень сильно надо!
28 Shmidt
 
10.04.14
11:14
Да что же за печаль? ((
29 ИС-2
 
naïve
10.04.14
12:25
получилось или нет?
30 Shmidt
 
11.04.14
10:56
Не работает эта печалль никак!
31 Shmidt
 
11.04.14
10:59
Должно получиться примерно в таком виде. Прокупленные - контрагенты, которые покупают в каждом месяце

    прокупленные        
месяц    физ    юр    всего

октябрь    53    8    61
ноябрь     90    14    104
декабрь    119    21    140
январь    145    27    172
февраль    157    65    222
32 Laerys
 
11.04.14
11:08
Мне кажется такой результат не может соответствовать условию, если у тебя контрагенты в каждом месяце периода были, то их количество во всем периоде не должно меняться?
33 Shmidt
 
11.04.14
11:41
(32) Да это пример Формы. Данные менеджер от балды вбивал
34 Laerys
 
11.04.14
11:53
Да сделай программную обработку и выведи в макет отчета, если тебя это в пятницу держит)
35 Shmidt
 
11.04.14
11:55
Уже разобрался )))
36 Shmidt
 
11.04.14
11:55
ВЫБРАТЬ
    ВложенныйЗапрос1.Период КАК Период,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ВложенныйЗапрос1.КонтрагентСсылка) КАК КонтрагентСсылка,
    ВложенныйЗапрос1.КонтрагентЮрФизЛицоСсылка
ИЗ
    (ВЫБРАТЬ
        КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиОбороты.Период) КАК ПериодКоличество,
        ПродажиОбороты.Контрагент.Ссылка КАК КонтрагентСсылка,
        ПродажиОбороты.Контрагент.ЮрФизЛицо.Ссылка КАК КонтрагентЮрФизЛицоСсылка
    ИЗ
        РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Месяц, ) КАК ПродажиОбороты
    
    СГРУППИРОВАТЬ ПО
        ПродажиОбороты.Контрагент.Ссылка) КАК ВложенныйЗапрос
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПродажиОбороты.Период КАК Период,
            ПродажиОбороты.Контрагент.Ссылка КАК КонтрагентСсылка,
            ПродажиОбороты.Контрагент.ЮрФизЛицо.Ссылка КАК КонтрагентЮрФизЛицоСсылка
        ИЗ
            РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, Месяц, ) КАК ПродажиОбороты
        
        СГРУППИРОВАТЬ ПО
            ПродажиОбороты.Период,
            ПродажиОбороты.Контрагент.Ссылка) КАК ВложенныйЗапрос1
        ПО ВложенныйЗапрос.КонтрагентСсылка = ВложенныйЗапрос1.КонтрагентСсылка
            И ВложенныйЗапрос.КонтрагентЮрФизЛицоСсылка = ВложенныйЗапрос1.КонтрагентЮрФизЛицоСсылка
ГДЕ
    ВложенныйЗапрос.ПериодКоличество >= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, МЕСЯЦ)

СГРУППИРОВАТЬ ПО
    ВложенныйЗапрос1.Период,
    ВложенныйЗапрос1.КонтрагентЮрФизЛицоСсылка
37 Shmidt
 
11.04.14
11:55
Вот так все работает
38 Shmidt
 
11.04.14
11:56
Это просто 1/4 всего запроса для отчета
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.