Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Поиск дублей в ТЧ и раскраска          
cocon2003 Подменю пользователя
сообщение 29.09.15, 14:31
Сообщение #1

Общительный
**
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0

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

Поможете?

jonson_r Подменю пользователя
сообщение 29.09.15, 22:26
Сообщение #2

Говорящий
***
Группа: Пользователи
Сообщений: 61
Спасибо сказали: 1 раз
Рейтинг: 0

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

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

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

cocon2003 Подменю пользователя
сообщение 29.09.15, 22:38
Сообщение #3

Общительный
**
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0

Цитата(jonson_r @ 29.09.15, 23:26) *
А если дубли не последовательно? Ваш вариант не универсален. А вариантов решений может быть много, вот несколько:

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

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


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

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

jonson_r Подменю пользователя
сообщение 29.09.15, 23:02
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 61
Спасибо сказали: 1 раз
Рейтинг: 0

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

Цитата(cocon2003 @ 29.09.15, 23:38) *
На счёт "не последовательны" не понял

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

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

КонецПроцедуры // ТоварыПриВыводеСтроки()

andr_andrey Подменю пользователя
сообщение 30.09.15, 12:46
Сообщение #5

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 628
Спасибо сказали: 167 раз
Рейтинг: 132.1

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

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

Сообщение отредактировал andr_andrey - 30.09.15, 12:47


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

cocon2003 Подменю пользователя
сообщение 01.10.15, 8:32
Сообщение #6

Общительный
**
Группа: Пользователи
Сообщений: 36
Спасибо сказали: 0 раз
Рейтинг: 0

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


Выборки по несохранённому документу!!! Реально?

Vofka Подменю пользователя
сообщение 01.10.15, 8:36
Сообщение #7

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13958
Из: Киев
Спасибо сказали: 4524 раз
Рейтинг: 3647.7

Запрос (соответственно, выборки) можно выполнять к таблице значений.

Сообщение отредактировал Vofka - 01.10.15, 8:36

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 14.06.24, 18:45
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!