| 
			| 
					
						| Элексир | 
								|  | «  : 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, спасибо за помошь все работает |  
						| 
								|  |  
								|  |  Записан | 
 |  |  | 
	|  |