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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 08.12.2003, 14:39   #1  
VadimVN is offline
VadimVN
Участник
 
71 / 12 (1) ++
Регистрация: 21.11.2003
? Виртуальные компании. Проблема.
Ситуация банальна - есть две компании в Аксапте, необходимо использовать общий справочник номенклатуры, при этом данные на закладках "Цена/Скидка" и "Количество" карточки номенклатуры в каждой компании должы быть свои.
Делаю табличную коллекцию, пихаю туда InventTable, делаю виртуальную компанию, и, как вы уже догадались, при создании номенклатуры в одной компании в другой её не вижу. Как вы уже догадались, происходит это от того, что к InventTable привязвна InventTableModule, которая не является общей для компаний, и при добавлении записи в InventTable, в InventTableModule добавляются связанные записи только с кодом текущей компании, в результате в другой компании для добавленной в общий справочник номенклатуры отсутствуют связанные записи в InventTableModule, из-з чего, в свою очередь, выходит полная фигня (я не очень путано выражаюсь?).
Вопрос: Господа, сталкивался ли кто-нить с подобной проблемой и как она решалась? Мне не трудно переписать Insert и Delete на InventTableModule чтобы пихать записи ещё и в соседнюю компанию, но можт существует более изящный способ?

Заранее благодарен.
VVN.
Старый 29.03.2006, 16:57   #2  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (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   #3  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (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   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (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   #5  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
если Вы все это затеваете только для того, чтобы иметь общий номенклатурный справочник, может проще этот справочник просто синхронизировать периодически.
Перекрытие двух методов в InventTableModule, которые дергаются автоматом при создании/удалении номенклатуры, мне пока кажется более простым, нежели написание job'а по синхронизации справочников номенклатуры, который бы делал то же, но с какой-то периодичность - не имея при этом никаких данных о том, какие где номенклатуры добавились/удалились
Старый 29.03.2006, 18:54   #6  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (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   #7  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (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   #8  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
А почему бы не переписать insert и delete на InventTable и не заморачиваться с виртуальными компаниями?
Сейчас я так и сделал: теперь на InventTable, InventTableModule и InventItemLocation переопределены insert/delete с тем, чтобы отражать добавление/удаление номенклатуры в нужные компании, а сам список компаний берется из виртуальной компании, в которую реальные объединены по одной специально обученной "левой" таблице - не зашивать же их список в код в виде строковых констант
Цитата:
Сообщение от Maxim Gorbunov
Или, еще лучше, написать периодическое задание, которое будет синхронизировать справочники номенклатуры в компаниях.
А можно прокомментировать, чем периодический запуск job'а предпочтительнее метода "online"-изменений справочника номенклатур в связанных компаниях? Может, здесь есть какие-то неочевидные преимущества?
Старый 29.03.2006, 18:33   #9  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Да я понимаю, что напрограммить-то несложно. Поддерживать БД с виртуальными компаниями просто сложнее, чем без них. Если все это затевается только ради общих кодов номенклатуры, подумайте, есть ли в этом смысл.
__________________
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:35   #10  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Обратите внимание: если нужно только цены держать в отдельных компаниях, то можно "виртуализировать" как InventTable, так и InventTableModule. Только PriceDiscTable будет находиться в каждой отдельной компании. И никакого программирования.
Старый 29.03.2006, 18:42   #11  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от EVGL
Обратите внимание: если нужно только цены держать в отдельных компаниях, то можно "виртуализировать" как InventTable, так и InventTableModule.
Кроме цен необходимо держать в отдельных компаниях и такие вещи, например, как склады по умолчанию для закупки/заказа, количество по умолчанию, etc, а такие вещи вроде берутся через InventTableModule
Старый 29.03.2006, 18:59   #12  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Пусть я буду пессимистом, но все же...

Если вы включаете InventTable в табличную коллекцию, необходимо так же включить все таблицы, на которые есть ссылки из InventTable. Это, как минимум, InventItemGroup, InventDimGroup и InventModelGroup. К ним могут добавиться и такие таблицы, как BOMCostGroup, CommissionItemGroup, InventNumGroup и т.п. Разумеется, при этом придется включить и все таблицы, на которые ссылаются эти таблицы. Например, для InventNumGroup это NumberSequenceTable. Готовы вы к тому, что номерные серии будут общими между компаниями?
__________________
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, 19:32   #13  
Atar is offline
Atar
Консультант
 
287 / 101 (4) +++++
Регистрация: 10.03.2006
Адрес: Москва
Номерная серия - это такая вещь, которую можно настроить "один раз и навсегда".
Необязательно делать таблицу виртуальной, можно лишь в это самый "один раз" синхронизировать (тем или иным способом) коды номерных серий в компаниях
Старый 29.03.2006, 19:42   #14  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Ага, сделать и убежать побыстрее, пока не накрылось. Номерные серии еще как меняются в процессе работы. Например, каждый год могут изменяться форматы номеров, чтобы было проще отличать документы разных лет.

В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 30.03.2006, 10:53   #15  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
Мда... Пожалуй, надо будет на самом деле покопать в сторону написания job'а для синхронизации справочников номенклатур
Старый 30.03.2006, 15:09   #16  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,684 / 5798 (201) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 3
Цитата:
Сообщение от Maxim Gorbunov
Ага, сделать и убежать побыстрее, пока не накрылось. В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
Мда, достаточно поглядеть на DeleteActions у таблицы InventTable, и станет ясно, что при ее "виртуализации" надо будет хотя бы на том же InventTable.delete() дублировать слишком большой кусок стандартного функционала...
Старый 03.04.2006, 13:06   #17  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Цитата:
Сообщение от gl00mie
Мда, достаточно поглядеть на DeleteActions у таблицы InventTable, и станет ясно, что при ее "виртуализации" надо будет хотя бы на том же InventTable.delete() дублировать слишком большой кусок стандартного функционала...
Ну, это-то как раз не проблема. В Delete Actions вообще-то перечислены таблицы, которые ссылаются на InventTable (то есть связь 1-n), а не те, на которые она ссылается. Логичнее было бы поискать, у скольких таблиц InventTable встречается в Delete actions, хотя учтите, что их просто могли забыть создать

Цитата:
Сообщение от Hamster
"периодический запуск" всегда хуже "online" изменений,
т-к при "запуске" надо исправлять нарушения целостности данных, а в "online" случае достаточно их не допускать.
А что Вас заставляет думать, что о целостности данных можно забыть? Думаете, записи нельзя будет создать в обход Ваших модификаций?

Цитата:
Сообщение от Yars
Номерную серию не объединяли (и смысла большого в этом я не вижу).
До тех пор, пока не используется автоматическая нумерация партий и серийных номеров, смысла в этом, возможно, и нет. Другое дело, что однажды заведя такой порядок, вы лишаете себя возможности эту нумерацию использовать в дальнейшей. По крайней мере, активизировать эту функцию будет значительно сложнее.

Я не говорю, что использовать виртуальные компании нельзя. Я говорю, что нужно четко представлять себе, что при их использовании будет потеряно. На мой взгляд, цена слишком высока, чтобы вообще их где-либо использовать, но, конечно, возможны разные ситуации.
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 30.03.2006, 11:12   #18  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
И не забудьте при вводе новой номенклатуры делать проверку в соседних компаниях - вдруг она уже заведена?

С Уважением,
Георгий
Старый 30.03.2006, 12:09   #19  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
global::buf2buf
За это сообщение автора поблагодарили: gl00mie (1).
Старый 30.03.2006, 15:20   #20  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Не бойтесь, не Вы один столкнулись с подобной задачей.
Не Вы первый будете в числе тех, кто это все преодолел

С Уважением,
Георгий
Теги
виртуальные компании, как правильно, номенклатура, компания

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Виртуальные компании 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, время: 15:03.