Имя: Пароль:
1C
1С v8
Как узнать в запросе количество строк по нужной группировке
0 Sharmon
 
07.02.14
12:53
Что-то не могу сообразить.

Есть отчет по регистру накопления Пробдажи (БП).
СКД.

Группировки по строкам:
Контрагент.ТорговыйАгент
Период
Контрагент

Мне нужно вывести дополнительную колонку с количеством контрагентов, по которым были продажи.
Т.е. в детальной строке, если сумма продажи > 0, то кол-во = 1.
А в итоге по контрагенту (и во всех вышестоящих) идет общее количество.
1 Sharmon
 
07.02.14
12:57
Т.е. другими словами, мне нужно подсчитать кол-во ненулевых сумм в разрезе контрагентов.

Пробую так. Добавил поле в запрос КоличествоГрупп:

ВЫБОР
    КОГДА ПродажиОбороты.СтоимостьОборот > 0
        ТОГДА 1
    ИНАЧЕ 0
КОНЕЦ

Но выводит кол-во в разрезе номенклатуры, а не контрагентов.
2 mr_K
 
07.02.14
13:00
http://kb.mista.ru/article.php?id=703

вот это посмотри
3 Sharmon
 
07.02.14
13:03
Спасибо. Не совсем то, что нужно.
4 andreymongol82
 
07.02.14
13:03
Самый простой вариант в лоб. Первая временная таблица - считаешь контрагентов. Вторая выбираешь по всем разрезам. Основной запрос - вторая таблица левим соединением к первым.
5 Sharmon
 
07.02.14
13:05
попробую. спасибо
6 Sharmon
 
07.02.14
13:18
Такой вариант тоже не прошел. Все равно возвращается количество в разрезе номенклатуры (
7 andreymongol82
 
07.02.14
13:27
А можно весь запрос показать?
8 Sharmon
 
07.02.14
13:28
Запрос сейчас такой:

ВЫБРАТЬ
    Контрагенты.Ссылка,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ 1) КАК Количество
ПОМЕСТИТЬ Контрагенты
ИЗ
    Справочник.Контрагенты КАК Контрагенты

СГРУППИРОВАТЬ ПО
    Контрагенты.Ссылка
;

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Контрагент,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.ЗаказПокупателя,
    ПродажиОбороты.ДоговорКонтрагента,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.Подразделение,
    ПродажиОбороты.Проект,
    ПродажиОбороты.Организация,
    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот,
    ПродажиОбороты.НДСОборот,
    ПродажиОбороты.Период,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
    ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
    Контрагенты.Количество,
    ПродажиОбороты.Номенклатура
9 1Сергей
 
07.02.14
13:29
Количество(ПродажиОбороты.Контрагент) КАК счетчик
10 Sharmon
 
07.02.14
13:30
3 поля возвращают одно и то же (неверно):

КоличествоГрупп, Поле1, Контрагенты.Количество,

Все возвращают в разрезе номенклатуры (даже когда я ее не вывожу)
11 andreymongol82
 
07.02.14
13:41
В итоге нужно все-таки вывести количество контрагентов всего? Или же в каких-то разрезах?
12 Sharmon
 
07.02.14
13:47
(9) - то же самое что и мои поля.
Запрос теперь такой:

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

СГРУППИРОВАТЬ ПО
    ПродажиОбороты.Контрагент,
    ПродажиОбороты.ХарактеристикаНоменклатуры,
    ПродажиОбороты.ЗаказПокупателя,
    ПродажиОбороты.ДоговорКонтрагента,
    ПродажиОбороты.ДокументПродажи,
    ПродажиОбороты.Подразделение,
    ПродажиОбороты.Проект,
    ПродажиОбороты.Организация,
    ПродажиОбороты.КоличествоОборот,
    ПродажиОбороты.СтоимостьОборот,
    ПродажиОбороты.СтоимостьБезСкидокОборот,
    ПродажиОбороты.НДСОборот,
    ПродажиОбороты.Период,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ПродажиОбороты.Номенклатура.ЕдиницаДляОтчетов.Коэффициент,
    ПродажиОбороты.КоличествоОборот * ПродажиОбороты.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
    ПродажиОбороты.Номенклатура.НоменклатурнаяГруппа,
    ПродажиОбороты.Номенклатура
13 Sharmon
 
07.02.14
13:52
Вот отчет по последнему запросу:

http://i33.fastpic.ru/big/2014/0207/01/36f151afcf3d7451b6d738fe4afa6a01.jpg
14 Sharmon
 
07.02.14
13:54
Там где цифры 2, 3 и т.д. должно быть везде 1.
15 andreymongol82
 
07.02.14
13:57
Картинка недоступна.
16 Sharmon
 
07.02.14
13:58
17 andreymongol82
 
07.02.14
14:20
Вот у меня и в консоле и в скд все время единички
Мож где-то не так написал.

http://files.mail.ru/51CCF15E84F64CC190A7B82C05EBE95D

Правда, там условие не на >0, а на > 100, но вряд ли из-за этого )
18 Sharmon
 
07.02.14
14:28
Если нет группировки, то и будут единицы. Т.е. если выводится номенклатура - все нормально. Но у меня группировка по:

Контрагент.ТорговыйАгент
Период
Контрагент

Т.е. я не вывожу детализацию по номенклатуре.
19 Sharmon
 
07.02.14
14:30
Вот у меня отчет с такими настройками:
http://files.mail.ru/EA00C13AE3DB495C8BC688A77E3C383F
20 Sharmon
 
07.02.14
14:32
Прошу прощения. Не тот отчет. Вот правильный:
http://files.mail.ru/E1823AB4BC0541D8816F617A353949CC
21 butterbean
 
07.02.14
14:49
хз как через настройки СКД, а в запросе можно так:
ВЫБРАТЬ
    Влож.Контрагент.ТорговыйАгент КАК ТорговыйАгент,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Влож.Контрагент) КАК Поле1
ПОМЕСТИТЬ Табл
ИЗ
    (ВЫБРАТЬ
        Продажи.Контрагент КАК Контрагент
    ИЗ
        РегистрНакопления.Продажи.Обороты КАК Продажи
    
    СГРУППИРОВАТЬ ПО
        ДвиженияДенежныхСредствОбороты.Контрагент
    
    ИМЕЮЩИЕ
        СУММА(Продажи.СуммаОборот) > 0) КАК Влож

СГРУППИРОВАТЬ ПО
    Влож.Организация
;
ВЫБРАТЬ *,Табл.ТорговыйАгент,Табл.Поле1 ИЗ РегистрНакопления.Продажи.Обороты КАК Продажи
ЛЕВОЕ СОЕДИНЕНИЕ Табл По Контрагент.ТорговыйАгент = Табл.ТорговыйАгент

и потом в ресурсах СКД по полю Поле1 сделать МАКСИМУМ(Поле1) по группировке ТорговыйАгент
22 Sharmon
 
07.02.14
14:55
(21) что-то какой-то нерабочий код. Можете полный текст запроса выложить?
23 Sharmon
 
07.02.14
15:30
Вобщем рабочее решение такое.
В Ресурсах СКД добавил реквизит "Счетчик", который вычисляется по след. выражению:

Сумма(МАССИВ (ТаблицаЗначений( Различные Счетчик, Контрагент)))

И все красиво как надо:
http://i60.fastpic.ru/big/2014/0207/3d/2b31bf20e7c319e1e7bcaa3b6401f13d.jpg

И даже если детализацию включить по номенклатуре, то же почти корректно (с логической точки зрения):
http://i60.fastpic.ru/http://i60.fastpic.ru/big/2014/0207/aa/9afff73ae89de8825d68b5b5abad13aa.jpg
24 Sharmon
 
07.02.14
15:42
Сам счетчик получаю из запроса след образом:

Количество(ПродажиОбороты.Контрагент) КАК счетчик
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.