Версия для печати темы (https://pro1c.org.ua/index.php?s=c569616a63b566665b27c868dc7ec65a&showtopic=7384)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Количество Торговых Точек в Разрезе Торговых Агентов по Категориям товаров

Автор: Flexy 16.05.12, 11:36

Привет.Знаю, название темы завернул 32541510.gif
ТИС 7.7
Стоит задача видеть количество категорий товаров торговых точек торговых агентов с возможностью развернуть контрагентами.
Из того, что мне пришло в голову и я пробовал:
Запросом к Расходной выбирал, Торгового агента, Контрагента и Товар.
Потом в группировке по товару выбирал его категории.
Потом по каждому Торговому в ТЗ сворачивал его категории.
В другой ТЗ считал количество-торговых точек торгового.
В общем получлось сложно и геморно.Может кто подскажет более оптимальное решение.
И пока что не представляю каким макаром можно посчитать кол-во торговых точек по категориям.
Видеть нужно такое на выходе.


Автор: Ardi 16.05.12, 11:44

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

А потом из этой ТЗ путем свёртки получаем любые варианты.

Автор: Flexy 16.05.12, 12:01

А как свернуть тз по колонке Категория для каждого Торгового?

Ага, затупил.По ходу ТЗ.Свернуть("Торговый","Категория").

Автор: Ardi 16.05.12, 12:08

ТЗ.Свернуть("Агент,Категория","КвоКонтрагентов")

Автор: Flexy 16.05.12, 12:25

Что-то не вяжется.Как увидеть сколько продаж было по каждой категории?

Автор: Ardi 16.05.12, 12:34

в описании темы нету никаких прдаж.

Автор: Flexy 16.05.12, 12:36

Цитата(Ardi @ 16.05.12, 12:34) *
в описании темы нету никаких прдаж.

Не правильно выразился.Теперь надо как-то увидеть в скольких торговых точках отработала каждая категория.

Автор: Ardi 16.05.12, 12:38

ТЗ.Свернуть("Агент,Категория","КвоКонтрагентов")

Автор: Flexy 16.05.12, 14:22

Блин.Не получается.Быть может что-то еще не так делаю?

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

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

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

      ТЗ.ВыбратьСтроку();
   КонецПроцедуры

Автор: Домовик 16.05.12, 16:21

Flexy, в тему я еще широко и глубоко не вникла. Бросилось в глаза, что функции в запросе не используете, а все суммируете при обходе запроса. Посмотрите через конструктор запроса - там есть функция счетчик - кажется так. и то что вижу, можно сделать только запросом + при обходе присоединять вертикальную секцию (категория) (недавно подобную структуру делала, даже тема была заведена).

Автор: Flexy 16.05.12, 16:33

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

Автор: Домовик 16.05.12, 17:47

тз на форме обработки создавали? что там заполнено? можно для контроля тз оставить и смотреть рез свертки по кнопке
"сворачиваете" вроде верно

еще вы плюсуюте при обходе, а нужно просто единицу - новая строка(); квоконтрагентов=1;

Автор: Домовик 16.05.12, 21:20

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

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



такой счетчик лучше делать по значению верхней группировки. Единички проставятся во всех внутренних группировках. У Вас это ТорговыйАгент

Автор: Домовик 17.05.12, 8:37

Еще, если не по ЗАпросу, а по коду обхода Запроса. То привести таблицу к виду, кот указал Ardi, можно где-то так


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



Автор: Flexy 17.05.12, 12:36

Спасибо.Получилось.Но только ТЗ надо было свернуть 2 раза.

ТЗ.Свернуть("ТорговыйАгент,Категория, Контрагент", "КвоКонтрагентов");
ТЗ.Свернуть("ТорговыйАгент,Категория","КвоКонтрагентов");

Автор: Домовик 17.05.12, 13:47

Flexy, а я уже подумала, что Вы меня флудером засчитали. )

про поэтапное сворачивание верно заметили. да. есть такое.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua