|  30.06.2010, 08:11 | #1 | 
| Участник | Вопрос по удалению компании из Аксапты 
			
			Всем привет! Вопрос: при удалении компании из аксапты происходит ли ее реальное удаление из SQL базы? Или записи в бд только помечаются как "неактивные" и перестают отображаться в аксапте? Если данные только помечаются как неактивные, то как их реально удалить из базы SQL? Может кто уже сталкивался с подобным? Используется AX 4.0, база крутится на SQL 2008. | 
|  | 
|  30.06.2010, 09:16 | #2 | 
| Модератор | 
			
			По выбранной компании удаляются данные из всех таблиц. Удалить компанию DAT не получится: Цитата: 
		
			Компания DAT не может быть удалена, поскольку содержит необходимую системную информацию.
		
	 
				__________________ This posting is provided "AS IS" with no warranties, and confers no rights. | 
|  | 
|  30.06.2010, 09:56 | #3 | 
| Участник | 
			
			Удаление компании, при большом количестве данных, процесс достаточно длительный, и никак себя для пользователя не проявляющий.  Создается полное впечатление что все взвисло. Часто так и думают, что, мол, все повисло, надо что-то делать, и завершают процесс Аксапты принудительно. После этого, компания оказывается удалена (данные в DataArea), но данные для этой компании во всех таблицах удалится не успевают. Остается мусор, и иногда достаточно объемный. Если процесс не прерывать и дождаться успешного завершения удаления компании, то данные компании во всех таблицах должны быть удалены из базы. | 
|  | 
|  30.06.2010, 10:03 | #4 | 
| Участник | 
			
			ясно. спасибо за ответ
		 | 
|  | 
|  30.06.2010, 14:49 | #5 | 
| Участник | Цитата: Похоже опять надо идти в Аксапту и проверять. | 
|  | 
|  30.06.2010, 15:28 | #6 | 
| Участник | 
			
			В 4-ке ещё не пробовал, но в 3-ке наблюдал неоднократно, что штатное удаление компании  оставляет в базе достаточно много хвостов в виде данных во многих таблицах с dataareaid = id удалённой компании. Т.е. для полного удаления данных компании после процедуры в Аксе приходилось ещё дочищать средствами SQL.
		 
				__________________ Здесь могла быть Ваша реклама! | 
|  | 
|  30.06.2010, 16:12 | #7 | 
| int 20h | 
			
			Всем привет!  Частенько сталкиваясь с этой бедой используем SQL скриптик на той Базе Данных откуда приходится удалить компанию. Выкладываю на обозрение может кому пригодится. X++: declare @name nvarchar(128) declare tables_cursor cursor for select [name] from sysobjects where type = 'U' open tables_cursor fetch next from tables_cursor into @name while @@fetch_status = 0 begin --print @name exec('delete ' + @name + ' where dataareaid in ( select id from dataarea where id like ''ТУТ ИМЯ УДАЛЯЕМОЙ КОМПАНИИ например tst'' )' ) fetch next from tables_cursor into @name end close tables_cursor deallocate tables_cursor 
				__________________ It's just my Unhopelessnessabilityerism   Trying to debug my mind   | 
|  | |
| За это сообщение автора поблагодарили: Qaz Qwerty (1). | |
|  30.06.2010, 16:24 | #8 | 
| Участник | 
			
			Не покатит, если есть виртуальные компании.
		 | 
|  | 
|  30.06.2010, 16:47 | #9 | 
| int 20h | 
			
			Согласен на счет виртуальных, но если их нет - можно юзать    
				__________________ It's just my Unhopelessnessabilityerism   Trying to debug my mind   | 
|  | 
|  30.06.2010, 17:18 | #10 | 
| Member | 
			
			А я не согласен. Удаление конкретной реальной компании, IMHO, не должно сопровождаться удалением данных, общих для нескольких компаний (о виртуальных ли компаниях идет речь или о таблицах, данные в которых хранятся не в разрезе компаний). С мусором от удаления компаний встречался в 3.0. Я тогда сделал заключение, что если удалить компанию в двухзвенке, то при остановке АОСа он сливает свой кэш в базу, не зная о том, что ее уже нет (по крайней мере мусор у меня не создавался на локальной инсталляции, но регулярно создавался на рабочей БД). Вообще я не уверен точно. Но мусор я заметил в тех таблицах, для которых включено кеширование (типа клиентов, поставщиков, плана счетов), и только в тех, с которыми наверняка могли работать в день удаления компании. При работе через АОС в 4.0 эффект с мусором мне не удалось воспроизвести. Нужно попробовать такой финт если есть кластер из АОСов. Что касается удаления... я тогда пробовал просто импортировать пустой .DAT файл (кажется, создавал новую компанию и выгружал все данные в .DAT файл) в компанию с удалением компании перед импортом. В смысле это непрограмистский вариант. 
				__________________ С уважением, glibs® | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2). | |
|  30.06.2010, 19:11 | #11 | 
| Участник | 
			
			В своё время написал скрипт для удаления мусора. С виртуальными компаниями работало тоже корректно, но давно не тестировал   Может, пригодится... Код: -----------------------------------------
-- М.Андреев 28.04.2005
-- Скрипт удаляет все данные "чужих" компаний, которых не должно быть в текущей базе
-- Запускать нужно от пользователя-владельца таблиц аксапты
----- BEGIN OF SCRIPT ------------------ 
declare @name varchar(1000);
DECLARE CT CURSOR FOR 
	select name
		from dbo.sysobjects
		where xtype = 'U'
			and id in
		(select id
		from dbo.syscolumns 
		where name = 'DATAAREAID');
OPEN CT
WHILE 1=1
begin
FETCH FROM CT INTO @name
     IF @@fetch_status=-1 
        BREAK;
     IF @@fetch_status=-2
        CONTINUE;
	exec ('delete from '+@name+
	'  where NOT DATAAREAID IN (select id from DATAAREA)');
     PRINT @name;
    
end;
DEALLOCATE CT
--------- END OF SCRIPT ---------- | 
|  | |
| За это сообщение автора поблагодарили: alex55 (1). | |
|  30.06.2010, 20:06 | #12 | 
| Модератор | 
			
			Я сейчас наверное какую-нибудь глупость спрошу, но не проще ли штатно заново создать компанию и удалить, чем терзать БД всякими скриптами с форумов?
		 
				__________________ -ТСЯ или -ТЬСЯ ? | 
|  | |
| За это сообщение автора поблагодарили: mazzy (2). | |
|  01.07.2010, 00:36 | #13 | 
| Гость | 
			
			А мне вот интересно, в каком случае на рабочем (не тестовом) приложении возникает необходимость удаления компании?
		 | 
|  | 
|  01.07.2010, 01:31 | #14 | 
| Участник | Цитата: В 2.5 и 3-ке действительно данные вместе с компанией не удалялись. Самый простой путь - создать новую группу определений "Всё", выгрузить пустышку и тут же загрузить её в нужную компанию, а потом уже саму компанию удавить. В 4-ке данные уже удаляются в транзакции. | 
|  | 
|  01.07.2010, 02:26 | #15 | 
| Member | Цитата: 
		
			Сообщение от AX2009
			
			 ... рабочем (не тестовом) приложении возникает необходимость удаления компании? ... Эффективным это было только на ранних этапах промышленной эксплуатации и до нее, пока размер базы небольшой. Дублирование (до 5.0) работало очень быстро, не требовалось лазить в MS SQL для дублирования базы. По мере роста размера базы такой подход терял эффективность и стало быть целесообразность. Раз или два путем дублирования и удаления оригинала компания переименовывалась. 
				__________________ С уважением, glibs® | 
|  | 
|  01.07.2010, 12:23 | #16 | 
| Участник | 
			
			Коллеги, поделитесь опытом, а что делать в Ax 2009? Только скрипты в СУБД? Проблема описана тут. 
				__________________ Ivanhoe as is.. | 
|  |