Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Очень популярная тема (более 25 ответов) Помогите разобраться! (число прочтений - 6412 )
Glafira
Junior Member
**
Отсутствует


I Love 1С!

Сообщений: 45
Зарегистрирован: 29. Июня 2007
Пол: Женский
Помогите разобраться!
29. Июня 2007 :: 20:35
Печать  
Только сегодня решила разобраться с прямыми запросами... Помогите транслировать следующий запрос:

ТекстЗапроса = "
     |Период с ВыбНачПериода по ВыбКонПериода;
     |Док = Документ.Расходная.ТекущийДокумент;
     |Фирмы = Документ.Расходная.Фирма;
     |Товар = Документ.Расходная.Товар;
     |Группировка Документ;
     |Условие(Фирмы в СписокВсехФирм);
     |Условие(Товар.ВидТовара = Перечисление.ВидыТоваров.Товар);"

Причем "Фирма" - общий реквизит документов.
Хочу разобраться сразу с таким запросом. Если с ним получится с остальными тоже.
Заранее благодарна.
  

Ваша Глаша
Наверх
 
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите разобраться!
Ответ #1 - 29. Июня 2007 :: 22:21
Печать  
Глафира, ну зачем же вот так начинать...
Зайди сперва в прикрепленные статьи, для этого их и прикрепили, чтобы на них обращали внимание.

Например сюда или сюда

А вот когда не будет получаться, то на форуме всегда помогут!

P.S. Кроме того есть поиск, такие запросы уже не раз обсуждались.
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите разобраться!
Ответ #2 - 30. Июня 2007 :: 04:55
Печать  
для sql:
ТекстЗапроса = "
|select
|  Журнал.iddoc [Док $Документ.Расходная],
|  max($ОбщийРеквизит.Фирма) [Фирма $Справочник.Фирмы]
|from _1sjourn Журнал (nolock)
|left join $Документ.Расходная Шапка (nolock) on Шапка.iddoc = Журнал.iddoc -- если по фирме есть отбор, то эта строка не нужна
|join $ДокументСтроки.Расходная Строки (nolock) on Строки.iddoc = Журнал.iddoc
|join $Справочник.Номенаклатура Номенаклатура (nolock)  on Номенаклатура.id = $Строки.Товар
|where Журнал.date_time_iddoc between :НачДата and :КонДата~
|  and Журнал.iddocdef = $ВидДокумента.Расходная
|  and $ОбщийРеквизит.Фирма in (select val from #tmp1)
|  and $Номенклатура.ВидТовара = $Перечисление.ВидыТоваров.Товар
|group by Журнал.iddoc
|";
рс=СоздатьОбъект("ODBCRecordset");
рс.УстановитьТекстовыйПараметр("НачДата", ВыбНачПериода);
рс.УстановитьТекстовыйПараметр("КонДата", ВыбКонПериода);
рс.УложитьСписокЗначений(СписокВсехФирм, "#tmp1");
Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса);
  

1&&2&&3
Наверх
 
IP записан
 
Glafira
Junior Member
**
Отсутствует


I Love 1С!

Сообщений: 45
Зарегистрирован: 29. Июня 2007
Пол: Женский
Re: Помогите разобраться!
Ответ #3 - 30. Июня 2007 :: 08:40
Печать  
To trad, спасибки все понятно.
To Arta, фу какой... от такого дождеся помощи
  

Ваша Глаша
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Помогите разобраться!
Ответ #4 - 30. Июня 2007 :: 09:20
Печать  
2 Glafira
тут вам не там  Подмигивание
Arta сделал правильное замечание и отправил в правильном направлении (это ли не помошь)
  

1&&2&&3
Наверх
 
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите разобраться!
Ответ #5 - 30. Июня 2007 :: 10:15
Печать  
А после этого они говорят что мы шовинисты  Улыбка
  
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Помогите разобраться!
Ответ #6 - 30. Июня 2007 :: 10:45
Печать  
trad писал(а) 30. Июня 2007 :: 09:20:
2 Glafira
тут вам не там  Подмигивание
Arta сделал правильное замечание и отправил в правильном направлении (это ли не помошь)


Но несмотря на это, все равно еще приходи Улыбка
Уж слишком мало вас, девушек-программистов Печаль

А уж тех, кто юзает прямые запросы, буквально единицы.

ЗЫ но сначала все-таки факушные ветки.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Glafira
Junior Member
**
Отсутствует


I Love 1С!

Сообщений: 45
Зарегистрирован: 29. Июня 2007
Пол: Женский
Re: Помогите разобраться!
Ответ #7 - 01. Июля 2007 :: 11:38
Печать  
Ладно мальчики не злитесь. Лучше оцените результаты и помогите разобраться дальше.
Вот текст запроса, который у меня получился и все в нем правильно:
ТекстЗапроса = "
     |SELECT
     |      Сотрудники.CODE СотрудникиКод,
     |      Sum($РасходнаяСтроки.КоличествоПлан/$Товары.СтоимостьСборки) КолвоПлан,
     |      Sum(case when $Расходная.ПолныйВозврат = :ВыбДа then 0 else борки end) КолвоЧВ,
     |      Sum(case when $Расходная.ПолныйВозврат = :ВыбДа then $РасходнаяСтроки.КоличествоПлан/$Товары.СтоимостьСборки else 0 end) КолвоПВ,
     |      Sum($РасходнаяСтроки.Количество/$Товары.СтоимостьСборки) КолвоПродано
     |FROM
     |      $Документ.Расходная AS Расходная
     |INNER JOIN
     |      $ДокументСтроки.Расходная AS РасходнаяСтроки ON Расходная.IDDOC = РасходнаяСтроки.IDDOC
     |INNER JOIN
     |      $Справочник.Сотрудники AS Сотрудники ON $Расходная.МенеджерФирмы = Сотрудники.ID
     |INNER JOIN
     |      _1SJOURN AS Журнал ON Расходная.IDDOC = Журнал.IDDOC
     |INNER JOIN
     |      $Справочник.Товары AS Товары ON $РасходнаяСтроки.Товар = Товары.ID
     |WHERE
     |      ((Журнал.CLOSED & 1) = 1) AND
     |      (Журнал.$ОбщийРеквизит.Фирма IN (SELECT val FROM #СписокФирм)) AND
     |      ($Товары.ВидТовара = :ВыбВид) AND
     |      (Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)
     |GROUP BY
     |      Сотрудники.CODE"
     ;

Но мне этого мало. Дело в том что в у справочника сотрудники есть реквизит "Команда". И мне бы необходимо получить результат этого запроса с группировкой по данному реквизиту. В принципе у меня и это получилось, если реквизит "команда" не периодический. Но есть одно "НО". В реальной базе этот реквизит периодический. Так вот вопрос есть ли возможность делать группировки по периодическим реквизитам. Если да, то покажите на примере.
И не посылайте меня в "поиск" - уже была там. Заранее благодарна, Ваша Глаша.
  

Ваша Глаша
Наверх
 
IP записан
 
Glafira
Junior Member
**
Отсутствует


I Love 1С!

Сообщений: 45
Зарегистрирован: 29. Июня 2007
Пол: Женский
Re: Помогите разобраться!
Ответ #8 - 01. Июля 2007 :: 12:11
Печать  
Еще 1 вопросик:
В том же запросе необходимо посчитать количество документов по тем же условиям что и суммы. Я так понимаю что в функции Count нельзя использовать условия.
Может кто знает что с этим делать?
Не хотелось бы выполнять несколько запросов. Хочется вытянуть все за 1 раз.
  

Ваша Глаша
Наверх
 
IP записан
 
Glafira
Junior Member
**
Отсутствует


I Love 1С!

Сообщений: 45
Зарегистрирован: 29. Июня 2007
Пол: Женский
Re: Помогите разобраться!
Ответ #9 - 01. Июля 2007 :: 13:12
Печать  
Молчите? Выходной у Вас. А мне работать приходиться  Нерешительный. Начальству не понравилось что отчёты долга крутятся - приходится переписывать на прямые запросы. Ладно теперь по сути.
Все ещё надо посчитать документы. Пишу такой запрос:
ТекстЗапроса = "
     |SELECT
     |      Сотрудники.ID [Менеджер $Справочник.Сотрудники],
     |      Count(DISTINCT Журнал.IDDOC) КоличествоРазличныхДокумент
     |FROM
     |      $Документ.Расходная AS Расходная
     |INNER JOIN
     |      $Справочник.Сотрудники AS Сотрудники ON $Расходная.МенеджерФирмы = Сотрудники.ID
     |INNER JOIN
     |      _1SJOURN AS Журнал ON Журнал.IDDOC = Расходная.IDDOC
     |INNER JOIN
     |      $ДокументСтроки.Расходная AS РасходнаяСтроки ON РасходнаяСтроки.IDDOC = Расходная.IDDOC
     |INNER JOIN
     |      $Справочник.Товары AS Товары ON $РасходнаяСтроки.Товар = Товары.ID
     |WHERE
     |      ($Расходная.ПолныйВозврат <> :ВыбДа) AND
     |      ((Журнал.CLOSED & 1) = 1) AND
     |      (Журнал.$ОбщийРеквизит.Фирма IN (SELECT val FROM #СписокФирм)) AND
     |      ($Товары.ВидТовара = :ВыбВид) AND
     |      ($РасходнаяСтроки.КоличествоПлан <> $РасходнаяСтроки.Количество) AND
     |      (Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)
     |GROUP BY
     |      Сотрудники.ID"
     ;
     
     RS = СоздатьОбъект("ODBCRecordset");
     RS.УстБД1С();
     
     RS.УложитьСписокОбъектов(СписокВсехФирм, "#СписокФирм", "Фирмы");
     RS.УстановитьТекстовыйПараметр("НачДата", _ВыбНачПериода);
     RS.УстановитьТекстовыйПараметр("КонДата", _ВыбКонПериода);
     RS.УстановитьТекстовыйПараметр("ВыбВид", Перечисление.ВидыТоваров.Товар);
     RS.УстановитьТекстовыйПараметр("ВыбДа", Перечисление.Булево.Да);

А он не правильно считает.
2 подозрения:
1) Не отрабатывает условие ($Расходная.ПолныйВозврат <> :ВыбДа), т.к. Реквизит ПолныйВозврат может быть вообще не заполнен
2) Не отрабатывает условие ($РасходнаяСтроки.КоличествоПлан <> $РасходнаяСтроки.Количество)

Подскажите знатоки.
  

Ваша Глаша
Наверх
 
IP записан
 
Glafira
Junior Member
**
Отсутствует


I Love 1С!

Сообщений: 45
Зарегистрирован: 29. Июня 2007
Пол: Женский
Re: Помогите разобраться!
Ответ #10 - 02. Июля 2007 :: 11:23
Печать  
За этими вопросами тоже в фак лезть?
Или они очень сложны?
Не вижу энтузиазма.... Знатоки где Вы?
  

Ваша Глаша
Наверх
 
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Помогите разобраться!
Ответ #11 - 03. Июля 2007 :: 09:47
Печать  
Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)

А так разве можно?

по моему надо convert(datetime,substring(Журнал.Date_Time_IDDoc,1,8)) BETWEEN :НачДата AND :КонДата
не может же строка быть между двумя датами...

или метапарсер все проглотит и что надо сделает?




  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
yudin
Full Member
***
Отсутствует


Краткость - с.т.

Сообщений: 131
Местоположение: Ростов - на - Дону
Зарегистрирован: 25. Мая 2006
Пол: Мужской
Re: Помогите разобраться!
Ответ #12 - 03. Июля 2007 :: 09:50
Печать  
Glafira писал(а) 01. Июля 2007 :: 13:12:
2 подозрения:
1) Не отрабатывает условие ($Расходная.ПолныйВозврат <> :ВыбДа), т.к. Реквизит ПолныйВозврат может быть вообще не заполнен
2) Не отрабатывает условие ($РасходнаяСтроки.КоличествоПлан <> $РасходнаяСтроки.Количество)

Подскажите знатоки.


1) Почему не отрабатывает? если оно не заполнено, то оно и будет не равно :Выбда
2) Как это не отрабатывает? не равно, значит не равно. Напиши что ты хочешь получить, а то как то по запросу не очень ясно, тем более если запрос неправильный..
  

С уваженьем, дата, подпись
Наверх
wwwICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите разобраться!
Ответ #13 - 03. Июля 2007 :: 10:15
Печать  
yudin писал(а) 03. Июля 2007 :: 09:47:
Журнал.Date_Time_IDDoc BETWEEN :НачДата AND :КонДата~)

А так разве можно?

по моему надо convert(datetime,substring(Журнал.Date_Time_IDDoc,1,8)) BETWEEN :НачДата AND :КонДата
не может же строка быть между двумя датами...

или метапарсер все проглотит и что надо сделает?





А кто сказал что метапарсер в дату конвертит? посмори на распарсеный запрос Улыбка
  
Наверх
ICQ  
IP записан
 
Nick
God Member
*****
Отсутствует



Сообщений: 1599
Местоположение: г.Новокузнецк
Зарегистрирован: 21. Февраля 2007
Пол: Мужской
Re: Помогите разобраться!
Ответ #14 - 03. Июля 2007 :: 10:19
Печать  
По моему в полне корректный запрос, как проверяешь результаты? Начни с малого - один день один документ Улыбка
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать