8.х Обработка нахождения дублей

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

  1. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    Да нет все правильно mialord Вам и говорит, что надо написать тот запрос, который Вы и написали, что по номеру выбрать количество различных
  2. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Что совсем утром не въезжаю :(
    Сейчас такая структура! Как пометить теперь? или по другому как то?
    Код:
     Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПУ_Рейс.Ссылка) КАК Ссылка,
    | ПУ_Рейс.НомерНакладной КАК НомерНакладной,
    | ПУ_Рейс.Вагон КАК Вагон,
    | 1 КАК Всего,
    | ПУ_Рейс1.Ссылка КАК Ссылка1,
    | ПУ_Рейс1.НомерНакладной КАК НомерНакладной1,
    | ПУ_Рейс1.Вагон КАК Вагон1
    |ИЗ
    | Документ.ПУ_Рейс КАК ПУ_Рейс
    |  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПУ_Рейс КАК ПУ_Рейс1
    |  ПО ПУ_Рейс.НомерНакладной = ПУ_Рейс1.НомерНакладной
    |   И ПУ_Рейс.Вагон = ПУ_Рейс1.Вагон
    |ГДЕ
    | ПУ_Рейс.Дата МЕЖДУ &Дата1 И &Дата2
    |
    |СГРУППИРОВАТЬ ПО
    | ПУ_Рейс.НомерНакладной,
    | ПУ_Рейс.Вагон,
    | ПУ_Рейс1.Ссылка,
    | ПУ_Рейс1.НомерНакладной,
    | ПУ_Рейс1.Вагон
    |
    |ИМЕЮЩИЕ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПУ_Рейс.Ссылка) > 1
    |
    |УПОРЯДОЧИТЬ ПО
    | Вагон,
    | Вагон1
    |ИТОГИ
    | КОЛИЧЕСТВО(Всего)
    |ПО
    | ОБЩИЕ";
    Запрос.УстановитьПараметр("Дата1",Период.ДатаНачала);
    Запрос.УстановитьПараметр("Дата2",Период.ДатаОкончания);
    Результат = Запрос.Выполнить();
    Тз = Результат.Выгрузить();
    Тз.Свернуть("НомерНакладной");
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    
    Сообщить("Найдено" + ВыборкаДетальныеЗаписи.Всего + " " + "записей" );
    КонецЦикла;
    
  3. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    У вас есть запрос - вы его выгружаете в ТЗ и получатет ТЗ вида

    000001 ссылка 1
    000001 ссылка 2
    000001 ссылка 3
    000002 ссылка 4
    000002 ссылка 5

    А теперь пищете алгоритм

    номернакладной="";
    Для каждого стр из ТЗ Цикл

    Если номернакладной<> Стр.НомерНакладной Тогда
    номернакладной=Стр.НомерНакладной;
    Иначе
    ////тогда стр.Ссылку1 помечаем на удаление
    КонецЕсли;
    КонецЦикла

    При таком алгоритеме

    ссылки 1 и ссылка 4 из примера не будут помечены на удаление, остальное будет
  4. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Значит не дочитал я до конца :D
  5. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Сделал вот так
    Код:
     Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПУ_Рейс.Ссылка) КАК Ссылка,
    | ПУ_Рейс.НомерНакладной КАК НомерНакладной,
    | ПУ_Рейс.Вагон КАК Вагон,
    | 1 КАК Всего,
    | ПУ_Рейс1.Ссылка КАК Ссылка1,
    | ПУ_Рейс1.НомерНакладной КАК НомерНакладной1,
    | ПУ_Рейс1.Вагон КАК Вагон1
    |ИЗ
    | Документ.ПУ_Рейс КАК ПУ_Рейс
    |  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПУ_Рейс КАК ПУ_Рейс1
    |  ПО ПУ_Рейс.НомерНакладной = ПУ_Рейс1.НомерНакладной
    |   И ПУ_Рейс.Вагон = ПУ_Рейс1.Вагон
    |ГДЕ
    | ПУ_Рейс.Дата МЕЖДУ &Дата1 И &Дата2
    |
    |СГРУППИРОВАТЬ ПО
    | ПУ_Рейс.НомерНакладной,
    | ПУ_Рейс.Вагон,
    | ПУ_Рейс1.Ссылка,
    | ПУ_Рейс1.НомерНакладной,
    | ПУ_Рейс1.Вагон
    |
    |ИМЕЮЩИЕ
    | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПУ_Рейс.Ссылка) > 1
    |
    |УПОРЯДОЧИТЬ ПО
    | Вагон,
    | Вагон1
    |ИТОГИ
    | КОЛИЧЕСТВО(Всего)
    |ПО
    | ОБЩИЕ";
    Запрос.УстановитьПараметр("Дата1",Период.ДатаНачала);
    Запрос.УстановитьПараметр("Дата2",Период.ДатаОкончания);
    Результат = Запрос.Выполнить();
    Тз = Результат.Выгрузить();
    НомерНакладной = "";
    Для каждого стр из ТЗ Цикл
    Если НомерНакладной <> Стр.НомерНакладной Тогда
    НомерНакладной = Стр.НомерНакладной;
    Иначе
    Док = стр.ссылка1.ПолучитьОбъект();
    Док.УстановитьПометкуУдаления(Истина);
    
    КонецЕсли;
    
    КонецЦикла;
    
    \все вроде работает, проверил на одном дубле! При запуске хотябы на 100 все к чертям зависло :(
  6. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    А записывать кто будет после установки на удаление


    Док = стр.ссылка1.ПолучитьОбъект();
    Док.УстановитьПометкуУдаления(Истина);
    Док.Записать();

    Попробуйте так.
  7. TopicStarter Overlay
    PavelA
    Offline

    PavelA Опытный в 1С

    Регистрация:
    26 дек 2011
    Сообщения:
    739
    Симпатии:
    0
    Баллы:
    26
    Да это поправил, но суть в том что за каждую дату примерно 600, 700 документов висит! Всего же их около 26 тысяч, он даже 600 отрабатывает очень долго, не дожидаюсь закрываю) Есть какие то уже помеченные на удаление, может если их исключить поменьше останется. Как в запросе прописать, чтобы исключал помеченные на удаления?
  8. Draco
    Offline

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

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    В конструкторе откройте ваш запрос и сразу же на закладке условие - поставтье услови что НЕ Ссылка1.пометкаУдаления
    просто по коду запроса не помню где будет перед или после ИМЕЮЩИЕ

    Второй вариант - у Вас есть отбор по датам - делайте по дню -задавайте один день и вперед и так итерациями

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