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


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: помогите новичку с запросом
Ответ #15 - 24. Января 2007 :: 08:30
Печать  
1) Самый простой (но скорей всего не очень хороший) способ:
внеси нужные тебе реквизиты в регистр в результате сработают  ОСТАтКИИОБОроты.

2) Второй способ составить два запроса:
а) к остаткам
б) к оборотам
в запросе б) можно вставлять нужные тебе условия

и еще как организовать вот это
|Размер     =

Сперва объединяеш с журналом потом с документом
Если не ясно как напишу в FAQ все есть...

3) Подожди дня два ( твой  случай постараюсь предусмотреть сегодня ) Бог даст доделаю
конвертер запросов 1С -->1C++.
« Последняя редакция: 24. Января 2007 :: 09:39 - nikolka »  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #16 - 24. Января 2007 :: 08:55
Печать  
первый вариант не канает
представь если запрос формируется 208 сек при таких ИЗМЕРЕНИЯХ запроса, то если добавить...
и все переделывать придется
хотя со временем эту конфу всю переделать хочется на 1с++ по крайней мере отчеты
писал не я сделано все сложновато (доолго все формируется) жутко долго
ок жду
а можно в асю кинуть када будет готово
можно сразу и на мыло
skom(сабака)рамблер(тчк)ру
если не сложно кАнечНо
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: помогите новичку с запросом
Ответ #17 - 24. Января 2007 :: 10:00
Печать  
Совет - ты бы писал более аккуратно и расставлял бы некоторые знаки препинания. Очень неудобно читать Печаль
ИМХО Тогда и ответ более вероятен.

ЗЫ Ты же не в чате Улыбка
  

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


Дорогу осиливает идущий

Сообщений: 137
Зарегистрирован: 07. Июля 2006
Re: помогите новичку с запросом
Ответ #18 - 24. Января 2007 :: 13:07
Печать  
(14) "когда((ВидПлатежа=Перечисление.ВидыПлатежей.БН)); "

When $РегРекл.ВидПлатежа='   9YF   '
Конечно, у тебя будет не 9YF, а другой - свой код., соответствущий Перечисление.ВидыПлатежей.БН.
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #19 - 25. Января 2007 :: 05:07
Печать  
val писал(а) 24. Января 2007 :: 13:07:
(14) "когда((ВидПлатежа=Перечисление.ВидыПлатежей.БН)); "

When $РегРекл.ВидПлатежа='   9YF   '
Конечно, у тебя будет не 9YF, а другой - свой код., соответствущий Перечисление.ВидыПлатежей.БН.


ВИДПЛАТЕЖА - реквизит Регистра а не измерение
а в конструкции ОСТАТКИОБОРОТЫ не получается получить доступ к реквизитам регистра
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
grayrat
Junior Member
**
Отсутствует



Сообщений: 99
Местоположение: Russia, Moscow
Зарегистрирован: 20. Мая 2006
Пол: Мужской
Re: помогите новичку с запросом
Ответ #20 - 25. Января 2007 :: 05:48
Печать  
Уже говорили выше - тебе поможет объединение вт остатков и вт оборотов. Хотя на самом деле, имхо, лучше использовать вт оборотов и таблицу движений регистра. Из таблицы движений получить нужные тебе движения, отобранные по реквизитам и сгрупировать их. Типа этого:
Код
Выбрать все
ТекстЗапроса = "
|Select
|  $r.Рубрика,
|  $r.Контрагент,
|  $r.Номер,
|  j.DATE_TIME_IDDOC,
|  SUM( case when $r.ВидПлатежа = '" + MetaDataWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.БН) + "' AND r.DebKred = 1 then $r.Сумма else 0 end) СуммаБанк,
|  SUM( case when $r.ВидПлатежа = '" + MetaDataWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Н) + "' AND r.DebKred = 1 then $r.Сумма else 0 end) СуммаНал,
|  SUM( case when $r.ВидПлатежа = '" + MetaDataWork.ЗначениеВСтрокуБД(Перечисление.ВидыПлатежей.Н1) + "' AND r.DebKred = 1 then $r.Сумма else 0 end) СуммаНал1
|
|From $Регистр.Реклама r (nolock) inner join _1sJourn j (nolock) ON r.IDDOC = j.IDDOC
|Where j.DATE_TIME_IDDOC Between :вДатаНач And :вДатаКон~
|Group By $r.Рубрика, $r.Контрагент, $r.Номер, j.DATE_TIME_IDDOC
|";
 


, а затем к этому приджойнить остатки из ВТ остатков
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #21 - 25. Января 2007 :: 09:40
Печать  
кстати что такое NOLOCK (я еще не весь СКУЛЬ знаю... тока учу)
кстати вот такой у меня запрос получился
вместо стандартного осталось тока ИННЕРОМ прикрутить условие по ПЕРЕЧИСЛЕНИЮ
     ТекстЗапроса = "
           |SELECT DISTINCT   
           |      
           |      Выборка.Рубрика as [Рубрика $Справочник.Рубрики],
           |      Выборка.Контрагент as [Контрагент $Справочник.Контрагенты],
           |   Выборка.Номер as Номер,
           |   Выборка.Документ as [Документ $Документ],
         //|      $.Документ.ВидПлатежа as [ВидПлатежа $Перечисление.ВидыПлатежей],
           |      Выборка.НачОст as НачальныйОстаток,
           |      Выборка.Приход as Приход,
           |      Выборка.Расход as Расход,
           |      Выборка.КонОст as КонечныйОстаток,
           |   Выборка.ГруппировкаРубрика as ИтогиПоРубрикам,
           |      Выборка.ГруппировкаКонтры as ИтогиПоКонтрам,
           |      Выборка.ГруппировкаНомер as ИтогиПоНомерам,
           |      Выборка.ГруппировкаДокумент as ИтогиПоДокументам
           |FROM
           |(SELECT
           |  Рег.Издание as [Издание],
           |  Рег.Рубрика as [Рубрика],
           |  Рег.Контрагент as [Контрагент],
           |  Рег.Номер as Номер,
           |  Рег.Документ as [Документ],
           |  Рег.Менеджер as [Менеджер],
           |  SUM(Рег.СуммаНачальныйОстаток) as НачОст,
           |  SUM(Рег.СуммаПриход) as Приход,
           |  SUM(Рег.СуммаРасход) as Расход,
           |  SUM(Рег.СуммаКонечныйОстаток) as КонОст,
           |  GROUPING (Рег.Рубрика) as ГруппировкаРубрика,
           |  GROUPING (Рег.Контрагент) as ГруппировкаКонтры,
           |  GROUPING (Рег.Номер) as ГруппировкаНомер,
           |  GROUPING (Рег.Документ) as ГруппировкаДокумент
           |FROM
           |  $РегистрОстаткиОбороты.Реклама(:ДатаНач,:ДатаКон~,,,,
           |  Издание = :ВыбИздание AND Контрагент = :ВыбКонтр,
           |  (Издание,Рубрика,Контрагент,Номер,Документ,Менеджер),(Сумма)) as Рег
           |GROUP BY
           |  Рег.Издание, Рег.Контрагент, Рег.Рубрика, Рег.Номер, Рег.Документ, Рег.Менеджер,
         |  Рег.СуммаНачальныйОстаток, Рег.СуммаПриход, Рег.СуммаРасход, Рег.СуммаКонечныйОстаток WITH ROLLUP) as Выборка
           //|INNER JOIN
           //| 
           |ORDER BY
       |  Выборка.Рубрика, Выборка.Контрагент, Выборка.Номер, Выборка.Документ,
           |  Выборка.ГруппировкаРубрика DESC, Выборка.ГруппировкаКонтры DESC,
           |  Выборка.ГруппировкаНомер DESC,
           |  Выборка.ГруппировкаДокумент DESC
           |";

подскажите это большой изврат???? как я сделал
и подскажите как правильно прикрутить условие по Перечислениям (ВидПлатежа) через иннер
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: помогите новичку с запросом
Ответ #22 - 26. Января 2007 :: 10:43
Печать  
Не суетись. 
Описываю как прикручивать функции ...
(Если успею сделаю функци для таких как у тебя случаев сделаю автоматом в конвертере)
подсказка для функции:
добавляеш в таблицу с итогами регистра  debkred например
     |   debkred
     |from $Регистр.ПартииНаличие t1 (NOLOCK)
при сумировании используешь case(аналог if в SQL)
ПриходС=Sum(case when debkred>0 then 0 else vt_Обороты.Сумма end),

Можешь просто подождать функции как у тебя  я постараюсь прикрутить к конвертеру сегодня.

Постараюсь сегодня помочь тебе  решить твою задачу.
Подумай как ты будеш прекручивать группировки,
пока времени прикрутить группировки к конвертеру нет.

Выкладываю конвертер напиши что он тебе выдал для твоего случая.

Всего наилучшего.
  

4.ert ( 37 KB | Загрузки )
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #23 - 27. Января 2007 :: 04:22
Печать  
вот это
     |Период с ДатаНач по ДатаКон;      
     |ТекДок     = Регистр.Реклама.Документ;      
     |Издание    = Регистр.Реклама.Издание;      
     |Контрагент = Регистр.Реклама.Контрагент;      
     |Рубрика    = Регистр.Реклама.Рубрика;      
     |Размер     = ент.ПеремещениеРекламы.Размер;      
     |ВидПлатежа = Регистр.Реклама.ВидПлатежа;      
     |Выпуски    = Регистр.Реклама.Номер;      
     |Менеджер   = Регистр.Реклама.Менеджер;      
     |Сумма      = Регистр.Реклама.Сумма;      
     |КодОперации= Регистр.Реклама.КодОперации;      
     |Функция СуммаНач    = НачОст(Сумма);      
     |Функция СуммаКон    = КонОст(Сумма);      
     |Функция СуммаБанк   = Приход(Сумма) когда((ВидПлатежа=Перечисление.ВидыПлатежей.БН));      
     |Функция СуммаНал    = Приход(Сумма) когда((ВидПлатежа=Перечисление.ВидыПлатежей.Н));      
     |Функция СуммаНал1   = Приход(Сумма) когда((ВидПлатежа=Перечисление.ВидыПлатежей.Н1));      
     |Функция СуммаБеспл  = Приход(Сумма) когда((ВидПлатежа=Перечисление.ВидыПлатежей.Бесплатно));      
    |Функция СуммаБартер = Приход(Сумма) когда((ВидПлатежа=Перечисление.ВидыПлатежей.Бартер));            
    |Функция СуммаУвеличения = Расход(Сумма) когда((КодОперации=Перечисление.КодОперации.Перемещение));            
     |Функция СуммаУменьшения = Приход(Сумма) когда((КодОперации=Перечисление.КодОперации.Перемещение));      
     |Группировка Рубрика;      
     |Группировка Контрагент без групп;      
     |Группировка Выпуски;      
     |Группировка ТекДок;      

конвертировал вот в это

select
vt_Продажы.ВидПлатежа as [ВидПлатежа $Перечисление.ВидыПлатежей],
vt_Продажы.Выпуски as Выпуски,
vt_Продажы.Издание as [Издание $Справочник.Издания],
vt_Продажы.КодОперации as [КодОперации $Перечисление.КодОперации],
vt_Продажы.Контрагент as [Контрагент $Справочник.Контрагенты],
vt_Продажы.Менеджер as [Менеджер $Справочник.Менеджеры],
vt_Продажы.Размер as [Размер $Справочник.РазмерРекламы],
vt_Продажы.Рубрика as [Рубрика $Справочник.Рубрики],
vt_Продажы.Сумма as Сумма,
vt_Продажы.ТекДок as [ТекДок $Документ], vt_Продажы.debkred as debkred
from() as vt_Продажы
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #24 - 29. Января 2007 :: 05:32
Печать  
           |Select
           |  $Рег.Менеджер as [Менеджер $Справочник.Менеджеры],
           |  $Рег.Рубрика as [Рубрика $Справочник.Рубрики],
           |  $Рег.Контрагент as [Контрагент $Справочник.Контрагенты],
           |  $Рег.Номер as Номер,
           |  SUM(case when Рег.DebKred = 1 then -$Рег.Сумма else 0 end) as ВыходРекламы,
           |  SUM(case when $Рег.ВидПлатежа = :Банк AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Банк,
           |  SUM(case when $Рег.ВидПлатежа = :Нал AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Наличка,
           |  SUM(case when $Рег.ВидПлатежа = :Допл AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Доплата,
           |  SUM(case when $Рег.ВидПлатежа = :Беспл AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Бесплатно,
           |  SUM(case when $Рег.ВидПлатежа = :Барт AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Бартер
           |From $Регистр.Реклама as Рег
           |INNER JOIN  _1sJourn as Жур ON Рег.IDDOC = Жур.IDDOC
           |Where $Рег.Издание = :ВыбИздание  AND Жур.DATE_TIME_IDDOC Between :ДатаНач AND :ДатаКон~
           |GROUP BY
           |      $Рег.Менеджер, $Рег.Рубрика, $Рег.Контрагент, $Рег.Номер
           |";

как в этом запросе получить в выходной ТЗ документ из регистра по виду документа "ПриемРекламы" что бы ... в общем последний документ данного типа
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: помогите новичку с запросом
Ответ #25 - 29. Января 2007 :: 05:45
Печать  
skom писал(а) 29. Января 2007 :: 05:32:
как в этом запросе получить в выходной ТЗ документ из регистра по виду документа "ПриемРекламы" что бы ... в общем последний документ данного типа

ничего не понятно
  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #26 - 29. Января 2007 :: 07:35
Печать  
сорри за неясность
из этого запроса мне нужно еще одно значение для полноты картины
надо в колонку (новую) ТЗ (ну по выполнении запроса результат в ТЗ)
получить ссылку на документ, по виду дока "Прием рекламы" и самый последний по дате!!!
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: помогите новичку с запросом
Ответ #27 - 29. Января 2007 :: 08:36
Печать  
В подзапросе вычислишь мах дату данного документа а потом возмешь по этому условию.
Если не понятно то постараюсь написать пример.
Я гляжу твой запрос уже принял человеческий  вид, молодец растешь
прямо на глазах Подмигивание.
Успехов.  Подмигивание

  
Наверх
 
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #28 - 29. Января 2007 :: 09:22
Печать  
стараюсь...
и все таки хотелось бы примерчик плз...
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
skom
Junior Member
**
Отсутствует


"Hallo World"

Сообщений: 84
Местоположение: г.Кемерово
Зарегистрирован: 16. Января 2007
Пол: Мужской
Re: помогите новичку с запросом
Ответ #29 - 29. Января 2007 :: 09:47
Печать  
     ТекстЗапроса = "
           |Select
           |  $Рег.Менеджер as [Менеджер $Справочник.Менеджеры],
           |  $Рег.Рубрика as [Рубрика $Справочник.Рубрики],
           |  $Рег.Контрагент as [Контрагент $Справочник.Контрагенты],
           |  $Рег.Номер as Номер,
           |  Case when Жур.IDDOCDef = $ВидДокумента.ПриемРекламы then Рег.IDDOC else $ПустойИД end as [Док $Документ.ПриемРекламы],
           |  SUM(case when Рег.DebKred = 1 then -$Рег.Сумма else 0 end) as ВыходРекламы,
           |  SUM(case when $Рег.ВидПлатежа = :Банк AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Банк,
           |  SUM(case when $Рег.ВидПлатежа = :Нал AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Наличка,
           |  SUM(case when $Рег.ВидПлатежа = :Допл AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Доплата,
           |  SUM(case when $Рег.ВидПлатежа = :Беспл AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Бесплатно,
           |  SUM(case when $Рег.ВидПлатежа = :Барт AND Рег.DebKred = 0 then $Рег.Сумма else 0 end) as Бартер
           |From $Регистр.Реклама as Рег
           |INNER JOIN  _1sJourn as Жур ON Рег.IDDOC = Жур.IDDOC
           |Where $Рег.Издание = :ВыбИздание  AND Жур.DATE_TIME_IDDOC Between :ДатаНач AND :ДатаКон~
           |GROUP BY
           |      $Рег.Менеджер, $Рег.Рубрика, $Рег.Контрагент, $Рег.Номер, Жур.IDDOCDef, Рег.IDDOC
           |";

а дальше???
  

КонецЕсли;
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать