Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Тема Удаление дублирующих записей  (Прочитано 23258 раз)
0 Пользователей и 2 Гостей смотрят эту тему.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« : 05-02-2009 01:14 » 

Здравствуйте. помогите с такой проблемой.
Есть документ вида

№ телефона \ Баланс1 \ Баланс2

в котором лежат только "оригинальные" по (№ тел) записи.
после некоторых манипуляций. записей становится больше.

подскажите пожалуйста как составить запрос чтобы при сравнении двух одинаковых по столбцу (№ телефона) строк удалялась только строка с меньшими балансами.
я к истине чет не могу подобраться Жаль
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 05-02-2009 07:58 » 

удалялась или не выдавалась в запросе?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 05-02-2009 12:19 » 

удалялась.


Я кажется неправильно выразился запрос не из внешних обработок а из самого документа.
типа по кнопке нажать.
« Последнее редактирование: 05-02-2009 12:27 от Алексей1153++ » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 05-02-2009 16:04 » 

В 1С 7.7 запрос изменять данные не может.
Ты или не в ту тему написал (возможно - 8.Х?) или не так сформулировал (тебе алгоритм нужен?)
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 05-02-2009 21:23 » 

да, если не затруднит подскажи текстовку.
я уже несколько раз документ заново набирал Жаль
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 05-02-2009 23:11 » 

1. ВыгрузитьТабличнуюЧасть в Таблицу значений
2. Отсортировать по НомерТелефона,Баланс
3. Пройти с конца до начала по ТЗ: если номер телефона поменялся от предыдущей строки - оставляем, если нет - удаляем
4. ЗагрузитьТабличнуюЧасть

(можно и без загрузки/выгрузки, но мне так привычнее - ИМХО быстрее работает на больших объемах)
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 05-02-2009 23:53 » 

попробуем Улыбаюсь
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 06-02-2009 00:38 » 

Kivals, а как пройтись по таблице значений?? у меня хмурь выдает
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 06-02-2009 00:56 » 

выдает ошибку номер за пределами значения.
Код:
Процедура ТЗ()
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");

ТабЗнач.НоваяКолонка("Номер","Строка",7);
ТабЗнач.НоваяКолонка("Баланс1","Число",10,2);
ТабЗнач.НоваяКолонка("Баланс2","Число",10,2);
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 цикл
ТабЗнач.НоваяСтрока();
ТабЗнач.Номер=№ тел;
ТабЗнач.Баланс1=Баланс1;
ТабЗнач.Баланс2=Баланс2;
КонецЦикла;
ТабЗнач.Сортировать("Номер+","Баланс1+");
сообщить(строка(ТабЗнач.КоличествоСтрок()));

Для НомерСтроки=ТабЗнач.КоличествоСтрок()  По 1 Цикл
ТабЗнач.ПолучитьСтрокуПоНомеру(НомерСтроки);
номер0="9000000000";
если ТабЗнач.Номер=номер0 тогда
ТабЗнач.УдалитьСтроку(); КонецЕсли;
КонецЦикла;




КонецПроцедуры
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #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 » Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 06-02-2009 07:36 » 

спасибо щас попробую Улыбаюсь
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 06-02-2009 08:07 » 

Kivals, посмотри пожалуйста что в коде он у меня нифига не удаляет.
Код:
Процедура ТЗ()
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");

ВыгрузитьТабличнуюЧасть(ТабЗнач,"№ Тел, Баланс1, Баланс2");
удалитьстроки();

ТабЗнач.Сортировать("№ тел+","Баланс1+");
сообщить(строка(ТабЗнач.КоличествоСтрок()));
Для И1=-ТабЗнач.КоличествоСтрок() По -1 Цикл
ТабЗнач.ПолучитьСтрокуПоНомеру(-И1);
номер0="9200000000";
если ТабЗнач.№ тел=номер0 тогда
номер0=ТабЗнач.ЛицСч;
ТабЗнач.УдалитьСтроку(-И1);
КонецЕсли;
КонецЦикла;
ЗагрузитьТабличнуюЧасть(ТабЗнач);
КонецПроцедуры
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #12 : 06-02-2009 08:56 » 

даже если исправить ошибку(вынести номер0 за цикл для...по...) он все равно не удаляет Жаль
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #13 : 06-02-2009 10:24 » 

У меня получилось Улыбаюсь УРА!!! оказывается там надо еще использовать ПолучитьЗначение()
Всем, большое спасибо!!!
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 06-02-2009 21:25 » 

Не понял - где там нужно ПолучитьЗначение()? у тебя есть ПолучитьСтрокуПоНомеру() - этого должно было хватить...
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 06-02-2009 23:14 » 

Kivals,вот с этим кодом у меня все заработало.
[
Код:
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТабЗнач,"№ тел,,Баланс1,Баланс2");
удалитьстроки();
ТабЗнач.Сортировать("+№ тел,+Баланс1");
Номер0="";
Для И1= -(ТабЗнач.КоличествоСтрок()) По -1 Цикл
ТабЗнач.ПолучитьЗначение(-И1,"№ тел");
сообщить(ТабЗнач.ПолучитьЗначение(-И1,"№ тел"));
если СокрЛП(лицевой)=СокрЛП(ТабЗнач.ПолучитьЗначение(-И1,"№ тел"))
тогда
ТабЗнач.УдалитьСтроку(-И1);
сообщить("строка удалена"); иначе лицевой=ТабЗнач.ПолучитьЗначение(-И1,"№ тел");
КонецЕсли;
КонецЦикла;
ЗагрузитьТабличнуюЧасть(ТабЗнач);
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #16 : 06-02-2009 23:24 » new

Kivals,А как правильно надо было использовать ПолучитьСтрокуПоНомеру()?
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 07-02-2009 09:23 » 

№ тел - это у тебя идентификатор колонки?
тогда наверное только как у тебя сделано...

Просто у меня идентификаторы колонок всегда соответствуют правилам идентификаторов 1С, и тогда начало цикла будет такое:
Код:
Для И1= -(ТабЗнач.КоличествоСтрок()) По -1 Цикл
ТабЗнач.ПолучитьСтрокуПоНомеру(-И1);
ЗнКол=ТабЗнач.ИдентКолонки;
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #18 : 07-02-2009 17:09 » 

А теперь понятно я не извлекал значение колонки из полученной строки.
поэтому не происходило сравнение значений.
 
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #19 : 07-02-2009 17:12 » 

№ тел это идентификатор только без пробела. Улыбаюсь
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #20 : 07-02-2009 23:36 » 

Если идентификатор колонки НомерТелефона то прекрасно будет работать следующий код:
Код:
ТабЗнач = СоздатьОбъект("ТаблицаЗначений");
ВыгрузитьТабличнуюЧасть(ТабЗнач,"НомерТелефона,Баланс1,Баланс2");
УдалитьСтроки(); // не обязательно
ТабЗнач.Сортировать("+НомерТелефона,+Баланс1");
Лицевой="";
Для И1= -(ТабЗнач.КоличествоСтрок()) По -1 Цикл
ТабЗнач.ПолучитьСтрокуПоНомеру(-И1);
Сообщить(ТабЗнач.НомерТелефона);
Если СокрЛП(Лицевой)=СокрЛП(ТабЗнач.НомерТелефона) Тогда
ТабЗнач.УдалитьСтроку(-И1);
Сообщить("строка удалена");
Иначе
Лицевой=ТабЗнач.НомерТелефона;
КонецЕсли;
КонецЦикла;
ЗагрузитьТабличнуюЧасть(ТабЗнач);
Записан
Элексир
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #21 : 08-02-2009 13:57 » 

Kivals, спасибо за помошь все работает
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines