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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.03.2006, 16:57   #1  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от VadimVN
СМне не трудно переписать Insert и Delete на InventTableModule чтобы пихать записи ещё и в соседнюю компанию, но можт существует более изящный способ?
А почему бы не переписать insert и delete на InventTable и не заморачиваться с виртуальными компаниями? Или, еще лучше, написать периодическое задание, которое будет синхронизировать справочники номенклатуры в компаниях.

Цитата:
Сообщение от gl00mie
На буржуйском форуме нашел такой вот рецепт определения...
Вы их слушайте больше

X++:
boolean isVirtual;
;
isVirtual = (select firstonly DataArea
                    where DataArea.id == new DictTable(tableId).makeRecord().dataAreaId).isVirtual;
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
За это сообщение автора поблагодарили: gl00mie (1).
Старый 29.03.2006, 17:46   #2  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
А почему бы не переписать insert и delete на InventTable и не заморачиваться с виртуальными компаниями?
В методе таблицы InventTable::insert() я не нашел никаких намеков на вставку чего-либо в InventTableModule. Судя по моим ковыряниям с отладчиком, эти вставки делаются из формы InventTable (в стеке вызова значится \Classes\FormDataSource\write)
Цитата:
Сообщение от Maxim Gorbunov
Или, еще лучше, написать периодическое задание, которое будет синхронизировать справочники номенклатуры в компаниях.
Ситуация такая: таблица InventTable - общая меж н-цати компаний, InventTableModule - везде своя. В одной компании создаем новую номенклатуру, все остальные ее не видят, потому что запись с новым InventTable.ItemId у них есть, а записей в InventTableModule с этим ItemId у них нет. При чем тут периодические задания?..
Цитата:
Сообщение от Maxim Gorbunov
X++:
select firstonly DataArea
   where DataArea.id == new DictTable(tableId).makeRecord().dataAreaId;
Спасибо, сейчас попробую
Старый 29.03.2006, 17:58   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от gl00mie
Судя по моим ковыряниям с отладчиком, эти вставки делаются из формы InventTable (в стеке вызова значится \Classes\FormDataSource\write)
Вывод верный

Цитата:
Сообщение от gl00mie
Ситуация такая: таблица InventTable - общая меж н-цати компаний, InventTableModule - везде своя. В одной компании создаем новую номенклатуру, все остальные ее не видят, потому что запись с новым InventTable.ItemId у них есть, а записей в InventTableModule с этим ItemId у них нет. При чем тут периодические задания?..
При том, что если Вы все это затеваете только для того, чтобы иметь общий номенклатурный справочник, может проще этот справочник просто синхронизировать периодически.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 29.03.2006, 18:19   #4  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
если Вы все это затеваете только для того, чтобы иметь общий номенклатурный справочник, может проще этот справочник просто синхронизировать периодически.
Перекрытие двух методов в InventTableModule, которые дергаются автоматом при создании/удалении номенклатуры, мне пока кажется более простым, нежели написание job'а по синхронизации справочников номенклатуры, который бы делал то же, но с какой-то периодичность - не имея при этом никаких данных о том, какие где номенклатуры добавились/удалились
Старый 29.03.2006, 18:54   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
X++:
select firstonly DataArea
  where DataArea.id == new DictTable(tableId).makeRecord().dataAreaId;
А можно поподробней относительно смысловой нагрузки этого выражения с DictTable? А то я такой класс в AOT не нашел... Там делается какая-то запись в таблицу tableId? Я просто пока что написал вспомогательный класс для определения, через какую компанию таблица "виртуализируется", он выглядит, конечно, коряво в сравнении с этим select'ом, правда, по идее позволяет получать данные для любой компании, а не только текущей
X++:
static str getVirtualCompanyId(TableId _tableId, CompanyId _companyId = curExt())
{
    VirtualDataAreaList     virtDataAreaLst;
    TableCollectionList     tableColList;
    SysDictTableCollection  dictTableCol;
    ;

    while select virtDataAreaLst
        where virtDataAreaLst.id == _companyId
        join tableCollection from tableColList
        where tableColList.virtualDataArea == virtDataAreaLst.virtualDataArea
    {
        dictTableCol = new SysDictTableCollection(tableColList.tableCollection);
        do
        {
            if (tablename2id(dictTableCol.nextTable()) == _tableId)
                return virtDataAreaLst.virtualDataArea;
        }
        while (tableName);
    }
    return '';
}
Старый 29.03.2006, 20:00   #6  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 646 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от gl00mie
А можно поподробней относительно смысловой нагрузки этого выражения с DictTable? А то я такой класс в AOT не нашел...
Это системный класс. Найти в AOT его можно в System documentation.

new DictTable(tableId) - создает новый объект класса DictTable для таблицы tableId
makeRecord() - возвращает пустой буфер для таблицы (хоть буфер и пустой, dataAreaId в нем уже инициализирован).
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 31.03.2006, 14:36   #7  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5803 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
А почему бы не переписать insert и delete на InventTable и не заморачиваться с виртуальными компаниями?
Сейчас я так и сделал: теперь на InventTable, InventTableModule и InventItemLocation переопределены insert/delete с тем, чтобы отражать добавление/удаление номенклатуры в нужные компании, а сам список компаний берется из виртуальной компании, в которую реальные объединены по одной специально обученной "левой" таблице - не зашивать же их список в код в виде строковых констант
Цитата:
Сообщение от Maxim Gorbunov
Или, еще лучше, написать периодическое задание, которое будет синхронизировать справочники номенклатуры в компаниях.
А можно прокомментировать, чем периодический запуск job'а предпочтительнее метода "online"-изменений справочника номенклатур в связанных компаниях? Может, здесь есть какие-то неочевидные преимущества?
Теги
виртуальные компании, как правильно, номенклатура, компания

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Виртуальные компании Freeangel DAX: Функционал 8 03.07.2007 18:49
виртуальные компании HelgaK DAX: Функционал 5 28.09.2006 13:47
Таблица DocuRef и виртуальные компании Vby DAX: Функционал 2 30.05.2006 10:06
Виртуальные компании или фин. отчеты Посторонний V DAX: Функционал 20 24.05.2006 16:58
Виртуальные компании Zodiak DAX: Функционал 7 06.04.2004 21:06
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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