Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Странно работает условие отбора НЕ в списке

v7: Странно работает условие отбора НЕ в списке
Я
   OnePrg
 
27.05.19 - 13:36
Есть отчет по товарам. В оригинале выглядит вот так

http://imagizer.imageshack.com/img923/139/Fogl4Q.png

Обратите внимание, что есть товары, по которым не было движения. Точнее нужно выбрать товары, которые не продавались в этом периоде, потому что могут быть перемещения.

Запрос в оригинале выглядит так

//{{ЗАПРОС(Сформировать)
Период с НП по КП;
Обрабатывать НеПомеченныеНаУдаление;
Фирма                 = Регистр.Остатки.Фирма;
Товар                 = Регистр.Остатки.Товар;
МестоХранения                 = Регистр.Остатки.МестоХранения;
Партия                = Регистр.Остатки.Партия;
Док                = Регистр.Остатки.ТекущийДокумент;
Сумма                 = Регистр.Остатки.Сумма;
Кво                 = Регистр.Остатки.Кво;
Функция СуммаНачОст             = НачОст(Сумма);
Функция КвоНачОст         = НачОст(Кво);
Функция СуммаПриход             = Приход(Сумма);
Функция КвоПриход         = Приход(Кво);
Функция СуммаПриходВ             = Приход(Сумма) Когда (Док.Вид()="РасходнаяВозврат");
Функция КвоПриходВ        = Приход(Кво) Когда (Док.Вид()="РасходнаяВозврат");
Функция СуммаРасход             = Расход(Сумма);
Функция КвоРасход         = Расход(Кво);
Функция СуммаКонОст             = КонОст(Сумма);
Функция КвоКонОст         = КонОст(Кво);
Группировка Товар без групп;
Группировка Партия;
Группировка Док Упорядочить по Док.ДатаДок;
Условие (МестоХранения в ВыбСклад);


Мне нужно добавить условие, чтобы выбирались товары, которых нет за этот период в расходных накладных.
Формирую список значений и добавляю условие в запрос:


    Если ТолькоНеПроданныеТовары = 1 Тогда
        ТекстЗапросаПроданныеТовары =
        "//{{ЗАПРОС(ПроданныеТовары)
        |Период с НП по КП;    
        |Товар = Документ.РасходнаяНакладная.Товар;
        |ТекДокумент = Документ.РасходнаяНакладная.ТекущийДокумент;
        |МестоХранения = Документ.РасходнаяНакладная.МестоХранения;
        |Кво = Документ.РасходнаяНакладная.Кво;
        |Функция КвоСумма = Сумма(Кво);
        |Группировка Товар;  
        |Условие (ТекДокумент.Проведен()=1);";  
        Если ВыбСклад.РазмерСписка()<> 0 Тогда
            ТекстЗапросаПроданныеТовары = ТекстЗапросаПроданныеТовары + "    
            |Условие ("+?(НеСклад=1,"НЕ(МестоХранения в ВыбСклад)","МестоХранения в ВыбСклад")+");";
        КонецЕсли;
        Если ВыбТовар.РазмерСписка()<> 0 Тогда
            ТекстЗапросаПроданныеТовары = ТекстЗапросаПроданныеТовары + "    
            |Условие ("+?(НеТовар=1,"НЕ(Товар в ВыбТовар)","Товар в ВыбТовар")+");";
        КонецЕсли;            
        Если Запрос.Выполнить(ТекстЗапросаПроданныеТовары) = 0 Тогда
            Возврат;
        КонецЕсли;                                        
        спрТовары = СоздатьОбъект("Справочник.Товар");
        ПроданныеТовары = СоздатьОбъект("СписокЗначений");
        Пока Запрос.Группировка(1) = 1 Цикл            
            Сообщить(Запрос.Товар);
            спрТовары.НайтиЭлемент(Запрос.Товар);
            ПроданныеТовары.ДобавитьЗначение(спрТовары.ТекущийЭлемент());
        КонецЦикла;
        ТекстЗапроса=ТекстЗапроса+"
        |Условие (НЕ (Товар в ПроданныеТовары));
        |";                
    КонецЕсли;


В результате в отчет не выводятся товары, который должны выводится (тот же самый брикет торфяенной)

http://imagizer.imageshack.com/img923/7089/Id9mLm.png
 
 
   Lazy Stranger
 
1 - 27.05.19 - 13:47
в первом запросе выборка по регистру остатков - туда попадут все товары по которым были остатки или движения
второй запрос получает информацию по товарам из накладных - естественно там будут только те товары, которые есть в накладных, для соединения со всем справочником товаров должно быть ключевое слово "ВСЕ" в группировке по товарам: "|Группировка Товар ВСЕ;"
   Ёпрст
 
2 - 27.05.19 - 14:19
И ..лучше не все, а все вошедшие в запрос
   Ёпрст
 
3 - 27.05.19 - 14:20
ибо весь справочник, как бэ не нужен
   OnePrg
 
4 - 27.05.19 - 15:08
"все вошедшие в запрос" не помогло, результата такой же

"Все" не вариант - тянет весь справчник
   Ager
 
5 - 27.05.19 - 16:22
Если база SQL, то условие НЕ в запросе не сработает, это глюк платформы. В этом случае нужно использовать "Принадлежит() = 1" или что-то типа этого.
   Builder
 
6 - 27.05.19 - 16:33
(5) Не замечал, у меня работало нормально.
(0) Выкини все другие условия, особенно такие ненужные как    |Условие (ТекДокумент.Проведен()=1);
Ибо непроведенные документы не смогут сделать движения.

По идее в запрос должны попасть все товары с начальным или конечным остатком по регистру.
Сделай простейший запрос и постепенно добавляй условия.
   OnePrg
 
7 - 27.05.19 - 16:33
(5) DBF
   Builder
 
8 - 27.05.19 - 16:44
+ к (6) Ааа, тут второй запрос по документам же...
А зачем тебе второй запрос? По первому запросу же если нет расхода - то и товар не продавался.....
   OnePrg
 
9 - 27.05.19 - 17:04
Семён Семёныч!!!!!!!

Во втором запросе, где формируется список проданных товаров, нужно было в группировке поставить "без групп". Иначе в список попадали группы товаров.

Всем спасибо!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.