| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Доброго всем времени суток. Просьба помочь разобраться с отчетом. Есть три таблицы (InventSum состояние склада, InventTable картотека номенклатуры, ConfigChoice выбор нн в зависимости от конфигурации оборудования.) Схема данных в файле. Данные выводятся на грид из InventSum как добиться того, чтобы в отдельном поле формы были нн деталей (которые в зависимости от сопоставлений с ConfigChoice выхватывались бы из InventTable), если это комплект (соответственно нн всего комплекта повторялся бы) Заранее благодарю. 
		
		
		
			сорри за банальность  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вчера был задан вопрос, как написать join. Сегодня, как и ожидалось, - второй шаг: join написан, как сделать так, чтобы он выдавал то, что хочется?  
		
		
		
		
		
		
		
		
			![]() Скучно. И не хватает связки с ConfigId через InventDim. Последний раз редактировалось EVGL; 22.06.2007 в 13:33.  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			))) EVGL да вы юморист, сударь, тот join, что был написан вчера не работает, к сожалению, пришлось мне кое-что переосмыслить, теперь заново бьюсь
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			InventSum.InventDimId -> InventDim.ConfigId == ConfigChoice.ConfigId AND 
		
		
		
		
		
		
		
		
			InventSum.ItemId == ConfigChoice.ItemId Таблицы, подобные ConfigTable, довольно неприятные. Связка получается по двум путям разной длины: InventSum -> InventDim -> ConfigTable InventSum -> ConfigTable Такой запрос для формы построить нельзя. Остаются варианты типа временных таблиц или шатких предположений, что идентификаторы конфигураций уникальны. Последний раз редактировалось EVGL; 22.06.2007 в 13:48.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Был бы сам рад, да в InventDim поле ConfigID пустое, и заполняться не планирует 
		
		
		
		
		
		
		
	![]() нужен курсор по InventSum чтобы в случае комплекта нн в форме разбивалась на несколько строк подетально ( апривязка по комплектам только через СС.ItemId->CC.ChosenItemID  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Пенсионер 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Я что то наверное не понимаю, Вы что переделали функционал конфигурирования? Если нет, то без InventDim не обойтись...
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	  Законы природы еще никто не отменял!А еще у меня растет 2 внучки!!! Кому интересно подробности тут: http://www.baby-shine.com/  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Точно? А если так InventSum -> InventDim --> ConfigTable X++: ConfigTable.addRange(fieldNum(ConfigTable, RecID, '(ConfigTable.ItemId==InventSum.ItemID)'); Последний раз редактировалось belugin; 22.06.2007 в 17:35.  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Вот так прокатывает, а если заменить на Outer, то нет 
		
		
		
		
		
		
		
	X++: static void Test3Tables(Args _args) { QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(InventSum), 'InventSum') .join(tableNum(InventDim)) .link(fieldNum(InventSum, InventDimID), fieldNum(InventDim, InventDimID)) .join(tableNum(ConfigTable), 'ConfigTable') .link(fieldNum(InventDim, ConfigId), fieldNum(ConfigTable, ConfigId)) .matches(fieldNum(ConfigTable, RecID), '(ConfigTable.ItemId==InventSum.ItemID)') .run(); ; qr.next(); }  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Невозможно выбрать запись в 'Таблица конфигурации' ('ConfigTable') 
		
		
		
		
		
		
		
	Использован оператор объединения таблиц join, но выражение WHERE не содержит связи между таблицами. X++: static void Test3Tables(Args _args) { QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(InventSum), 'InventSum') .join(tableNum(InventDim)) .link(fieldNum(InventSum, InventDimID), fieldNum(InventDim, InventDimID)) .outerJoin(tableNum(ConfigTable), 'ConfigTable') .link(fieldNum(InventDim, ConfigId), fieldNum(ConfigTable, ConfigId)) .matches(fieldNum(ConfigTable, RecID), '(ConfigTable.ItemId==InventSum.ItemID)') .run(); ; qr.next(); }  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Member 
		
			
	 | 
	
	
	
		
		
		
		 
			
			По-моему, на картине изображена ненормализованная структура данных, раз связи замкнулись в кольцо. Вообще не удивлюсь, если такой запрос нельзя написать на SQL в принципе (одним запросом). 
		
		
		
		
		
		
			Тем не менее, Antonuch, вы работаете со стандартной функциональностью или с авторской? 
				__________________ 
		
		
		
		
	С уважением, glibs®  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			мне в-общем не очень понятно, как присоединяется ConfigChoice, по inner join или по outer, но может попробовать innerJoin во view запихать? 
		
		
		
		
		
		
		
	Может напишете запрос на обычном SQL а мы его попробуем транслировать?  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от belugin
			 
 
			Невозможно выбрать запись в 'Таблица конфигурации' ('ConfigTable') 
		
	Использован оператор объединения таблиц join, но выражение WHERE не содержит связи между таблицами. X++: static void Test3Tables(Args _args) { QueryRun qr = SYS_ExpressionQueryBuilder::addDataSource(tableNum(InventSum), 'InventSum') .join(tableNum(InventDim)) .link(fieldNum(InventSum, InventDimID), fieldNum(InventDim, InventDimID)) .outerJoin(tableNum(ConfigTable), 'ConfigTable') .link(fieldNum(InventDim, ConfigId), fieldNum(ConfigTable, ConfigId)) .matches(fieldNum(ConfigTable, RecID), '(ConfigTable.ItemId==InventSum.ItemID)') .run(); ; qr.next(); }  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Можно ли узнать, что именно необходимо расширить и какой код в 7.2? 
		
		
		
		
		
		
		
		
			См. также обсуждение некоторых изменений модуля в 7.3 Последний раз редактировалось belugin; 19.01.2018 в 13:00.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Максим, а вот такое выражение 
		
		
		
		
		
		
		
	X++: .link(fieldNum(InventSum, InventDimID), fieldNum(InventDim, InventDimID)) X++:             .linkRelation('\Data Dictionary\Tables\InventSum\Relations\InventDim')Так бы лучше инкапсуляция была и можно было бы проверку от опечаток сделать внутри вызова linkRelation(). Тогда не было бы ситуации когда в имени таблицы или поля опечатался и запрос работает, но неправильно.  | 
| 
	
 | 
| 
			
			 | 
		#15 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Изменили режим, в котором создаются строки платежей, с "много дебет-кредит" на "много дебетов - один кредит", но указанный класс всегда фильтрует по Offset account, которого нет, и и который на самом деле не требуется для создания файла. Вклиниться в query невозможно, изменить класс context - невозможно, поскольку он в одной строке и создается, и передается в итоговый класс. По уму надо было разбить на несколько методов, создать hooks. 
		
		
		
		
		
		
		
		
			P.S. В конечном итоге, нашел с программистом вариант, как сломать через extensions. Много позже в ходе исполнения отловить query и сделать .clearLinks() если попадается таблица LedgerJournalTrans. Ненадежно, опасно, трудно отлаживать, может вылезти в неожиданном месте при попытке создать новый электронный отчет, зато Microsoft доволен. Вполне себе типичное решение через extensions, где делается предположение о внутренней структуре, а после нас - хоть потоп. Последний раз редактировалось EVGL; 19.01.2018 в 16:27.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: gl00mie (2). | |
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Logger
			 
 
			X++:             .linkRelation('\Data Dictionary\Tables\InventSum\Relations\InventDim')X++: .linkRelation(tableStr(InventSum), relationStr(InventSum, InventDim)) | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Насколько я понял, смысл кода в том, чтобы, если внутри журнала есть платежи относящиеся к нескольким счетам компании, а пользователь выбрал один, то надо вывести в файл только платежи отнсящиесиеся к заданному счету. 
То есть в вашем случае надо либо передать backAccountID == '' (там есть обработка этого случая) либо обеспечить корректную филтрацию, вычисляя OffsetAccount по ваучеру. Либо каким-то образом запретить создание платежей по нескольким банковским счетам компании (насколько я помню этот функционал). P.S. Ой, извините, я - EVGL - по ошибке отредактировал ваш текст. Надо отнять у меня права модератора, что-ли? Последний раз редактировалось EVGL; 20.01.2018 в 02:05.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: EVGL (5). | |
| 
			
			 | 
		#19 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			В конечном итоге, нашел с программистом вариант, как сломать через extensions, не дай бог
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их.  | 
| 
	
 | 
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			кошмар
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	-Ты в гномиков веришь? -Нет. -А они в тебя верят, смотри, не подведи их.  | 
| 
	
 |