Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поиск дублей в ТЧ и раскраска
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
cocon2003
Привет.
Пробовал найти эту тему, НО не совсем то. Предлагают цельные обходы по выборкам, по ТЧ в чистом виде при выводе строк (а там есть элемент - можно достать свойства ячейки текущей записи)
К тому же проход осуществляется в несохранённом документе - выборки не подходят !!!
Итак:
По вызову делаю обход ТЧ документа и ищу ошибки (незаполненные данные, дубли и т.д.). В частности дубли ищу так:
     ТЗаписей = Товары.Количество();
    Для Каждого Стр1 Из Товары Цикл
        Если Стр1.НомерСтроки = ТЗаписей Тогда Продолжить; КонецЕсли;
        ТЗапись = Стр1.НомерСтроки + 1;
        Пока ТЗапись < ТЗаписей Цикл            
            Стр2 = Товары[ТЗапись];
            Если Стр1.Номенклатура = Стр2.Номенклатура Тогда
                //СтрТовар = ЭлементыФормы.Стр2.ТекущиеДанные;
                //СтрТовар.Колонки.Номенклатура.ЦветФонаПоля = WebЦвета.Красный;
                //СтрТовар.Колонки.Номенклатура.ЦветТекстаПоля = WebЦвета.Белый;                
                
                //Стр1.Колонки.Номенклатура.ЦветФонаПоля = WebЦвета.Красный;
                //Стр1.Колонки.Номенклатура.ЦветТекстаПоля = WebЦвета.Белый;    
                Сообщить("Нашёлся дубль " + Стр1.НомерСтроки + " - " + Стр2.НомерСтроки);
            КонецЕсли;
            ТЗапись = ТЗапись + 1;        
        КонецЦикла;    
    КонецЦикла;

Поможете?
jonson_r
А если дубли не последовательно? Ваш вариант не универсален. А вариантов решений может быть много, вот несколько:

1. Унив. коллекция (массив, таб. знач. или любое на ваш вкус), которая поплняеться при неком событии (при добавлении строки ТЧ, при изменении реквизита и т.п.) ну и следовательно поиск по этой коллекции по некой колонке некого значение, если возврат неопределено - дубля нет, если строка ТЗ или любой дпругой тип используемой Вам коллекции - есть дубль.

2. Через свертку ТЗ - чем я как правило пользуюсь. В любом нужном обработчике (я использую ПередЗаписью, там есть параметр Отказ) - копирую нужную мне ТЗ из таб. части. Затем сворачиваю по уникальным колонкам. В результате проверяю количество элементов в исходной ТЗ и в ее копии - если различно - есть дубли. Если вам нужно знать какая именно номенклатура задвоилась - добавьте к скопированной ТЗ колонку, например КолВо (если не занято имя) и проставьте везде 1 (через ЗаполнитьЗначения), при сворачивании укажите ее как колонку суммирования, и там где результат в этой колонке будет больше 1 - дубль.
cocon2003
Цитата(jonson_r @ 29.09.15, 23:26) необходимо зарегистрироваться для просмотра ссылки
А если дубли не последовательно? Ваш вариант не универсален. А вариантов решений может быть много, вот несколько:

1. Унив. коллекция (массив, таб. знач. или любое на ваш вкус), которая поплняеться при неком событии (при добавлении строки ТЧ, при изменении реквизита и т.п.) ну и следовательно поиск по этой коллекции по некой колонке некого значение, если возврат неопределено - дубля нет, если строка ТЗ или любой дпругой тип используемой Вам коллекции - есть дубль.

2. Свертка ТЗ - чем я как правило пользуюсь. В любом нужном обработчике (я использую перед записью, там есть параметр Отказ) - копирую нужную мне ТЗ из таб. части. ЗАтем сворачиваю по уникальным колонкам. В результате проверяю количество элементов в исходной ТЗ и в копии - если различно - есть дубли. Если вам нужно знать какая именно номенклатура задвоилась - добавьте к скопированной ТЗ колонку, например КолВо (если не занято имя) и проставьте везде 1 (через ЗаполнитьЗначения), при сворачивании укажите ее как колонку суммирования, и там где результат в этоц колонке будет больше 1 - дубль.


На счёт "не последовательны" не понял. Но данный способ вполне рабочий если товар в строке 4 дублируется с 7-м или 11-м или с обоими вместе - эта процедура прекрасно срабатывает.
Нет необходимости строить коллекции, проводить с ними манипуляции - для меня это сложно и не понятно зачем.
Есть и (на мой взгляд не опытного программиста) проблема с поиском по коллекции ТЗ - в описанном проходе я заодно ищу незаполненные цены товаров, превышение неких номативов и отрицаний наличия значений. Не представляю как добавить условие поиска по ТЗ всех вариантов условий, если в моём варианте это достаточно просто - при проходе сверил с позицией прокрутки и всё, а уменьшающийся внутренний цикл (от начала к концу он стремится к 1-це) не такой уж ресурсоёмкий (максимальное количество записей в ТЧ документа - 80).

Спасибо за уделённое внимание, но мне нужно не это.
Ваш вариант в любом случае не решает проблему раскрашивания ячеек ТЧ документа с найденными траблами.
jonson_r
п.с. ну а с раскраской нужно смотреть в сторону ОформлениеСтроки, но этот параметр есть вроди бы только ПриВыводеСтроки и ПриПолученииДанных, попробуйте отладчиком посмотреть в оба события, попадает ли в них новая строка, если да - делай там поиск и крась.

Цитата(cocon2003 @ 29.09.15, 23:38) необходимо зарегистрироваться для просмотра ссылки
На счёт "не последовательны" не понял

прошу прощения - не правильно интерпретировал ваш код. да. все у вас с проверкой верно.

Процедура ТоварыПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)
    
    Если НЕ МассивСтрок.Найти(ДанныеСтроки) = Неопределено Тогда
        ОформлениеСтроки.ЦветФона = WebЦвета.ГолубойСоСтальнымОттенком;
    КонецЕсли;

КонецПроцедуры // ТоварыПриВыводеСтроки()
andr_andrey
Цитата(cocon2003 @ 29.09.15, 15:31) необходимо зарегистрироваться для просмотра ссылки
Привет.
Пробовал найти эту тему, НО не совсем то. Предлагают цельные обходы по выборкам, по ТЧ в чистом виде при выводе строк (а там есть элемент - можно достать свойства ячейки текущей записи)
К тому же проход осуществляется в несохранённом документе - выборки не подходят !!!
...
Поможете?

Почему выборки не подходят?
Если чтото можно выгрузить в ТЗ, тогда можно и выборки (самосоединение с подсчётом дублей).
cocon2003
Цитата(andr_andrey @ 30.09.15, 13:46) необходимо зарегистрироваться для просмотра ссылки
Почему выборки не подходят?
Если чтото можно выгрузить в ТЗ, тогда можно и выборки (самосоединение с подсчётом дублей).


Выборки по несохранённому документу!!! Реально?
Vofka
Запрос (соответственно, выборки) можно выполнять к таблице значений.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.