Как выбрать в запросе контрагентов, которые формируют 85% выручки?

1. user705522_constantin_h 35 18.12.18 17:56 Сейчас в теме
Как выбрать в запросе контрагентов, которые формируют 85% выручки?
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 18.12.18 18:10 Сейчас в теме
(1) "ок google, ABC анализ в 1С"
4. user705522_constantin_h 35 18.12.18 18:15 Сейчас в теме
(2)Это первая часть задачи. Нужно из этих контрагентов по результатам прошлого года найти тех, которых потеряли в текущем. Из ABC анализа (кстати там процент фиксированный или устанавливается) можно сохранить список контрагентов?
3. oleg-x 26 18.12.18 18:14 Сейчас в теме
(1) В одном запросе такое врятли можно сделать. По сути надо отобрать количество записей в зависимости от суммы.
То есть отсортировать по убыванию выручки и отобрать определенное количество записей.
Может кто подскажет способ, без промежуточной обработки, мне бы самому пригодилось :-)
5. user705522_constantin_h 35 18.12.18 18:15 Сейчас в теме
(3)Пусть в нескольких, можно даже через обработку. Я идею не могу сформировать.
7. oleg-x 26 18.12.18 18:22 Сейчас в теме
(5) Формируешь таблицу с контрагентами и суммой их выручки. Сортируешь её по убыванию.
В цикле забираешь те записи, пока сумма не дойдет до нужного процента от общей, а там прервать.
Это у тебя будет основная таблица. А дальше если надо еще в предыдущем годе, то из этой таблице получаешь список контрагентов (выгрузить колонку), делаешь запрос по ним и соединяешь две таблицы в запросе и получишь две цифры, этот год и прошлый.
Teut_Vlad; +1 Ответить
8. Sapiens_bru 4 18.12.18 19:37 Сейчас в теме
(3)У них там в большом SQL есть всякие курсоры, current row, row number, хранимые процедуры итд.
А у нас в нашем уютном 1С есть только один способ решить эту задачу в запросе. (ну на самом деле два, но коррелирующие подзапросы ваще нельзя нельзя). Это соединение таблицы с самой собой.
Берем таблицу типа
Клиент1 1000
Клиент2 300
Клиент3 300
Клиент4 50
И соединяем её с самой собой внутренним соединением по условию "Выбор когда Т1.Сумма=Т2.Сумма тогда Т1.Ссылка=<Т2.Ссылка иначе Т1.Сумма<Т2.Сумма Конец" . Это условие даст нам соединение со всеми строками правой таблицы у которых сумма больше, а если сумма равна то теми у которых Ссылка больше или равна. То есть со всеми строками выше и включая текущую
Клиент1 1000 Клиент1 1000
Клиент2 300 Клиент1 1000
Клиент2 300 Клиент2 300
Клиент3 300 Клиент1 1000
Клиент3 300 Клиент2 300
Клиент3 300 Клиент3 300
Клиент4 50 Клиент1 1000
Клиент4 50 Клиент2 300
Клиент4 50 Клиент3 300
Клиент4 50 Клиент4 50
Колонку 3 привёл для примера результата, её получать не нужно, достаточно суммы
Клиент1 1000 1000
Клиент2 300 1300
Клиент3 300 1600
Клиент4 50 1650
Достаточно подставить значение общей суммы в отдельную колонку и сравнить нарастающий итог. Там где он превысит 85% отбросим строки.

Этот метод нужно применять с опаской - он очень прожорлив до памяти. Для 1000 строк в таблице будет совершено миллион операций сравнения и получена таблица в полмиллиона строк. Но как я и писал выше - других методов работы в SQL фирма 1С нам не дала.
Идеологически верным будет выгрузить результат в ТЗ, обсчитать и запихнуть обратно в запрос, если такая задача встречается где-то в середине длинного запроса
user705522_constantin_h; +1 Ответить
9. Teut_Vlad 179 19.12.18 00:20 Сейчас в теме
Попытался сделать нужный отчет на КА 1.1
С 2 наборами данных, из РН ДенежныеСредства.Обороты
Почему то второй набор данных игнорирует другой установленный Период параметр, и берет значение из первого
Прикрепленные файлы:
ДоляВыручкиКонтрагентов.erf
user705522_constantin_h; +1 Ответить
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)