Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Подскажите, плз, по БИ и документам в прямом запросе (число прочтений - 2222 )
zaos
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 21. Июня 2013
Подскажите, плз, по БИ и документам в прямом запросе
24. Июня 2013 :: 10:18
Печать  
Бухгалтерия 77
Есть отчет по продажам, запрос в котором должен выбирать по заданным условиям продажи товара (в документах РНк, Чек, ИнвентаризацияТМЦ - количество документов может измениться в будущем). Продажи выбираются с 41.1 и 41.2 счетов.
Чего то я не понимаю, но с тремя видами документов он задумывается еще на дольше, чем отчет с обычными БИ и условиями. Подскажите, пожалуйста, куда копнуть и пните, если пошел не туда.

     ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
     ТекстЗапроса = "
     |SELECT
     | $спрНоменклатура.ТекущийЭлемент AS [Номенклатура $Справочник.Номенклатура]
     | ,$Жур.ТекущийДокумент AS [Документ $Документ]
     | ,БухИтоги.СуммаОборотКт AS СуммаКО
     | ,БухИтоги.КоличествоОборотКт AS КоличествоКО
     | ,БухИтоги.СуммаКонечныйОстаток AS СуммаСК
     | ,БухИтоги.КоличествоКонечныйОстаток AS КоличествоСК
     |FROM
     | $БИОстаткиОбороты.Основной(:ВыбНачПериода,:ВыбКонПериода~, ДОКУМЕНТ, , #Счет41,Номенклатура, (Сумма,Количество),) AS БухИтоги
     | INNER JOIN ЖурналДокументов AS Жур $NOLOCK ON $Жур.ТекущийДокумент = БухИтоги.ТекущийДокумент
     | LEFT JOIN Документ.РасходнаяНакладная AS ДокРеал ON ДокРеал.IDDOC = Жур.IDDOC
     | LEFT JOIN Документ.Чек AS ДокЧек ON ДокЧек.IDDOC = Жур.IDDOC
     | LEFT JOIN Документ.ИнвентаризацияТМЦ AS ДокИнвТМ ON ДокРеал.IDDOC = Жур.IDDOC
     | LEFT JOIN  Справочник.Номенклатура AS спрНоменклатура $NOLOCK ON $спрНоменклатура.ТекущийЭлемент = ЛЕВО(БухИтоги.Субконто1,9)
     | ГДЕ $Жур.ДатаДокумента BETWEEN :ВыбНачПериода И :ВыбКонПериода~ AND $Жур.Проведен = 1
     |";
     Если ПустоеЗначение(ФильтрКонтрагент) = 0 Тогда
           ТекстЗапроса = ТекстЗапроса+"
           |WHERE
           | $Жур.Контрагент В (ВЫБРАТЬ val ИЗ #ВыбКонтрагент)
           |";
           ПрямойЗапрос.УложитьСписокЗначений(ФильтрКонтрагент, "#ВыбКонтрагент","Контрагенты");
     КонецЕсли;

     Если ПустоеЗначение(ФильтрНоменклатура) = 0 Тогда
           а");
           ТекстЗапроса=ТекстЗапроса+"
           |AND $спрНоменклатура.ТекущийЭлемент IN (SELECT VAL FROM #ВыбТовары);
           |";
     КонецЕсли;
     Если ПустоеЗначение(ФильтрСотрудник) = 0 Тогда
           ");
           ТекстЗапроса=ТекстЗапроса+"
           |AND $спрНоменклатура.Сотрудник IN (SELECT VAL FROM #ВыбСотрудники);
           |";
     КонецЕсли;
  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Подскажите, плз, по БИ и документам в прямом запросе
Ответ #1 - 25. Июня 2013 :: 05:41
Печать  
Я по ПрямойЗапрос не спец, но я бы выбросил соединения с документами, соединения и отборы с журналом и справочником перенёс внутрь ВТ, слегка переписал условие соединения со справочником и выбросил условие "$Жур.ДатаДокумента BETWEEN :ВыбНачПериода И :ВыбКонПериода~ AND $Жур.Проведен = 1" как не влияющее на результат.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
zaos
YaBB Newbies
*
Отсутствует


1C++ rocks!

Сообщений: 4
Зарегистрирован: 21. Июня 2013
Re: Подскажите, плз, по БИ и документам в прямом запросе
Ответ #2 - 26. Июня 2013 :: 08:10
Печать  
чуть переделал, но если с условием по товару выводится, то с условием по контрагенту уже выдает ошибку

     ПрямойЗапрос = СоздатьОбъект("ПрямойЗапрос");
     ТекстЗапроса = "
    |SELECT
    | $спрНоменклатура.ТекущийЭлемент AS [Номенклатура $Справочник.Номенклатура]
    | ,$Жур.ТекущийДокумент AS [Документ $Документ]
    | ,БухИтоги.СуммаОборотКт AS СуммаКО
    | ,БухИтоги.КоличествоОборотКт AS КоличествоКО
    | ,БухИтоги.СуммаКонечныйОстаток AS СуммаСК
    | ,БухИтоги.КоличествоКонечныйОстаток AS КоличествоСК
    |FROM
    | $БИОстаткиОбороты.Основной(:ВыбНачПериода,:ВыбКонПериода~, ДОКУМЕНТ, , ,Номенклатура, (Сумма,Количество),Счет IN (Выбрать val ИЗ #Счет41)";
     Если ПустоеЗначение(ФильтрНоменклатура) = 0 Тогда
         а");
           ТекстЗапроса=ТекстЗапроса+"
           |AND ЛЕВО(Субконто1,9) IN (SELECT VAL FROM #ВыбТовары)
           |";
     КонецЕсли;
     Если ПустоеЗначение(ФильтрКонтрагент) = 0 Тогда
           ПрямойЗапрос.УложитьСписокЗначений(ФильтрКонтрагент, "#ВыбКонтрагент","Контрагенты");
           ТекстЗапроса = ТекстЗапроса+"
           |AND ТекущийДокумент.Контрагент В (ВЫБРАТЬ val ИЗ #ВыбКонтрагент)
           |";
     КонецЕсли;
     ТекстЗапроса=ТекстЗапроса+"
      |) AS БухИтоги
    | INNER JOIN ЖурналДокументов AS Жур $NOLOCK ON $Жур.ТекущийДокумент = БухИтоги.ТекущийДокумент
    | LEFT JOIN  Справочник.Номенклатура AS спрНоменклатура $NOLOCK ON $спрНоменклатура.ТекущийЭлемент = БухИтоги.Субконто1
    |";

     Если ПустоеЗначение(ФильтрСотрудник) = 0 Тогда
           ");
           ТекстЗапроса=ТекстЗапроса+"
           |AND $спрНоменклатура.Сотрудник IN (SELECT VAL FROM #ВыбСотрудники);
           |";
     КонецЕсли;


документы нужны, т.к. попадают в расшифровку отчета и по двойному клику нужны для просмотра.
"Номенклатура" не работает в запросе, только "ЛЕВО(Субконто1,9)"
по возможности прошу помощи, чет я туплю
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать