8.х Помогите удалить повторяющиеся данные

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем v0233, 26 сен 2011.

  1. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Добрый день.
    Помогите реализовать такую задачу

    У меня в регистрах сведений хранятся телефоны клиентов, но в реквизите ТелефонКлиента иногда встречаются дубли, Необходимо удалить эти дубли, оставить только один экземпляр.

    вот такой у меня код
    Код:
    рег = РегистрыСведений.МобильныеТелефоныКлиентов.();
    Пока рег.Следующий() Цикл
    
    Рег2=РегистрыСведений.МобильныеТелефоныКлиентов.Выбрать();
    
    Пока рег2.Следующий() цикл
    Если рег.ТелефонКлиента=Рег2.ТелефонКлиента и рег.Период=Рег2.Период Тогда
    
    Объект=Рег2.ПолучитьМенеджерЗаписи();
    Объект.Удалить();
    
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    
    Все бы ничего, только в данном случае у меня удаляются все дубли которые найдет программа. И мне необходимо что бы один телефон остался.

    P.S. В периоде у меня время звонка
  2. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    На примере регистра сведений КурсыВалют в УТ.
    Код:
    	Запрос= Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
    |	КурсыВалют.Период,
    |	КурсыВалют.Валюта,
    |	КурсыВалют.Курс,
    |	КурсыВалют.Кратность
    |ИЗ
    |	РегистрСведений.КурсыВалют КАК КурсыВалют";
    ОставляемыеЗаписи = Запрос.Выполнить().Выгрузить(); 
    
    НаборЗаписей = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); 
    НаборЗаписей.Загрузить(ОставляемыеЗаписи);	
    НаборЗаписей.Записать();
    
  3. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Спасибо большое. Только это не решает, у меня везде периоды разные, а мне надо сравнить реквизит, а период чтобы остался не тронутым
  4. yzek
    Offline

    yzek Опытный в 1С

    Регистрация:
    13 окт 2010
    Сообщения:
    713
    Симпатии:
    0
    Баллы:
    26
    Тогда вот это непонятно
    Код:
    Если рег.ТелефонКлиента=Рег2.ТелефонКлиента и рег.Период=Рег2.Период Тогда
    Объект=Рег2.ПолучитьМенеджерЗаписи();
    Объект.Удалить();
    КонецЕсли;
    
    Здесь вы сравниваете и реквизит и период, а потом говорите, что периоды разные.
    Напишите подробнее что там у вас и как.
  5. TopicStarter Overlay
    v0233
    Offline

    v0233 Опытный в 1С

    Регистрация:
    23 авг 2010
    Сообщения:
    167
    Симпатии:
    0
    Баллы:
    26
    Да. я с кодом намудрил. спорить не буду. Решил я вот каким способом.

    Код:
        В1=РегистрыСведений.МобильныеТелефоныКлиентов.Выбрать();
    Рег=РегистрыСведений.МобильныеТелефоныКлиентов.Выбрать();
    Пока В1.Следующий() Цикл
    Колво=0;
    Пока Рег.Следующий() Цикл    
    
    Если В1.ТелефонКлиента=Рег.ТелефонКлиента  тогда
    Если не колво=0 Тогда
    Объект=Рег.ПолучитьМенеджерЗаписи();
    Объект.Удалить();
    КонецЕсли;
    Колво=1;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    
    
    Не буду говорить что этот код идеальный, тем более он не быстрый. Но функцию мою он выполняет.
    yzek Вам большое спасибо. :angry: Благодаря Вашему коду я понял в чем моя ошибка
Похожие темы
  1. Almius
    Ответов:
    8
    Просмотров:
    2.720
  2. gpastukhov
    Ответов:
    3
    Просмотров:
    1.360
  3. Lubitel
    Ответов:
    2
    Просмотров:
    1.536
  4. nestov
    Ответов:
    13
    Просмотров:
    1.808
  5. Euronymous
    Ответов:
    7
    Просмотров:
    589
Загрузка...

Поделиться этой страницей