| 
			
			 | 
		#1 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			
			Добавление поля в диалог разноски складского журнала.
			 
			
			Axapta 3.0 SP4, 3-х уровневая, SQL. 
		
		
		
		
		
		
		
	Задача: добавить поле в диалог, вызываемый при нажатии на кнопку "Разноска" в журналах переноса. Сделано: попыталась сделать по аналогии с флажком "Строки с ошибками в новый журнал" (переменная transferErrors класса JournalCheckPost). Изменяла класс JournalCheckPost - в ClassDeclaration объявление переменных, в dialog добавлено поле, в getFromDialog переменной присваиваю значение поля. Значение пременной мне нужно где-нибудь в run, runInit. Но в этих методах значение - 0. Хотя в getFromDialog переменной присваивается правильное значение. Даже в getFromDialog наследников значение правильное. Например, в getFromDialog класса InventJournalCheckPost_Movement. Тем не менее, значение той же переменной transferErrors используется в методах runCheck() и методе createJournalTransfer() класса JournalCheckPost. Кроме того, в процессе возник вопрос: где используется метод \Classes\JournalCheckPost\parmTransferErrors? Инкрементную компиляцию и глобалную перекомпиляцию сделала. Не помогло. Кроме того, пыталась поместить код в наследниках JournalCheckPost. Тоже не помогло. Что можете посоветовать?  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Banned 
		
			
	 | 
	
	|
| 
	
 | 
|
| За это сообщение автора поблагодарили: Кирен (1). | |
| 
			
			 | 
		#3 | 
| 
			
			 Moderator 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Метод используется в наследниках (например в LedgerJournalCheckPost). Сама переменная используется в createJournalTransfer класса JournalCheckPost, кстати там в SP3 есть ошибка при переносе строк в складских журналах (не меняется в складских проводках ссылка на журнал), в более поздних сервис-паках может быть уже исправили, а может и нет.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Moderator 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
			
			 
			
			Спасибо, EVGL, помогло! 
		
		
		
		
		
		
		
	Хотя не совсем поняла почему в данном случае требуется упаковка. Можете объяснить?  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Banned 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Потому что Вы работаете, очевидно, в 3-х уровневом окружении. Диалог исполняется на клиенте под управлением копии объекта, а сам объект - на сервере. Аксапта не умеет самостоятельно сериализовывать все переменные объекта, но вызывает для этого методы .pack() и .unpack() класса, подразумевая, что класс реализовывает интерфейс SysPackable. В этих методах нужно сериализовать все переменные, требующиеся для запуска выполнения задания в .run().
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
|
| За это сообщение автора поблагодарили: kashperuk (1). | |
| 
			
			 | 
		#8 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Попробую ответить чуть проще: 
		
		
		
		
		
		
			Если класс с диалогом вызывается на сервере, происходит упаковка параметров и передача их на клиента, так как контролы диалога добавляются все таки на форму Dialog, а формы выполняются на клиенте. А упаковываются именно те переменные, которые перечислены в CurrentList. 2EVGL: Поправьте меня если неверно сформулировал. 
				__________________ 
		
		
		
		
	С уважением, kvan.  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Участник 
		
			
	 | 
	
	|
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Да, спасибо. Теперь понятнее.
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Moderator 
		
			
	 | 
	
	
	
		
		
		
		 
			
			2Raven Melancholic: 
		
		
		
		
		
		
			Согласен, просто гораздо проще и изящнее включить переменную в CurrentList  
		
				__________________ 
		
		
		
		
	С уважением, kvan.  | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
ЕСЛИ добавляете переменную в CurrentList, ТО увеличивайте номер версии (см. пример в BestPractice) И не забывайте дописать код, который правильно распаковывает старые версии в unpack. Дело в том, что пока вы дорабатываете, пользователи уже могут поработать и запомнить старые параметры в sysLastValue. Если старые параметры будут считаны в новый список без соответствующей обработки, то скорее всего произойдет ошибка (в этом случае часто советуют удалить Используемые данные в параметрах пользователя)  | 
| 
	
 |