Имя: Пароль:
1C
1C 7.7
v7: Запрос по двум регистрам
0 gun200
 
20.04.15
09:29
ТекстЗапросаСкор =
    "//{{ЗАПРОС(ЗапросДляСкорости)
    |Период с ДатаНачалаПрод по ДатаКонцаПрод;
    |Фирма             = Регистр.Продажи.Фирма, Регистр.ОстаткиТоваров.Фирма;
    |Склад             = Регистр.Продажи.Склад, Регистр.ОстаткиТоваров.Склад;
    |Товар             = Регистр.Продажи.Товар, Регистр.ОстаткиТоваров.Товар;  
    |КатегорияТовара= Регистр.Продажи.Товар.КатегорияТовара,Регистр.ОстаткиТоваров.Товар.КатегорияТовара;
    |ТипТовара         = Регистр.Продажи.Товар.ТипТовара,Регистр.ОстаткиТоваров.Товар.ТипТовара;
    |Количество     = Регистр.Продажи.Количество;  
    |КоличествоВ    = Регистр.Продажи.КоличествоВ;
    |ост            = Регистр.ОстаткиТоваров.ОстатокТовара;
    |Сумма          = Регистр.Продажи.Сумма;  
    |Суммав         = Регистр.Продажи.СуммаВ;  
    |ВидТовара1     = Регистр.Продажи.Товар.ВидТовара,Регистр.ОстаткиТоваров.Товар.ВидТовара;
    |Комплект       = Регистр.Продажи.Комплект;
    |Клиент         =Регистр.Продажи.Клиент;
      |Функция ОстатокТовара = НачОст(ост);    
    |Функция Приход =Приход(ост);
    |Функция РасходТовара = Сумма(Количество-КоличествоВ);
    |Функция РасходТовараСумм = Сумма(Сумма-СуммаВ);
    |Условие  (не(Клиент в спрсс));
    |Условие (ВидТовара1=Перечисление.ВидыТоваров.товар);
    |Условие (Товар В ВыбТовар);";
    
    Если ВыбСклад.Выбран() = 1 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (Склад = ВыбСклад);"
    КонецЕсли;
    Если ВыбФирма.Выбран() = 1 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (Фирма = ВыбФирма);"
    КонецЕсли;  
    Если ПустоеЗначение(ВыбКатегорияТовара)=0 Тогда  
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (КатегорияТовара = ВыбКатегорияТовара);";
    КонецЕсли;
    Если ПустоеЗначение(ВыбТипТовара)=0 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (ТипТовара = ВыбТипТовара);";  
    КонецЕсли;
    
    ТекстЗапросаСкор = ТекстЗапросаСкор + "
    |Группировка Товар;
    |Группировка День Все;
    |";//}}ЗапросСкор

Есть два регистра ОстаткиТоваров - регистр остатков, Продажи- оборотный. Подскажите, возможно ли в запросе объединять два вида регистров ? По остаткам все выводит, по оборотному всегда ноль в любой группировке.
1 Ёпрст
 
20.04.15
09:31
(0) возможно.
Для начала выкини нелепые условия, которые отбрасывают данные по второму регистру.
2 Ёпрст
 
20.04.15
09:32
если че, их пишут в Когда() при расчете функций, а не в Условие()
3 Ёпрст
 
20.04.15
09:32
в таком случае.
4 gun200
 
20.04.15
09:33
Ой думал все выкинул, а оказывается забыл:

Условие  (не(Клиент в спрсс));

Спасибо.
5 gun200
 
20.04.15
09:45
Не помогло.
6 Ёпрст
 
20.04.15
09:46
Нам отсюда не видно финальный текст запроса
7 gun200
 
20.04.15
09:51
ТекстЗапросаСкор =
    "//{{ЗАПРОС(ЗапросДляСкорости)
    |Период с ДатаНачалаПрод по ДатаКонцаПрод;
    |Фирма             = Регистр.Продажи.Фирма, Регистр.ОстаткиТоваров.Фирма;
    |Склад             = Регистр.Продажи.Склад, Регистр.ОстаткиТоваров.Склад;
    |Товар             = Регистр.Продажи.Товар, Регистр.ОстаткиТоваров.Товар;  
    |КатегорияТовара= Регистр.Продажи.Товар.КатегорияТовара,Регистр.ОстаткиТоваров.Товар.КатегорияТовара;
    |ТипТовара         = Регистр.Продажи.Товар.ТипТовара,Регистр.ОстаткиТоваров.Товар.ТипТовара;
    |Количество     = Регистр.Продажи.Количество;  
    |КоличествоВ    = Регистр.Продажи.КоличествоВ;
    |ост            = Регистр.ОстаткиТоваров.ОстатокТовара;
    |Сумма          = Регистр.Продажи.Сумма;  
    |Суммав         = Регистр.Продажи.СуммаВ;  
      |Клиент         =Регистр.Продажи.Клиент;
      |Функция ОстатокТовара = НачОст(ост);    
    |Функция Приход =Приход(ост);

    |Функция РасходТовара = Сумма(Количество-КоличествоВ) ;
    |Функция РасходТовараСумм = Сумма(Сумма-СуммаВ);
    |Условие (Товар В ВыбТовар);
    |";
    
    Если ВыбСклад.Выбран() = 1 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (Склад = ВыбСклад);"
    КонецЕсли;
    Если ВыбФирма.Выбран() = 1 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (Фирма = ВыбФирма);"
    КонецЕсли;  
    Если ПустоеЗначение(ВыбКатегорияТовара)=0 Тогда  
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (КатегорияТовара = ВыбКатегорияТовара);";
    КонецЕсли;
    Если ПустоеЗначение(ВыбТипТовара)=0 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (ТипТовара = ВыбТипТовара);";  
    КонецЕсли;
    
    ТекстЗапросаСкор = ТекстЗапросаСкор + "
    |Группировка Товар;
    |Группировка День Все;
    |";//}}ЗапросСкор
8 Builder
 
20.04.15
10:09
Интересно, почему одно условие написано нормально
  |Условие (Товар В ВыбТовар);

А остальные как то не очень :
   Если ВыбСклад.Выбран() = 1 Тогда
        ТекстЗапросаСкор = ТекстЗапросаСкор + "
        |Условие (Склад = ВыбСклад);"
    КонецЕсли;

Ну и попробуй сделать такой же отчет только по оборотному регистру.

Да и в чем нерабочесть отчета? Были какие то приколы с такими группировками - попробуй убрать группы:
   |Группировка Товар без групп;
9 gun200
 
20.04.15
10:36
Попробовал, только по оборотному выдало 0. Исправил вот эти строчки:

|Функция РасходТовара = Сумма(Количество-КоличествоВ);
|Функция РасходТовараСумм = Сумма(Сумма-СуммаВ);

Стало:

|Функция РасходТовара = Сумма(Количество);
|Функция РасходТовараСумм = Сумма(Сумма);

Очень странно.
10 gun200
 
20.04.15
10:39
Все заработало, только вопрос, почему запрос выдает 0 в случае, когда отнимаю возврат ?