Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Поиск нескольких дублей в табличной части дока

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

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

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

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

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

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

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


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

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

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

Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.