AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.03.2005, 09:45   #1  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Создание хитрого отчёта
Здраствуйте!

На приложеной картинке показана сруктура Query.

Нужно создать три секции:
1ая должна брать данные из InventLocation
2ая должна брать данные из Cust_Prime_Price и подчинённой InventTable
3яя должна брать данные из подчинённой Cust_Prime_Price и её подчинённой InventTable

С первыми двумя секциями нет промбем, с третьей есть проблемы.
Возможно ли это сделать без программируемой секции?
Вложения
Тип файла: img60340-1 (25.4 Кб, 696 просмотров)
Старый 02.03.2005, 09:56   #2  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Да, вот сама картинка.
Изображения
 
Старый 02.03.2005, 21:57   #3  
Zan is offline
Zan
Участник
 
104 / 25 (1) +++
Регистрация: 22.07.2004
Адрес: I live in Moscow
Делал я когда-то похожий отчет.

В данной ситуации, когда используются датасурсы одинаковых таблиц,
без программируемой секции никак не обойтись.
Да и еще ваше Query надо будет немного подсократить.
Cust_Prime_Price_1 и InventTable_1 надо будет убрать для порядку.
Старый 03.03.2005, 07:28   #4  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Удалил полностьб все датасорсы и сделал 3 программируемых секции. Вот как получилось:
PHP код:
    s1 "";
    while
        
select Name from il
            order by Name
        join Prime_Price
DeportId_ProductionQuantity from cpp1
            where il
.InventLocationId == cpp1.Deport
                
&& cpp1.Calc_Month == str2date("01/10/2004"123)
                && 
cpp1.Id_stuff == 0
        join ItemName from it1
            order by ItemName
            where cpp1
.Id_Production == it1.RGUID
                
&& it1.RxPack == 0
    
{
        if (
s1 != il.Name)
        {
            
s1 il.Name;
            
mmDep il.Name;
            
element.execute(1);

            
element.executeControlColumnHeadings(2);
        }
        
mmPName it1.ItemName;
        
mmPrime cpp1.Prime_price;
        
element.execute(2);

        
element.executeControlColumnHeadings(3);
        while
            
select Cust_PriceQuantity from cpp2
                where cpp2
.Calc_Month == str2date("01/10/2004"123)
                    && 
cpp2.Id_Production == cpp1.Id_Production
                    
&& cpp2.Deport == cpp1.Deport
                    
&& cpp2.Id_stuff != 0
            join ItemName from it2
                order by ItemName
                where cpp2
.Id_stuff == it2.RGUID
                    
&& it2.RxPack == 0
        
{
            
mmSName it2.ItemName;
            
mmQty cpp2.Quantity cpp1.Quantity;
            
mmCPrice cpp2.Cust_price;
            
mmSumm mmCPrice mmQty;
            
element.execute(3);
        }
    } 
Для каждой mm* свой датаметод.
Старый 03.03.2005, 13:01   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано bagyr
Удалил полностьб все датасорсы и сделал 3 программируемых секции.
Во-первых, пользователи вашего отчета потеряли возможность вводить критерии поиска.
Во-вторых, они потеряли возможность управлять сортировкой
В-третьих, они потеряли возможность выводить только итоги и пользоваться другими опциями (очень полезными кстати)

В-четвертых, вы используете неокругленное значение mmQty = cpp2.Quantity / cpp1.Quantity

В-пятых, вы очень странно выполняете группировку.
В-шестых, вы наверняка для строки s1 использовали тип str, что приведет к чудовищным последствиям при смене выравнивания в name (случай гипотетический, но последствия будут неприятными )

В-седьмых, не используйте функцию str2date("01/10/2004", 123), пишите литерал 01\10\2004;

В-восьмых, что это за магическая константа?

И т.п.

Самым главным недостатком приведенного кода считаю то, что пользователя лишили очень удобного инструмента для ввода критериев, сортировки и управления параметрами отчета. Не говоря уже о пакетной обработке и прочей внутренней хренотени.

Ребяты! Не программируйте.
А если уж программируете, то делайте это хорошо.
Пожалуйста.
Старый 03.03.2005, 21:43   #6  
Zan is offline
Zan
Участник
 
104 / 25 (1) +++
Регистрация: 22.07.2004
Адрес: I live in Moscow
Поддерживаю mazzy.
Старый 04.03.2005, 08:20   #7  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
> 1, 2, 3
Согласен, но пока этот отчёт предназначен только для меня (т.е. для проверки расчёта себестоимости при непрерывном производстве)
> 4
Не понял, чем это плохо? В отчёте стоит 4 знака после запятой.
> 5
Это про "if (s1 != il.Name)"? Сам только сейчас заметил, было смешно.
К тому же теоретически возможны абсолютно одинаковые названия у разных подразделений.
> 6
Я использую "str 100", вроде в этом случае выравнивание вправо не проблематично.
> 7, 8
Принято. Я сейчас всё испытываю на октябре прошлого года, вот и константа.
Старый 04.03.2005, 08:28   #8  
bagyr is offline
bagyr
Участник
 
74 / 10 (1) +
Регистрация: 15.02.2005
Адрес: Томск
Забыл добавить: спасибо за замечания, они очень важны для меня, т.к. я новичок в Axapta.
Старый 04.03.2005, 12:28   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано bagyr
> 4
Не понял, чем это плохо? В отчёте стоит 4 знака после запятой.
См. справочник единиц измерения. Поле "Десятичные знаки"
Главное меню \ Основное \ Настройки \ Единицы \ Единицы измерения
А также методы на таблице Unit (для начала)
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Теория: Создание отчета в виде Запроса Arahnid DAX: Программирование 3 20.12.2007 15:24
Теория: Создание отчета в виде Запроса Arahnid DAX: Программирование 6 14.11.2007 16:37
Создание формы перед генерацией отчета madproger DAX: Программирование 19 12.10.2006 13:19
Создание дизайна отчета Alenka DAX: Программирование 3 19.04.2006 14:24
Русская локализация Axapta 3 ? SlavaK DAX: Администрирование 59 01.07.2003 22:38

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 15:50.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.