Вход | Регистрация



Универсальный метод поиска одинаковых значений в колонке тч документа?

Универсальный метод поиска одинаковых значений в колонке тч документа?
Я
   Обфускация
 
04.07.18 - 08:57
Как проще и быстрее найти по тч документа дубли?
 
 
   Mankubus
 
1 - 04.07.18 - 08:58
(0) добавить колонку. заполнить ее единицей.
Свернуть. там где больше единицы в новой колонке - дубли
   Ненавижу 1С
 
2 - 04.07.18 - 08:58
1. можно запросом, например
2. можно выгрузить в ТЗ, добавить колонку, заполнить ее 1, свернуть суммируя по ней и смотреть где значения больше 1
   МимохожийОднако
 
3 - 04.07.18 - 08:58
Добавить колонку с единичкой , Свернуть по номенклатуре. Где больше единицы, там дубль
   Обфускация
 
4 - 04.07.18 - 09:02
большой выбор, спасибо
   Serg_1960
 
5 - 04.07.18 - 09:11
Если внимательно прочитать ТЗ ТС, то можно родить третий вариант - выгрузить колонку(!) ТЧ документа...
   ASU_Diamond
 
6 - 04.07.18 - 09:13
(5) а если ещё внимательнее прочитать, то там не написано что дубль по значению в одной колонке.
   ManyakRus
 
7 - 04.07.18 - 09:14
//возвращает Истина если есть задвоенные

Функция ЕстьЗадвоенныеТЧ(Знач ТЧ, Знач ИмяКолонки) Экспорт
    Ответ = Ложь;
    
    ТЗ = ТЧ.Выгрузить();
    ТЗ.Колонки.Добавить("КоличествоЗадвоенных", Новый ОписаниеТипов("Число"));
    ТЗ.ЗаполнитьЗначения(1, "КоличествоЗадвоенных");
    ТЗ.Свернуть(ИмяКолонки, "КоличествоЗадвоенных");
    Для каждого ТЗ1 из ТЗ Цикл
        Если ТЗ1.КоличествоЗадвоенных >1 Тогда
            Сообщить("Есть задвоенные строки " + ИмяКолонки + " !");
            Ответ = Истина;
            Прервать;
        КонецЕсли; 
    КонецЦикла; 
    
    Возврат Ответ;
КонецФункции
   ASU_Diamond
 
8 - 04.07.18 - 09:15
(7) можно ещё предварительно отсортировать
   Buster007
 
9 - 04.07.18 - 09:16
чтобы найти в колонке достаточно использовать НайтиСтроки
   ASU_Diamond
 
10 - 04.07.18 - 09:21
(9) скорость какая будет?
 
 Рекламное место пустует
   Малыш Джон
 
11 - 04.07.18 - 09:21
(7) чтобы понять сам факт наличия дублей, не обязательно так заморачиваться, достаточно сравнить количество строк до свертки и после свертки.

КоличествоДо = Таблица.Количество();
Таблица.Свернуть();
КоличествоПосле = Таблица.Количество();
ЕстьДубли = (КоличествоДо>КОличествоПосле);
   Малыш Джон
 
12 - 04.07.18 - 09:23
(9) а что найти-то? Отбор какой?
   ASU_Diamond
 
13 - 04.07.18 - 09:30
(12) значение из сроки. Цикл по всем строкам.
   Малыш Джон
 
14 - 04.07.18 - 09:40
(13) неоптимально) и сложно)
найтистроки() для каждой строки из ТЧ. К тому же: или перед проверкой очередного значения проверять, была ли уже такая проверка(а значит где-то хранить уже проверенные значения), или мириться с тем, что по задвоенным значениям поиск будет проходит дважды, трижды и т.д.
   ASU_Diamond
 
15 - 04.07.18 - 09:43
(14) очень неоптимально
   Адинэснег
 
16 - 04.07.18 - 09:54
(0) Добавь колонку счетчик с единичками
Таблица.Колонки.Добавить("СчетчикСтрок");
    Таблица.ЗаполнитьЗначения(1,"СчетчикСтрок");

потом запросом

ИМЕЮЩИЕ
    СУММА(Таблица.СчетчикСтрок) > 1

Если Результат запроса не пустой - дубли
   Адинэснег
 
17 - 04.07.18 - 09:57
хотя хрень с колонкой в таблице, сразу в запросе выбери поле счетчик и сгруппируй
   Serg_1960
 
18 - 04.07.18 - 10:03
(9) Учитывая, что требуется поиск значений в колонке(ед.ч.) - можно использовать .Найти(), а не .НайтиСтроки().
   Serg_1960
 
19 - 04.07.18 - 10:08
(16) "ИМЕЮЩИЕ КОЛИЧЕСТВО(Таблица.ИмяКолонки) <> КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Таблица.Имяколонки)

(шутка)
   dezss
 
20 - 04.07.18 - 10:11
ОФФ:
э...в топе все темы от нашего ТС...я не понял, что происходит? О_о
   dezss
 
21 - 04.07.18 - 10:14
(20) тьфу..ошибся...фильтр выскочил :)
   Serg_1960
 
22 - 04.07.18 - 10:16
(20) У ТС обострение синдрома дефицита внимания и гиперактивности :)))
   Buster007
 
23 - 04.07.18 - 12:18
(10) побыстрее, чем добавить в таблицу колонку, заполнить, свернуть, проверить количество
(18) как определить, что есть дубли с использованием функции Найти()?
   Вафель
 
24 - 04.07.18 - 12:20
Свертыванием не удобно, ибо теряется инфа о номерах строк
   Малыш Джон
 
25 - 04.07.18 - 12:22
(24) а зачем она?
   Вафель
 
26 - 04.07.18 - 12:28
(25) а пользователю что говорить. У вас в 10 000 строк есть дубли. е..сь с ними сами
   ASU_Diamond
 
27 - 04.07.18 - 12:34
(26) а если это нужно, то дальше через НайтиСтроки()
   SleepyHead
 
28 - 04.07.18 - 12:34
(0) Точнее формулируйте техническое задание.
   Обфускация
 
29 - 04.07.18 - 12:35
да все сделано уже, всем спасибо
   ASU_Diamond
 
30 - 04.07.18 - 12:35
(23) 1. Может проверишь?
100 раз запустить поиск по 100 срокам
или 1 раз заполнить значение в 100 строках (это делается без перебора строк) и свернуть?
   Малыш Джон
 
31 - 04.07.18 - 13:15
(26) а зачем пользователю что-то говорить? может это удаление дублей из документа?
   Buster007
 
32 - 04.07.18 - 13:23
(30) я предполагал поиск одной позиции в колонке, а не всех позиций
   Tonik992
 
33 - 04.07.18 - 13:25
Можно внешнюю компоненту написать. Передать туда 2 ТЧ и пусть оно там сравнивает.
 
 
   ASU_Diamond
 
34 - 04.07.18 - 13:27
(32) ну будет не 100 раз поиск запускаться, а хотя бы даже 20. Всё равно работать дольше будет, чем 1 раз свернуть.
   Вафель
 
35 - 04.07.18 - 13:51
(31) пример документа, в котором нужно удалять (не сворачивать) дубли
   Малыш Джон
 
36 - 04.07.18 - 13:53
(35) "Фиксация событий с камер наблюдения"


Список тем форума
Рекламное место пустует  Рекламное место пустует
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит Тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует