Имя: Пароль:
1C
1C 7.7
v7: Странно работает условие отбора НЕ в списке
0 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
1 Lazy Stranger
 
27.05.19
13:47
в первом запросе выборка по регистру остатков - туда попадут все товары по которым были остатки или движения
второй запрос получает информацию по товарам из накладных - естественно там будут только те товары, которые есть в накладных, для соединения со всем справочником товаров должно быть ключевое слово "ВСЕ" в группировке по товарам: "|Группировка Товар ВСЕ;"
2 Ёпрст
 
27.05.19
14:19
И ..лучше не все, а все вошедшие в запрос
3 Ёпрст
 
27.05.19
14:20
ибо весь справочник, как бэ не нужен
4 OnePrg
 
27.05.19
15:08
"все вошедшие в запрос" не помогло, результата такой же

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

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

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

Всем спасибо!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.