7.7 Программно удалить повторяющиеся записи?

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем Almius, 7 май 2007.

  1. TopicStarter Overlay
    Almius
    Offline

    Almius

    Регистрация:
    4 май 2007
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Подскажите чайнику! как программно удалить повторяющиеся записи в справочнике?
  2. рамиль
    Offline

    рамиль Опытный в 1С

    Регистрация:
    12 мар 2006
    Сообщения:
    595
    Симпатии:
    0
    Баллы:
    26
    Сначало необходимо их найти а затем удалить .
  3. TopicStarter Overlay
    Almius
    Offline

    Almius

    Регистрация:
    4 май 2007
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Ну это понятно...
    а алгоритм не подскажете...
  4. ЧКДзержинский
    Offline

    ЧКДзержинский Опытный в 1С

    Регистрация:
    7 дек 2006
    Сообщения:
    487
    Симпатии:
    3
    Баллы:
    29
    Товарищ! думай иногда своей головой.




    тЗнач=СоздатьОбъект("ТаблицаЗначений");
    тЗнач.НоваяКолонка("Имя");
    тЗнач.НоваяКолонка("Количество");

    Справ=СоздаьОбъект("Справочник.Номенклатура");
    //Если справочник является подчиненным, то ВыбратьЭлементы(0);
    Справ.ВыбратьЭлементы();
    Пока Справ.ПолучитьЭлемент()=1 Цикл
    Если Справ.ЭтоГруппа()=1 Тогда
    Продолжить;
    КонецЕсли;
    тЗнач.НоваяСтрока();
    тЗнач.Имя=Справ.Наименование;
    тЗнач.Количество=1;
    КонецЦикла;

    тЗнач.Свернуть("Имя","Количество");

    тЗнач.ВыбратьСтроки();
    Пока тЗнач.ПолучитьСтроку()=1 Цикл
    Если тЗнач.Количество=1 Тогда
    Продолжить;
    КонецЕсли;
    Справ.НайтиПоНаименованию(тЗнач.Имя,0);
    Сообщить("Помечаю на удаление "+Справ);
    Справ.Удалить(0);
    КонецЦикла;
  5. TopicStarter Overlay
    Almius
    Offline

    Almius

    Регистрация:
    4 май 2007
    Сообщения:
    29
    Симпатии:
    0
    Баллы:
    1
    Спасибо Товарищ!
    За помощь
    иногда думаю, но так как я совсем уж новичек прошу помощи, не злись. Вспомни как сам начинал
  6. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    439
    Симпатии:
    3
    Баллы:
    29
    А я бы намного проще сделал

    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Наименование","Строка");
    ВыбСправочник=СоздатьОбъект("Справочник.Номенклатура");
    ВыбСправочник.ВыбратьЭлементы();//для подчиненного ВыбратьЭлементы(0);
    Пока ВыбСправоник.ПолучитьЭлемент=1 цикл
    Если ВыбСправочник.ЭтоГруппа()=1 Тогда продолжить;КонецЕсли;
    Если ТЗ.НайтиЗначение(ВыбСправочник.Наименование,,"Наименование")=0 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.Наименование=ВыбСправочник.Наименование;
    Иначе
    ВыбСправочник.Удалить(0);
    КонецЕсли;

    КонецЦикла;


    Мне кажется намного понятней для новичка и велосипед изобретать не надо :unsure:
  7. WaRDeR
    Offline

    WaRDeR Модераторы Команда форума Модератор

    Регистрация:
    23 ноя 2006
    Сообщения:
    3.263
    Симпатии:
    14
    Баллы:
    29
    2 ЧКДзержинский
    Этот алгоритм "ляжет" при наличии более 2-х дублирующих записей (придется запускать на один раз меньше, чем есть количество дублей)

    2 X-Man
    Симпатичней, но таблица значений с одной колонкой - это список значений, который работает быстее (можно время засечь).

    И еще... что то я не заметил использование транзакций.

    При наличии 5-6 тыс. элементов сэкномите время, дэцибелы и жизнь накопителя :)
  8. X-Man
    Offline

    X-Man Опытный в 1С

    Регистрация:
    18 май 2007
    Сообщения:
    439
    Симпатии:
    3
    Баллы:
    29
    2 WARDER Есть доля правды в твоих словах, но дело в том, что автор темы явно не указал, значение каких полей принимать во внимание (возможно, что не только наименование). А так полностью согласен с тобой по поводу быстродействия:)
  9. ЧКДзержинский
    Offline

    ЧКДзержинский Опытный в 1С

    Регистрация:
    7 дек 2006
    Сообщения:
    487
    Симпатии:
    3
    Баллы:
    29

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