Переключение на Главную Страницу Страницы: 1 2 3 [4]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Пишу свой первый прямой запрос. Помогайте:) (число прочтений - 17024 )
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #45 - 23. Ноября 2007 :: 06:48
Печать  
Aswed писал(а) 23. Ноября 2007 :: 06:34:
но не могу там найти как вытащить целиком элемент справочника.


Код
Выбрать все
РС = СоздатьОбъект("ODBCRecordSet");  
     ТекстЗапроса = "    
     |SELECT   *
     |FROM			    
     |$Справочник.Номенклатура as Номенклатура
     |";
     ТЗ = РС.ВыполнитьИнструкцию(ТекстЗапроса);  
     ТЗ.ВыбратьСтроку();    
 


Будет попадать всё, кроме периодич реквизитов справочника номенклатура.
Реквизиты будут нетипизированны.
  
Наверх
 
IP записан
 
Aswed
Junior Member
**
Отсутствует


Не навижу 1С

Сообщений: 76
Зарегистрирован: 13. Ноября 2007
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #46 - 23. Ноября 2007 :: 06:58
Печать  
Разобрался. Спасибо за помощьУлыбка
  

Я вообще то парень хоть куда, но туда не все девушки соглашаются...
Наверх
ICQ  
IP записан
 
Aswed
Junior Member
**
Отсутствует


Не навижу 1С

Сообщений: 76
Зарегистрирован: 13. Ноября 2007
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #47 - 23. Ноября 2007 :: 07:06
Печать  
Z1 Так я знаю как вытащить. Но таким образом он выводит все элементы справочника по колонкам, полностью раскрытым считай что. А мне нужно что бы запросом вытаскивался элемент так же как при обычном запросе.  Без разворота по этим колонкам, а целиком как цельный элемент справочника.
ЗЫ просто на этом запросе завязан очень большой отчёт и вся его структура основана на определенным образом сформированной таблице значений. Переписывать весь отчёт само собой не хочется, тем более что не мой
  

Я вообще то парень хоть куда, но туда не все девушки соглашаются...
Наверх
ICQ  
IP записан
 
Z1
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 2906
Местоположение: Москва
Зарегистрирован: 26. Мая 2006
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #48 - 23. Ноября 2007 :: 07:22
Печать  
Aswed писал(а) 23. Ноября 2007 :: 07:06:
Z. А мне нужно что бы запросом вытаскивался элемент так же как при обычном запросе.  Без разворота по этим колонкам, а целиком как цельный элемент справочника.

Прочти статью быстые справочники
http://www.1cpp.ru/forum/YaBB.pl?num=1152519272
на уровне sql нет понятия Спр.ТекущийЭлемент()
есть только поле Спр.ID однозначно определяющий строку в sql таблице.
  
Наверх
 
IP записан
 
Aswed
Junior Member
**
Отсутствует


Не навижу 1С

Сообщений: 76
Зарегистрирован: 13. Ноября 2007
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #49 - 23. Ноября 2007 :: 08:32
Печать  
Пытаюсь групировать, так как понял из фак'а по прямым запросам

Процедура Сформировать()
     
     Перем ТЗ;   
     
     СписокИсключаемыхГрупп="67,99";
     66,67,68,69,70,71,72,73,74,75,76,77";

     
     РС = СоздатьОбъект("ODBCRecordSet");
     
     ТекстЗапроса = "   
     |SELECT
      |Спр.ID as [асТовар $Справочник.Номенклатура],
      |$Спр.Мол as [асМол $Справочник.Агенты],
      |$Спр.МестоХранения as [асСклад $Справочник.МестаХранения],
      |Спр.ParentID as [асГруппа  $Справочник.Номенклатура],
      |$Спр.чКодВТорговле as чКодВТорговле,
      |$Спр.Производитель as [асПроизводитель $Справочник.Контрагенты],
      |$Спр.ОстатФ as чСуммаРасход,
      |$Спр.ДатаПоследРасх as дДатаПоследРасх,
      |$Спр.ДатаПоследПрих as дДатаПоследПрих,
      |GROUPING ($Спр.Мол) as Группа1,
      |GROUPING ($Спр.МестоХранения) as Группа2
      |
      |FROM                     
      |$Справочник.Номенклатура as Спр
      |
      |WHERE
      |$Спр.Архивный = 0 AND
      |Спр.IsMark = 0
      |
      |GROUP BY $Спр.Мол, $Спр.МестоХранения WITH ROLLUP
      |ORDER BY $Спр.Мол, $Спр.МестоХранения, Группа1 DESC, Группа2 DESC
      |";
     

      ТЗ = РС.ВыполнитьИнструкцию(ТекстЗапроса); 
     ТЗ.ВыбратьСтроку();   
     
      ТЗ.ВыбратьСТроки();
      Пока Тз.получитьСтроку() = 1 Цикл
      КонецЦикла;


КонецПроцедуры

В итоге пишет:

ТЗ = РС.ВыполнитьИнструкцию(ТекстЗапроса); 
{E:\1C\BASE_NEW\EXTFORMS\!_АНДРЕЙ\ПОДОПЫТНЫЙ ОБРАЗЕЦ.ERT(37)}: State 42000, native 8120, message [Microsoft][ODBC SQL Server Driver][SQL Server]Column 'Спр.ID' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

Что не правильно в коде?
  

Я вообще то парень хоть куда, но туда не все девушки соглашаются...
Наверх
ICQ  
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #50 - 23. Ноября 2007 :: 09:03
Печать  
Мля, ну почитай ты наконец документацию к ф-иям, которые ты используешь.
Из ачем вообще ты группируешь, если нет ниодной агрегирующей ф-ии??
  
Наверх
 
IP записан
 
Aswed
Junior Member
**
Отсутствует


Не навижу 1С

Сообщений: 76
Зарегистрирован: 13. Ноября 2007
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #51 - 26. Ноября 2007 :: 08:02
Печать  
Прочитал. Но как то не доходит до меня с групировкой этой грёбаной. Самого бесят уже эти прямые запросы.
Но всё таки подскажите, как сгрупировать этот запрос по Мол?

     ТекстЗапроса = "   
     |SELECT
      |Спр.ID as [асТовар $Справочник.Номенклатура],
      |$Спр.Мол as [асМол $Справочник.Агенты],
      |$Спр.МестоХранения as [асСклад $Справочник.МестаХранения],
      |Спр.ParentID as [асГруппа  $Справочник.Номенклатура],
      |$Спр.чКодВТорговле as чКодВТорговле,
      |$Спр.Производитель as [асПроизводитель $Справочник.Контрагенты],
      |$Спр.ОстатФ as чСуммаРасход,
      |$Спр.ДатаПоследРасх as дДатаПоследРасх,
      |$Спр.ДатаПоследПрих as дДатаПоследПрих,
      |
      |FROM                     
      |$Справочник.Номенклатура as Спр
      |
      |WHERE
      |$Спр.Архивный = 0 AND
      |Спр.IsMark = 0
      |
      |";
  

Я вообще то парень хоть куда, но туда не все девушки соглашаются...
Наверх
ICQ  
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #52 - 26. Ноября 2007 :: 17:05
Печать  
Grouping() - With rollup
Либо Индексированная таблица
Либо еще что-нить...
А если бесят запросы - бросайнах, не нужно калечить себя...
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
infossa
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 53
Зарегистрирован: 29. Мая 2006
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #53 - 27. Ноября 2007 :: 21:12
Печать  
Aswed писал(а) 26. Ноября 2007 :: 08:02:
Прочитал. Но как то не доходит до меня с групировкой этой грёбаной. Самого бесят уже эти прямые запросы.
Но всё таки подскажите, как сгрупировать этот запрос по Мол?

    ТекстЗапроса = "  
    |SELECT
      |Спр.ID as [асТовар $Справочник.Номенклатура],
      |$Спр.Мол as [асМол $Справочник.Агенты],
      |$Спр.МестоХранения as [асСклад $Справочник.МестаХранения],
      |Спр.ParentID as [асГруппа  $Справочник.Номенклатура],
      |$Спр.чКодВТорговле as чКодВТорговле,
      |$Спр.Производитель as [асПроизводитель $Справочник.Контрагенты],
      |$Спр.ОстатФ as чСуммаРасход,
      |$Спр.ДатаПоследРасх as дДатаПоследРасх,
      |$Спр.ДатаПоследПрих as дДатаПоследПрих,
      |
      |FROM                    
      |$Справочник.Номенклатура as Спр
      |
      |WHERE
      |$Спр.Архивный = 0 AND
      |Спр.IsMark = 0
      |
      |";


Итак, для начала что такое группировка. Немного теории.
GROUP BY - использует одно из полей множества результата для объединения в обобщенный столбец Улыбка

Теперь на пальцах. Есть табличка Спр.Номенклатуры в которой:
| Row_ID | МОЛ                     |   ОстатФ   |
| 1           | Иванов                 |   5             |
| 2           | Петров                 |   3             |
| 3           | Иванов                 |   5             |
| 4           | Петров                 |   2             |
| 5           | Иванов                 |   5             |

Задача: Нужно сгруппировать по МОЛ и получить сумму ОстатФ
    ТекстЗапроса = "  
    |SELECT
      |$Спр.Мол as [асМол $Справочник.Агенты],
      |SUM($Спр.ОстатФ) as чСуммаРасход,
      |FROM                    
      |$Справочник.Номенклатура as Спр
      |GROUP BY $Спр.Мол
      |";

На выходе получим табличку
| асМол                   |чСуммаРасход   |
| Иванов                 |   15                   |
| Петров                 |   5                     |

Итак в  выборке должны быть только те поля , кот. присутствуют в Group by или в обобщенных функциях (COUNT, MAX, MIN, SUM, AVG), иначе будет ошибка.

Если и это для тебя сложно, то в сад Улыбка
А вообще ты страшный лентяй, давно уже прочитал мини-руководство по SQL и не парил бы людям мозг.
  
Наверх
 
IP записан
 
Aswed
Junior Member
**
Отсутствует


Не навижу 1С

Сообщений: 76
Зарегистрирован: 13. Ноября 2007
Пол: Мужской
Re: Пишу свой первый прямой запрос. Помогайте:)
Ответ #54 - 30. Ноября 2007 :: 05:41
Печать  
Спасибо всем кто терпел мои глупые вопросы и помогалУлыбка Перечитал кучу литературы и разобрался с прямыми запросами, решил поблагодарить.
ЗЫ И я конечно лентяй, как и люой програмист, но в основном дело в том что занимался прямыми запросами ТОЛЬКО когда не было другой работы. Поэтому времени на них было мало и отсюда тормозаУлыбка))) Ещё раз спасибо.
  

Я вообще то парень хоть куда, но туда не все девушки соглашаются...
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 
ОтправитьПечать