| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Настройка структуры счета. Критерии
			 
			
			AX 2012 R3 
		
		
		
			В настройках для плана счетов есть форма из темы. Есть возможность задавать критерии с условием "начинается с". В итоге все это потом прилетает в запрос с участием таблицы DimensionConstraintNodeCriteria (\Classes\DimensionAttributeValueGroupValidation\findConstraintNodeByParentValue) Одно из условий в запросе: X++: (_displayValue like dimensionConstraintNodeCriteria.WildCardString)Наткнулся на то что запрос не возвращает то что должен бы был. Упростил, посмотрел трассировку. Первый запрос просто сделал чтобы показать, что есть на самом деле в таблице. Второй запрос возвращает строку. Третий не возвращает ничего: X++: SELECT * FROM DIMENSIONCONSTRAINTNODECRITERIA T1 WHERE ((PARTITION=5637144576) AND (RECID = 5637213979 OR RECID = 5637213968)) SELECT * FROM DIMENSIONCONSTRAINTNODECRITERIA T1 WHERE ((PARTITION=5637144576) AND ((N'48\_0000' LIKE WILDCARDSTRING ESCAPE '\' ) AND RECID = 5637213979)) SELECT * FROM DIMENSIONCONSTRAINTNODECRITERIA T1 WHERE ((PARTITION=5637144576) AND ((N'58\_0303040302' LIKE WILDCARDSTRING ESCAPE '\' ) AND RECID = 5637213968)) В _displayValue значение были без бэкслэша. Их аксапта сама подставляет. Это что так плохо реагирует like на подчеркивание в тексте кода? И что с этим собственно сделать малой кровью?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Символ _ для like является символом шаблоном. 
		
		
		
		
		
		
			https://docs.microsoft.com/ru-ru/sql...l-server-ver15 Странно, что в where система экранирует значение _displayValue, а не в значении для like, ведь escape применяется к строке которая находится после like. Понятно почему в одном случае работает, а в другом нет шаблон 48_% - означает 48(любой символ)(любые символы) - для 48\_0000 в данном случае _ замещается на \ ну и % отрабатывает все нули. шаблон 58_030304% - 58(любой символ)030304% - а вот для значения 58\_0303040302 получаем, что _сравнивается уже с 0 и соответственно отваливается. Можно попробовать вот такие шаблоны : 58\\\_030304% 48\\\_% Без использования экранирования (когда в _displayValue нет бэкслэша), т.е. 48_0000 и 58_03030402 можно было бы использовать вот такие шаблоны 48[_]% 58[_]030304% 
				__________________ 
		
		
		
		
	Sergey Nefedov  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Perc (2). | |
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Хотел в коде до подстановки в запрос в _displayValue заменить все подчеркивание на знак вопроса. '58_0303040302' -> '58?0303040302'. Тогда аксапта подставляя в SQL меняет его обратно и бэкслеш соответственно тоже не пихает. Проверка проходит норм.  
		
		
		
		
		
		
		
	Но остается неоднозначность - на месте подчеркивание может пролезть какой-то другой знак. Чтения доки по Like и тест помогает) Поэтому рекомендовали набивать в шаблон 3 бэкслэша перед подчеркиванием. Без модификаций. Это работает и корректно как-будто))  | 
| 
	
 | 
| 
	
	 | 
	
| Опции темы | Поиск в этой теме | 
| Опции просмотра | |
		
  |