Отчет для УТ11.1

Версия для печатиPDF-версия

Платформа:

ДД! Отчет собирает не продаваемые товары за период. 2 вопроса. Почему не срабатывает выборка документов, хотя они в базе есть и второй как организовать удаление строки тз в цикле при ереборе. 

Если ЗначениеЗаполнено(Склад)и ЗначениеЗаполнено(НомРа) Тогда
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|ТоварыНаСкладахОстатки.ВНаличииОстаток Как Ост,
|ТоварыНаСкладахОстатки.Номенклатура Как Номен,
|ТоварыНаСкладахОстатки.Складкак склад
|ИЗ
|РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|Где
|ТоварыНаСкладахОстатки.Склад=&Склад и
|ТоварыНаСкладахОстатки.Номенклатура=&НомРа
| УПОРЯДОЧИТЬ ПО
    |   ТоварыНаСкладахОстатки.Номенклатура ВОЗР";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("НомРа", НомРа);
ИначеЕсли ЗначениеЗаполнено(Склад)и НЕ ЗначениеЗаполнено(НомРа) Тогда
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|ТоварыНаСкладахОстатки.ВНаличииОстаток Как Ост,
|ТоварыНаСкладахОстатки.Номенклатура Как Номен,
|ТоварыНаСкладахОстатки.Склад как склад
|ИЗ
|РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|Где
|ТоварыНаСкладахОстатки.Склад=&Склад
| УПОРЯДОЧИТЬ ПО
        |   ТоварыНаСкладахОстатки.Номенклатура ВОЗР";
Запрос.УстановитьПараметр("Склад", Склад);
ИначеЕсли НЕ ЗначениеЗаполнено(Склад)и ЗначениеЗаполнено(НомРа) Тогда
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|ТоварыНаСкладахОстатки.ВНаличииОстаток Как Ост,
|ТоварыНаСкладахОстатки.Номенклатура Как Номен,
|ТоварыНаСкладахОстатки.Склад  как склад
|ИЗ
|РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
|Где
|ТоварыНаСкладахОстатки.Номенклатура=&НомРа
| УПОРЯДОЧИТЬ ПО
    |   ТоварыНаСкладахОстатки.Номенклатура ВОЗР";
Запрос.УстановитьПараметр("НомРа", НомРа);
 
ИначеЕсли Не ЗначениеЗаполнено(Склад)и НЕ ЗначениеЗаполнено(НомРа) Тогда
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|ТоварыНаСкладахОстатки.ВНаличииОстаток Как Ост,
|ТоварыНаСкладахОстатки.Номенклатура Как Номен,
|ТоварыНаСкладахОстатки.Склад как склад
|ИЗ
|РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
| УПОРЯДОЧИТЬ ПО
    |   ТоварыНаСкладахОстатки.Номенклатура ВОЗР";
КонецЕсли;
 
Выб=Запрос.выполнить().Выгрузить();
Выб.Колонки.Добавить("Движ");
Выб.Колонки.Добавить("Сумма");
 
Для каждого стр из Выб Цикл
 
Если СокрЛП(стр.Склад)="Основной склад ГК" или СокрЛП(стр.Склад)="Кредитный п/о Зарбазоя М.А." или
СокрЛП(стр.Склад)="Оптовый склад безнал" или 
СокрЛП(стр.Склад)="Интернет-магазин" или
Найти(стр.Склад,"Материальный")<>0 Тогда
Выб.Удалить(Стр);
Для каждого стр из Выб Цикл
 
Если СокрЛП(стр.Склад)="Основной склад ГК" или СокрЛП(стр.Склад)="Кредитный п/о Зарбазоя М.А." или
СокрЛП(стр.Склад)="Оптовый склад безнал" или 
СокрЛП(стр.Склад)="Интернет-магазин" или
Найти(стр.Склад,"Материальный")<>0 Тогда
Выб.Удалить(Стр);
 
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
ТабДок=Новый ТабличныйДокумент();
Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет");
 
ОбластьШапки   = Макет.ПолучитьОбласть("Шапка");
ОбластьДанные  = Макет.ПолучитьОбласть("Строка");
ОбластьПодвал  = Макет.ПолучитьОбласть("Подвал");
ОбластьШапки.Параметры.ДатаНач=ДатаНач;
ОбластьШапки.Параметры.ДатаКон=ДатаКон;
ОбластьШапки.Параметры.Номер=Номер;
ТабДок.Вывести(ОбластьШапки);
СуммаИтог=0;
Сч=1;
ДокВыборка=Документы.РеализацияТоваровУслуг.Выбрать(ДатаНач,ДатаКон);
Пока ДокВыборка.Следующий() Цикл
Док=ДокВыборка.ПолучитьОбъект();
Для каждого стр из Док.Товары Цикл
Строчка=Выб.Найти(СокрЛП(Стр.Номенклатура),"Номен");
Если Строчка<>Неопределено Тогда
Строчка.Движ=1;
Прервать;
КонецЕсли;
КонецЦикла;
Конеццикла;
ДокиВыборка=Документы.ПеремещениеТоваров.Выбрать(ДатаНач, ДатаКон);
Пока ДокиВыборка.Следующий() Цикл
Доки=ДокиВыборка.ПолучитьОбъект();
Если СокрЛП(Доки.СкладПолучатель)="Оптовый склад безнал" или 
СокрЛП(Доки.СкладПолучатель)="Интернет-магазин" или
Найти(Доки.СкладПолучатель,"Материальный") Тогда
Для каждого стр из Доки.Товары Цикл
Строчка=Выб.Найти(СокрЛП(Стр.Номенклатура),"Номен");
Если Строчка<>Неопределено Тогда
Строчка.Движ=1;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
докумВыборка=Документы.ОтчетОРозничныхПродажах.Выбрать(ДатаНач, датаКон);
Пока ДокумВыборка.Следующий() Цикл
Докум=ДокумВыборка.ПолучитьОбъект();
//Сообщить(Докум);
Для Каждого стр из Докум.Товары Цикл
Строчка=Выб.Найти(СокрЛП(Стр.Номенклатура), "Номен");
Если Строчка<>Неопределено Тогда
Строчка.Движ=1;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
 
выб.свернуть("Номен","Ост,Движ,сумма");
Выб.Сортировать("Номен");
Для каждого стртз из выб Цикл
 
Если стртз.Движ=0 или СокрЛП(стртз.движ)="" Тогда
ОбластьДанные.Параметры.Ном=Сч;
ОбластьДанные.Параметры.Номен=стртз.Номен;
ОбластьДанные.Параметры.ЕдИзм=стртз.Номен.ЕдиницаИзмерения;
ОбластьДанные.Параметры.Кол=стртз.Ост;
Запрос1= Новый Запрос;
Запрос1.Текст="ВЫБРАТЬ
|ЦеныНоменклатуры.Номенклатура Номен,
|ЦеныНоменклатуры.ВидЦены как ВЦ,
|ЦеныНоменклатуры.Цена Как Цена
|ИЗ
|РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
|Где
|ЦеныНоменклатуры.ВидЦены = &ВидЦены и 
|ЦеныНоменклатуры.Номенклатура = &Номенклатура";
Запрос1.УстановитьПараметр("ВидЦены", ВидЦены);
Запрос1.УстановитьПараметр("Номенклатура", стртз.Номен);
Выб1=Запрос1.Выполнить().Выбрать();
Пока Выб1.Следующий() Цикл
 
ОбластьДанные.Параметры.Цена=Выб1.Цена;
 
стртз.Сумма=Число(стртз.Ост)*Число(Выб1.Цена);
ОбластьДанные.Параметры.Сумма=Число(стртз.Ост)*Число(Выб1.Цена);
 
КонецЦикла;
ТабДок.ВывеСти(ОбластьДанные);
Сч=Сч+1;
КонецЕсли;
КонецЦикла;
 
ОбластьПодвал.Параметры.СуммаИтог=Выб.Итог("Сумма");;
 
ТабДок.Вывести(областьПодвал);
возврат ТабДок;
 

Лучше бы сразу отчет выложили, а то слишком много текста.

Отчетик.

Прикреплённые файлы: 

По-моему, вы всё усложняете. Почему бы не сделать запрос к таблице ОстаткиИОбороты регистра ТоварыНаСкладах и сразу получить товары, по которым есть остатки, но не было движений за указанный период?

Потому что перемещения по несколькоим складам должны в него попадать.

Так перемещения тоже делают движения по регистру ТоварыНаСкладах. Не вижу тут никакой проблемы.

Вот именно. А нужно чтобы не попадали, там система по некоторым складам это реализация, а по некоторым нет. Поэтому я и прописала выборки документов. Вроде раньше также делала все работало, тут почему то не видит доки. Не могу понять в чем дело и удаление строк из выборки запроса неправильно у меня, как сделать не знаю, в инете что то нет ничего.

Тогда сделайте запрос по 2 таблицам: таблице Остатки и таблице Обороты регистра ТоварыНаСкладах. В параметрах таблицы Обороты задайте периодичность Регистратор и добавьте нужные условия по складам для перемещений и реализаций.