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