| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 «  : 05-02-2009 01:14 »   | 
								
								 | 
							  
							 
							Здравствуйте. помогите с такой проблемой. Есть документ вида № телефона \ Баланс1 \ Баланс2 в котором лежат только "оригинальные" по (№ тел) записи. после некоторых манипуляций. записей становится больше. подскажите пожалуйста как составить запрос чтобы при сравнении двух одинаковых по столбцу (№ телефона) строк удалялась только строка с меньшими балансами. я к истине чет не могу подобраться    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Sla
							
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 05-02-2009 07:58 »   | 
								
								 | 
							  
							 
							удалялась или не выдавалась в запросе? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							Мы все учились понемногу... Чему-нибудь и как-нибудь. 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 05-02-2009 12:19 »   | 
								
								 | 
							  
							 
							удалялась.
 
  Я кажется неправильно выразился запрос не из внешних обработок а из самого документа. типа по кнопке нажать. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 05-02-2009 12:27 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 05-02-2009 16:04 »   | 
								
								 | 
							  
							 
							В 1С 7.7 запрос изменять данные не может. Ты или не в ту тему написал (возможно - 8.Х?) или не так сформулировал (тебе алгоритм нужен?) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 05-02-2009 21:23 »   | 
								
								 | 
							  
							 
							да, если не затруднит подскажи текстовку. я уже несколько раз документ заново набирал    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 05-02-2009 23:11 »   | 
								
								 | 
							  
							 
							1. ВыгрузитьТабличнуюЧасть в Таблицу значений 2. Отсортировать по НомерТелефона,Баланс 3. Пройти с конца до начала по ТЗ: если номер телефона поменялся от предыдущей строки - оставляем, если нет - удаляем 4. ЗагрузитьТабличнуюЧасть
  (можно и без загрузки/выгрузки, но мне так привычнее - ИМХО быстрее работает на больших объемах) 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 05-02-2009 23:53 »   | 
								
								 | 
							  
							 
							попробуем    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									«  Ответ #7 : 06-02-2009 00:38 »    | 
								
								 | 
							  
							 
							Kivals, а как пройтись по таблице значений?? у меня хмурь выдает 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 06-02-2009 00:56 »   | 
								
								 | 
							  
							 
							выдает ошибку номер за пределами значения. Процедура ТЗ() ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
  ТабЗнач.НоваяКолонка("Номер","Строка",7);  ТабЗнач.НоваяКолонка("Баланс1","Число",10,2);  ТабЗнач.НоваяКолонка("Баланс2","Число",10,2);  ВыбратьСтроки(); Пока ПолучитьСтроку()=1 цикл 	ТабЗнач.НоваяСтрока(); 	ТабЗнач.Номер=№ тел; 	ТабЗнач.Баланс1=Баланс1; 	ТабЗнач.Баланс2=Баланс2; КонецЦикла; ТабЗнач.Сортировать("Номер+","Баланс1+"); сообщить(строка(ТабЗнач.КоличествоСтрок()));
  Для НомерСтроки=ТабЗнач.КоличествоСтрок()  По 1 Цикл ТабЗнач.ПолучитьСтрокуПоНомеру(НомерСтроки); номер0="9000000000"; если ТабЗнач.Номер=номер0 тогда ТабЗнач.УдалитьСтроку(); КонецЕсли; КонецЦикла; 
 
 
 
  КонецПроцедуры  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 06-02-2009 07:10 »   | 
								
								 | 
							  
							 
							ТабЗнач.НоваяКолонка("Номер","Строка",7);  ТабЗнач.НоваяКолонка("Баланс1","Число",10,2);  ТабЗнач.НоваяКолонка("Баланс2","Число",10,2);  ВыбратьСтроки(); Пока ПолучитьСтроку()=1 цикл 	ТабЗнач.НоваяСтрока(); 	ТабЗнач.Номер=№ тел; 	ТабЗнач.Баланс1=Баланс1; 	ТабЗнач.Баланс2=Баланс2; КонецЦикла;заменяется на ВыгрузитьТабличнуюЧасть(ТабЗнач,"Номер,Баланс1,Баланс2"); НомерСтроки - это предопределенній атрибут документа, лучше в качестве счетчика используй что-то типа И1 1С не умеет делать цикл с шагом -1 - только +1, поэтому: Для И1=-ТабЗнач.КоличествоСтрок()  По -1 Цикл ТабЗнач.ПолучитьСтрокуПоНомеру(-И1); и еще: ошибку тебе выдает на конкретную строку. Какую именно? УдалитьСтроку() требует номер строки, следовательно будет: ТабЗнач.УдалитьСтроку(-И1);  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 06-02-2009 07:12 от Kivals »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 06-02-2009 07:36 »   | 
								
								 | 
							  
							 
							спасибо щас попробую    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 06-02-2009 08:07 »   | 
								
								 | 
							  
							 
							Kivals, посмотри пожалуйста что в коде он у меня нифига не удаляет. Процедура ТЗ() ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
  ВыгрузитьТабличнуюЧасть(ТабЗнач,"№ Тел, Баланс1, Баланс2");  удалитьстроки();
  ТабЗнач.Сортировать("№ тел+","Баланс1+"); сообщить(строка(ТабЗнач.КоличествоСтрок())); Для И1=-ТабЗнач.КоличествоСтрок() По -1 Цикл ТабЗнач.ПолучитьСтрокуПоНомеру(-И1); номер0="9200000000"; если ТабЗнач.№ тел=номер0 тогда номер0=ТабЗнач.ЛицСч;	 ТабЗнач.УдалитьСтроку(-И1); КонецЕсли; КонецЦикла;  ЗагрузитьТабличнуюЧасть(ТабЗнач); КонецПроцедуры
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 06-02-2009 08:56 »   | 
								
								 | 
							  
							 
							даже если исправить ошибку(вынести номер0 за цикл для...по...) он все равно не удаляет    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 06-02-2009 10:24 »   | 
								
								 | 
							  
							 
							У меня получилось    УРА!!! оказывается там надо еще использовать ПолучитьЗначение()  Всем, большое спасибо!!!  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 06-02-2009 21:25 »   | 
								
								 | 
							  
							 
							Не понял - где там нужно ПолучитьЗначение()? у тебя есть ПолучитьСтрокуПоНомеру() - этого должно было хватить... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 06-02-2009 23:14 »   | 
								
								 | 
							  
							 
							Kivals,вот с этим кодом у меня все заработало. [ ТабЗнач = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТабЗнач,"№ тел,,Баланс1,Баланс2");  удалитьстроки(); ТабЗнач.Сортировать("+№ тел,+Баланс1"); Номер0=""; Для И1= -(ТабЗнач.КоличествоСтрок()) По -1 Цикл ТабЗнач.ПолучитьЗначение(-И1,"№ тел"); сообщить(ТабЗнач.ПолучитьЗначение(-И1,"№ тел")); если СокрЛП(лицевой)=СокрЛП(ТабЗнач.ПолучитьЗначение(-И1,"№ тел")) тогда ТабЗнач.УдалитьСтроку(-И1); сообщить("строка удалена"); иначе лицевой=ТабЗнач.ПолучитьЗначение(-И1,"№ тел"); КонецЕсли; КонецЦикла;  ЗагрузитьТабличнуюЧасть(ТабЗнач);
    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 06-02-2009 23:24 »   | 
								
								 | 
							  
							 
							Kivals,А как правильно надо было использовать ПолучитьСтрокуПоНомеру()?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 07-02-2009 09:23 »   | 
								
								 | 
							  
							 
							№ тел - это у тебя идентификатор колонки? тогда наверное только как у тебя сделано... Просто у меня идентификаторы колонок всегда соответствуют правилам идентификаторов 1С, и тогда начало цикла будет такое: Для И1= -(ТабЗнач.КоличествоСтрок()) По -1 Цикл 	ТабЗнач.ПолучитьСтрокуПоНомеру(-И1); 	ЗнКол=ТабЗнач.ИдентКолонки;
   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #18 : 07-02-2009 17:09 »   | 
								
								 | 
							  
							 
							А теперь понятно я не извлекал значение колонки из полученной строки. поэтому не происходило сравнение значений.   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 07-02-2009 17:12 »   | 
								
								 | 
							  
							 
							№ тел это идентификатор только без пробела.    
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Kivals
							
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 07-02-2009 23:36 »   | 
								
								 | 
							  
							 
							Если идентификатор колонки  НомерТелефона то прекрасно будет работать следующий код: ТабЗнач = СоздатьОбъект("ТаблицаЗначений"); ВыгрузитьТабличнуюЧасть(ТабЗнач,"НомерТелефона,Баланс1,Баланс2");  УдалитьСтроки(); // не обязательно ТабЗнач.Сортировать("+НомерТелефона,+Баланс1"); Лицевой=""; Для И1= -(ТабЗнач.КоличествоСтрок()) По -1 Цикл 	ТабЗнач.ПолучитьСтрокуПоНомеру(-И1); 	Сообщить(ТабЗнач.НомерТелефона); 	Если СокрЛП(Лицевой)=СокрЛП(ТабЗнач.НомерТелефона) Тогда 		ТабЗнач.УдалитьСтроку(-И1); 		Сообщить("строка удалена"); 	Иначе 		Лицевой=ТабЗнач.НомерТелефона; 	КонецЕсли; КонецЦикла;  ЗагрузитьТабличнуюЧасть(ТабЗнач);
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Элексир
							
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 08-02-2009 13:57 »   | 
								
								 | 
							  
							 
							Kivals, спасибо за помошь все работает 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |