8.х найти повторы в колонке таблицы

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем milkis, 25 сен 2012.

  1. TopicStarter Overlay
    milkis
    Offline

    milkis

    Регистрация:
    25 сен 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Из запроса получена колонка, необходимо найти в ней повторяющиеся значения, и заменить каждый повтор новым номером. Собственно вопрос, как найти повторы и изменить из значение?
    Код:
    Процедура ПроизвестиКоррекциюНомеров();
    Запрос = Новый Запрос; 
    Запрос.Текст = "ВЫБРАТЬ
    | СчетФактураВыданный.ДокументОснование.Номер КАК НомерОснования
    |ИЗ
    | Документ.СчетФактураВыданный КАК СчетФактураВыданный";
    Результат = Запрос.Выполнить();          
    
    КонецПроцедуры
  2. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    первый вариант отсортировать по нему...
    циклом сделать обход.

    в цикле если тек номер равен предыдущему..то дубль..и предыдущий меняй ...
  3. Adara
    Offline

    Adara

    Регистрация:
    21 авг 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Можно попробовать пройтись по выборке запроса и параллельно искать и записывать в какую - нибудь ТаблицуЗначений с одной колонкой.

    Код:
    ТЗНомеров = Новый Таблица Значений;
    ТЗНомеров.Колонки.Добавить("НомерОснования");
    Пока Выборка.Следующий() Цикл
    Если ТЗНомеров.Найти(Выборка.НомерОснования) = Неопределено Тогда
    СтрокаТЗ = ТЗНомеров.добавить();	
    СтрокаТЗ.НомерОснования = Выборка.НомерОснования;
    Иначе
    //замена номера, т.к такой уже есть
    КонецЕсли;
    КонецЦикла;
    P.S. хотя вариант решения от Dmitriy_76 намного производительней....
  4. Dmitriy_76
    Offline

    Dmitriy_76 Опытный в 1С Команда форума

    Регистрация:
    26 мар 2011
    Сообщения:
    2.175
    Симпатии:
    13
    Баллы:
    29
    Adara


    угумс...Найти() - очень трудоемкая
  5. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    В запросе можно сразу определить кол-во одинаковых номеров:
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    | СчетФактураВыданный.ДокументОснование.Номер КАК НомерОснования,
    | КОЛИЧЕСТВО(СчетФактураВыданный.ДокументОснование.Номер) КАК Повтор
    |ИЗ
    | Документ.СчетФактураВыданный КАК СчетФактураВыданный
    | СГРУППИРОВАТЬ ПО
    |   СчетФактураВыданный.ДокументОснование.Номер КАК НомерОснования";
    ТЗ = Запрос.Выполнить().Выгрузить();
    Далее перебором по ТЧ "ДокументыОснования" документа "СчетФактураВыданный" находить соответствующее значение в ТЗ и проверять: если Повтор > 1, тогда менять номер на новый.
    P.S.: хотя решение некрасивое, но работать будет.

    Ну дак, можно заюзать отбор в ТЗ, не? :smile:
  6. TopicStarter Overlay
    milkis
    Offline

    milkis

    Регистрация:
    25 сен 2012
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Всем СпасибО!

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