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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.10.2004, 16:37   #1  
evs is offline
evs
Участник
 
9 / 10 (1) +
Регистрация: 12.08.2004
Адрес: Москва
Новичек: Временная табличка или....
Подскажите, плз, как лучше поступить...
Собираюсь создать класс в Аксапте, который формировал бы остатки, и затем их можно было бы поучить в другой учетной программе (1С)..
Старый 08.10.2004, 17:15   #2  
Hamster is offline
Hamster
Участник
 
687 / 13 (2) ++
Регистрация: 15.05.2003
Все остатки в таблице InventSum (точнее в ее агрегате по соотв. измерениям)
Старый 08.10.2004, 17:33   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Hamster
Все остатки в таблице InventSum
Там не ВСЕ. Там только складские остатки.

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

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

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

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

PHP код:
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
__________________
Когда гестапо перекрыло все выходы, Штирлиц вышел через вход!
Старый 08.10.2004, 17:43   #6  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Способов много. Если данных не очень много, я бы выбрал XML, если очень много, выгружал бы во внешнюю табличку в отдельном коннекшене в отдельную базу данных.
Но я перечислил далеко не все возможные варианты.
Старый 08.10.2004, 17:49   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано evs
я хотел бы получать остатки товара на опред. дату.. я взял за основу стандартный отчет, и написал класс
Написал - это неправильно.
Ну не может же нормальная система работать без остатков на произвольную дату. Так?

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

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

Далее смотрите на иерархию. Вам скорее всего понадобится InventSumDateDim
Еще есть InventOnHand.
Старый 08.10.2004, 17:53   #9  
evs is offline
evs
Участник
 
9 / 10 (1) +
Регистрация: 12.08.2004
Адрес: Москва
PHP код:
    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)); 
вот так я считаю остатки....)
Старый 08.10.2004, 18:37   #10  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Изначально опубликовано Андре


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

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

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

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

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

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

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

PHP код:
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;
 } 

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

плиз, хелп !
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Временная таблица 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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 11:47.