08.12.2003, 14:39 | #1 |
Участник
|
Виртуальные компании. Проблема.
Ситуация банальна - есть две компании в Аксапте, необходимо использовать общий справочник номенклатуры, при этом данные на закладках "Цена/Скидка" и "Количество" карточки номенклатуры в каждой компании должы быть свои.
Делаю табличную коллекцию, пихаю туда InventTable, делаю виртуальную компанию, и, как вы уже догадались, при создании номенклатуры в одной компании в другой её не вижу. Как вы уже догадались, происходит это от того, что к InventTable привязвна InventTableModule, которая не является общей для компаний, и при добавлении записи в InventTable, в InventTableModule добавляются связанные записи только с кодом текущей компании, в результате в другой компании для добавленной в общий справочник номенклатуры отсутствуют связанные записи в InventTableModule, из-з чего, в свою очередь, выходит полная фигня (я не очень путано выражаюсь?). Вопрос: Господа, сталкивался ли кто-нить с подобной проблемой и как она решалась? Мне не трудно переписать Insert и Delete на InventTableModule чтобы пихать записи ещё и в соседнюю компанию, но можт существует более изящный способ? Заранее благодарен. VVN. |
|
08.12.2003, 14:47 | #2 |
NavAx
|
Сталкивался с этой проблемой. Решал её именно таким образом.
__________________
С уважением, Игорь Ласийчук. |
|
08.12.2003, 16:14 | #3 |
Moderator
|
Кстати на technet было обсуждение этой проблемы - "Share data between companies. " Пришли примерно к такому же результату.
|
|
29.03.2006, 15:09 | #4 |
Участник
|
Цитата:
Сообщение от Garic
Сталкивался с этой проблемой. Решал её именно таким образом.
Код: select id from VirtualDataAreaList where VirtualDataAreaList.virtualDataArea == <код_виртуальной_компании>
Последний раз редактировалось gl00mie; 29.03.2006 в 15:31. |
|
29.03.2006, 16:18 | #5 |
Участник
|
Цитата:
Сообщение от gl00mie
Как определить, через какую виртуальную компанию в текущей "реальной" компании доступна та или иная таблица?
PHP код:
|
|
29.03.2006, 16:57 | #6 |
Administrator
|
Цитата:
Сообщение от VadimVN
СМне не трудно переписать Insert и Delete на InventTableModule чтобы пихать записи ещё и в соседнюю компанию, но можт существует более изящный способ?
Цитата:
Сообщение от 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 | #7 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
А почему бы не переписать insert и delete на InventTable и не заморачиваться с виртуальными компаниями?
Цитата:
Сообщение от Maxim Gorbunov
Или, еще лучше, написать периодическое задание, которое будет синхронизировать справочники номенклатуры в компаниях.
Цитата:
Сообщение от Maxim Gorbunov
X++: select firstonly DataArea where DataArea.id == new DictTable(tableId).makeRecord().dataAreaId; |
|
29.03.2006, 17:58 | #8 |
Administrator
|
Цитата:
Сообщение от 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 | #9 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
если Вы все это затеваете только для того, чтобы иметь общий номенклатурный справочник, может проще этот справочник просто синхронизировать периодически.
|
|
29.03.2006, 18:33 | #10 |
Administrator
|
Да я понимаю, что напрограммить-то несложно. Поддерживать БД с виртуальными компаниями просто сложнее, чем без них. Если все это затевается только ради общих кодов номенклатуры, подумайте, есть ли в этом смысл.
__________________
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 | #11 |
Banned
|
Обратите внимание: если нужно только цены держать в отдельных компаниях, то можно "виртуализировать" как InventTable, так и InventTableModule. Только PriceDiscTable будет находиться в каждой отдельной компании. И никакого программирования.
|
|
29.03.2006, 18:42 | #12 |
Участник
|
Цитата:
Сообщение от EVGL
Обратите внимание: если нужно только цены держать в отдельных компаниях, то можно "виртуализировать" как InventTable, так и InventTableModule.
|
|
29.03.2006, 18:54 | #13 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
X++: select firstonly DataArea where DataArea.id == new DictTable(tableId).makeRecord().dataAreaId; 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, 18:59 | #14 |
Administrator
|
Пусть я буду пессимистом, но все же...
Если вы включаете 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 | #15 |
Консультант
|
Номерная серия - это такая вещь, которую можно настроить "один раз и навсегда".
Необязательно делать таблицу виртуальной, можно лишь в это самый "один раз" синхронизировать (тем или иным способом) коды номерных серий в компаниях |
|
29.03.2006, 19:42 | #16 |
Administrator
|
Ага, сделать и убежать побыстрее, пока не накрылось. Номерные серии еще как меняются в процессе работы. Например, каждый год могут изменяться форматы номеров, чтобы было проще отличать документы разных лет.
В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
__________________
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, 20:00 | #17 |
Administrator
|
Цитата:
Сообщение от gl00mie
А можно поподробней относительно смысловой нагрузки этого выражения с DictTable? А то я такой класс в AOT не нашел...
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 |
|
30.03.2006, 10:53 | #18 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
|
|
30.03.2006, 11:12 | #19 |
Модератор
|
И не забудьте при вводе новой номенклатуры делать проверку в соседних компаниях - вдруг она уже заведена?
С Уважением, Георгий |
|
30.03.2006, 12:08 | #20 |
Участник
|
changeCompany() не работает?..
Цитата:
Сообщение от gl00mie
Представляется обновление InventTableModule сделать примерно так:
X++: changeCompany(virtualDataAreaList.id) { super(); } |
|
Теги |
виртуальные компании, как правильно, номенклатура, компания |
|
Похожие темы | ||||
Тема | Ответов | |||
Виртуальные компании | 8 | |||
виртуальные компании | 5 | |||
Таблица DocuRef и виртуальные компании | 2 | |||
Виртуальные компании или фин. отчеты | 20 | |||
Виртуальные компании | 7 |
|