AXForum  
Go Back   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Forgotten Your Password?
Register Forum Rules FAQ Members List Today's Posts Search

 
 
Thread Tools Search this Thread Display Modes
Old 08.10.2004, 16:37   #1  
evs is offline
evs
Участник
 
9 / 10 (1) +
Join Date: 12.08.2004
Location: Москва
Новичек: Временная табличка или....
Подскажите, плз, как лучше поступить...
Собираюсь создать класс в Аксапте, который формировал бы остатки, и затем их можно было бы поучить в другой учетной программе (1С)..
Old 08.10.2004, 17:15   #2  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Join Date: 15.05.2003
Все остатки в таблице InventSum (точнее в ее агрегате по соотв. измерениям)
Old 08.10.2004, 17:33   #3  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано Hamster
Все остатки в таблице InventSum
Там не ВСЕ. Там только складские остатки.

Слово ВСЕ - нехорошее слово.
Как только появляется слово ВСЕ - жди логической ошибки
Old 08.10.2004, 17:39   #4  
evs is offline
evs
Участник
 
9 / 10 (1) +
Join Date: 12.08.2004
Location: Москва
Quote:
Изначально опубликовано Hamster
Все остатки в таблице InventSum (точнее в ее агрегате по соотв. измерениям)
Да... это я нашел... но скорее всего это не то, что мне нужно... я хотел бы получать остатки товара на опред. дату.. я взял за основу стандартный отчет, и написал класс, который может получить остаток по определенной номенклатурной позиции, в разрезе ГТД... а мне нужно получить таблицу всех остатков и вернуть это количество в 1С....

возникли вопросы
1. как возвращать значение через Axapta Business Connector?
2. Каким типом, в моем случае, это значение можно вернуть? (ПС: я совсем не знаю Аксапту, в курсе только, что там есть какие-то контиейнеры... )
Old 08.10.2004, 17:42   #5  
demID is offline
demID
Участник
 
61 / 12 (1) ++
Join Date: 16.08.2004
Location: Москва
Прочитайте мой постинг до конца и попробуйте повторить.

1. Создайте в базе SQL Server буферную (а не временную) таблицу, вот скрипт:
CREATE TABLE Ax_InventSum (Ax_ItemId VARCHAR(20), Ax_PhysicalInvent FLOAT)

2. В Аксапте создайте класс, у которого есть вот такой статический метод:

PHP Code:
static void ExportInventSum()
{
    
SAP_DB          sAP_DB = new SAP_DB();
    
InventSum       inventSum;
    
InventTable     inventTable;
    ;

    
sAP_DB.executeUpdate("DELETE FROM Ax_InventSum");

    
ttsbegin;
    
SAP_DB.beginTrans();

    while 
select from inventSum
        join inventTable
        where inventSum
.ItemId == inventTable.ItemId
        
&& (inventTable.ItemGroupId == "Журналы" || inventTable.ItemGroupId == "Реклама")
        {
            
sAP_DB.executeUpdate("INSERT INTO Ax_InventSum (Ax_ItemId, Ax_PhysicalInvent)" +
                
" VALUES ('" inventTable.ItemId "', " strreplace(num2str(inventSum.physicalInvent(),10,2,2,0) + ")"",""."));
        }

    
SAP_DB.commitTrans();
    
ttscommit;

3. Создайте класс, аналогичный моему классу SAP_DB. Этот класс должен:
а) коннектиться к той базе данных, в которой находится таблица Ax_InventSum
б) содержать методы, позволяющие выполнять нормальные (не-аксаптовские) SQL-запросы к базе данных. Для этого можно использовать аксаптовские классы ODBCConnection, либо CCADOConnection.

Описанный мною статический метод далее вызывается из сторонней программы через Axapta Com Connector. Этот метод пишет в буферную таблицу Ax_InventSum результат своей работы.

Считать остатки из буферной таблицы можно затем таким образом:
SELECT Ax_ItemId, SUM(Ax_PhysicalInvent) FROM Ax_InventSum GROUP BY Ax_ItemId
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Old 08.10.2004, 17:43   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Способов много. Если данных не очень много, я бы выбрал XML, если очень много, выгружал бы во внешнюю табличку в отдельном коннекшене в отдельную базу данных.
Но я перечислил далеко не все возможные варианты.
Old 08.10.2004, 17:49   #7  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано evs
я хотел бы получать остатки товара на опред. дату.. я взял за основу стандартный отчет, и написал класс
Написал - это неправильно.
Ну не может же нормальная система работать без остатков на произвольную дату. Так?

Значит такой класс уже должен быть.
Как только вы начнете думать таким образом, то тут же найдете
InventSumDate

Далее смотрите на иерархию. Вам скорее всего понадобится InventSumDateDim
Вы должны понять как Аксапта работает со складской аналитикой.
Просто уясните себе что такое InventDimGroup, InventDimParm, InventDimCriteria.
После этого работа со стандартным складским функционалом у вас не будет вызывать сложностей.
Old 08.10.2004, 17:51   #8  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Как только вы начнете думать таким образом, то тут же найдете nventSumDate

Далее смотрите на иерархию. Вам скорее всего понадобится InventSumDateDim
Еще есть InventOnHand.
Old 08.10.2004, 17:53   #9  
evs is offline
evs
Участник
 
9 / 10 (1) +
Join Date: 12.08.2004
Location: Москва
PHP Code:
    InventSumDateValueReportDim Invent
    
InventDim                   inventDimLoc;
    
InventDimParm               inventDimParmLoc;
    
Qty                         qty;
    
InventReport_DimPhys        inventReport_DimPhys;
    ;

    
inventDimParmLoc.InventLocationIdFlag NoYes::Yes;
    
inventDimParmLoc.InventGTDIdFlag_RU   NoYes::Yes;

    
inventDimLoc.InventLocationId "Основной";
    
inventDimLoc.InventGtdId_RU "10126040/250304/П002435/13";

    
Invent InventSumDateValueReportDim::newParameters(
        
08\10\2004,
        
"MX06",
        
inventDimLoc,
        
InventDimParmLoc);

    
qty Invent.PostedQty() - Invent.deductedQty() + Invent.receivedQty();
    print (
strfmt("%1"qty)); 
вот так я считаю остатки....)
Old 08.10.2004, 18:37   #10  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано Андре


Еще есть InventOnHand.
Насколько я помню InventOnHand выдает текущие остатки.
Зато гораздо быстрее, чем InventSumDate
Old 08.10.2004, 18:39   #11  
mazzy is offline
mazzy
Участник
mazzy's Avatar
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Join Date: 29.11.2001
Location: Москва
Blog Entries: 10
Quote:
Изначально опубликовано evs
PHP Code:
    Invent InventSumDateValueReportDim::newParameters() 
вот так я считаю остатки....)
Да. Именно так.
Просто InventSumDateValueReportDim считает еще и себестоимость.
Old 08.10.2004, 18:40   #12  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Join Date: 03.12.2001
Quote:
Насколько я помню InventOnHand выдает текущие остатки.
Да. Прошу прощения - забыл исходную постановку.

Quote:
Зато гораздо быстрее, чем InventSumDate
Кроме того, им imho удобнее пользоваться.
Old 11.10.2004, 10:35   #13  
evs is offline
evs
Участник
 
9 / 10 (1) +
Join Date: 12.08.2004
Location: Москва
у меня появились конкретные вопросы.. ))

как получить значение, возвращаемое аксаптовсой функцией?

Axapta = CreateObject("AxaptaCOMConnector.Axapta2");
Axapta.Logon2(user, password);
class = Axapta.CreateObject("Class1");

class.Call("get", ГТД, АйтемИД, возЗначение);
Message(string(возЗначение));

короче... как пользоваться Call, CallEx не понимаю... ((
как только не пробовал извратиться- ничего не получается... (
Old 11.10.2004, 12:19   #14  
evs is offline
evs
Участник
 
9 / 10 (1) +
Join Date: 12.08.2004
Location: Москва
с предидущим вопросом я разобрался.... Может поможете мне понять как создать контайнер, который включает все позиции, все ГТД, все остатки?

то что есть сейчас:

PHP Code:
static container init(str date_act_new)
{
    
container cont_new;
    
Qty qty;
    
InventSumDateValueReportDim Invent// класс расчета на определенную дату
    
InventDim                   inventDimLoc;
    
InventDimParm               inventDimParmLoc;
    
InventReport_DimPhys        inventReport_DimPhys;

    ;

    
inventDimParmLoc.InventLocationIdFlag NoYes::Yes;
    
inventDimParmLoc.InventGTDIdFlag_RU   NoYes::Yes;

    
inventDimLoc.InventLocationId "Основной";
    
inventDimLoc.InventGtdId_RU "10126040/250304/П002435/13";

    
Invent InventSumDateValueReportDim::newParameters(
        
str2date(date_act_new123),
        
"MB06"
        
inventDimLoc,
        
InventDimParmLoc);

    
qty Invent.PostedQty() - Invent.deductedQty() + Invent.receivedQty();

    
cont_new conins(cont_newconLen(cont_new)+1qty);
    return 
cont_new;
 } 

здесь должен быть какой-то цикл или что? (

плиз, хелп !
 

Similar Threads
Thread Thread Starter Forum Replies Last Post
Временная таблица Antoncheg DAX: Программирование 21 15.08.2008 18:25
производительность: map или временная таблица kitty DAX: Программирование 5 15.11.2007 12:36
Временная таблица + RLS leshy DAX: Программирование 6 27.04.2006 12:39
Темповая табличка на гриде DenNik DAX: Программирование 8 07.10.2005 11:57
select sum(amount) from временная таблица ATimTim DAX: Программирование 6 11.06.2004 14:16

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Рейтинг@Mail.ru
All times are GMT +3. The time now is 22:38.
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Contacts E-mail, Advertising.