Имя: Пароль:
1C
1C 7.7
v7: Поиск нескольких дублей в табличной части дока
0 Mafiozaa
 
10.02.21
09:46
Приветствую, есть нужда сравнить ТабличнуюЧасть и ТаблицуЗначений на наличие дублей по строкам, затык в том, что если в документе 1 строка где то задвоилась затроилась, номер строк каждой я вижу, но если 3 строки задвоилось затроилось, то вижу только крайнюю

    ИтогТЗ = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ИтогТЗ);
    ИтогТЗ.ВыбратьСтроки();
    Для А = 0 По ИтогТЗ.КоличествоСтрок() Цикл
        Если ИтогТЗ.НайтиЗначение(Штрихкод, А, "КодМаркировки") = 1 Тогда
            Сообщить(А);
        КонецЕсли;
    КонецЦикла;

Штрихкод - считанные данные сканером
КодМаркировки - колонка в табличной части
ИтогТЗ.КодМаркировки - колонка в таблице значений

А так как в НайтиЗначении стоит Штрихкод то он ищет по последнему пикнутому, прошу подмоги)))
1 ChMikle
 
10.02.21
09:50
табличную часть выгрузите в таблицу значений , добавьте в таблицу значений колонку "повтор" проставьте 1 в каждую строку, сверните по "номенклатуре" и суммировании "повтора", там где 2 и более значения - повторяются
2 Mafiozaa
 
10.02.21
10:37
(1) Все хорошо, но выдает ошибку Операции сравнения на больше-меньше допустимы только над значениями совпадающих базовых типов (число, строка, дата)

Добавлял в НоваяКолонка("Повтор", "Число");

    ИтогТЗ = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ИтогТЗ);
    ИтогТЗ.НоваяКолонка("Повтор", "Число");
    ИтогТЗ.ВыбратьСтроки();
    Пока ИтогТЗ.ПолучитьСтроку() = 1 Цикл
        ИтогТЗ.Повтор = 1;
    КонецЦикла;
    ИтогТЗ.Свернуть("КодМаркировки", "Повтор");
    Для А = 0 По ИтогТЗ.КоличествоСтрок() Цикл
        Если ИтогТЗ.Повтор > 1 Тогда
            Сообщить(А);
        КонецЕсли;
    КонецЦикла;
3 ChMikle
 
10.02.21
10:42
ИтогТЗ = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ИтогТЗ);
    ИтогТЗ.НоваяКолонка("Повтор", "Число");
    ИтогТЗ.ВыбратьСтроки();
    Пока ИтогТЗ.ПолучитьСтроку() = 1 Цикл
        ИтогТЗ.Повтор = 1;
    КонецЦикла;
    ИтогТЗ.Свернуть("КодМаркировки", "Повтор");
    Для А = 0 По ИтогТЗ.КоличествоСтрок() Цикл

ИтогТЗ.получитьстрокуПономеру(а);// надо позиционировать на конкретную строку ТЗ

        Если ИтогТЗ.Повтор > 1 Тогда
            Сообщить(А);
        КонецЕсли;
    КонецЦикла;
4 Mafiozaa
 
10.02.21
10:48
(3) Странно как то отыгрывает https://prnt.sc/yxw58r
5 Mafiozaa
 
10.02.21
10:51
(3) Если А = 0 То номер за пределами значения, Если А = 1 То то что на скрине
6 ChMikle
 
10.02.21
12:06
(5) угу , номер строки с 1
А=1 по По ИтогТЗ.КоличествоСтрок()
получилось в итоге -то ?
7 MWWRuza
 
гуру
10.02.21
18:00
Off... По картинке в (4) - а, что, клей уже маркируют?
8 hhhh
 
10.02.21
20:08
(7) может это парфюмерия? Его же нюхают.
9 Исновая
 
10.02.21
20:36
(8) если клей не маркированный - это не парфюмерия
10 Mafiozaa
 
11.02.21
02:14
(8) Все правильно, элитный парфюм)))
11 Mafiozaa
 
11.02.21
02:14
(6) А = 1 то получается, то что на скрине
12 hhhh
 
11.02.21
05:42
(11) вот это какая-то хрень

    ИтогТЗ.ВыбратьСтроки();
    Пока ИтогТЗ.ПолучитьСтроку() = 1 Цикл
        ИтогТЗ.Повтор = 1;
    КонецЦикла;

выкинь, напиши

ИтогТЗ.Заполнить(1,,,"Повтор");
13 Mafiozaa
 
11.02.21
08:25
(12) Спасибо, но решил уже))
14 Злопчинский
 
11.02.21
11:40
(12) В общем случае такой вариант Заплолнить - сломается или в попытки обернуть или на колво строк проверять
15 skafandr
 
11.02.21
13:21
(13) так напиши что было
16 Mafiozaa
 
12.02.21
02:57
(15) Да я обработку внешнего события пересобрал, чтоб дубли впринципе не попадали в тч
17 Cthulhu
 
12.02.21
03:27
(14): да схреновли??? вот такое - ИтогТЗ.Заполнить(1,1,ИтогТЗ.КоличествоСтрок(),"Повтор") - никогда не ломалось...
(16): правильное решение.