Текущее время: Сб, авг 23 2025, 08:25

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Вывод в отчете последнего поставщика за период
СообщениеДобавлено: Ср, мар 06 2013, 14:37 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, июн 25 2007, 22:27
Сообщения: 95
Пол: Мужской
Всем привет.
[s]Идио[/s]Идеологический вопрос.
Есть отчет в бексе. Остатки, продажи, резервы, зависшие товары и т.д. Отчет выполняется за период (ну скажем, интервал дат).
Нужно в нем вывести последнего поставщика по данному материал-заводу, но с учетом периода. Т.е. вывести, от кого была поставка с максимальной датой, не превыщающей верхнюю границу периода отчета.
Вопрос, соответственно, как это проще всего организовать?
У меня пока есть следующие варианты:
1. Виртуальный признак, в котором пробегаться по движениям. Все здорово, но это будет достаточно медленно, и вообще, не хочется использовать виртуальные признаки без крайней необходимости.
2. Время-зависимый атрибут материал-завода. Но тут возникает нетривиальная логика при возникновении движения задним числом. Нужно будет проанализировать текущие интервалы и перекроить их с учетом появившегося движения.
3. Запихнуть этого поставщика в остатки, которые хранятся на каждый день. Проблема та же, что и в предыдущем пункте - при появлении движения задним числом придется сторнировать существующие строки в остатках и перезаписывать их с новым поставщиком.
4. Вообще отдельный DSO, в котором хранить этого "последнего поставщика" на каждый день. Очень не хочется только ради этого городить отдельный DSO, т.к. в детализации материал-завод-день он будет иметь весьма неслабый объем. Да и проблема движений задним числом тоже остается.

Может, кто посоветует более прямые варианты?

Насколько я понимаю, любые игры со спецагрегациями здесь бесполезны, т.к. это не показатель. Попытались сделать на признаке переменную-формулу, а на нее навесить спецагрегацию, но тоже не прокатило.

ЗЫ. Пытался убедить пользователей, что они занимаются ерундой и что информация, кто был последним поставщиком данного товара по состоянию на давно прошедший момент, бесполезна. Но убедить не удалось, так что теперь выбираю вариант реализации.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в отчете последнего поставщика за период
СообщениеДобавлено: Ср, мар 06 2013, 16:12 
Начинающий
Начинающий

Зарегистрирован:
Чт, сен 06 2012, 12:07
Сообщения: 23
Откуда: рядом с Гондурасом
Пол: Мужской
Странно, что не помогает показатель с переменной формулой и спец. агрегацией. По идее, должно работать. Последнее время было много нот по поводу спец. агрегации и переменной формулы.


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вывод в отчете последнего поставщика за период
СообщениеДобавлено: Пн, мар 11 2013, 09:24 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Исходные данные:

Code:
Завод Поставщик Дата поставки Объем поставки Дата поставки (как показатель)
1   1   01.01.2013   5,000   734.870
1   2   01.02.2013   10,000   734.901
1   3   02.01.2013   20,000   734.871
2   1   01.03.2013   200,000   734.929
2   1   05.03.2013   50,000   734.933
2   2   02.03.2013   100,000   734.930
2   3   03.03.2013   300,000   734.931
3   1   01.01.2011   100,000   734.139
3   1   01.01.2012   50,000   734.504
3   1   01.01.2013   400,000   734.870
3   2   01.01.2011   100,000   734.139
3   2   01.01.2012   200,000   734.504
3   3   01.01.2013   300,000   734.870

Результат (если на дату поставки было несколько движений, то будут выведены несколько поставщиков):

Code:
Завод Дата последней поставки Поставщик Объем поставки
Plant 1   01.02.2013   Provider 2   10,000
Plant 2   05.03.2013   Provider 1   50,000
Plant 3   01.01.2013   Provider 1   400,000
Plant 3      01.01.2013      Provider 3   300,000

Требуется модификация провайдера:

Вводим дополнительный показатель "Дата поставки", который при заполнении провайдера будет равен признаку "Дата поставки"

Запрос:

В строках отчета признаки:
- Завод
- Дата поставки
- Провайдер

В столбцах:
- показатель Дата поставки, ограниченный признаками Дата поставки и Провайдер (на обоих признаках выбрана опция константа-выбор)
- формула Последняя дата поставки, в ней показатель Дата поставки из предыдущего пункта, в спецагрегации ставим Последнее значение по признаку Дата поставки
- формула Флаг, в ней создаем переменную VAR_1 на замену из признака Дата поставки, в самом выражении формулы пишем VAR_1 == формула Последняя дата поставки
- показатель Объем поставки
- формула Объем поставки, в ней показатель Объем поставки * Флаг

Скрываем все показатели и формулы за исключением формулы Объем поставки, в свойствах запроса выставляем удаление нулевых строк (в качестве альтернативы можно было бы и условия использовать, в ряде случаев можно получить некоторое преимущество)

Примечания:

1. Предполагается, что объем поставки не может быть равен нулю
2. Если в провайдере была сторнирована строка, то ее показатели станут равны нулю, что противоречит п. 1 ("ноги растут" из того, что при работе спецагрегация Последнее значение по дате поставки будет анализировать строки и с нулевыми показателями тоже; вывод такой - либо использовать сжатие куба, либо использовать удаление строк, если провайдер DSO)


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вывод в отчете последнего поставщика за период
СообщениеДобавлено: Пн, мар 11 2013, 18:57 
Младший специалист
Младший специалист

Зарегистрирован:
Пн, июн 25 2007, 22:27
Сообщения: 95
Пол: Мужской
Спасибо за столь подробный рецепт.
Насколько я понял, общая идея в том, что мы за счет даты как показателя и подавления нулей в отчете скрываем все строки, кроме этой самой последней поставки.
В моем случае это не пройдет, т.к. в самом отчете нужна масса показателей (в т.ч. и из движений), а последний поставщик - это просто дополнительное справочное поле.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вывод в отчете последнего поставщика за период
СообщениеДобавлено: Пн, мар 11 2013, 20:55 
Гуру-эксперт
Гуру-эксперт
Аватара пользователя

Зарегистрирован:
Вс, янв 11 2009, 14:41
Сообщения: 902
Откуда: Москва
Пол: Мужской
Основная идея - использование свойств константа-выбор одновременно на нескольких признаках, которые позволяют создать, по сути, группировку данных в требуемом разрезе (в данном случае - в разрезе завода). При правильном их использовании можно получить в оставшейся (в группе) строке результат, рассчитанный на основе других движений в группе, даже по тем строкам, которые затем будут скрыты. Показателей может быть много самых разных (не только объем), в определении последней даты поставки и самого поставщика они никакой роли не играют. Скрытие нулей - это лишь один из вариантов избавления от ненужных строк. Можно вместо скрытия нулей создать Условие, которое будет проверять только Флаг (правда, следует учитывать, что условие на невидимых показателях сопровождается предупреждением, от которого можно избавиться в RSRT).

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


Принять этот ответ
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB