Как выборке запроса найти одинаковые записи? #655592


#0 by vsafonin
Здравствуйте! Необходимо в выборке из запроса найти записи где -один и тот же контрагент -один и тот же договор. Сам запрос: ВЫБРАТЬ    РеализацияТоваровУслуг.Дата,    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг Выводит все правильно, но результатом должны быть записи для одного контрагента по одному договору с одним документом реализации, а тут получается что если в этом месяце для одного и того же контрагента делали два документа реализации, то он тоже попадает в результат. Нужно отфильтровать и выдать сообщение об ошибке. Сам я ничего лучше придумать не могу как при переборе выборки сделать еще один запрос с параметрами контрагент и договор и если количество больше 1 то выдать сообщение об ошибке. Но по моему это не оптимально, получается для каждого результата запроса будет новый и так пока вся выборка не кончится. Можно ли как то по другому сделать? Заранее премного благодарен!
#1 by shuhard
кури группировку и Having
#2 by vsafonin
Да дело в том что нужно найдя эти документы, выдать сообщение а остальные добавить....вот как с группировкой и имеющие это сделать? Будет еще одна колонка в которой будет число с количеством записей?
#3 by mistеr
Я так и не понял, какой документ нужен, если их несколько. Определись. И ВТ лишняя по-моему.
#4 by vsafonin
Нужно пострить таблицу вида: Договор   Контрагент СуммаНачислений Начисленно Заполняется таблица за определенный период (месяц указанный пользователем) Первые 3 заполняются из данных справочника ДоговорыКонтрагентов. Последние 2 поля берутся из документа реализации, И заполняются только тогда когда они существуют, проведены, и номенклатура в Табличной Части совпадает с константой (в ней хранится определенная номенклатура) Как сделать без ВТ не понятно мне... Документы реализации для определенного договора и контрагента должны заполняться РАЗ В МЕСЯЦ. Вот мне нужно если например в текущем месяце "Ошибочно" Заполнили документ реализации 2 или больше раза.. Эти записи мне не нужны, и для них нужно выдать сообщение об ошибке.... как это сделать ума уже не приложу..
#5 by vsafonin
То есть после ошибки, нужно продолжить работу и заполнить что есть.... Пока Сделал так, если найден хоть один такой документ, выдаеться сообщение об ошибке..и просьба исправить ситуацию..пока этого не сделано, работать Обработка не будет)) Более гуманный способ есть?
#6 by Steel_Wheel
Есть. Все документы сохраняют данные в регистр со струутурой твоей таблицы, обработка подойдет стандартная по остаткам регистра. Перед записью документа, документ проверяет условие на наличие такого же документа в системе. Если документ есть, то запись текущего документа не производится. Т.е. в регистре всегда актуальные данные, твоя задача -- предотвратить попадание в регистр неактуальных или избыточных данных
#7 by EugeniaK
Ну вообще-то это правильная схема работы. Нужно исправить ошибочные документы и запустить обработку еще раз. Только не поняла, зачем перебор выборки. У тебя пакет запросов. Добавь в него еще один запрос Количество различных(Документ) сгруппировать по контрагенту и договору. Если в запросе есть данные, выдаем сообщение об ошибке и прекращаем работу. И, кстати, такое сравнение очень плохое ДоговорыКонтрагентов.Владелец.Наименование = ДокРеализации.Контрагент.Наименование Это 2 дополнительных соединения с таблицей контрагентов и плюс условие по строковому полю. Намного быстрее будет работать связь ДоговорыКонтрагентов.Владелец = ДокРеализации.Контрагент
#8 by vsafonin
Конфа типовая, делаю внешнуюю обработку не затрагивая что либо в конфигурации.. Запрос поменял. Спасибо! В принципе сейчас делаю сначала выгрузку в ТЗ, а уж В ТЗ ищу дубли, которые нашел оттуда удаляю, вывожу сообщение что мол есть докумены их надо исправить и имена и коды этих доков, хотя обработка продолжает работать. Как только буду на 100% уверен что попадание двух или более документов это ОШИБКА, либо будет критично сказываться на производительности - то оставлю только Сообщение об ошибке, и после исправления только работать.
#9 by sergus_dixi
Не надо сравнивать по наименованию - кури план запроса и увидишь проблемы. агрегатные функции не читал? количество различных > 1 и все прекрасно выводится в СКД или консоли с использованием как вариант ВЫБОР КОГДА....
#10 by GANR
Сгруппировать запрос по всем полям и добавить агрегатную функцию КОЛИЧЕСТВО(*). Если непонятно - читать СП.
#11 by GANR
А ещё лучше
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С