| 
			
			 | 
		#1 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
			
			
			Как включить журнал изменений для программных изменений записей? Ах3.0
			 
			
			Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то: 
		
		
		
		
		
		
		
	Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти  | 
| 
	
 | 
| 
			
			 | 
		#2 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Проверил на Ax 4 SP2. У меня попадают записи в DatabaseLog и при програмном изменении если до этого на курсоре не был вызван skipDatabaseLog(true)
		 
		
		
		
		
		
		
		
	 | 
| 
	
 | 
| 
			
			 | 
		#3 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			AX 3.0 SP 2 все работает, как из форм так и из кода. 
		
		
		
		
		
		
		
	Например код: X++: static void Job28(Args _args) { tstTable t; ; // t.Number = 1.2134; // t.String = "213"; // t.insert(); ttsbegin; select forupdate t where t.Number == 1.2134 && t.String == "213"; t.String = "555555555"; t.update(); ttscommit; } Может буть что-то не так настроено для журналирования операций по таблице?  | 
| 
	
 | 
| 
			
			 | 
		#4 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
		
		 
			
			сейчас проверю, спасибо за маячок 
		
		
		
		
		
		
		
		
			апдейт написан вот так: Код: #localmacro.updateExecutedStatus
    update_recordset %1 setting Executed = %2
        where %1.TableId  == this.RefTableId &&
              %1.RecId    == this.RefRecId   &&
              %1.Executed       != %2
#endmacro
....
таблица  tbl;
....
    #updateExecutedStatus(tbl, executed);Код:     select forupdate    tbl
    where tbl.TableId  == this.RefTableId &&
          tbl.RecId    == this.RefRecId;
    tbl.Executed = executed;
    tbl.update();Внимание, вопрос: переделывать на *.update() или можно update_recordset заставить? Последний раз редактировалось Shakr; 26.08.2008 в 15:02.  | 
| 
	
 | 
| 
			
			 | 
		#5 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			Сообщение от Shakr
			 
 
			Есть таблица, пусть будет CustTable, у неё есть 2 группы свойств: Modified*, Created*, если они установлены в "1" то: 
		
	Если я изменяю данные на форме, то в Паспорт записи-журнал изменений попадает что, кто и когда менял. Если что-то изменит код - в журнал ничего не попадёт. Но мне кажется, что я где-то видел функции, которые включают механизм "логгинга" для программных изменений - я прав или нет? По форуму не придумал как найти  | 
| 
	
 | 
| 
			
			 | 
		#6 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			по хорошему, если у вас включено протоколирование изменений таблицы, то update_recordset не должен работать как операция над всей таблицей, должен разбиться как на  много Update - ов  отдельно над каждой записью. Если оно действительно настроено, то не важно писать update_recordset или отдельные update -ы написаны
		 
		
		
		
		
		
		
		
		
			Последний раз редактировалось crazysolntse; 26.08.2008 в 15:16.  | 
| 
	
 | 
| 
			
			 | 
		#7 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			update_recordset тоже работает и так просто и в виде макроса 
		
		
		
		
		
		
		
	1. возможно просто никакие записи не меняются? 2. проверить настройки журналирования (хотя раз Update отрабатывает - все д.б. нормально)  | 
| 
	
 | 
| 
			
			 | 
		#8 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Скорее всего просто перед вызовом макроса где-то стоит skipDatabaseLog(true) 
		
		
		
		
		
		
			
		
		
		
		
	оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как?  | 
| 
	
 | 
| 
			
			 | 
		#9 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
		
		 
			
			заработало. поковырялся с настройкой журнала базы данных, которую вы советовали, а вот что сковырнул - не заметил. Спасибо всем 
		
		
		
		
		
		
		
		
			upd: Нашёл, что сковырнул: раньше было настроено так: таблица, поле Executed, тип измененеия: update я снёс настройки изменения всех полей таблицы и сделал таблица, (пусто), тип изменения: Insert, Delete, Update после этого логгирование заработало Последний раз редактировалось Shakr; 26.08.2008 в 16:00.  | 
| 
	
 | 
| 
			
			 | 
		#10 | 
| 
			
			 Гость 
		
			
	 | 
	
	
	
		
		
		
		 Цитата: 
	
		
			оффтопик: По-моему, изврат так писать код в макросах. Дебажите вы как
		
	 
 | 
| 
	
 | 
| 
			
			 | 
		#11 | 
| 
			
			 Участник 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Фамилия, Имя, звание, будьте любезны. 
		
		
		
		
		
		
			
		
		
		
		
	Накажем  
		 | 
| 
	
 | 
| 
			
			 | 
		#12 | 
| 
			
			 Axapta 
		
			
	 | 
	
	
	
		
		
		
		 
			
			Иван, по сравнению с нижеприведенным кодом, код автора - невинная детская шалость.  
		
		
		
		
		
		
		
	  И это ты еще весь метод не видел. Но согласен, дебажить это невозможно...X++: #localmacro.dependedGUIDField_RContract
        tableMapping.add(
            new IntegrFieldMapping_LJourTransRContract(
                #attrFilter(IntegrTableFieldAttribute::construct(
                    tableNum(#tableName), fieldNum(#tableName, %1)
                ))
                , tableNum(%2), fieldNum(%2, %3)
            )
        );
  #endmacro | 
| 
	
 |