Имя: Пароль:
1C
1С v8
Прошу помощи у понимающих в запросах, запутался
0 Конфигуратор Сеня
 
19.12.11
15:14
ВЫБРАТЬ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОбороты.Регистратор) КАК ВсегоДокументов,
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОбороты.Клиент) КАК УникальныхКлиентов,
   СУММА(ВЫБОР
           КОГДА ПродажиУслугОстаткиИОбороты.СуммаНачальныйОстаток > 0
               ТОГДА 0
           ИНАЧЕ 1
       КОНЕЦ) КАК ПервичныхКлиентов
ИЗ
   РегистрНакопления.ПродажиУслуг.Обороты(&НачалоПериода, &КонецПериода, Авто, ) КАК ПродажиУслугОбороты
       ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиУслуг.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, ДвиженияИГраницыПериода, ) КАК ПродажиУслугОстаткиИОбороты
       ПО ПродажиУслугОбороты.Клиент = ПродажиУслугОстаткиИОбороты.Клиент
ГДЕ
   ПродажиУслугОбороты.Клиент ССЫЛКА Справочник.Клиенты

Запрос должен считать количество документов продаж услуг, количество уникальных клиентов и количество первичных. С документами и уникальными все просто. С первичными сложнее.
Первичным считаем того, у кого СуммаНачальныйОстаток = 0.
Не могу сообразить как в подлинкованной левым соединением таблице выбрать только уникальных клиентов, т.е. неповторяющихся.
1 Evpatiy
 
19.12.11
15:16
Группируй. Или "ВЫБРАТЬ РАЗЛИЧНЫЕ"
2 Конфигуратор Сеня
 
19.12.11
15:18
(1) я понимаю что надо различных выбирать, но не доходит до меня куда вписать РАЗЛИЧНЫЕ во второй таблице
3 butterbean
 
19.12.11
15:18
нафига тут вообще соединение
4 Конфигуратор Сеня
 
19.12.11
15:19
(3) ты прав, проще два запроса сделать
5 Evpatiy
 
19.12.11
15:21
(2) Вложенный запрос делай.
6 Конфигуратор Сеня
 
19.12.11
15:22
(5) ok, спасибо
7 Ненавижу 1С
 
гуру
19.12.11
15:25
ха:

КОЛИЧЕСТВО( РАЗЛИЧНЫЕ (ВЫБОР
           КОГДА ПродажиУслугОстаткиИОбороты.СуммаНачальныйОстаток > 0
               ТОГДА NULL
           ИНАЧЕ ПродажиУслугОстаткиИОбороты.Клиент
       КОНЕЦ)) КАК ПервичныхКлиентов
8 Конфигуратор Сеня
 
19.12.11
15:42
(7) Красиво! И все из одной таблицы выбирается. Спасибо!
9 azernot
 
19.12.11
15:44
Нафиг не нужны во втором запросе ОстаткиИОбороты, достаточно просто Остатки.
Соответсвенно в проверке поле на равенство нулю проверять так:

Сумма (ВЫБОР
   КОГДА Естьnull(ПродажиУслугОстатки.СуммаОстаток,0) > 0
       ТОГДА 0
   ИНАЧЕ 1
КОНЕЦ)

Т.е. если нет начального остатка, но есть в запросе по оборотам - первичный клиент.
10 azernot
 
19.12.11
15:46
+(9) Да, остатки естественно на начало периода...
11 Ненавижу 1С
 
гуру
19.12.11
15:48
тогда уж

ВЫБРАТЬ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОстаткиИОбороты.Регистратор) КАК ВсегоДокументов,
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОстаткиИОбороты.Клиент) КАК УникальныхКлиентов,
   СУММА(ВЫБОР
           КОГДА ПродажиУслугОстаткиИОбороты.СуммаНачальныйОстаток <= 0
               ТОГДА 1
               ИНАЧЕ 0
       КОНЕЦ) КАК ПервичныхКлиентов
ИЗ
   РегистрНакопления.ПродажиУслуг.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, ДвиженияИГраницыПериода, ) КАК ПродажиУслугОстаткиИОбороты
ГДЕ
  ПродажиУслугОстаткиИОбороты.Клиент ССЫЛКА Справочник.Клиенты
12 azernot
 
19.12.11
15:48
(7) А разве значений не на 1 больше? Само значение NULL не посчитается?
13 azernot
 
19.12.11
15:50
+(9), а не не пойдёт.. Нужно считать количество различных клиентов как тебе предлагают в (7) но с учётом (12). Сумма - даст дубли по количесвту документов  первичного клиента.
14 Конфигуратор Сеня
 
19.12.11
15:51
(11)


ДвиженияИГраницыПериода заменил на Движения, а то цифра огромная вылазит
15 azernot
 
19.12.11
15:51
+(13)
Количество( Различные ВЫБОР
   КОГДА Естьnull(ПродажиУслугОстатки.СуммаОстаток,0) = 0
       ТОГДА ПродажиУслугОстатки.Клиент
   ИНАЧЕ NULL
КОНЕЦ)
16 Конфигуратор Сеня
 
19.12.11
15:56
(15) получается как в (11)
цифры сходятся.
только таблицу с оборотами поставил
17 Конфигуратор Сеня
 
19.12.11
16:07
ВЫБРАТЬ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОстаткиИОбороты.Регистратор) КАК ВсегоДокументов,
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОстаткиИОбороты.Клиент) КАК УникальныхКлиентов,
   СУММА(ВЫБОР
           КОГДА ПродажиУслугОстаткиИОбороты.СуммаНачальныйОстаток <= 0
               ТОГДА 1
           ИНАЧЕ 0
       КОНЕЦ) КАК ПервичныхКлиентов
ИЗ
   РегистрНакопления.ПродажиУслуг.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, Движения, ) КАК ПродажиУслугОстаткиИОбороты
ГДЕ
   ПродажиУслугОстаткиИОбороты.Клиент ССЫЛКА Справочник.Клиенты


вот такой запрос получился благоданя Ненавижу1с, но попадают в него только документы с суммами, а есть и без сумм.
18 Ненавижу 1С
 
гуру
19.12.11
16:20
(17) что за документы без сумм?
19 Конфигуратор Сеня
 
19.12.11
16:23
(18) документы многострочные, но в некоторых поле сумма пуста. Бесплатная консультация, например.

Выяснил что такие документы не попадают в запрос после добавления


СУММА(ВЫБОР
КОГДА ПродажиУслугОстаткиИОбороты.СуммаНачальныйОстаток <= 0
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ) КАК ПервичныхКлиентов

с первыми двумя строками из запроса в (15) все хорошо
20 Ненавижу 1С
 
гуру
19.12.11
16:26
нефига, такие документы вообще не попадают, они же не имеют движений
21 Конфигуратор Сеня
 
19.12.11
16:28
(20) в регистре же есть строка, в ней услуга есть, но нет суммы.
22 Конфигуратор Сеня
 
19.12.11
16:32
ВЫБРАТЬ
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОстаткиИОбороты.Регистратор) КАК ВсегоДокументов,
   КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиУслугОстаткиИОбороты.Клиент) КАК УникальныхКлиентов
ИЗ
   РегистрНакопления.ПродажиУслуг.ОстаткиИОбороты(&НачалоПериода, &КонецПериода, Авто, Движения, ) КАК ПродажиУслугОстаткиИОбороты
ГДЕ
   ПродажиУслугОстаткиИОбороты.Клиент ССЫЛКА Справочник.Клиенты

вот так показывает правильно и кол-во документов (в т.ч. без сумм) и уникальных клиентов. А когда считаем первичных - доки без сумм игнорируются
23 Ненавижу 1С
 
гуру
19.12.11
16:38
а если добавить?

СУММА(ПродажиУслугОстаткиИОбороты.СуммаПриход),
СУММА(ПродажиУслугОстаткиИОбороты.СуммаРасход)
24 Конфигуратор Сеня
 
19.12.11
16:46
не помогло.
25 Конфигуратор Сеня
 
19.12.11
16:56
делаю двумя запросами, спасибо
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой