| 
	 | 
| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Можно я не про код? Спасибо. 
		
		
		
		
		
		
			
		
		
		
		
	Меня просто порадовал скриншот в технете: https://technet.microsoft.com/ru-ru/.../hh209188.aspx  
		 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: Ivanhoe (3). | |
| 
			
			 | 
		#2 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от mnt_dx
			 
 
			Можно я не про код? Спасибо. 
		
	Меня просто порадовал скриншот в технете: https://technet.microsoft.com/ru-ru/.../hh209188.aspx ![]()  | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да ладно вам, просто людям было лень делать 49 скриншотов с разными языками интерфейса  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Столкнулся с ошибкой выполнения запросов в базу при выполнении в CIL.  
		
		
		
		
		
		
			При выполнении в X++ тот же код работает корректно. Ошибка возникает при попытке выполнения запроса со связью курсором условиями типа X++: while select <table> ... exists join <table2> where <table>.<Real> == <table2>.<Real> ... В результате, запрос со связью таблиц exists join пришлось разворачивать в каскад While select и сравнивать поля в отдельной строке вне запроса. 
				__________________ 
		
		
		
		
		
			Ален ноби, ностра алис. Что означает - если один человек построил, другой завсегда разобрать может. Последний раз редактировалось AlGol; 25.08.2016 в 11:14.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Перейдите на закладку "Предложение" или "Предложение" 
		
		
		
			 | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			AX7.update1 файл webconfig 
		
		
		
		
		
		
		
	X++: <!-- ISSUE-2012-02-09-RAMESH: What's the purpose of this? -->
      <machineKey decryption="AES" decryptionKey="F7FA540B4DFD82E5BB196B95D15FF81FBA5D8619B270E58E2C90FAA683C5AA02" 
validation="SHA1" validationKey="BA5D8619B270E58E2C90F" />X++: <!-- ISSUE-2012-09-02-RAMESH: Revisit for production use --> <!-- ISSUE-2012-02-28-RAMESH: Does this even work for WebHttpBinding? Will this work correctly with authentication enabled? --> <serviceMetadata httpsGetEnabled="true" />  
		 | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от trud
			 
 
			AX7.update1 файл webconfig 
		
	X++: <!-- ISSUE-2012-02-09-RAMESH: What's the purpose of this? -->
      <machineKey decryption="AES" decryptionKey="F7FA540B4DFD82E5BB196B95D15FF81FBA5D8619B270E58E2C90FAA683C5AA02" 
validation="SHA1" validationKey="BA5D8619B270E58E2C90F" />X++: <!-- ISSUE-2012-09-02-RAMESH: Revisit for production use --> <!-- ISSUE-2012-02-28-RAMESH: Does this even work for WebHttpBinding? Will this work correctly with authentication enabled? --> <serviceMetadata httpsGetEnabled="true" /> ![]() Но комменты, похоже, до сих пор остались  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
  Точнее, в Platform Update 3 их уже не будет Магия  
		 | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			View не понимает FirstOnly
			 
			
			AX2012R3 
		
		
		
		
		
		
			Понадобилось сделать View, в котором должна отображаться одна запись с максимальным значением определенного поля. Делаю в АОТ Query, с одним источником данных, задаю сортировку по нужному полю, в параметрах источника пишу свойство FirstOnly = Yes. Делаю в АОТ View, на основании созданного query. Открываю посмотреть что получилось - и вижу все записи таблицы. В результате разбора выяснил, что View не обращает внимания на опцию FirstOnly в Query. Пришлось делать обходной маневр в виде двух view с получением max поля и потом отфильтровывать по нему данные. 
				__________________ 
		
		
		
		
	Ален ноби, ностра алис. Что означает - если один человек построил, другой завсегда разобрать может.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: S.Kuskov (2). | |
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
				__________________ 
		
		
		
		
	Sergey Nefedov  | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Молодой, подающий надежды 
		
			
	 | 
	
	
	
		
		
		
		 
			
			AX 2012 R2 
		
		
		
			Десериализация структуры Struct::create(_container) в CIL, которая была упакована методом pack() в обычном исполняемом коде. Разъезжаются пары Ключ-Значение ![]() Слева на скриншоте десериализация в обычном коде (ошибок нет), справа - выполненная в CIL. Как говорится, результат на лицо. Т.е. порядок значений в структуре остался прежним, а порядок ключей изменился.  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (5), macklakov (2), Logger (3). | |
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от pedrozzz
			 
 
			AX 2012 R2 
		
	Десериализация структуры Struct::create(_container) в CIL, которая была упакована методом pack() в обычном исполняемом коде. Разъезжаются пары Ключ-Значение ![]() Слева на скриншоте десериализация в обычном коде (ошибок нет), справа - выполненная в CIL. Как говорится, результат на лицо. Т.е. порядок значений в структуре остался прежним, а порядок ключей изменился. Вложение 11188 1. спасибо 2. пожалуйста, зарегистрируйте багу. лучше от лица клиента. да, регистрация - это гемор. И очень сильный гемор. но эту - зарегистрируйте. пожалуйста. и еще одно: а можно попросить у вас еще и код, который у вас приводит к подобному "результату"?  | 
| 
	
 | 
| 
			
			 | 
		#13 | 
| 
			
			 Читатель 
		
			
	 | 
	
	
	
		
		
		
		 
			
			AX2012 R3 
		
		
		
		
		
		
			
		
		
		
		
	RetailCDXSeedDataSubJob.createSubJob() - subjob.Enabled всегда Yes, хотя, если включить Retail Essentials, часть таблиц будет выключена конф. ключом, и в дальнейшем CDX будет падать при попытке их обработки. Можно было б инициировать из dictTable.enabled(), хотя бы... Но нет, да и сам этот флаг не особо проверяется.  | 
| 
	
 | 
| 
			
			 | 
		#14 | 
| 
			
			 Мрачный тип 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Все версии вплоть до 2009-й (в 2012 не смотрел, скорее всего та же ситуация), российский модуль ОС , класс создания строк журнала амортизации RAssetProposalDepriciation, метод createJournalLines().  
		
		
		
		
		
		
			В принципе отсутствует контроль на самортизированность ОС по текущей итерации обработки запроса на картотеку, и по всем самортизированным ОС впустую (результат нулевой) прогоняется полный цикл расчета амортизации с даты последней амортизации по заданную дату формирования, что приводит к монотонному возрастанию времени формирования строк журнала со временем. Исправляется добавлением в самую первую строку метода, перед инициализацией итератора, проверки в виде : X++: if(RAssetSumCalc_Trans::newAssetPeriod(rAssetTable.AccountNum, _assetStandardId, datestartmth(runDate) - 1).netBookValue() == 0) return; 
 
				__________________ 
		
		
		
		
	Мы летаем, кружимся, нагоняем ужасы ...  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: gl00mie (3), S.Kuskov (5). | |
| 
			
			 | 
		#15 | 
| 
			
			 Мрачный тип 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Таки да, та же самая петрушка до 2012 R3
		 
		
		
		
		
		
		
			
				__________________ 
		
		
		
		
	Мы летаем, кружимся, нагоняем ужасы ...  | 
| 
	
 | 
| 
			
			 | 
		#16 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Обратите внимание на очень неприятную особенность работы catch: 
		
		
		
		
		
		
			https://blogs.msdn.microsoft.com/mfp...4/x-the-catch/ 
				__________________ 
		
		
		
		
	Ален ноби, ностра алис. Что означает - если один человек построил, другой завсегда разобрать может.  | 
| 
	
 | 
| 
			
			 | 
		#17 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Это скорее неприятная особенность определенного способа обработки исключений, который практикуют некоторые отступники от Best Practices  
		
		
		
		
		
		
		
	 
		 | 
| 
	
 | 
| 
			
			 | 
		#18 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Из индусского - типа все бест-практис соблюдены 
		
		
		
		
		
		
		
	X++: if (custInvoiceJour.company() == "@LIN103") { if(CustInvoiceJour.CurrencyCode == "@LIN63") { bankName = strfmt("%1 %2","@LIN73","@LIN104"); }  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: macklakov (1), Vadik (1), 6a6kin (1). | |
| 
			
			 | 
		#19 | 
| 
			
			 Administrator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			AX2012 R3 CU12 (6.3.5000.133) 
		
		
		
		
		
		
			(встречается начиная с AX2012 R3 RTM) \Data Dictionary\Tables\WHSWorkTable\Methods\lockUnlockWork X++: public static void lockUnlockWork(WHSWorkId _workId, WHSUserId _userId) { WHSWorkLine workLine; WHSDimTracking dimTracking; ... #localmacro.WorkLineFieldsToResetStatus WorkStatus = WHSWorkStatus::Open, UserId = '', WorkInProcessUTCDateTime = utcDateTimeNull(), AskForNewLicensePlate = NoYes::No #endmacro #localmacro.WorkLineStatusInProcessButNotStarted workLine.WorkId == _workId && workLine.WorkStatus == WHSWorkStatus::InProcess && workLine.QtyWork == workLine.QtyRemain #endmacro ... // If we already have some work finished, we only reset the InProcess work lines, // where no actual work has been performed so far update_recordset workLine setting #WorkLineFieldsToResetStatus where #WorkLineStatusInProcessButNotStarted; if (workTable.isWorkTransTypeOutbound()) { delete_from dimTracking exists join workLine where #WorkLineStatusInProcessButNotStarted && dimTracking.WorkId == workLine.WorkId && dimTracking.LineNum == workLine.LineNum && dimTracking.Processed == NoYes::No; } ... } Программиста явно подвело чрезмерное увлечение макросами. Если макросы развернуть, ошибка становится очевидной: X++: update_recordset workLine setting WorkStatus = WHSWorkStatus::Open, // <-- (1) UserId = '', WorkInProcessUTCDateTime = utcDateTimeNull(), AskForNewLicensePlate = NoYes::No where workLine.WorkId == _workId && workLine.WorkStatus == WHSWorkStatus::InProcess // <-- (2) && workLine.QtyWork == workLine.QtyRemain; if (workTable.isWorkTransTypeOutbound()) { delete_from dimTracking exists join workLine where workLine.WorkId == _workId && workLine.WorkStatus == WHSWorkStatus::InProcess // <-- (3) && workLine.QtyWork == workLine.QtyRemain && dimTracking.WorkId == workLine.WorkId && dimTracking.LineNum == workLine.LineNum && dimTracking.Processed == NoYes::No; } 
				__________________ 
		
		
		
		
	Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me  | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: mazzy (2), kashperuk (5), gl00mie (3). | |
| 
			
			 | 
		#20 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Наткнулся на ошибку, полез смотреть откуда ноги растут, оказалось так всегда было, в смысле в SYS слое такой код. 
		
		
		
		
		
		
		
	AX 2009, EmplTable form, datasource EmplTable write(): X++: public void write() { ..... ttsbegin; ...... if (emplTable.PartyId && dirPartyTable.Name && !DirPartyTable::exist(emplTable.PartyId)) { ....... if (dirPartyTable.validateWrite()) { // Create a new DirPartyTable row. dirPartyTable.write(); lastNewUnusedId = ""; } else { // Abort the transaction. ttsabort; } } else if (emplTable.PartyId && dirPartyTable.Name && dirPartyTableChanged && DirPartyTable::exist(emplTable.PartyId)) { if (dirPartyTable.validateWrite()) { // Update the existing DirPartyTable row. dirPartyTable.write(); } else { // Abort the transaction. ttsabort; } } super(); ..... ttscommit; } Интересно, куда этот код разползся в следующих версиях и выжил ли в AX 7...  | 
| 
	
 |