Поиск документов,в ТЧ которых имеются все позиции заданные в ТЗ.

1. dentoma51 8 29.01.17 00:04 Сейчас в теме
Друзья, при загрузке документа Возврат от покупателя в БП 3.0 из другой базы надо найти документ отгрузки- Реализацию товаров. То есть на входе имеем ТЧ документа Возврат.
Надо по этому списку найти предыдущие документы отгрузки (РТУ),у которых в ТЧ есть все позиции ТЧ документа Возврат.
Пробую в правилах конвертации,в обработчике После загрузки такой код
ТабТ = Объект.Товары.Выгрузить().ВыгрузитьКолонку("Номенклатура");
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка,
| РеализацияТоваровУслуг.Товары.(
| Номенклатура
| ) КАК Товары
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Товары.Номенклатура В(&ТабТ)
| И РеализацияТоваровУслуг.Дата <= &ДатаВ
| И РеализацияТоваровУслуг.Проведен
| И РеализацияТоваровУслуг.Склад = &Склад
| И РеализацияТоваровУслуг.Контрагент = &Контрагент"
;
Запрос.УстановитьПараметр("ТабТ",ТабТ);
Запрос.УстановитьПараметр("ДатаВ",Объект.Дата);
Запрос.УстановитьПараметр("Контрагент",Объект.Контрагент);
Запрос.УстановитьПараметр("Склад",Объект.Склад);
РезЗ = Запрос.Выполнить().Выгрузить();
Если РезЗ.Количество() = 1
Тогда
Объект.Сделка = РезЗ[0].Ссылка;
КонецЕсли;

Но,он выгружает все документы,если находится хотя бы одна позиция возврата. А надо,чтобы в документе Реализации были все возвращаемые позиции.

Вот так тоже не получается:

Запрос = Новый Запрос;
МВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МВТ;
Запрос.Текст = "ВЫБРАТЬ
| ТабТ.Номенклатура
|ПОМЕСТИТЬ ТаблВозврата
|ИЗ
| &ТабТ КАК ТабТ
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
| РеализацияТоваровУслугТовары.Ссылка,
| РеализацияТоваровУслугТовары.Номенклатура
|ИЗ
| ТаблВозврата КАК ТаблВозврата
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
| ПО ТаблВозврата.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура"
;
Запрос.УстановитьПараметр("ТабТ",ВозвратОтПокупателя.Товары.Выгрузить());
Запрос.УстановитьПараметр("ДатаВ",ВозвратОтПокупателя.Дата);
Запрос.УстановитьПараметр("Контрагент",Справочники.Контрагенты.НайтиПоНаименованию("ИП Иванов Александр Иванович"));
РезЗ = Запрос.Выполнить().Выгрузить();

Может есть решение?
Спасибо.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. starjevschik 29.01.17 11:53 Сейчас в теме
(1) Допустим у нас есть временная таблица, где вся номенклатура, которая должна быть, назовем ее НоменклатураДолжнаБыть.
В запросе посчитаем, сколько позиций из этой таблицы отсутствует в документе
Выбрать 
ТабЧасть.Ссылка КАК Ссылка
Сумма(Выбор когда ТабЧасть.Номенклатура Есть NULL тогда 1 иначе 0 конец) КАК Счетчик
Из 
НоменклатураДолжнаБыть КАК НоменклатураДолжнаБыть 
ЛЕВОЕ СОЕДИНЕНИЕ
Документ.РеализацияТоваровУслуг.Товары Как ТабЧасть
По НоменклатураДолжнаБыть.Номенклатура = ТабЧасть.Номенклатура
ГРУППИРОВКА по Ссылка
Показать

результатом такого запроса будет таблица, в которой у нас ссылка на реализацию и количество отсутствующих позиций.
Дальше из этого выбираем ссылки, для которых счетчик = 0
Выбрать Ссылка Из (тут наш запрос или временная таблица, куда мы его сложили) Где Счетчик = 0

Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот