Имя: Пароль:
1C
1C 7.7
v7: SKU (количество номенклатурных позиций)
, ,
0 Vitekkkk
 
16.10.13
10:26
Всем привет!
Помогите с такой задачей:
Нужно сделать отчет по SKU (количество номенклатурных позиций) с настраиваемыми группировками: канал сбыта, менеджер, контрагент.
Я так понял что из запроса тупо этого не получу.
Но в ТЗ крутить тоже геморойно. может кто делал что то подобное и нашел оптимальное решение.(Время формирования, универсальность в настройке).
1 Aleksey
 
16.10.13
10:27
почему запросом не получишь?
В чем гемор ТЗ?
2 NikVars
 
16.10.13
10:32
(0) Оптимальным решением для конфигурации Х1 размером Y1 на железе Y1 с учетом софта X2, при количестве пользователей Y2 при формировании отчета Z2 является система линейных уравнений с 6-ю неизвестными. Линейность взята в качестве тривиального случая.
3 Vitekkkk
 
16.10.13
10:35
(1) если ты правильно понял задачу, и все же полагаешь что можно через запрос дай пример плиз.
(2)Кури
4 Aleksey
 
16.10.13
10:37
(3) Пример чего? Сферического запроса  в вакууме?
Ни конфигурация, ни что и где и как лежит
5 Aleksey
 
16.10.13
10:38
Пример, ради бога
Select Поля from Таблица Where Условия

Пойдёт в качестве примера?
6 NikVars
 
16.10.13
10:43
(3) Примеры запросов тебе всегда рад выдать Конструктор Запросов!
Запускаешь конфигуратор, далее Файл - Новый - Внешний отчет. Открываешь модуль отчета. Далее Конструкторы - Запрос...
Далее чего нажмешь - то и получишь.
7 viktor_vv
 
16.10.13
11:00
(0) Просвети, каким образом с номенклатурой свзяаны

канал сбыта, менеджер, контрагент.

А то как-то не телепатируется.
8 ADirks
 
16.10.13
11:06
(0) Крутить запрос, и крутить ТЗ - разница в общем то невелика. Вот тупо крутить, и с умом - тут разница может быть в порядки.

(7) Номенклатура и Контрагенты - это такие штуки, с которыми всё что угодно связано :)
9 viktor_vv
 
16.10.13
11:09
(8) Ну вот захотелось конкретики :), кого на чем крутить.
А так-то если тупо из запроса, то понятно, что не получить :), если немного подумать, то все может быть.
10 Vitekkkk
 
16.10.13
11:28
(4)(5)
    Вот к примеру буду делать так.


    Текст =
    "//{{ЗАПРОС(Сформировать)
    |Период с ДатаНач по ДатаКон;
    |Обрабатывать НеПомеченныеНаУдаление;
    |КаналСбыта = Регистр.Продажи.Контрагент.КаналСбыта;
    |Контрагент = Регистр.Продажи.Контрагент;
    |ТипХоз = Регистр.Продажи.ТипХозОперации;
    |Номенклатура = Регистр.Продажи.Номенклатура;
    |Количество = Регистр.Продажи.Количество;
    |Менеджер = Регистр.Продажи.Контрагент.Менеджер;
    |Функция Кол = Сумма(Количество);
    |";

    //Здесь устанавливаются условия и группировки в зависимости от пользовательских настроек
    // Саму процедуру не пишу она на суть вопроса не влияет

    УстановитьУсловиеЗапроса(1, ФлажокУсловие1, МоноУсловие1, СписокУсловие1, "ТипХоз",                           Текст, Заголовок);
    УстановитьУсловиеЗапроса(2, ФлажокУсловие2, МоноУсловие2, СписокУсловие2, "КаналСбыта",        Текст, Заголовок);
    УстановитьУсловиеЗапроса(3, ФлажокУсловие3, МоноУсловие3, СписокУсловие3, "Менеджер",        Текст, Заголовок);
    УстановитьУсловиеЗапроса(4, ФлажокУсловие4, МоноУсловие4, СписокУсловие4, "Контрагент",        Текст, Заголовок);

    // Дальше выполняем запрос

    Если Запрос.Выполнить(Текст) = 0 Тогда
        Возврат;
    КонецЕсли;

    ЗаголовокПервойКолонки = "";
    НомерПоследнегоЗначения = СписокГруппировок.РазмерСписка();
    Если НомерПоследнегоЗначения > 0 Тогда
        СписокГруппировок.ПолучитьЗначение(НомерПоследнегоЗначения, ЗаголовокПервойКолонки);
    КонецЕсли;

    Таб.ВывестиСекцию("Заголовок|Основной");
    Таб.ПрисоединитьСекцию("Заголовок|План");

    Пока Запрос.Группировка(1) = 1 Цикл
        СформироватьСтроку(1,ДляСвертки);
        Если КоличествоГруппировок = 1 Тогда
            Продолжить;
        КонецЕсли;
        Пока Запрос.Группировка(2) = 1 Цикл
            СформироватьСтроку(2,ДляСвертки);
            Если КоличествоГруппировок = 2 Тогда
                Продолжить;
            КонецЕсли;
            Пока Запрос.Группировка(3) = 1 Цикл
                СформироватьСтроку(3,ДляСвертки);
                Если КоличествоГруппировок = 3 Тогда
                    Продолжить;
                КонецЕсли;
                Пока Запрос.Группировка(4) = 1 Цикл
                    СформироватьСтроку(4,ДляСвертки);
                    Если КоличествоГруппировок = 4 Тогда
                        Продолжить;
                    КонецЕсли;
                    Пока Запрос.Группировка(5) = 1 Цикл        
                        СформироватьСтроку(5);                  
                        Если КоличествоГруппировок = 5 Тогда    
                            Продолжить;                        
                        КонецЕсли;                              
                    КонецЦикла;                                
                КонецЦикла;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;

    //отсюда поподаем в процедуру СформироватьСтроку() ну и там формируем что нужно.
    //А вот что нужно поясни!!!
11 viktor_vv
 
16.10.13
11:33
(10) А вопрос в чем? Вроде все как тебе надо.
12 Vitekkkk
 
16.10.13
11:34
Повторюсь мне нужно количество номенклатурных позиций.
Хотя... Конкретнне на примере
Продали Иванову И.И:
дата 01.01.01
Ном1 - 5шт
Ном2 - 10шт
Дата 02.01.01
Ном1 -2шт
Ном3 -3шт

Дата 03.01.01
Ном1 - 1шт
Ном2 - 15шт

В отчете мне нужно видеть на примере одной группировки:
Контрагент          SKU
Иванов И.И.         3  т.е. обшщее количество позиций проданных
13 Vitekkkk
 
16.10.13
11:36
ну я в запросе количество Килограмм получаю, а мне нужно получать количество номенклатурных позици по каждой группировке
14 Vitekkkk
 
16.10.13
11:37
(11)пост выше тебе
15 monsterZE
 
16.10.13
11:38
=) на а в чем проблема то? продажи клиенту свернуть по товару
16 monsterZE
 
16.10.13
11:38
количество строк - вот тебе скю
17 Vitekkkk
 
16.10.13
11:40
(16)подумай и увидишь причину
18 Vitekkkk
 
16.10.13
11:40
много писать очнь чтоб пояснить причину
19 monsterZE
 
16.10.13
11:40
накладывай свои условия на "отчет по продажам" и сворачивай его по товару
20 monsterZE
 
16.10.13
11:41
(18) =)))) ну не пиши
21 viktor_vv
 
16.10.13
11:46
(12) Ну так-то да, в запросе не получишь этого. Это по каждой группировке надо выгружать и сворачивать.
22 Mikeware
 
16.10.13
11:50
гы.
http://i023.radikal.ru/1310/14/9e23bd088967.jpg
Любой разрез аналитики...
23 viktor_vv
 
16.10.13
11:51
(21)+ Должна помочь индексированная таблица из 1С++ с методом КоличествоСтрок().
Это перед выводом выгрузить в индексированную ТЗ подобавлять необходимых индексов, и при выводе группировок получать количество строк по этим индексам.
24 viktor_vv
 
16.10.13
11:53
(22) Прикольно :).
25 Vitekkkk
 
16.10.13
11:53
(22) Там количество продаж а не SKU
26 Vitekkkk
 
16.10.13
11:54
(22) где нашел такое?
27 КонецЦикла
 
16.10.13
11:56
http://1c911.by/stati_1s/statya-kak-ispolzovat-indeksirovannuyu-tablicu-znacheniy-1s.htm

Там же есть и пример отчета (до и после)
28 Vitekkkk
 
16.10.13
12:33
(27)Спсаибо! Сейчас попробую.... отпишусь
29 monsterZE
 
16.10.13
12:50
как-то так =)

    ТекстЗапроса = "
    |SELECT      
    |     $Док.Клиент as [Клиент $Справочник.Клиенты]
    |    ,COUNT($ДокСтр.Товар) as СКЮ
    |FROM
    |    $ДокументСтроки.РасходнаяНал as ДокСтр (NOLOCK)
    |INNER JOIN
    |    $Документ.РасходнаяНал as Док (NOLOCK) ON Док.IDDoc = ДокСтр.IDDoc
    |INNER JOIN
    |     _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокСтр.IDDoc
    |     AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |     AND Жур.Closed & 1 = 1
    |WHERE
    |     $Док.Клиент IN (SELECT Val FROM #ГруппаК)
    |GROUP BY
    |    $Док.Клиент
    |ORDER BY
    |    $Док.Клиент
    |";
30 monsterZE
 
16.10.13
12:53
(29) товар не свернул =)
31 monsterZE
 
16.10.13
12:59
от так вот

    ТекстЗапроса = "
    |SELECT      
    |     Подзапрос.Клиент as [Клиент $Справочник.Клиенты]
    |    ,COUNT(Подзапрос.Товар) as СКЮ
    |FROM
    |    (
    |    SELECT      
    |         $Док.Клиент as Клиент
    |        ,$ДокСтр.Товар as Товар
    |    FROM
    |        $ДокументСтроки.РасходнаяНал as ДокСтр (NOLOCK)
    |    INNER JOIN
    |        $Документ.РасходнаяНал as Док (NOLOCK) ON Док.IDDoc = ДокСтр.IDDoc
    |    INNER JOIN
    |         _1SJourn as Жур (NOLOCK) ON Жур.IDDoc = ДокСтр.IDDoc
    |         AND Жур.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~
    |         AND Жур.Closed & 1 = 1
    |    WHERE
    |         $Док.Клиент IN (SELECT Val FROM #ГруппаК)
    |    GROUP BY
    |        $Док.Клиент, $ДокСтр.Товар
    |    ) as Подзапрос
    |GROUP BY
    |    Подзапрос.Клиент
    |ORDER BY
    |    Подзапрос.Клиент
    |";
32 viktor_vv
 
16.10.13
14:07
(31) В первом запросе можно было просто

COUNT(Distinct $ДокСтр.Товар) as СКЮ

но ему не поможет на нескольких группирвоках.
33 monsterZE
 
16.10.13
14:21
(32) точно =) спос
34 ADirks
 
16.10.13
14:27
кстати, SKU - это Stock Keeping Unit, т.е. номенклатура по нашему
35 Mikeware
 
16.10.13
14:39
(25) мне просто не надо было "по товарам". но добавить этот разрез - ровно три строки.
(26) не "нашел", а "сделал".
36 Злопчинский
 
16.10.13
23:22
(0) формируешь плоскую ТЗ по виду
Измерение1,Измерение2...,Число1,Число2...
.
подсовываешь ее в "универсальный отчет по ТЗ"
.
выводишь группировками/шахматками.
.
http://infostart.ru/public/14794/
.
не олап конечно и не панацея, но в большинстве случаев хватает.
37 Злопчинский
 
16.10.13
23:30
(34) ой ли номенклатура? ане раздельные учитываемые отдельно единицы измерени яноменклатуры..?
.
товар, который отдельно учитывается в коробах и отдельно в блоках - это будет один SKU или 2 SKU..?
38 Jaffar
 
17.10.13
12:44
(2) "Оптимальным решением для конфигурации Х1 размером Y1 на железе Y1 с учетом софта X2, при количестве пользователей Y2 при формировании отчета Z2"
Y2 мало. лучше Z14.
39 Jaffar
 
17.10.13
12:47
(37) у нас - один. и пофих, как он отгружался.