|
08.12.2003, 14:39 | #1 |
Участник
|
Виртуальные компании. Проблема.
Ситуация банальна - есть две компании в Аксапте, необходимо использовать общий справочник номенклатуры, при этом данные на закладках "Цена/Скидка" и "Количество" карточки номенклатуры в каждой компании должы быть свои.
Делаю табличную коллекцию, пихаю туда InventTable, делаю виртуальную компанию, и, как вы уже догадались, при создании номенклатуры в одной компании в другой её не вижу. Как вы уже догадались, происходит это от того, что к InventTable привязвна InventTableModule, которая не является общей для компаний, и при добавлении записи в InventTable, в InventTableModule добавляются связанные записи только с кодом текущей компании, в результате в другой компании для добавленной в общий справочник номенклатуры отсутствуют связанные записи в InventTableModule, из-з чего, в свою очередь, выходит полная фигня (я не очень путано выражаюсь?). Вопрос: Господа, сталкивался ли кто-нить с подобной проблемой и как она решалась? Мне не трудно переписать Insert и Delete на InventTableModule чтобы пихать записи ещё и в соседнюю компанию, но можт существует более изящный способ? Заранее благодарен. VVN. |
|
29.03.2006, 16:57 | #2 |
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 | #3 |
Участник
|
Цитата:
Сообщение от 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 | #4 |
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 | #5 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
если Вы все это затеваете только для того, чтобы иметь общий номенклатурный справочник, может проще этот справочник просто синхронизировать периодически.
|
|
29.03.2006, 18:54 | #6 |
Участник
|
Цитата:
Сообщение от 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, 20:00 | #7 |
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 |
|
31.03.2006, 14:36 | #8 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
А почему бы не переписать insert и delete на InventTable и не заморачиваться с виртуальными компаниями?
Цитата:
Сообщение от Maxim Gorbunov
Или, еще лучше, написать периодическое задание, которое будет синхронизировать справочники номенклатуры в компаниях.
|
|
29.03.2006, 18:33 | #9 |
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 | #10 |
Banned
|
Обратите внимание: если нужно только цены держать в отдельных компаниях, то можно "виртуализировать" как InventTable, так и InventTableModule. Только PriceDiscTable будет находиться в каждой отдельной компании. И никакого программирования.
|
|
29.03.2006, 18:42 | #11 |
Участник
|
Цитата:
Сообщение от EVGL
Обратите внимание: если нужно только цены держать в отдельных компаниях, то можно "виртуализировать" как InventTable, так и InventTableModule.
|
|
29.03.2006, 18:59 | #12 |
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 | #13 |
Консультант
|
Номерная серия - это такая вещь, которую можно настроить "один раз и навсегда".
Необязательно делать таблицу виртуальной, можно лишь в это самый "один раз" синхронизировать (тем или иным способом) коды номерных серий в компаниях |
|
29.03.2006, 19:42 | #14 |
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 |
|
30.03.2006, 10:53 | #15 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
|
|
30.03.2006, 15:09 | #16 |
Участник
|
Цитата:
Сообщение от Maxim Gorbunov
Ага, сделать и убежать побыстрее, пока не накрылось. В любом случае, номерные серии - это только пример. Можете найти другие примеры, если покопаетесь в остальных таблицах, на которые ссылается InventTable.
|
|
03.04.2006, 13:06 | #17 |
Administrator
|
Цитата:
Сообщение от gl00mie
Мда, достаточно поглядеть на DeleteActions у таблицы InventTable, и станет ясно, что при ее "виртуализации" надо будет хотя бы на том же InventTable.delete() дублировать слишком большой кусок стандартного функционала...
Цитата:
Сообщение от 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 |
Модератор
|
И не забудьте при вводе новой номенклатуры делать проверку в соседних компаниях - вдруг она уже заведена?
С Уважением, Георгий |
|
30.03.2006, 12:09 | #19 |
Модератор
|
global::buf2buf
|
|
|
За это сообщение автора поблагодарили: gl00mie (1). |
30.03.2006, 15:20 | #20 |
Модератор
|
Не бойтесь, не Вы один столкнулись с подобной задачей.
Не Вы первый будете в числе тех, кто это все преодолел С Уважением, Георгий |
|
Теги |
виртуальные компании, как правильно, номенклатура, компания |
|
Похожие темы | ||||
Тема | Ответов | |||
Виртуальные компании | 8 | |||
виртуальные компании | 5 | |||
Таблица DocuRef и виртуальные компании | 2 | |||
Виртуальные компании или фин. отчеты | 20 | |||
Виртуальные компании | 7 |
|