Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Количество Торговых Точек в Разрезе Торговых Агентов по Категориям товаров
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Flexy
Привет.Знаю, название темы завернул 32541510.gif
ТИС 7.7
Стоит задача видеть количество категорий товаров торговых точек торговых агентов с возможностью развернуть контрагентами.
Из того, что мне пришло в голову и я пробовал:
Запросом к Расходной выбирал, Торгового агента, Контрагента и Товар.
Потом в группировке по товару выбирал его категории.
Потом по каждому Торговому в ТЗ сворачивал его категории.
В другой ТЗ считал количество-торговых точек торгового.
В общем получлось сложно и геморно.Может кто подскажет более оптимальное решение.
И пока что не представляю каким макаром можно посчитать кол-во торговых точек по категориям.
Видеть нужно такое на выходе.

Ardi
Делаем одну ТЗ с колонками:
Агент|Товар|Категория|Контрагент|КвоКонтрагентов
Вася1|Това1|Категори1|Контраген1|1
Вася2|Това2|Категори2|Контраген2|1
Вася6|Това4|Категори4|Контраген3|1

А потом из этой ТЗ путем свёртки получаем любые варианты.
Flexy
А как свернуть тз по колонке Категория для каждого Торгового?

Ага, затупил.По ходу ТЗ.Свернуть("Торговый","Категория").
Ardi
ТЗ.Свернуть("Агент,Категория","КвоКонтрагентов")
Flexy
Что-то не вяжется.Как увидеть сколько продаж было по каждой категории?
Ardi
в описании темы нету никаких прдаж.
Flexy
Цитата(Ardi @ 16.05.12, 12:34) необходимо зарегистрироваться для просмотра ссылки
в описании темы нету никаких прдаж.

Не правильно выразился.Теперь надо как-то увидеть в скольких торговых точках отработала каждая категория.
Ardi
ТЗ.Свернуть("Агент,Категория","КвоКонтрагентов")
Flexy
Блин.Не получается.Быть может что-то еще не так делаю?

//Создание объекта типа Запрос
    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ТорговыйАгент = Документ.РасходнаяНакладная.Контрагент.ТорговыйАгент;
    |Контрагент = Документ.РасходнаяНакладная.Контрагент;
    |Товар = Документ.РасходнаяНакладная.Товар;
    |Группировка ТорговыйАгент без групп;
    |Группировка Контрагент без групп;
    |Группировка Товар без групп;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);

    Пока Запрос.Группировка(1) = 1 Цикл
        
        // Заполнение полей ТорговыйАгент
    
        ТЗ.НоваяСтрока();
        ТЗ.ТорговыйАгент = Запрос.ТорговыйАгент;
        КвоКатегорий = 0;
        Пока Запрос.Группировка(2) = 1 Цикл
            // Заполнение полей Контрагент
    
        
        ТЗ.Контрагент = Запрос.Контрагент;
        КоличествоКонтрагентов = КоличествоКонтрагентов+1;
        
        Пока Запрос.Группировка(3) = 1 Цикл
                // Заполнение полей Товар
    
        ТЗ.НоваяСтрока();
        ТЗ.Товар = Запрос.Товар;
        
        СпрКатегорий.ИспользоватьВладельца(Запрос.Товар);
        СпрКатегорий.ВыбратьЭлементы();
        Пока СпрКатегорий.ПолучитьЭлемент() = 1 Цикл
             Если СпрКатегорий.Категория.ПометкаУдаления() = 1 Тогда
                 Продолжить;
                Иначе
                 
            ТЗ.НоваяСтрока();
            ТЗ.Категория = СпрКатегорий.Категория;
            ТЗ.КвоКатегорий = КвоКатегорий + 1;
        КонецЕсли;    
        КонецЦикла
        
    КонецЦикла;
    ТЗ.КвоКонтрагентов = КоличествоКонтрагентов;    
КонецЦикла;
    КоличествоКонтрагентов = 0;    
    
    КонецЦикла;
    // Вывод заполненной формы
    
      ТЗ.Свернуть("ТорговыйАгент,Категория","КвоКонтрагентов");

      ТЗ.ВыбратьСтроку();
   КонецПроцедуры
Домовик
Flexy, в тему я еще широко и глубоко не вникла. Бросилось в глаза, что функции в запросе не используете, а все суммируете при обходе запроса. Посмотрите через конструктор запроса - там есть функция счетчик - кажется так. и то что вижу, можно сделать только запросом + при обходе присоединять вертикальную секцию (категория) (недавно подобную структуру делала, даже тема была заведена).
Flexy
Функция счетчик считает только те значения, у которых тип = число.Хотя в СП написано, что она должна считать количество записей в выборке.
У меня нет проблемы в том, что бы присоединить секцию.
Проблема в том, что я не могу посчитать Количество Торговых Точек торгового агента в разрезе категорий товаров.
Еще раз объясню популярно:
Надо видеть что у Торгового Агента Васи Отработано По Категории А1 - 20 точек, по категории Б1 - 5 точек и т.д.
ТЗ как писали выше я уже имею.Но она не сворачивается, как мне надо.
Домовик
тз на форме обработки создавали? что там заполнено? можно для контроля тз оставить и смотреть рез свертки по кнопке
"сворачиваете" вроде верно

еще вы плюсуюте при обходе, а нужно просто единицу - новая строка(); квоконтрагентов=1;
Домовик
счетчик можно заменить таким или похожим способом.(нулевстрока="") в верхних группировках - плюсуюет, т е показывает итоговые суммы.
все бы хорошо, если бы еще группировкой сделать категорию. но это подчиненный справочник к Товару ...

    |контраг = Документ.РасходнаяНакладная.Контрагент.Наименование;
    |Контрагент = Документ.РасходнаяНакладная.Контрагент;
    |Функция Ксчетчик = Сумма(1) когда(контраг <> нулевстрока);



такой счетчик лучше делать по значению верхней группировки. Единички проставятся во всех внутренних группировках. У Вас это ТорговыйАгент
Домовик
Еще, если не по ЗАпросу, а по коду обхода Запроса. То привести таблицу к виду, кот указал Ardi, можно где-то так


  Пока Запрос.Группировка(1) = 1 Цикл
        Пока Запрос.Группировка(2) = 1 Цикл
        
        Пока Запрос.Группировка(3) = 1 Цикл
        
        СпрКатегорий.ИспользоватьВладельца(Запрос.Товар);
        СпрКатегорий.ВыбратьЭлементы();
        Пока СпрКатегорий.ПолучитьЭлемент() = 1 Цикл
             Если СпрКатегорий.Категория.ПометкаУдаления() = 1 Тогда
                 Продолжить;
                Иначе
                
            ТЗ.НоваяСтрока();
        ТЗ.ТорговыйАгент = Запрос.ТорговыйАгент;
        ТЗ.Контрагент = Запрос.Контрагент;
             ТЗ.Товар = Запрос.Товар;
       ТЗ.Категория = СпрКатегорий.Категория;
            ТЗ.КвоКонтрагентов=  1;
        КонецЕсли;    
        КонецЦикла
        
    КонецЦикла;
КонецЦикла;
    
    КонецЦикла;


Flexy
Спасибо.Получилось.Но только ТЗ надо было свернуть 2 раза.
ТЗ.Свернуть("ТорговыйАгент,Категория, Контрагент", "КвоКонтрагентов");
ТЗ.Свернуть("ТорговыйАгент,Категория","КвоКонтрагентов");
Домовик
Flexy, а я уже подумала, что Вы меня флудером засчитали. )

про поэтапное сворачивание верно заметили. да. есть такое.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.