Не проданный товар за определенный период

1. motorsoft 3 04.04.16 23:15 Сейчас в теме
Доброго времени суток! Помогите разобраться с проблемой. Пишу обработку, которая должна выбрать товар по которому не было продаж за определенный период времени.
Ниже приведена часть кода, которая должна выбрать всю номенклатуру из справочника, после отобрать ту по которой были реализации и исключить ее из общего списка номенклатуры. Далее, в качестве проверки, выводится количество оставшейся номенклатуры, производится выборка реализаций в которых присутствуют эти позиции и они есть, хотя, если я все правильно понимаю, их быть не должно.

НоменклатураВся=Новый ТаблицаЗначений;
	Запрос = новый запрос;
	Запрос.Текст="ВЫБРАТЬ
	             |	Номенклатура.Ссылка КАК Ссылка
	             |ИЗ
	             |	Справочник.Номенклатура КАК Номенклатура
	             |ГДЕ
	             |	Номенклатура.ЭтоГруппа = ЛОЖЬ
	             |	И Номенклатура.ПометкаУдаления = ЛОЖЬ
	             |	И Номенклатура.Услуга = ЛОЖЬ";
	НоменклатураВся = Запрос.Выполнить().Выгрузить();
	Запрос = Новый Запрос;
	запрос.Текст =   "ВЫБРАТЬ РАЗЛИЧНЫЕ
	                 |	РеализацияТоваровУслугТовары.Номенклатура.Ссылка КАК Ссылка
	                 |ИЗ
	                 |	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
	                 |ГДЕ
	                 |	РеализацияТоваровУслугТовары.Номенклатура.Ссылка В(&НоменклатураВся)";
	Запрос.УстановитьПараметр("НоменклатураВся",НоменклатураВся);
	НоменклатураПервыйОтбор = новый ТаблицаЗначений;
	НоменклатураПервыйОтбор = Запрос.Выполнить().Выгрузить();
	Запрос = Новый Запрос;
	Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ
	             |	ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка КАК Ссылка
	             |ИЗ
	             |	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары
	             |ГДЕ
	             |	ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка В(&НоменклатураПервыйОтбор)";
	Запрос.УстановитьПараметр("НоменклатураПервыйОтбор",НоменклатураПервыйОтбор);
	НоменклатураРезультат = новый ТаблицаЗначений;
	НоменклатураРезультат = Запрос.Выполнить().Выгрузить();
	массив = новый Массив;
	массив = НоменклатураРезультат.ВыгрузитьКолонку("ссылка");
	для Каждого стр из массив цикл
	элемент=НоменклатураВся.Найти(стр);
	НоменклатураВся.Удалить(Элемент);
	КонецЦикла;
	сообщить(НоменклатураВся.Количество());
	
	///////проверка/////
запрос = новый запрос;
запрос.Текст="ВЫБРАТЬ
             |	РеализацияТоваровУслуг.Ссылка
             |ИЗ
             |	Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
             |ГДЕ
             |	РеализацияТоваровУслуг.Товары.Номенклатура.Ссылка В(&НоменклатураВся)";
запрос.УстановитьПараметр("НоменклатураВся",НоменклатураВся);
рез = Запрос.Выполнить().Выбрать();
Сообщить(рез.Количество());
Показать
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dchumak 42 05.04.16 03:19 Сейчас в теме
Очень неоптимальный алгоритм.
Зачем выгружать данные в таблицу значений, если все уже можно получить в запросе?

1. Формируете запрос по номенклатуре

ВЫБРАТЬ 
|	Номенклатура.Ссылка КАК Ссылка 
|ИЗ 
|	Справочник.Номенклатура КАК Номенклатура 
|ГДЕ 
|	Номенклатура.ЭтоГруппа = ЛОЖЬ 
|	И Номенклатура.ПометкаУдаления = ЛОЖЬ 
|	И Номенклатура.Услуга = ЛОЖЬ";


2. Объединяете два других запроса (по ТЧ реализаций и отчетов о розн. продажах)
ВЫБРАТЬ 
   Т.Ссылка
ИЗ
(
ВЫБРАТЬ РАЗЛИЧНЫЕ 
|	РеализацияТоваровУслугТовары.Номенклатура.Ссылка КАК Ссылка 
|ИЗ 
|	Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары 
|ГДЕ 
|	РеализацияТоваровУслугТовары.Номенклатура.Ссылка В(&НоменклатураВся)"; 

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ РАЗЛИЧНЫЕ 
|	ОтчетОРозничныхПродажахТовары.Номенклатура.Ссылка КАК Ссылка 
|ИЗ 
|	Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары

) КАК Т
Сгруппировать....
Показать


3. Через левое соединение объединяете эти запросы и накладываете условие (если null, значит нет номенклатуры в отчетах и реализациях).
Как-то так...
И параметры в запросы не забудьте поставить...
3. SGordon1 05.04.16 09:52 Сейчас в теме
А вообще по регистру остатки товаров / продажи не оптимальней будет посчитать?
4. motorsoft 3 06.04.16 11:25 Сейчас в теме
(3) Может быть и оптимальнее:-) (2) Спасибо!, все работает!
5. motorsoft 3 06.04.16 12:56 Сейчас в теме
(3) Попробую сделать запрос по регистру
Оставьте свое сообщение

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